Skip to Content
Export & renderingExport formats

Export formats

File → Export…

The render happens off-screen. Progress is shown, and the editor stays usable throughout.

The formats

FormatContainer / codecAlphaNotes
MP4H.264, AAC audioNoThe default for sharing. Needs ffmpeg
WebMVP9, Opus audioYesSmaller than MP4, plays on the web
MOVProRes 4444YesLossless, for handing to another application. Large. Needs ffmpeg
GIFGIF89a1-bitPalettised across the whole animation. No audio. Encoded locally in a worker
PNG sequencezip of PNGsYesThe archival option. Audio rides along as audio.wav
JPEG sequencezip of JPEGsNoSmaller frames
Still framePNGYesThe current frame, snapped to the frame grid
Lottiebodymovin JSONVector shapes and transform tracks only
ProjectJSONThe editable document, re-openable with File → Open

Options

OptionValues
Resolution scaleFull / Half / Quarter
Frame rateDefaults to the composition’s
Duration and time rangeAny 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 needUse
To post it somewhereMP4
Transparency on a web pageWebM
Transparency, maximum quality, into another appMOV / ProRes 4444
Vector, tiny, scalable, in an appLottie — but see its limits
Frames for another pipelinePNG sequence
A thumbnail or a stillStill frame
To hand the editable project to someoneProject

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.

Last updated on