Expand description
Project data model — the shared contract between UI, engine, playback and export.
All times are seconds (f64). Keyframe times are clip-local (seconds from clip.start).
Serialized with serde_json as the .sedit project format.
Structs§
- Animated
- A scalar property that is either constant (
value) or keyframed (keys, sorted by t). - Asset
- AttrSet
- Which parts of a clip
Project::paste_attributescopies. - Audio
Filter - Audio
Stream Info - Bus
- A mixer bus. The first bus is always “Main”; every other bus routes into it (or into another bus).
- Clip
- Cue
- Edge
to’s inputportis fed byfrom’s output.- Effect
- An effect instance on a clip;
params[i]followskind.params()[i](each keyframeable). - Keyframe
- Label
- A user-editable colour label.
Project.labelsstarts asdefault_labels(). - Marker
- A note on the timeline (or, in
Clip.markers, on a clip). The AI tools read these too. - Mask
- Node
- Node
Graph - A clip’s effect chain as a DAG. When present it replaces
Clip.effects(kept as the simple linear stack for clips that never opened the node editor). Always contains exactly oneOutput. - Param
Spec - One effect parameter: label, default and UI range.
- Path
Asset - A drawing or polygon outline kept on the project so it can be reused: as a motion path for a clip’s X/Y, as the centre of a mask node, or just as a sketch to look at again.
- Plan
Item - Planner item: a checkable task with notes, colour, nested sub-tasks and a moodboard of assets.
- Project
- Sequence
- A nested timeline (“compound clip”): its own tracks/size/fps; placed on video tracks as a
ClipKind::Sequenceclip and rendered/mixed recursively. Edited by swapping it intoProject.tracks(open_sequence/close_sequence). - Shape
Style - Stash
- The main timeline’s state while a sequence is swapped in for editing.
- Stroke
- One free-hand stroke: points in project px (relative to the layer centre) with the clip-local time each point was drawn, so a recorded sketch can play back at any rate.
- Text
Style - Text clip styling. Sizes are in project pixels (at project resolution).
- Track
- Transition
- A transition on a cut or a clip edge. For
Cutit is centred on the cut betweenrightand its left neighbour, spanning [right.start - duration/2, right.start + duration/2); both clips are extended virtually into that window (the engine clamps source times). ForIn/Out,rightis the single clip it belongs to and the window is its first/lastdurationseconds. Audio tracks use CrossFade (a gain crossfade / fade).
Enums§
- Blend
Mode - Clip
Kind - CmpOp
- Comparison for a
Comparenode. - Ease
- Interpolation of the segment that starts at a keyframe.
- Effect
Kind - Filter
Kind - LogicOp
- Boolean logic for a
Logicnode. - Mask
Shape - A mask shape. Points are in project pixels relative to the layer centre; a mask limits where an
effect applies (or where the whole clip is visible when it sits on
Clip.mask). - MathOp
- Arithmetic for a
Mathnode. - Node
Kind - What a node does.
Inputis the clip’s own decoded layer;Outputis what the compositor draws. - Scaler
- Resampling quality used when the compositor scales/rotates layers (export == preview).
- Shape
Kind - Track
Kind - Transition
Edge - Where a transition sits.
Cut(the default) is centred on the cut between a clip and its left neighbour;In/Outsit inside a single clip’s first/lastdurationseconds and blend from/to nothing (black), so they need no neighbour. - Transition
Kind
Constants§
- ABUT_
EPS - Two clips abut (for transitions) when their boundary times differ by less than this.
- DEFAULT_
SHADER - Starting point for
EffectKind::Shader:tex= the layer,uv= 0..1,u_time= clip-local seconds,u1..u8= the eight knobs,u_res= layer size in px. Output goes toout_color(straight alpha, same convention as every other effect). - EPS 🔒
- F_COMP 🔒
- F_DIST 🔒
- F_ECHO 🔒
- F_EQ 🔒
- Five bands, but the first seven slots are frozen in the order the 3-band EQ used so old projects
keep their meaning;
mixer_fx::EQ_BANDSgroups them back into bands for the DSP and the UI. - F_GAIN 🔒
- F_GATE 🔒
- F_NOISE 🔒
- F_PASS 🔒
- F_
REVERB 🔒 - KEY_EPS 🔒
- LABEL_
COLORS - Colour labels for assets (0 = none).
- MIN_
CLIP - Smallest clip length / trim epsilon.
- P_
BLOBTRACK 🔒 - Tracks the largest blob matching a colour; its centre drives
BlobTrack-linked properties. - P_BLUR 🔒
- P_
CHROMA 🔒 - P_COLOR 🔒
- P_
COLOR_ 🔒REPLACE - Swap one colour for another: everything within
Toleranceof the source colour is blended to the target,Softnesswidening the falloff past the tolerance. - P_CROP 🔒
- P_
CURVES 🔒 - Five control points per channel (input -> output, 0..1) drive a monotone spline; the UI draws a classic curve editor and writes these values.
- P_
EDGEGLOW 🔒 - P_FLIP 🔒
- P_
GRAYSCALE 🔒 - P_HUE 🔒
- P_
INVERT 🔒 - P_JPEG 🔒
- P_
LEVELS 🔒 - P_
MOTIONBLUR 🔒 - P_
PIXELATE 🔒 - P_
PLAN 🔒E3D - A 3D plane: the layer is mapped through a perspective transform (also usable as a node).
- P_
RECDOT 🔒 - P_
SHADER 🔒 - P_
SHARPEN 🔒 - P_
THRESHOLD 🔒 - P_TINT 🔒
- P_VHS 🔒
- P_
VIGNETTE 🔒 - P_
WOBBLE 🔒 - WOBBLE_
MOTIONS - Names for the Camera Shake “Motion” knob, in value order (the inspector shows these).
Functions§
- a0 🔒
- a1 🔒
- black 🔒
- cubic_
bezier 🔒 - y for the x =
fon the cubic bezier (0,0) (x1,y1) (x2,y2) (1,1) — Newton iterations on the x polynomial. - de_
params 🔒 - Filter parameters were plain numbers before they became keyframeable; those load as constants.
- default_
labels - dh 🔒
- expand_
text - Expand a text node’s format at time
t(timeline seconds,ltclip-local):{frame}is the timeline frame number,{time}the timeline clock,{n}the frames since the clip started — so a counter is{n}and a clock is{time}. Anything else is left alone. - hash01 🔒
- splitmix64 folded to 0..1 — the
Randomnode’s whole implementation. - is_
linear 🔒 - one 🔒
- path_
to_ keys - Turn a recorded path into X/Y keyframes spanning
durationseconds. The recording’s own timing is kept when it has any (the replay keeps its rhythm) and the points are spread evenly otherwise — a polygon has no clock. Key times are always strictly increasing: a still mouse records several points at one instant, and two keys at the same time would swallow each other (Animated::key_index_at). - ps 🔒
- tru 🔒