Clip props
Every property a clip can carry and its default. A key a clip leaves out falls back to these.
Transform & compositing all visual kinds#
| prop | default | notes |
|---|---|---|
x, y | 0 | px offset from canvas center |
scale | 1 | |
rotation | 0 | degrees |
opacity | 1 | 0–1 |
anchorX, anchorY | 0 | anchor point, px from the picture's centre: the point x/y place and rotation/scale turn around |
autoOrient | false | turn the clip with its direction of travel along its motion path (rotation adds on top) |
motionBlur · motionBlurSamples | 0 · 8 | motion blur: shutter angle in degrees (0 = off, 180 = film look, up to 720) · sub-frame samples 2–32 |
blend | "normal" | how the clip lays over what is under it (see Track mattes and blending) |
matte · matteTrack | - | a track matte (see Track mattes and blending) |
Layout video/image/svg#
| prop | default | notes |
|---|---|---|
fit | "contain" | contain · cover (fill canvas, crop overflow) · stretch · none (native px) |
cropL cropR cropT cropB | 0 | % of the source trimmed off each edge |
cornerRadius | 0 | px, rounded corners - the PiP look |
reframe | - | set by Reframe ("follow" or "centre"): the clip's fit and position are Reframe's own, so running it again replaces them (see Sequences) |
flipH, flipV | false | mirror |
Filter / color video/image/svg#
| prop | default | notes |
|---|---|---|
filterPreset | "none" | one of: cinematic · teal-orange · noir · vintage · faded · warm · cold · pop · dreamy · retro · bw-soft · cyberpunk · sunset · midnight. Combines non-destructively with the sliders below. |
brightness contrast saturation | 100 | % (100 = neutral) |
hue | 0 | degrees |
temperature | 0 | −100 (cool blue) … +100 (warm orange) |
tint | 0 | −100 (magenta) … +100 (green) |
blur | 0 | px |
grayscale sepia invert vignette | 0 | % |
These are quick looks. For real grading use props.grade (see Color below).
Motion FX video/image/svg/adjust - all animatable#
| prop | default | notes |
|---|---|---|
shake | 0 | camera-shake amplitude in px (deterministic - identical in export) |
shakeSpeed | 8 | shake frequency |
rgbSplit | 0 | chromatic aberration / RGB channel split, px |
grain | 0 | animated film grain, % |
Keying / cut-out video/image#
| prop | default | notes |
|---|---|---|
chromaKey | "" | hex key color, e.g. "#00ff00" for green screen ("" = off) |
chromaTolerance | 26 | 0–100, how much color distance is keyed out |
chromaSoftness | 12 | 0–100, edge feather + spill suppression |
bgRemove | false | AI person cut-out (MediaPipe, loads from CDN on first use; needs internet once) |
Audio / time video/audio#
| prop | default | notes |
|---|---|---|
volume | 1 | 0–2 (linear; animatable - fades, ducking) |
gain | 0 | clip gain in dB (−60…+24), applied before volume, so keyframes and fades ride on top. Set by Normalize. |
channelMode | "stereo" | stereo · mono (L+R folded to one channel) · left · right (use one side) · swap (exchange L/R). Ignored on linked stems - audioChannel already picks their channel. |
duck | 0 | ducking in dB (≤ 0), multiplied into volume. Normally keyframed by Auto-duck (keyframes.duck), so the clip's own volume, keyframes and fades are untouched. |
pan | 0 | −1 (full left) … 0 (center) … +1 (full right). Linked stems default L −1 / R +1 / other 0. Projects saved before pan migrate once on load (panSchema); keep panSchema: 1 (and explicit pan on stems) when rewriting the document so a centered stem is not re-hard-panned. |
speed | 1 | 0.25–4× playback rate. Keyframable → speed ramps: with keyframes.speed the engine time-remaps (media time = in + ∫speed dt), in preview and in the export audio mix. Static case: source window consumed = duration × speed, so in + duration×speed ≤ media.duration. |
Text clips only#
| prop | default | notes |
|---|---|---|
text | "Title" | \n for multi-line |
fontSize | 72 | px |
color | "#ffffff" | fill |
color2 | "" | if set: vertical gradient fill color→color2 |
font | "Segoe UI" | system font, a library/fonts family, or ANY Google Font name - unknown names are fetched from Google Fonts automatically |
bold / weight | true / 0 | weight (300–900) overrides bold when non-zero |
italic uppercase | false | |
align | "center" | left · center · right · justify (inserts spaces between words to fill the text box width, or ~85% of the canvas when no box) |
boxW boxH | 0 | px text box; 0 = hug content. When both > 0, corner handles resize the box (not scale). Default: fixed fontSize, word-wrap inside the box. |
boxFit | false | when a box is set: false = wrap at fixed font size; true = scale font down (up to fontSize) so the whole text fits |
vAlign | "middle" | top · middle · bottom - vertical alignment of the text block inside the box |
direction | "auto" | auto · ltr · rtl - auto detects per line (Hebrew/Arabic → RTL); all textAnim modes honor reading direction (wipe, typewriter reveal, word/letter layout) |
letterSpacing | 0 | px |
lineHeight | 1.2 | multiplier |
textShadow | 12 | soft drop shadow amount, 0 = off |
glow | 0 | neon glow strength (0–100); replaces the drop shadow |
glowColor | "" | glow color ("" = use the text color) |
strokeWidth strokeColor | 0, "#000" | text outline |
bgColor bgOpacity | "#000", 0 | rounded pill behind each line |
textAnim | "none" | typewriter · word-pop · word-slide · karaoke · highlight (every word shown; the one being said in highlightColor) · letter-pop (per-character entrance; Arabic/Indic auto-fallback to per-word clusters so joined letters shape correctly) · wave (looping per-character ride; same shaping fallback) · bounce (looping per-word hop) · shake (looping jitter) · clip-reveal (wipe-mask sweep, per line) · zoom-in (scale + opacity settle) · font-cut (rhythmically swaps typeface, then settles - see fontCutSet) · rise-mask (line rises from behind its baseline, lower-third reveal) |
wordRate | 0.15 | seconds per word (typewriter: /4, letter-pop: /3 per character); also staggers clip-reveal/zoom-in/rise-mask per line |
wordTimes | - | [[start, end], …], one pair per word (seconds from the clip's start): word-pop, word-slide, karaoke and highlight follow these instead of wordRate - a caption timed to speech. If the text is edited to another number of words they are spread over the clip. See Captions |
highlightColor | "#ffd166" | the colour of the word being said in highlight |
caption · captionStyle | - | set on caption clips (see Captions): how they are found, replaced and exported |
textPath | - | set the title along a path: one shape item (path, line, ellipse, rect, polygon, star) whose outline is the baseline; more lines follow on parallel curves below it. See Motion paths, motion blur and text on a path |
pathOffset · pathAlign | 0 · "start" | where along the path the text sits (% of its length, keyframable, wraps on closed paths) · which end of the text sits there: start · center · end |
fontCutSet | (curated) | array of font family names cycled by font-cut, e.g. ["Anton","Bebas Neue","Archivo Black","Oswald"]; each is auto-loaded |
Title styles one-tap cohesive looks#
Text clips created in the UI now rotate through curated styles so titles vary instead of all looking basic (the old flat Segoe UI / no-animation default). Each style bundles a different font, placement and animation. Apply one in the inspector (Title style dropdown + Shuffle), or reproduce it from an agent by writing the same props:
| Style | Font | Look |
|---|---|---|
impact | Anton | uppercase, lower third, word-pop, big shadow |
elegant | Playfair Display | white→gold gradient, centered, clip-reveal |
kinetic | Bebas Neue | gold, font-cut cycling Anton/Bebas/Archivo/Oswald |
neon | Bebas Neue | cyan glow, wave |
handwritten | Caveat | rotated −4°, lower-left, word-slide |
serifDrop | Abril Fatface | centered, zoom-in |
subtitle | Roboto | small, bottom, bg pill, karaoke |
boldRise | Archivo Black | uppercase, lower third, rise-mask |
luxury | Cinzel | uppercase, cream→gold gradient, wide letterSpacing, clip-reveal |
Rule for agents: vary the font per title - never reuse one font across a whole edit. Any Google Font name auto-loads; the display faces above ship in library/fonts/. Placement props (x/y) are canvas-aware in the styles (lower third ≈ y: height*0.30).
Switching the style on an existing title (inspector dropdown/Shuffle) only restyles the look (font, size, colors, shadow/glow, animation) - the clip's x/y/scale/rotation/align and its text are preserved. The style's canvas-aware placement is applied only when a title is first created.
Adjustment layers kind:"adjust", mediaId:null#
A clip that re-renders everything drawn below it (lower tracks + earlier clips) through its own filter stack - Premiere-style. Supports all Filter/Color props, vignette, grain, rgbSplit, temperature/tint, whole-frame shake, and opacity as the intensity. Keyframe/transition it like any clip. Put it on V2/V3 above the footage. Example: 0.3 s impact shake over everything = {kind:"adjust", track:"V3", duration:0.3, props:{shake:18}}.
Masks masks, video/image/svg/text/adjust#
Shapes that cut what the clip shows - rect, ellipse, bezier, free-hand; feather, expand, invert, add / subtract / intersect, keyframes. See Masks below.
Shape layers kind:"shape"#
props.shapes (rectangles, ellipses, polygons, stars, lines, bezier paths, groups) and trimStart / trimEnd / trimOffset (%, a draw-on of every path). Null objects (kind:"null") never render; other clips are parented to them. See Shapes, nulls and parenting.
Comp clips kind:"comp", compId#
A composition placed as one clip - it draws like a picture of the comp's size (fit defaults to none) and its media plays and exports. See "Compositions (nested sequences)".
Animatable props usable in keyframes#
X, y, scale, rotation, opacity, anchorX, anchorY, trimStart, trimEnd, trimOffset, pathOffset, volume, pan, duck, speed, brightness, contrast, saturation, hue, blur, grayscale, sepia, invert, temperature, tint, vignette, cornerRadius, shake, rgbSplit, grain, fontSize, letterSpacing, glow.
Transition types#
Fade · slide-left/right/up/down · zoom · wipe (=wipe-left) · wipe-right/up/down · iris (circular) · spin · blur · whip (whip-pan) · glitch (RGB split + jitter) · pop (overshoot scale - stickers/captions).