Render
Render a composition to a hash-stable MP4. Codec choices, CRF vs bitrate, HDR10, transparent WebM, and frame manifests.
hyperframes render comp.html --out video.mp4The default encode is hash-stable H.264 at the composition's declared size and frame rate. Everything below is how to deviate from the default with intent.
What you'll learn
- The right codec/quality knobs for delivery, archival, alpha, and HDR
- What "hash-stable" means at the sha256 level
- When to reach for
--manifestand--workers
Codec presets
Four encodes, four tabs. The first is what you almost always want; the rest are for specific delivery targets.
# Web delivery, social, almost everything
hyperframes render comp.html \
--out video.mp4 \
--codec h264 --crf 18 --pixfmt yuv420pCRF vs bitrate
CRF is the right default for video that humans will watch. Lower number means higher quality; 18 is visually lossless for most content; 23 is a sane "web" setting.
Use --bitrate only when you have a hard delivery target (CDN budget, broadcast spec, ABR rung). Mixing --crf and --bitrate is an error — the renderer will reject the command rather than silently pick one.
Hash-stable output
Common flags
| Flag | Description |
|---|---|
--out <path> | Output file. Container inferred from extension. |
--width / --height | Override the composition's declared size. |
--fps 60 | Output frame rate. |
--codec | h264, h265, prores, vp9, av1, or png for a frame sequence. |
--crf 18 | Constant rate factor (lower = better quality). |
--bitrate 12M | Alternative to --crf. |
--hdr | Render HDR10 with BT.2020 + PQ. |
--alpha | Encode alpha channel (WebM only). |
--workers 4 | Parallel-render N frame chunks. |
--manifest manifest.json | Write a per-frame manifest with timing, fixtures, and source hashes. |
Parallel workers
--workers N splits the frame range across N processes. Encoding is the bottleneck on most machines — go up to your physical core count and stop there. Anything beyond that mostly heats your laptop.
Caching
The renderer caches the Chromium boot artifact and the runtime bundle. On a warm start, render time is dominated by capture and encode, not boot. Set HF_CACHE_DIR to point caching at a writable, persistent path on CI runners that wipe /tmp between jobs.
Frame manifest
--manifest manifest.json writes a per-frame record — timestamps, fixture values, source asset hashes. Useful for signed-content workflows, downstream upload, and "did this frame change?" diffs.
Next
- CI & batch — N workers, one composition, M variants
renderreference — every flag, every default