Recording
A recording is an output written to a file. You add one with the Recording group’s + (Settings ▸ Output: MP4 H.264, MOV ProRes or MKV) and edit it in its popover (click its row) or on Settings ▸ Output. See Outputs for the panel and the shared canvas and rate-control settings; this page covers the recording-specific settings.
Containers
The Container dropdown offers, in order:
- Hybrid MP4 and Hybrid MOV — crash-safe: while recording, data is
written as self-contained fragments to a
<name>.partfile, then remuxed to a normal progressive.mp4/.mov(with the index moved to the front) when you stop. - MKV — Matroska, written progressively and crash-tolerant by design.
- MP4 and MOV — plain progressive.
The default is Hybrid MOV on macOS and Hybrid MP4 on other platforms.
(For what a .part file means after a crash, and how to recover it, see
../troubleshooting.md.)
Codec and encoders
The Codec dropdown picks what the recording encodes: H.264 (the default), HEVC or ProRes. It filters the Encoder dropdown beside it to the encoders that can produce that codec on this machine.
The Encoder dropdown is Auto or a specific family. For H.264, Auto picks the best available encoder for the platform — hardware first (VideoToolbox on macOS), then the software OpenH264 fallback. The software H.264 encoder (OpenH264) needs a one-time download from Cisco in Settings ▸ OpenH264; it is not included with the app. The Allow hardware encoders checkbox, when off, makes Auto skip hardware and use OpenH264. The Effective encoder line shows what will actually run when the recording starts (for example “Auto → HEVC (VideoToolbox)”).
HEVC
HEVC (H.265) recordings are hardware-only: the bundled FFmpeg is LGPL, so it has no software HEVC encoder (no x265). The encoder per platform:
| Platform | HEVC encoders | Auto order |
|---|---|---|
| macOS | hevc_videotoolbox |
VideoToolbox |
| Windows | hevc_nvenc, hevc_amf, hevc_qsv |
NVENC, AMF, Quick Sync |
| Linux | hevc_nvenc, hevc_vaapi, hevc_qsv |
NVENC, VA-API (Quick Sync only when chosen) |
- With HEVC selected, the Encoder dropdown lists Auto and the hardware families; a family whose HEVC encoder is missing or failed the startup probe is greyed out. OpenH264, x264 and the ProRes encoders are not offered, and a profile that pairs HEVC with one of them is rejected when it is loaded or saved (“the OpenH264 encoder cannot record HEVC…”).
- If no HEVC encoder is usable (none on this machine, or Allow hardware encoders is off), the editor says so and the recording falls back to H.264 when it starts rather than failing. The status bar shows the path and the reason, for example “Recording to … — HEVC unavailable (hardware encoders off), recording H.264” or “… (no HEVC hardware encoder detected) …”.
- HEVC goes into MP4, MOV (both hybrid and plain) and MKV. MP4 and
MOV files are written with the
hvc1sample entry, which QuickTime, Photos and Safari need (FFmpeg’s defaulthev1does not play there). - Recordings are 8-bit 4:2:0, Main profile. 10-bit (Main 10) and HDR tagging are not available yet.
- The bitrate maximum is at least 240 Mbps and follows the HEVC level (High tier) for larger resolutions and frame rates: 240 Mbps for 1080p and 2160p (up to Level 5.2, 2160p120) and 4320p30 (Level 6.0), 480 Mbps for 4320p60 (Level 6.1) and 800 Mbps above that (Level 6.2). VideoToolbox (and Auto on a Mac) stops at 240 Mbps whatever the geometry: a much higher rate crashed a Mac. Hardware encoders in average-bitrate mode spend less on easy content: a 1080p30 VideoToolbox recording asked for 200 Mbps measured about 149 Mbps on full-frame noise and about 0.2 Mbps on the static test pattern.
- HEVC records at an average bitrate (ABR or VBR): strict CBR is not offered for HEVC, and a profile that asks for it records as ABR.
- A Same as stream HEVC recording always runs its own encoder; it never reuses an H.264 stream’s packets (see Recording and streaming together).
ProRes
Add a MOV ProRes recording (or pick a ProRes encoder) to record Apple
ProRes: prores_videotoolbox on Apple hardware, the CPU prores_ks elsewhere.
The ProRes profile dropdown offers 422 Proxy, 422 LT, 422 (the
default), 422 HQ, 4444 and 4444 XQ. ProRes records into MOV (MKV is
also selectable); it cannot go into an MP4 container.
ProRes is normally profile-driven: the profile sets the data rate. The editor shows an estimate such as “≈ 220 Mbps at 1920x1080 @ 30 fps”, computed from Apple’s published ProRes target data rates at 1920×1080 29.97 fps (422 Proxy 45, 422 LT 102, 422 147, 422 HQ 220, 4444 330, 4444 XQ 500 Mbps) and scaled by pixel count and frame rate. Apple’s white paper lists about four times these for 3840×2160 at 30p (4444 XQ 1989 Mbps), so 4K 4444 XQ above 30p needs more than the 2 Gbps bitrate cap.
With the Custom (manual) quality preset the two ProRes encoders behave differently:
prores_videotoolbox(hardware) takes no bitrate at all; it follows its profile only. The Bitrate field is shown greyed out with the estimate, and you pick the ProRes profile instead. For a manual data rate choose ProRes (prores_ks) in Encoder.prores_ks(software) has a Data rate picker: Profile default (the profile’s own rate) or Manual bitrate. Choosing Manual bitrate switches Quality to Custom (manual) and shows the field. With a manual bitrate the encoder spends up to that many bits: the bitrate is turned intoprores_ks’s per-macroblock budget (bits_per_mb= bitrate ÷ frame rate ÷ number of 16×16 macroblocks). That option accepts 128 to 8192 bits per macroblock, so the reachable range depends on the canvas; the editor prints it (about 31 Mbps to 2 Gbps at 1080p30). Detailed content lands at the requested rate (measured: 500 Mbps requested at 1080p29.97 wrote 499 Mbps; 2 Gbps at 2160p29.97 wrote 1.99 Gbps); easy content comes in lower, since the budget is a ceiling.
A ProRes recording made before this option existed stays profile-driven: the manual bitrate only applies once you choose Manual bitrate.
Quality presets
The Quality dropdown:
- Same as stream — reuse the streaming encoder settings, with strict CBR relaxed to ABR so the file is not padded.
- High quality, medium file — a high-quality constant-quality tier. The exact value is encoder-dependent (for example x264/QSV use CRF/CQP 23, NVENC/AMF/VAAPI use 20, and VideoToolbox uses its own quality scale).
- Indistinguishable, large file — a visually-lossless constant-quality tier (x264/QSV/NVENC/AMF/VAAPI around CRF/CQP 16; VideoToolbox higher on its own scale).
- Lossless — mathematically lossless (UT Video + PCM in MKV).
- Custom (manual) — set the recording’s own Rate control, Bitrate and Quality value directly. This is the only preset where you edit the rate control, and the place to request an explicit (padded) CBR recording. Every H.264 encoder offers at least one bitrate-driven mode (CBR, ABR or VBR); ProRes is covered above.
Video bitrate
The Bitrate field is stored in kbps but shows Mbps from 1000 kbps up
(6000 kbps reads “6 Mbps”). You can type a value with a unit (500 Mbps,
500m, 2 Gbps, 6000 kbps); a bare number is read in the unit on screen.
The field goes up to the maximum for the codec the effective encoder produces,
shown under it as “max N Mbps for <codec>”:
| Codec | Maximum | Basis |
|---|---|---|
| H.264 / AVC (x264, OpenH264, VideoToolbox, NVENC, AMF, QSV, VA-API) | 960 Mbps | H.264 Level 6.2 |
| H.265 / HEVC (streams) | 800 Mbps (240 Mbps on VideoToolbox) | HEVC Level 6.2 High tier; VideoToolbox stops at its 240 Mbps ceiling |
| H.265 / HEVC (recordings) | 240 Mbps up to 2160p, then by HEVC level up to 800 Mbps; 240 Mbps on VideoToolbox | HEVC level High tier, 240 Mbps floor (see HEVC) |
| AV1 (streams, no encoder in this build yet) | 800 Mbps | AV1 level 6.3 High tier |
| Apple ProRes | 2000 Mbps (2 Gbps) | ProRes 4444 XQ at 2160p29.97 |
Changing the encoder to one whose codec has a lower maximum (for example
ProRes to H.264) lowers a larger bitrate to the new maximum and says so under
the field (“Bitrate clamped to 960 Mbps, the H.264 maximum.”). A profile saved
by an older build with an H.264 bitrate above 960 Mbps loads at 960 Mbps.
Builds before these caps reject any bitrate above 1000 Mbps, so the first time
a profile with such a bitrate is saved, the previous file is kept once as
profile.toml.pre-2gbps.bak beside it.
Recordings encode H.264, HEVC (hardware encoders only, see HEVC) or
ProRes.
Audio for a recording defaults to AAC 192 kbps (streaming defaults to 160 kbps).
Audio tracks (multi-track recording)
The mixer maintains six independent track buses. A recording can record any combination of them, each written as its own AAC audio stream in the file, so you can, for example, keep the game, the microphone and the full mix on separate tracks for editing later.
In the recording editor, the Tracks section shows six checkboxes (Track 1 … Track 6). Tick the tracks to record; each selected track shows a per-track bitrate control (kbps) beside it, defaulting to the recording’s audio bitrate above. At least one track must be selected. The tracks are written in ascending order and titled Track 1, Track 2, … so players show sensible names (the title round-trips in MKV; MOV/MP4 carry the streams but may not surface the title on every player).
Which containers carry all tracks: MKV, MOV and MP4 all record every selected track (multiple AAC streams in MP4 are valid and are written and read back correctly). A ProRes recording follows its single-track audio path.
By default a recording records track 1 only, so existing profiles behave exactly as before.
Note on what each track contains. Which mixer tracks a source feeds is set by its Tracks checkboxes in Advanced Audio Properties. Every source feeds all six tracks by default, so selecting several tracks records the same mix on each until you change the routing.
What a track records: program mix or chosen inputs
Each selected track has an audio picker beside its bitrate:
- Program mix (the default) records that track’s mix: every input routed to the track, gated by which scenes are on Program, through the master.
- Only these inputs records the sum of just the inputs you tick (for example the camera’s microphone alone, or an RTMP guest’s audio). Each input contributes its signal after its own filters, fader, mute and pan, whatever scene is on Program and whatever its track routing or monitor mode says; the sum is soft-limited and scaled by the master like a track. Ticking none records silence.
Inputs are matched by their mixer strip name and kind when the recording starts; an input that is not there at start records silence for that track (it is not picked up later in the same recording). A recording with any per-input track always runs its own encoder (it never shares one).
Video source: record Program, Portrait or one input
The recording editor’s Video source picker chooses what the recording encodes:
- Program canvas (the default): the composited scene, as before.
- Portrait canvas: the vertical canvas, laid out from each scene’s portrait layout (created while the recording runs, like any portrait output), encoded at this output’s canvas turned portrait.
- One input: any input a scene declares — a display or window capture, a
camera or capture card, an NDI or other interchange receiver, a media file,
an RTMP ingest key, the test pattern (and Game Capture once it arrives, as a
window-like source) — recorded on its own: no scene layout, transforms,
crops or other layers. Pick Recorded size:
- Native size (the default): the input’s own pixel size when the recording starts, scaled down to fit 4096 pixels a side if larger (a 5K display) and rounded to even numbers. Nothing is scaled otherwise.
- Output canvas (fit) / Output canvas (fill): this output’s canvas size, with the input letterboxed or cropped to fill.
While a single-input recording runs, its row shows ⏺ <input>. The input
keeps running for as long as the recording uses it — even if you switch
scenes, or remove its layer from every scene — and is released when the
recording stops (unless a scene still shows it).
The recording remembers the input by its source id, and for a camera also by
its model and name, so a USB camera that comes back on a different port is
found again, exactly as scene layers relink. If the input is in no scene when
you start (or it is missing), the recording still starts: it records black
and silence, its row reads Waiting for <input>, and it picks the input up
as soon as a scene adds it. At Native size such a recording uses the
output’s canvas size, since the input’s size is not known. (Starting anyway
rather than refusing was chosen so Start all never fails because one camera is
unplugged; the file shows exactly when the input arrived.)
Several recordings can run at once with different sources — for example Program, a clean camera ISO and the game capture — each on its own encoder. Recording one input costs one extra small render and readback per frame on the GPU, at the input’s size.
Folder and filename template
- Choose folder… sets where files are written. When left empty, the OS
default is used:
~/Movies/stream-concernon macOS,~/Videos/stream-concernon other platforms. - The filename template defaults to the timestamp
%CCYY-%MM-%DD %hh-%mm-%ss(year, month, day, hour, minute, second).
Filename tokens (hover the template field for the list):
| Token | Meaning |
|---|---|
%CCYY / %YY |
year, 4 or 2 digits |
%MM / %DD |
month / day |
%hh / %mm / %ss / %mss |
hour (24h) / minute / second / millisecond |
%FPS |
frame rate |
%CRES / %ORES |
canvas / output resolution, WxH |
%VF |
file extension |
%source |
what is recorded: Program, Portrait or the input’s name (characters a filename cannot hold become _) |
%% |
a literal % |
%Y %m %d %H %M %S are accepted as aliases; any other %x is kept literally
and the editor warns about it. With several recordings writing to one folder,
put %source in the template so the files are distinguishable, for example
%CCYY-%MM-%DD %hh-%mm-%ss %source.
A recording lands at <folder>/<expanded template>.<ext>, where the extension
follows the container (mp4, mov or mkv). While a hybrid recording is in
progress the working file is <name>.part.
Split policy
The Split dropdown controls whether a long recording is broken into several files:
- No splitting (the default).
- Every N minutes — new file every N minutes (15 minutes by default).
- Every N MB — new file every N megabytes (2048 MB by default; minimum 10 MB).
The status bar shows the current split part number while a split recording runs.
Where files land, and A/V sync
Files are written under the configured folder (above). Recording runs on a worker thread with file I/O through tokio, and a disk-space check stops a recording that would run the disk too low.
Audio and video stay in sync: a media file’s audio is placed on the mixer bus by timestamp (silence inserted for gaps, overlaps trimmed), and the file source keeps its audio at most ~300 ms ahead of the presented video. The automated flash-and-beep test measures the recorded A/V offset at about 0.8 ms on the software encoder and 16 ms on VideoToolbox — well within a frame.
Recording and streaming together
When a recording’s quality is Same as stream, the recording and the stream
can share one encoder: the stream encodes once and the same encoded packets are
muxed into the file, so the recording is byte-identical to what is published (no
second encode). This applies to H.264 recordings: a recording whose codec is
HEVC keeps its own encoder even when its quality is Same as stream. The top-level README.md describes how this
sharing engages and what stopping each output does.