Build AE-grade 3D motion-design videos with Remotion (three.js + 2D overlays, frame-driven camera rigs, real scene transitions, cinematic motion blur, kinetic typography). Use when creating, extending, or rendering motion-graphics / presentation / explainer / promo / investor videos, or when adding 3D, transitions, motion blur, or kinetic type to a Remotion project.
Scanned 9/10/2026
Install to Claude Code
npx -y skills add nexuslinkproductions/yuri-os --skill remotion-motion-design --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Remotion Motion Design?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/nexuslinkproductions-remotion-motion-design-dea154aa)More formats (shields.io, HTML) on the badges page.
---
name: remotion-motion-design
description: Build AE-grade 3D motion-design videos with Remotion (three.js + 2D overlays, frame-driven camera rigs, real scene transitions, cinematic motion blur, kinetic typography). Use when creating, extending, or rendering motion-graphics / presentation / explainer / promo / investor videos, or when adding 3D, transitions, motion blur, or kinetic type to a Remotion project.
triggers: [motion design, remotion, video, 3d video, motion graphics, mograph, kinetic typography, after effects, AE-grade, scene transition, motion blur, investor video, explainer video, render video]
scope: harness
invocation: ability
---
# Remotion Motion Design — AE-Grade 3D Engine
The operating manual for producing studio-grade motion videos. It compounds: every new
video reuses the engine libs and the technique below, and any new mechanism gets added back here.
Reference implementation (the canonical project): `02_RESOURCES/INVESTOR-DECK/motion/`.
## The bar
Apple-keynote / studio motion design: a **3D realm** (three.js) with **2D overlays** composited on top,
**frame-driven camera choreography** (bezier/physics), **real visual transitions** (never fade-to-black),
**cinematic motion blur** on fast motion, **kinetic typography** with detail (highlighted words, clip
reveals, underline wipes), and **compositional diversity** (no two scenes framed the same).
## Stack (Remotion v4.0.476)
- `@remotion/three` + `@react-three/fiber@9` + `three@0.184` + `@react-three/drei` — the 3D realm.
- `@remotion/transitions` — real scene transitions (TransitionSeries + presentations).
- `@remotion/motion-blur` — `<CameraMotionBlur>` (true shutter) + `<Trail>` (cheap ghost smear).
- **Render 3D with `--gl=angle`** (macOS → Metal, fast). Without it, ThreeCanvas renders black.
## Engine libraries (reuse, don't reinvent)
- `src/lib/system.ts` — palette `C`, type scale `T`, tracking `LS`, weights `W`, **`BEZ` curve table**,
`BLUR` defaults, `hash`/`smooth`/`fmt`. Single source of truth. Never hardcode color/font/curve.
- `src/lib/three-env.tsx` — `Stage` (ThreeCanvas + fog + lights), `CameraRig` (keyframed camera:
`{f,pos,look,fov}[]` interpolated with a BEZ ease — **the camera move**), `DepthField` (deterministic
particle volume), `TechLights`, `Overlay` (2D-over-3D compositor).
- `src/lib/kinetic.tsx` — `ClipReveal`, `WordStagger`, `HighlightWord`, `UnderlineWipe`, `BoxDraw`,
`ColorPop`, `CountUp`. AE type mechanics, all frame-driven.
- `src/lib/transitions.tsx` — `depthPush` / `glideUp` custom presentations, `T_smooth/T_snap/T_reveal/
T_spring` timing kit, `Cinematic` (CameraMotionBlur) + `Smear` (Trail) wrappers.
## Hard rules (non-negotiable — these are what make it render correctly)
1. **Deterministic only.** Every animation is a pure function of `useCurrentFrame()`. NEVER `useFrame`
(R3F's loop does NOT fire in headless render — animation will freeze). NEVER `Math.random`/`Date.now`
(motion blur + transitions re-render children N times → non-determinism = visible noise). Use `hash(i)`.
2. **Camera + 3D objects animate via `useCurrentFrame()`** → props/`useLayoutEffect`, inside `<ThreeCanvas>`.
`CameraRig` already does this; give it keyframes.
3. **2D over 3D:** put DOM/SVG in `<Overlay>` AFTER `<Stage>`. Pointer-events none.
4. **Transitions:** use `<TransitionSeries>` (NOT `<Series>`) with `TransitionSeries.Sequence` +
`TransitionSeries.Transition`. Transition `durationInFrames` MUST be `<` both adjacent sequences.
**Total frames = Σ sequences − Σ transitions** (transitions overlap). Compute the composition duration from this.
5. **Motion blur:** the moving element must call `useCurrentFrame()` *inside* the wrapper's children, not the
parent. `CameraMotionBlur samples={N}` multiplies render cost ×N — wrap ONLY fast subtrees; use `samples:5`
for 3D, `8` for 2D. Prefer `Smear`/`Trail` for cheap stylised streaks. Slow cinematic camera moves need no blur.
6. **3D text:** drei `<Text>` (troika) needs a local `.woff`/`.ttf` (NOT woff2) in `public/` + `preloadFont`.
When in doubt, render the wordmark as a 2D `<Overlay>` title over the 3D world (AE-standard, zero font risk).
## AE technique cheat-sheet (from research — bake into scenes)
- **Bezier curves** (`BEZ` in system.ts): `entrance` decisive arrival · `settle` polished · `snap` pop (accents
only) · `editorial` symmetric camera move · `overshoot` spring-settle · `reveal` clip-reveal standard.
- **Timing grid:** everything on multiples of ~4f @30fps. Stagger siblings 4–6f. Secondary follow-through 2–3f
AFTER primary (e.g. underline wipes 4–6f after text lands — never simultaneous).
- **Camera:** push-in on emphasis = scale 1.0→1.04–1.06 over 18–24f (never >8% unless hero). Dolly = move z
AND parallax BG at 0.3× FG. Add 0.5–1px blur at peak velocity, sharp at ends. Pull-back to 0.94 for context.
- **Kinetic type:** highlight swipe (scaleX 0→1 from left, text bleeds through at 60%), underline wipe (width
0→100%, reveal curve), box draw (stroke-dashoffset), word stagger (translateY+rotateX fold, 4f apart),
clip reveal (translateY 112%→0 in overflow:hidden), color pop (color shift 3f + 1.06 micro-pulse).
- **Composition diversity:** cycle 6 archetypes across the film — full-bleed center · rule-of-thirds anchor ·
cornered asymmetry · scale contrast · horizontal band · fragmented grid. Alternate dense ↔ sparse. Use real
scale contrast (120px hero next to 14px body, not 48 vs 24).
- **Polish:** film grain (feTurbulence, 4–5% opacity, overlay blend — biggest "looks cheap" fix), vignette,
glow on key type/stats, depth-of-field blur (0.8–1.5px) on background layers only.
## Workflow for a new video (compounding loop)
1. Content + brief → a `SCENE-SPEC.md` (the build contract; facts authoritative, no invention).
2. Lay foundation yourself (system tokens, reference scene) → render a still → lock the look.
3. Fan scene construction to parallel agents against the spec + 2 reference scenes (distinct files, no conflict).
4. **Verify every scene by rendered still** (`remotion still ... --gl=angle`) — catch layout collisions before full render.
5. Assemble with `<TransitionSeries>` (durations via the Σ rule). Render with `--gl=angle --crf=18`.
6. Sample frames from the encoded mp4 to confirm quality. Add any new mechanism back into the engine libs + this skill.
## Render commands
```bash
remotion studio src/index.ts # live scrub
remotion still src/index.ts <SceneId> out/s.png --frame=N --gl=angle # verify a scene
remotion render src/index.ts <CompId> out/film.mp4 --codec=h264 --crf=18 --gl=angle
```
## Corrected direction (2026-06-13, after feedback) — READ THIS
Full research synthesis: `02_RESOURCES/research/ae-grade-motion-design-remotion-2026-06-13.md`
(searchable via `ai search "ae-grade motion design"`). Also mirror the OFFICIAL skill
`github.com/remotion-dev/skills` for Remotion conventions.
The "3D realm" is **not a visible 3D environment** (no grid floors, wireframe cores, Tron/neon —
that reads as a 2003 video-game loading screen). It means **operate motion across all 3 spatial +
rotational axes** using **CSS `perspective` + `transform-style: preserve-3d`** on flat text/vector
layers (crisper than three.js for type; reserve three.js for particles/meshes only). Build a CSS
"camera rig" parent (perspective 800–1400 + preserve-3d, animate rotateX/rotateY = camera move);
place layers at depth via `translateZ`; parallax falls out for free.
Non-negotiables for premium (the things we got wrong):
- **Text TRAVELS, never pops.** translateY/translateZ/path motion + mask reveals; tracking-in
(letterSpacing −0.06→0). No opacity-only fades. Use `@remotion/animation-utils` makeTransform.
- **Elements move each other to form the scene** — lines draw into dividers, blocks slide & lock,
shapes travel and grow into text containers, one element pushes another out. (8 moves in research §8.)
- **Continuous flow + speed.** Next move starts at 50–70% of the previous (overlap). An anchor element
is always moving. Exits ~60% of entry length. No dead frame >10f. Faster pacing, less settling.
- **Mask/clip reveals** (`clipPath inset/polygon`, overflow:hidden + translateY) over opacity fades.
- **Kill default eases** — BEZ table / spring configs (snappy `{damping:20,stiffness:200,mass:0.5}`,
hero `{damping:15,stiffness:50,mass:2}`). Apple land = `cubic-bezier(0,0,0.2,1)`, no overshoot.
- **Grain 2–4%**, optical alignment, one accent color, massive negative space, restraint.
- Render 2× (`--scale 2`) for crisp type; never `filter:` on a preserve-3d ancestor.
- Toolkit: `@remotion/animation-utils` (makeTransform/interpolateStyles), `@remotion/paths`
(evolvePath/getPointAtLength/interpolatePath), spring+measureSpring for stagger math.
## VFX pipeline (GPU — the "not-flat / not-PS2" lever)
Flat CSS/DOM cannot do VFX. For spectacle (intros, hero moments, energy/data viz) use three.js +
**`@react-three/postprocessing`** inside `<ThreeCanvas>` (render `--gl=angle`):
- **Bloom** is the single biggest cinematic lever — `<Bloom intensity={...} luminanceThreshold={0.18} mipmapBlur radius={0.8}/>`; drive intensity by frame (ambient ~0.7 → spike ~5 at the drop → settle ~1.2). Emissive materials need `toneMapped={false}` to bloom hard.
- **GPU particles**: `<points>` + bufferGeometry positions rebuilt per frame in `useMemo([frame])` (deterministic, no useFrame/random); `AdditiveBlending`, `depthWrite={false}`. **Soft round dots, NOT squares**: build a radial-gradient `CanvasTexture` and set it as `map`+`alphaMap` on `pointsMaterial` (default point sprites are hard squares — always replace them).
- Also: `ChromaticAberration` (subtle, spike on the drop), `Vignette`, `Noise` (overlay ~0.16). Shockwave = expanding `ringGeometry` additive. DepthOfField for focal racks.
- Reference scene: `src/scenes/SceneIgniteVFX.tsx` (particle convergence → bloom charge → shockwave drop → wordmark resolve).
## Music-theory timing (momentum + pacing)
Score motion to an implied track. `system.ts`: `BPM`, `BEAT` (15f@120BPM/30fps), `beat(n)`, `bar(n)`,
`accel(count,startBeat,endBeat)` (accelerando spawn frames). Hits land on beats; build-ups **accelerate
into a downbeat "drop"** (the flash); resolutions land on the next downbeat. Crescendo = ramp bloom +
particle convergence over a bar; the drop is the loudest frame; then resolve + sustain.
## Morphing (controlled transformation)
`kinetic.tsx`: `MorphText` (variable-font wght/wdth morph — needs a variable font; weight snaps on static
fonts but tracking/color still morph), `ColorMorph` (`interpolateColors` across keyframes), `ShapeMorph`
(`@remotion/paths` `interpolatePath` A→B; keep command structure compatible). Use for stat numbers,
thesis words igniting, controlled color/weight shifts on key words, icon/shape transformations.
## Session Notes
### 2026-06-16
- session: 8m | peak ctx: 0% | compacts: 0
- tools: Bash×48, Read×19, Edit×6, Write×3, Agent×3, Skill×1
- corrections: Base directory for this skill: /Users/marcelspatz/.claude/skills/cross-reference-navigation
# Cross-Reference Navigation (XREF)
The GROUND step of the work loop, made reflexive. One question asked a | Base directory for this skill: /Users/marcelspatz/.claude/skills/quantum-hypothesis-simulation
# Quantum Hypothesis Simulation
The quantum-probability layer for YURI's claim/pulse machinery. It mode | Base directory for this skill: /Users/marcelspatz/.claude/skills/cross-reference-navigation
# Cross-Reference Navigation (XREF)
The GROUND step of the work loop, made reflexive. One question asked a
- errors: none
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!