Timing splits the two independent questions a clip answers: where it sits on the parent timeline (start / end) and which part of its source plays (sourceIn / sourceOut). All values accept any time format.
| Prop | Meaning |
|---|---|
start |
Parent-timeline time at which the clip begins. Default 0. |
end |
Parent-timeline time at which the clip ends. Alternative to sourceOut. |
sourceIn |
Source in point: the time within the source where playback begins. Default 0; trims the head. |
sourceOut |
Source out point: the time within the source where playback ends. Defaults to the source's natural end. Alternative to end. |
playbackRate |
Speed multiplier for the node's local time, 1 = normal. See below. |
Times are parent-relative: a clip inside a <group> or a <sequence> is placed against that container's start, and a clip directly in a <scene> against the scene's timeline. Nothing outside a scene has a clock to be placed against.
start/endplace the clip on the parent timeline.sourceIn/sourceOutselect which part of the source plays. The trimmed window opens atstart, so at rate 1 the on-timeline duration equals the played source length:end - start == sourceOut - sourceIn.- Trimming the source is not the same as moving the clip. To drop part of the source you must move
sourceIn/sourceOut; changingstartalone only slides the clip along the timeline while the full source keeps playing. If the source is meant to stay aligned with something else in the scene (synced audio, a transcript, another track), advancestartandsourceIntogether — moving one without the other offsets the content instead of trimming it. endandsourceOutare two spellings of the same out edge — the clip's end in timeline time (end) versus source time (sourceOut). Set one. Set both and the one that closes first wins: each is a cap on the window rather than an override of the other, so a clip never runs past either.- A source is a cap of its own: a trim past the end of the footage runs out of frames rather than holding.
- Sourceless nodes (
<rect>,<text>,<html>,<surface>,<adjustmentLayer>) have no footage to trim, so you place them withstart/endalone. - Instead of setting
start, a media node can derive its placement from another node's audio withsyncTo(see audio-sync.md). - Containers span their children. A
<group>or a<sequence>with noendof its own begins where its earliest child begins and ends where its last one ends, and follows them as they move. Give it anendand it trims them instead. - A media node with no timing fits its natural duration at
start0. - A sourceless node with no
endgets a fixed 16-second duration — as does a still image, which has no duration of its own, and an empty container, which has nothing to span. - A
<sequence>does not position its children for you: give each an explicitstart(the next clip'sstartis the previous clip's end).
Examples:
<rect start={2} end={5} width={200} height={120} fill="red" />— a rectangle on screen from timeline second 2 to 5.<video start={5} sourceIn={10} sourceOut={20} />— plays source seconds 10–20 (a 10-second clip) beginning at timeline second 5.<video start={2} end={5} sourceIn={10} />— the same source starting at 10 s, over the timeline window 2–5 (so it plays source 10–13).<video start={0} sourceIn={1} />— trims the first second off the head and places the clip at the top of the timeline.
playbackRate scales the node's local time against its parent's: at 2, twice as much source plays in the same stretch of timeline; at 0.5, half. Default 1.
It scales the window rather than replacing it, so the two spellings keep their meanings and stay consistent with each other:
// 10 seconds of source (2–12) over 5 seconds of timeline (0–5).
<video src="b-roll/drone.mp4" start={0} sourceIn={2} sourceOut={12} playbackRate={2} />
// The same thing from the other side: the timeline window and the rate imply the out point.
<video src="b-roll/drone.mp4" start={0} end={5} sourceIn={2} playbackRate={2} />Audio is retimed with the picture. Everything the node holds — its children, its keyframes, its animations — runs on the node's local clock and is retimed with it.
type Time = number | `${number}f` | `${string}:${string}`;The canonical internal unit is frames at 30 fps; all formats are converted on import. All values may be negative.
| Format | Example | Meaning |
|---|---|---|
number |
2.2 |
Seconds (may be fractional). |
"${number}f" |
"-30f" |
Frames. |
"MM:SS" |
"02:30" |
Minutes and seconds. |
"HH:MM:SS" |
"01:02:30" |
Hours, minutes, seconds. |
CLI flags documented as taking a Time value (e.g. --times on capture and media grab) accept the same formats. Times in command output are plain seconds.