claude-motion skill

A motion design toolkit for coding agents: rules with numbers, frame self-review and synthesized sound, plus web sims at 60 fps

  • 963 ★ on the repository
  • Last commit
  • MIT
Skill

Extended access

Why this level

  • The agent runs npm builds, Python scripts and rendering through ffmpeg and Chromium on your machine.
All reasons and checks

whaleyxbt/claude-motion

Install

Manual install

git clone https://github.com/whaleyxbt/claude-motion && cd claude-motion && npm install

The manual option from the README. Then `npm run build` produces the example with sound.

Access and checks

How we review

Extended accessThe tool runs code or makes network calls and only reads external data.

  • The agent runs npm builds, Python scripts and rendering through ffmpeg and Chromium on your machine.

This is third-party code. Review the repository files before installing.

What it does

claude-motion adds a layer of taste and checking to Remotion for an agent: Claude Code and Cursor read four skills in `.claude/skills/`, while Codex, OpenCode and other tools follow `AGENTS.md`. The `motion-design` skill sets numbers for animation: curves, springs, delays, a type scale, an accent colour. The `review-loop` skill builds a contact sheet of frames and the agent checks it against a list for collisions, clipping and holds that are too short before handing over. The `sound-design` skill runs sound generators in pure Python and masters to -14 LUFS. The `web-sims` skill renders a web page frame by frame into 60 fps video. Every beat lives in one `timeline.json`, so retiming moves sound and checks together with the picture.

Who it is for. Developers and motion designers who build Remotion videos with an agent and want shared rules for timing, sound and frame checks.

Good fit when

  • An agent has to make a 15-second product announcement animation with sound from one prompt and one revision.
  • A finished video looks loose and its frames need checking for collisions and safe-area margins.
  • A clip needs clicks, whooshes and a quiet pad but no sample licenses.
  • A three.js simulation has to be rendered frame by frame into a vertical 60 fps video.

Not a fit when

  • A code-free editor like After Effects is needed.
  • The clip is built on neither Remotion nor web pages.
  • Voice-over or sounds that cannot be synthesized are required.

Example request

Make a 15-second 1080x1080 motion graphic announcing our product. Follow AGENTS.md: storyboard first, then timeline.json, review by contact sheet and sound.

Limitations

Node.js 20 or newer, Python 3 and ffmpeg are required. For simulations Chromium is installed separately with `npx playwright install chromium`. Remotion has its own license: free for individuals and small teams, while companies above the threshold need a commercial license. The agent does not watch video; it checks only single frames of the contact sheet. Voice-over and sounds that cannot be synthesized are added through a separate MCP server such as ElevenLabs. The project code is MIT.

How to disable. Delete the cloned project folder. The skills sit inside it in `.claude/skills/`, and installation creates no global files.

FAQ

How do I install claude-motion?

Clone the repository and run `npm install`, then `npm run build` for the example with sound. The skills sit in `.claude/skills/` and Claude Code and Cursor pick them up on their own.

Is MCP required?

No, the toolkit works without it. The `.mcp.json.example` file lists optional servers: Remotion docs, ElevenLabs, Playwright and Figma.

Where does the sound come from?

The `sfx` module synthesizes it in the Python standard library without samples. `python3 -m sfx sfx/cues/<name>.py` renders a cue sheet to WAV.

What are the web sims for?

A second pipeline for simulation clips: one HTML page per clip, `render(t)` as a pure function of time, frame-exact capture into 60 fps video through Chromium and ffmpeg. Run `npm run capture`.

Which model was the workflow tried with?

The author describes experience with Claude Opus 5.5 and recommends varying `/effort`: low for storyboard, medium for scenes, high for review and final polish.

Discussion

No questions or reviews yet.

Skills

Nine motion design skills for Claude Code: timing, color, composition, After Effects, Remotion, logos and backgrounds.

PluginMinimal access229Repository stars

A skill for Claude Code and Codex that turns one sentence into a product launch film, scores the music and edits a frame on click

SkillExtended access2.7KRepository stars

Seventeen skills for motion graphics: an agent builds looping 3D scenes, titles and clips with Remotion, Three.js and Python.

SkillExtended access1.6KRepository stars

A motion design skill: the agent writes Remotion video code with voice, music and sound and delivers only after measuring frames

PluginExtended access76Repository stars

A Claude Code and Codex skill that turns a topic into a narrated motion-graphics explainer video on Remotion with subtitles and chapters

SkillExtended access3.3KRepository stars

Comparison with similar tools

Cards that share the main search query, and how they differ.

ToolOfficialRepository starsMain difference
claude-motion (this card)no963
Claude Remotion Skillno984teaches the agent the Remotion API; here a taste layer, frame self-review and sound synthesis
HyperFramesno83,283a standalone HTML video framework; here a toolkit on top of Remotion plus web sims

README in short

The README shows a 22-second sample clip made from one prompt and one revision, and a pipeline from storyboard to MP4. It continues with a command table, effort-level advice for Opus and a list of optional MCP servers.

README badge

Original SKILL.md

---
name: motion-design
description: 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.
---

# 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 through `TL` from `src/lib.ts`; the video's cue sheet in `sfx/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`, then `npm run sfx` so audio follows.
- Everything is a pure function of `frame`. No CSS transitions or keyframes, no `Math.random()` (use `rand(n)`), no `Date`. 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).

Report a problem