Module model

Source
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_attributes copies.
AudioFilter
AudioStreamInfo
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 input port is fed by from’s output.
Effect
An effect instance on a clip; params[i] follows kind.params()[i] (each keyframeable).
Keyframe
Label
A user-editable colour label. Project.labels starts as default_labels().
Marker
A note on the timeline (or, in Clip.markers, on a clip). The AI tools read these too.
Mask
Node
NodeGraph
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 one Output.
ParamSpec
One effect parameter: label, default and UI range.
PathAsset
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.
PlanItem
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::Sequence clip and rendered/mixed recursively. Edited by swapping it into Project.tracks (open_sequence / close_sequence).
ShapeStyle
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.
TextStyle
Text clip styling. Sizes are in project pixels (at project resolution).
Track
Transition
A transition on a cut or a clip edge. For Cut it is centred on the cut between right and 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). For In / Out, right is the single clip it belongs to and the window is its first/last duration seconds. Audio tracks use CrossFade (a gain crossfade / fade).

Enums§

BlendMode
ClipKind
CmpOp
Comparison for a Compare node.
Ease
Interpolation of the segment that starts at a keyframe.
EffectKind
FilterKind
LogicOp
Boolean logic for a Logic node.
MaskShape
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 Math node.
NodeKind
What a node does. Input is the clip’s own decoded layer; Output is what the compositor draws.
Scaler
Resampling quality used when the compositor scales/rotates layers (export == preview).
ShapeKind
TrackKind
TransitionEdge
Where a transition sits. Cut (the default) is centred on the cut between a clip and its left neighbour; In / Out sit inside a single clip’s first/last duration seconds and blend from/to nothing (black), so they need no neighbour.
TransitionKind

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 to out_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_BANDS groups 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 Tolerance of the source colour is blended to the target, Softness widening 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_PLANE3D 🔒
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 = f on 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, lt clip-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 Random node’s whole implementation.
is_linear 🔒
one 🔒
path_to_keys
Turn a recorded path into X/Y keyframes spanning duration seconds. 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 🔒

Type Aliases§

Id