Export formats
File → Export…
The render happens off-screen. Progress is shown, and the editor stays usable throughout.
The formats
| Format | Container / codec | Alpha | Notes |
|---|---|---|---|
| MP4 | H.264, AAC audio | No | The default for sharing. Needs ffmpeg |
| WebM | VP9, Opus audio | Yes | Smaller than MP4, plays on the web |
| MOV | ProRes 4444 | Yes | Lossless, for handing to another application. Large. Needs ffmpeg |
| GIF | GIF89a | 1-bit | Palettised across the whole animation. No audio. Encoded locally in a worker |
| PNG sequence | zip of PNGs | Yes | The archival option. Audio rides along as audio.wav |
| JPEG sequence | zip of JPEGs | No | Smaller frames |
| Still frame | PNG | Yes | The current frame, snapped to the frame grid |
| Lottie | bodymovin JSON | — | Vector shapes and transform tracks only |
| Project | JSON | — | The editable document, re-openable with File → Open |
Options
| Option | Values |
|---|---|
| Resolution scale | Full / Half / Quarter |
| Frame rate | Defaults to the composition’s |
| Duration and time range | Any sub-range |
Output resolution is independent of composition size. A quarter-resolution review copy still frames the whole composition — it is a smaller render, not a crop.
Preview before you export
The export dialog renders real export frames — the same snapshot builder, the same composition scoping, the same 1:1 composition-to-frame fit the encoder will receive — and lets you scrub the whole export range.
If a frame contains nothing, the dialog says so before anything is written.
It refuses to produce an empty file
Every path asserts on a real frame count. A zero-frame encode is an error, not a silently successful black video. The renderer also fails loudly if the GPU backend did not initialise, rather than handing the encoder an untouched canvas.
This is the single most useful property of the export pipeline: a file that exists is a file with content in it.
Choosing a format
| You need | Use |
|---|---|
| To post it somewhere | MP4 |
| Transparency on a web page | WebM |
| Transparency, maximum quality, into another app | MOV / ProRes 4444 |
| Vector, tiny, scalable, in an app | Lottie — but see its limits |
| Frames for another pipeline | PNG sequence |
| A thumbnail or a still | Still frame |
| To hand the editable project to someone | Project |
How it works underneath
On the desktop, each rendered frame is written to a temp directory and ffmpeg encodes the sequence in a child process. Two consequences:
- The encode never competes with the editor’s UI thread or its GPU context, so a long export leaves the app usable.
- Peak memory is one frame, not the whole render. The finished file is moved to where you asked for it, so a multi-gigabyte export never passes through the app’s memory at all.
In the browser, frames go to a WebCodecs VideoEncoder and are muxed to WebM
by a small built-in Matroska muxer. GIF and zip encoding run in a worker so the
interface keeps painting.