Rendering video
When the animation looks right in the editor, one command turns it into a video file.
oxframe render That's it: the project is built in release mode and every frame goes to out/<project>.mp4. You need ffmpeg installed for video formats; PNG frames
work without it.
Common recipes
oxframe render --out film.webm # VP9 with transparency
oxframe render --format prores --out a.mov # ProRes 4444 with transparency, for video editors
oxframe render --format png --out frames/ # one PNG per frame
oxframe render --size 3840x2160 # 4K
oxframe render --scene outro # just one scene
oxframe render --range 1..3 # seconds 1 to 3
oxframe render --cpu # no GPU available (CI, servers) Need just one still? oxframe snapshot --at 2.5 writes a PNG of that moment — no ffmpeg,
no full render.
Sound
Attach a soundtrack to the project:
Project::new("my-video")
.audio("assets/voice.mp3")
.scene(intro()) The waveform appears on the editor's timeline; drag it to shift the sound against the picture. The
offset is saved in meta.json and used by oxframe render. Pass --no-audio to leave it out.
Transparent backgrounds
Make the background transparent with .background(Color::TRANSPARENT) on the project
and render to webm, prores or png: those keep the alpha
channel, so you can lay the animation over footage in a video editor. MP4 (H.264) has no
transparency.
GPU or CPU?
By default frames are drawn on the GPU (vello) and fall back to the CPU (tiny-skia) when no GPU is available. Both produce the same picture: they pass the same reference-frame tests within a color difference of ΔE 1, which you cannot see. The CPU renderer is also byte-for-byte identical between runs, which is what you want in automated tests.
In the browser
The playground can export MP4 too (the Export button). It encodes with your browser's WebCodecs, so it works offline but is limited to what the browser supports — use the CLI for ProRes, 4K or long videos.