--- name: remotion-motion description: Build, preview and render the video in Remotion (React): project setup from the template, stills for style frames, animatic and final renders through the studio's render queue. Use whenever you make frames or video. --- # Remotion The video is a React project in `video/`. Frames are a pure function of the frame number: no timers, no randomness without a seed (`random('seed')` from remotion), no network at render time. ## Set up (first time) ``` node .claude/skills/remotion-motion/setup.mjs # video/ from the template, linked to the studio's shared install ``` The studio installs Remotion (and its Chrome, ~750 MB) once and every project links to it: seconds, not a fresh install. Don't `npm install` inside `video/` while it's linked (that would change the shared copy for every project). Need another package? `rm video/node_modules`, then `npm install` and `npm install ` in `video/`: this project gets its own copy. Set `src/video.ts` from the brief: size (16:9 → 1920×1080, 9:16 → 1080×1920, 1:1 → 1080×1080), 30 fps, length. Put the look from `design/LOOK.md` in `look`. Fonts: `@remotion/google-fonts/` (`loadFont()` at the top of a file) or local files in `video/public/` with `staticFile()`; never a font you can't license. ## Build scenes - One component per beat in `src/scenes/`, placed in `Main.tsx` with ``. - Timing in frames comes from the narration's word timings (`voice/timing.json`) or the music's beat grid: put the numbers in `src/timing.ts`, never scattered magic numbers. - Motion: `spring()` and `interpolate(..., { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' })`. Easing per the motion-design skill. - Audio: `