How the Composer thinks
Three ideas explain everything else:- Every connected input is a layer. An image node becomes an image layer, a video node a video clip, a text node a caption, an audio node a soundtrack. Layers stack on a fixed-size canvas (pick a size preset — Instagram, TikTok, YouTube — or set your own).
- The timeline controls when, the canvas controls where. Drag layers on the canvas to position them; drag their bars on the timeline (it appears whenever a video or audio input is connected) to decide when each one is on screen.
- Timing that depends on real clip lengths resolves when the composition renders. AI-generated clips often don’t exist while you’re designing — the editor shows estimated lengths (dashed bars, with a note), and the final render always measures the actual media. Run the upstream nodes once to load real durations into the editor.
Overlay vs. Sequence
The timeline has an arrangement toggle (with a? explainer in the editor):
- Overlay (default) — every layer keeps its own timing. Drag a bar to choose when that layer is on screen; layers can overlap freely. Use it for composited content: a logo pinned all video, a caption appearing at 3s, picture-in-picture. Bars snap to other layers’ edges while dragging.
- Sequence — video clips play back-to-back in row order (top row first), like a reel. Their bars are auto-positioned (link icon) and sized from the actual clip durations at render time, so regenerated clips of a different length can never drift or leave gaps. Images, text, and audio still keep their own Overlay-style timing on top — a logo or music track can ride over the whole reel.
Fitting and cropping media
When a layer has an explicit size, Fit (in its Layout panel) decides how the source fills the box: Stretch distorts to fill, Contain letterboxes inside, Cover fills and center-crops the overflow — use Cover to avoid distortion. Crop trims a percentage off any side of the source before placement: type exactCrop % values in the Appearance panel, or select the layer and click ✂ Crop on the canvas to drag a marquee over the full source (trimmed edges dim live, and the result is identical regardless of fit). Motion adds a Ken Burns drift — Zoom in slowly pushes into the media across its visible window, Zoom out pulls back — perfect for slideshows of generated images.
While arranging on the canvas, layers snap to the canvas edges/center and to each other (blue guides show the alignment), the Layout panel’s align buttons jump a layer to any canvas edge or center, and text layers support alignment, line height, an outline, and a drop shadow. Drag the dividers beside the side panels (or double-click to collapse) to give the canvas more room.
Timing and trimming clips
A video or audio bar on the timeline shows the full source clip; the bright region is what plays, and the darker head/tail are cut:- Drag the bright region’s edges to trim — the left handle cuts into the source’s beginning, the right handle ends the clip early. The darker areas show exactly what’s being cut.
- Drag the bar body to move the clip in time (Overlay mode).
- Double-click a bar to reset its timing and trims.
- A clip with a start but no end plays out its full real length (“until source end”).
- Exact values can be typed in the layer’s Layout panel:
Start s/End s(when it’s on screen) andTrim in s/Trim out s(what part of the source plays).
Video length
The video’s length is automatic by default: long enough to cover every source clip and timed layer. The timeline always shows some empty headroom past the current end (hatched) — drag a layer’s end into it and the video grows as you go. To pin an exact length, set Duration in the canvas panel’s Video section (shorter cuts the composition; longer extends it, with videos freezing on their last frame). While dragging bars, a blue snap guide appears whenever an edge lines up with another layer’s start or end, the playhead, or the composition’s bounds.Trimming the whole video
To cut the exported video itself — not a layer — use the bracket handles on the timeline ruler: drag the left handle to set where the video starts, the right one to set where it ends. Everything outside the range darkens across all rows. The same values live in the canvas panel under Video Range (Start s / End s), and double-clicking a handle resets it. The render trims picture and audio together.
Animations (entry/exit)
Every visual layer can animate when it appears and disappears. In the layer’s Layout panel pick Animate in / Animate out:| Animation | Effect |
|---|---|
| Fade | Opacity ramps in/out |
| Slide left | Enters from the right edge moving left (exits moving left) |
| Slide right | Enters from the left moving right |
| Slide up | Enters from the bottom moving up |
| Slide down | Enters from the top moving down |
Audio
Connect audio nodes for music or voice-over: each becomes a timeline row with timing, trim, and a Volume control (0–200%). Video layers’ own sound is included automatically, gated to their timing window, with their own Volume. Everything mixes into the output. A composition with audio always renders as a video, even if every visual layer is a still.Preview
- Play (button on the timeline) — watches the composition in the editor: real video frames with sound, audio entering on cue, fades and slides in place.
- Scrub the ruler to inspect any moment frame-accurately; click ✕ to exit preview and see all layers at once. Playback respects the export range when one is set.
- Zoom the timeline with the −/+ controls (or Ctrl+wheel) for long compositions; video bars show a filmstrip of frames and audio bars a waveform once the media has loaded.
- Reorder layers by dragging the grip in the timeline’s label column (or in the layers panel) — in Sequence mode this changes play order.
For agents and the API
Composer configuration is plain JSON on the node (config), so LLM copilots and API callers can build compositions directly:
layers[].edgeIdmust equal the React Flow edge id feeding that input (sub-layers from multi-value edges use"<edgeId>:<index>").- In
sequencearrangement, video layers’startTime/endTimeare ignored and recomputed from real durations at render time; order =zIndexdescending (highest plays first). - All timing fields are optional and additive — omit them for an untimed, always-visible layer.
- Media inputs resolve at run time, so a composition can be fully configured before any upstream video has been generated.