claude-motion-motion-design
Skill9 starsChanged 23 days agoMITView on GitHub
Taste rules for Remotion motion graphics — timing, easing, springs, typography, color, texture, and scene continuity, with concrete numbers. Use whenever you create, animate, retime, or polish a video, composition, scene, or transition in this repo.
In this repository17 other files it gives its agents.
- 3d-productSkill
- anatomySkill
- claude-motion-review-loopSkill
- claude-motion-sound-designSkill
- claude-motion-web-simsSkill
- hyperframes-motion-reelSkill
- img2threejsSkill
- kinetic-reelSkill
- lemo-opuscarSkill
- lower-thirdsSkill
- motion-designerSkill
- motion-design-principlesSkill
- motion-graphics-music-videoSkill
- opus-visual-motion-engineSkill
- painted-animationSkill
- talking-head-b-rollSkill
- video-shotcraftSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 2 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Every beat is a named timestamp in seconds in timeline.json, grouped by scene (s1, s2, …).
- Very specific: line 13
Never hardcode a start time inside a component.
- Very specific: line 28
Use prog(t, t0, t1, ease) for tweens and band(x, a, b) to derive one animation from another value (e.g.
- Distinctive: line 74
Prefer persistent objects over cuts.
- Distinctive: line 75
Every transition is motivated by an object on screen (the five result dots merge into one, which becomes the iris).
- Very specific: line 76
Use velocity: derive motion trails / squash from value(frame) - value(frame - 1) instead of faking it.
- Very specific: line 90
Write the beats into timeline.json first (a storyboard in numbers).
- Very specific: line 92
Run the review-loop skill after every meaningful change.
- Very specific: line 93
Run the sound-design skill once picture timing is locked.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Motion design
Remotion teaches you the API. This file is the taste. Every number below comes from a shipped piece (src/EffortVideo.tsx); treat them as defaults you deviate from on purpose, not by accident.
1. Time lives in timeline.json
- Every beat is a named timestamp in seconds in
timeline.json, grouped by scene (s1,s2, …). Components read it throughTLfromsrc/lib.ts; the video's cue sheet insfx/cues/reads the same file. That is what keeps picture and sound locked. - Never hardcode a start time inside a component. Offsets relative to a beat (
s1.exit + 0.05) are fine. - Retiming = editing
timeline.json, thennpm run sfxso audio follows. - Everything is a pure function of
frame. No CSS transitions or keyframes, noMath.random()(userand(n)), noDate. Anything else flickers or drifts at render time.
2. Easing
| Curve | Use | Source |
easeOut = bezier(0.16, 1, 0.3, 1) | entrances, reveals, anything arriving | lib.ts |
easeIn = bezier(0.6, 0, 0.9, 0.35) | exits — leaves fast, doesn't linger | lib.ts |
easeInOut = bezier(0.65, 0, 0.35, 1) | moves between two states (flip, dock, morph) | lib.ts |
overshoot bezier(0.55, 0, 0.2, 1.12) | a value that "lands" (slider climbing to a level) | effortAt |
Linear is only for continuous motion: rotation, drift, grain, ticking hands.
Use prog(t, t0, t1, ease) for tweens and band(x, a, b) to derive one animation from another value (e.g. captions from the slider position) instead of giving it its own clock.
3. Springs (via sp(frame, startSec, config))
| Feel | damping / stiffness / mass | Used for |
| default settle | 14 / 140 / 0.8 | general UI entering |
| heavy, calm | 15–20 / 140–240 / 0.6–1 | big panels, the rewind |
| knob / notch | 12 / 190 / 0.75 | a control snapping to a step |
| pop | 9–11 / 200–230 / 0.7 | callouts, badges, success dots |
| elastic accent | 8 / 200 | one hero moment per video, not more |
Springs for things that feel physical (UI, objects). Bezier tweens for type and camera-like moves.
4. Timing
- Stagger words by ~0.09 s, list items/chips by ~0.2–0.25 s, rings/dots by ~0.06 s.
- Word reveal ≈ 0.8 s with
Mask(slide up out of a clip + slight tilt). - Exits are ~half an entrance (0.35–0.55 s vs 0.7–1.25 s). Exits use
easeIn. - Overlap scenes. The next scene starts drawing on before the previous one has fully left (
s2.drawOn4.02 s <s1.flipEnd4.4 s). Hard gaps read as "loading". - Typing ≈ 0.035 s per character, caret blinks at ~2.4 Hz when idle.
- Reading holds. Every readable state needs a hold after it settles: ≥ 1 s for a short phrase, add ~0.25 s per word beyond three, ≥ 2 s for the final hook. The 22 s cut of the effort video exists because the 15 s one flashed text too fast — when in doubt, hold longer and animate less.
5. Typography
- Max three families: display serif (Instrument Serif), UI sans (Inter), mono (JetBrains Mono) for labels, prompts, numbers.
- Display type is big (≈ 138 px on a 1080 canvas) with tight tracking (
-0.02em),lineHeight: 1. - One accent per line: a single italic word in the accent color carries the point (
Same *prompt.*). - Mono labels: uppercase,
letterSpacing: 0.2–0.24em, muted color. They're decoration; anything the viewer must read goes big. - Phone test: at 360 px wide (how X shows it in the feed) the key message must still read. Check it on the contact sheet.
6. Color
- Palette tokens live in
C(lib.ts). Don't introduce new hex values in components. - One accent color (coral) and it means something: the thing that changed, the answer, the winner. If everything is coral, nothing is.
- Drive glow from state, not time (
glow = effort): light should explain the story.
7. Texture — nothing is dead-still
- Film grain overlay (
Grain, opacity ≈ 0.09, reseeded on twos). - Vignette plus a dot grid drifting a few px/s (
Background). - Hand-drawn "line boil" (
WobbleFilter) for sketchy/low-fidelity states, faded out as quality rises. - Idle elements breathe: a ticking clock, a blinking caret, a slow rotation.
8. Continuity and transitions
- Prefer persistent objects over cuts. The prompt bar, the spark and the slider travel through scenes and change role; that's what makes it feel designed rather than assembled.
- Every transition is motivated by an object on screen (the five result dots merge into one, which becomes the iris). No generic wipes.
- Use velocity: derive motion trails / squash from
value(frame) - value(frame - 1)instead of faking it. - One hero moment per video (the iris + impact). Build to it; don't spend it early.
9. Anti-patterns
- Everything fading in at once, or everything using the same duration.
- Linear easing on anything that starts or stops.
- Text that moves while it's supposed to be read.
- More than one focal point per frame.
- Content within ~60 px of the frame edge (safe area) unless it's intentionally cropped.
- An empty or black frame 0 — X autoplays muted and the first frame is the thumbnail.
Workflow
- Write the beats into
timeline.jsonfirst (a storyboard in numbers). - Build scenes as components in
src/scenes/, shared bits insrc/components/. - Run the
review-loopskill after every meaningful change. - Run the
sound-designskill once picture timing is locked.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

