−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.
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
italicuppercase
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)
boxWboxH
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)
strokeWidthstrokeColor
0, "#000"
text outline
bgColorbgOpacity
"#000", 0
rounded pill behind each line
textAnim
"none"
typewriter · word-pop · word-slide · karaoke · 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
fontCutSet
(curated)
array of font family names cycled by font-cut, e.g. ["Anton","Bebas Neue","Archivo Black","Oswald"]; each is auto-loaded
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:
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.
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}}.