Skip to main content
A client can download a recording of a session as a playable file. Enable recording in reactor.yaml, and the runtime encodes the frames your model produces in the background.

Turning recording on

reactor.yaml
The same configuration works locally and for the deployed model. Rebuild the image to pick up the change.
Your model class does not change. The recorder reads the tracks your Output already declares.
Recording is best-effort. If the encoder falls behind, the recorder drops frames rather than holding up the stream, so a recording is not guaranteed to be a lossless copy of every frame you emitted.

What gets recorded

The recorder captures one video track and, optionally, one audio track from your model’s output. When the model has several tracks of the same kind, name the ones to record. Otherwise the recorder takes the first of each kind it finds.
reactor.yaml
The recorded timeline follows your model, not the clock. Periods when the model produces no frames are left out, so a session with long pauses produces a recording shorter than the time it lasted. self.output.flush() cuts live playout but does not interrupt the recording, so a clip spanning a reset contains both sides of it.

Capturing a clip

Clients ask for clips through the SDK. There are two requests: the last N seconds, where the client picks N, or the full session recording up to that point.
Both hand back a clip the client can play or save. In React, <ClipPlayer /> previews one and <ClipDownloadButton /> saves it; elsewhere the SDKs expose a download call that writes the file. Clips are also the quickest way to check your recording setup: connect from the Reactor Sandbox and use its Capture panel. The sandbox's Capture panel, with duration presets, Snap and Full Recording buttons, and a captured clip offering Play and Download.

Recordings

Capture, preview, and download recordings in your app, including download authentication and how long a recording stays available.

Configuration

Every field has a default, so override only what you need.
reactor.yaml
The fields most models change:
seconds
default:"4"
How much of a delay there is between asking for a clip and it becoming playable. A clip can only include chunks that have finished writing, so a smaller value makes clips feel more live.
pixels
Lock the recording to a fixed size. Worth setting when your output resolution can change while the session runs; without it the recorder locks to the first frame’s size and rescales the rest.
seconds
default:"300"
The longest snap a client can request. A full recording is not capped by this.

Performance

The recorder encodes on its own thread and needs no external binary, but it does use CPU and memory. When encoding cannot keep up, the recorder waits up to a second for space in its queue, then drops the rest of that emission and logs a warning. The wait delays the model’s next step. It does not delay media already sent to clients.
Test recording at the resolution and frame rate your model will run at, since encoder load scales with both.

Next

Video & Audio Tracks

The tracks the recorder reads, and how audio stays in sync with video.

Loading Weights

Another reactor.yaml setting that works the same locally and in production.