Video Studio
GitHub
Reference motion-studio

Vocabulary → recipes in this engine

The director's vocabulary (definitions and prompt terms) is in ~/.claude/skills/motion-director/references/vocabulary.md. This table turns each term into what you write in comp/main.js. Details in motion.md.

TermRecipe here
Word-by-word reveal / staggered textOne GSAP tween per word on the master timeline at W(line, i) - 0.06: rise 0.42 em out of 8 px blur, expo.out 0.5 s
Per-character animationSplit into spans only for a hero line; stagger 20 to 35 ms; never for captions
Masked revealParent overflow: hidden, child yPercent: 105 → 0, 0.9 s; or clip-path: inset() driven by tw()
Tracking expansionletterSpacing from -0.03 em to 0.02 em over 1.2 s, power2.out, on a short headline only
Ease-out / cubic-beziertw(t, a, b, 'out') or GSAP power3.out; exits power2.in, faster than entrances
Spring, subtle overshoot, settlingClosed-form spring(ζ 0.8 to 0.9, ω ≈ 9); overshoot below 3 %; a value with several targets = sum of springs
No linear unless intentionalLinear only for progress, tickers, the music-driven clock
Single focal pointSpotlight dim (0.4) on the rest, accent outline on the region; the caption names it
Foreground / midground / background, parallaxSeparate layers with different camera factors (bg 0.3, mid 0.6, fg 1.0) on a push; static radial light behind the stage
Match cutShared element: the object named becomes the next scene's surface (scale and position matched across the cut)
Shape morphOne container whose size, radius and colour interpolate; content swaps with blur; text has its own enter/exit
Directional wipeOnly when motivated by a moving element; clip-path driven by that element's position
Camera-driven transitionCamera key: push into an element until it fills the frame, cut to the next scene at that scale
Overlapping transitionNext scene starts entering 0.1 to 0.2 s before the previous one finishes leaving
FloodCircle clip-path grows from the last thing looked at, radius ≥ distance to the farthest corner
Iris, accordion squeeze, line carry, label carryMorph vocabulary for "X becomes Y" transitions: transitions.md
Velocity-matched cutExit accelerates to the cut, entry starts at that speed and brakes (transitions.md)
Karaoke fill, weight pumpWord fill at speaking rate in the accent; variable-font weight on the beat (motion.md)
Rim lighting, soft bloomSparingly on hero objects only, never on UI; a static radial light, never one that follows
Film grainSeeded noise per frame index (never Math.random), opacity ≤ 0.04, applied after motion-blur averaging
Depth of fieldNot on UI. Only on non-UI objects in a three.js scene (three-d.md)
HoldA camera key with no change for ≥ 1.5 s on numbers and the CTA

Deterministic rule for everything above: computed from t only. No CSS transitions, timers, requestAnimationFrame or Math.random.