Skip to main content
A project has one stack of layers, ordered by z. That stack is the picture.

The two rules people conflate

The bottom of the z order is the program frame. Its place, place_keys and start are reported, not applied. Editing them is refused at edit time (exit 5) because accepting an edit the compositor will ignore is worse than refusing it. The layer at z: 0 carries the program audio and must fill the canvas. It is usually the same layer as the bottom one, but not always: with layers at z: -5 and z: 0, the z: -5 layer is the bottom, and the z: 0 layer is composited.
A document that already carries placement keys or a start on the bottom layer keeps rendering and reports place_keys_unused, layer_start_unused or place_unused, each with the command that clears it. Nothing is bricked.

Adding a layer

--place is x,y,size in fractions of the canvas; size is the width. A layer above the bottom is composited with overlay, in z order.

Moving without resizing

Placement keys animate position only. Size does not animate — scale has no time variable, and two mechanisms for “how big is this” would compete. Use a camera key if you want the whole frame to change size.

Camera

Camera keys are zoom and where the camera looks (--at, as fractions of the frame). A constant camera lowers to crop+scale; a moving one to scale+zoompan. On the bottom layer a camera works, because the bottom layer is the frame.

Masks

A mask applies to its layer before placement, so a chroma key keeps the layer’s own alpha rather than the composite’s. Masks are refused on the bottom layer: the program frame is full-canvas by invariant.

One grade for the whole program

grade inserts one eq (plus lut3d for a LUT) before text and captions, so titles are not graded with the picture. It is document-wide by design: per-layer grading would be a second place to look for “why is this shot orange”.

Where it lands in the render

The pipeline is: normalize each source, concat, composite layers in z order, apply the grade, then burn text and captions, then mix audio. splice plan prints the argv for each step before anything runs.