
dev-isaacmello/extreme-motion-design
Developer toolsSkill de motion design por código (Remotion) com trilha, narração e QA automático. Para Claude, Claude Code e Codex.
Overview
A motion design skill for coding agents (Claude, Claude Code, Codex and anything that reads SKILL.md). The agent writes the video as code with Remotion and React, with voice, licensed music and synced sound effects, and it is not allowed to deliver until the frames have been measured. The film above is the 2.0 presentation, made with the skill. Every number on screen was measured and the imagery is public domain or CC0 (NASA, USGS, NPS and The Met), fetched by the skill with the licence checked per file. - Hand it a video and reference.py breaks it into measured structure (shots, camera moves, palette, where the visual mass sits, audio), writes a script skeleton with the same timings, and scores the new piece from 0 to 100 against the reference. Calibration: the piece against itself scores 100, using the score boundaries as cuts 86, a reel made from the same request without the reference 38, unrelated videos 23 and 24. It copies structure, rhythm and technique.
README
Extreme Motion Design
A motion design skill for coding agents (Claude, Claude Code, Codex and anything that reads SKILL.md). The agent writes the video as code with Remotion and React, with voice, licensed music and synced sound effects, and it is not allowed to deliver until the frames have been measured.
The film above is the 2.0 presentation, made with the skill. Every number on screen was measured and the imagery is public domain or CC0 (NASA, USGS, NPS and The Met), fetched by the skill with the licence checked per file.
What is new in 2.0
- Reference mode. Hand it a video and
reference.pybreaks it into measured structure (shots, camera moves, palette, where the visual mass sits, audio), writes a script skeleton with the same timings, and scores the new piece from 0 to 100 against the reference. Calibration: the piece against itself scores 100, using the score boundaries as cuts 86, a reel made from the same request without the reference 38, unrelated videos 23 and 24. It copies structure, rhythm and technique. It never copies frames, assets, text or sound. - A design meter.
design.pycounts the signals of the frame a model produces with no direction: near black with one accent, a giant condensed face on the left margin, decorative mono, everything in caps, the same composition in every scene. It flagged my own 1.3 reel (4 signals) and the template example (3). The 2.0 film scores 0. - A design reference.
references/design.mdcovers composition, type, colour, texture, real imagery and launch film structure, each rule with its source, plus six named art directions to propose from. - Real imagery with the licence checked.
stock.pyfetches photo and video from Wikimedia Commons (CC0 and public domain only), NASA, Openverse and The Met, and records the evidence read from the API for every file. - Face and hand tracking in
track.py, for graphics pinned to a body.
Why it exists
An agent writing video code cannot see what it renders. Left alone it ships text cut by the frame edge, captions over a face, the same card sliding into every scene, and audio that clips. I built the skill around that blind spot:
- The audio is the clock. One
roteiro.jsonproduces the voice phrase by phrase, the score and the named cues. No scene holds a hand typed frame number. - The direction is a contract. Before any scene exists the piece declares its concept, its visual law, its motif and the layout and entrance of every scene. The lint rejects a project without it, and rejects one where every scene is laid out the same way.
- The text is measured, not eyeballed. A probe reads every text box from the DOM of each still and the background from the pixels. Cut off, overlapping, too small, low contrast or outside the safe area fails.
- Someone else reviews. The contact sheet goes to a reviewer with a clean context that never saw the code.
- The final file passes a numeric gate. Codec, loudness, true peak, flashes per second, one frame pops, loop seam, contrast against the stills.
What the gates caught while making this reel and a second one built on phone footage
These are real lines from the session, not examples I wrote for the README.
| Gate | What it said | What was wrong |
|---|---|---|
layout.py |
"renderizando 90%" x "milho": dois textos sobrepostos |
A label sat on top of the captions |
layout.py |
letra de 9 px: mínimo legível é 20 px neste formato |
A chip was captured while scaling in from zero |
layout.py |
"Extreme": texto cortado pela borda do quadro |
A 300 px headline ran off the right edge |
layout.py |
"Cor,": contraste 2.9:1 (texto #ff4b1f sobre #f3eee5) |
Orange type on cream paper |
qa.py |
true peak: -0.1 dBTP (máx -1.0) |
AAC encoding raised the peaks of a boosted voice |
qa.py |
flashes por segundo <= 3: pior janela: 4 |
A five colour burst flickered |
| reviewer | “FAIL turns into PASS with the same measured value” | The checklist scene contradicted itself |
| reviewer | “EDIÇAO is missing its tilde” | The reveal mask clipped accents in a condensed font |
Every one of them was fixed before delivery, and four of them became fixes in the skill itself.
The same request without the skill
I ran the same request through the same model with the skill forbidden, plain Remotion only, and no paid voice. It is the honest comparison, so here it is with what I measured.
| Without the skill | With the skill | |
|---|---|---|
| Time to a file | about 8 minutes, 1 render | several times longer, 1 full render plus 1 scene patch |
| Look | strong, and close to the one on the right | strong |
| Voice | none | narration with real word timings, and the cuts follow it |
| Music | a raw ffmpeg synth the agent itself called the weakest point | a CC BY track with the credit recorded, ducked under the voice |
| Loudness | -12.5 LUFS, fails the -14 target | -14, true peak under -1 dBTP |
| Colour tag | none | BT.709 |
| Text and safe area | a headline cut by the right edge mid scene, the frame readout at y 118 under the app interface | measured on every still, 0 failures at delivery |
| Numbers on screen | “frame 105” in the checklist is invented | the counter shows the real frame and the checklist shows real measurements |
| Independent review | none | 16 of 21 frames sent back as FIX; the real defects were fixed, the ones that were mid transition were not |
What I take from it: a good model already makes a good looking frame without help. The skill does not buy taste. It buys sound, a clock, measured text, true numbers and a second pair of eyes, and it costs time.
Gallery
| Prompt | Notes | |
|---|---|---|
| “Something in every dimension and style, alternating between the real world and not, editing worthy of cinema, modern typography, an animated voice.” | ElevenLabs voice (eleven_v4), 11 scenes, 68 s, public domain and CC0 imagery, design.py verdict: own direction, 0 signals. The music was composed with ElevenLabs Music by a script outside the skill, since music.py does not support it. 4 full renders and 1 scene patch |
|
| “A very extravagant 9:16 reel, about 25 s, presenting the skill as a manifesto: this is not editing, it is code.” | ElevenLabs voice, cuts on the beat of a CC BY track, 3D scene, real frame counter. Source. 1 full render and 1 scene patch | |
| “Present the skill itself in 90 s, technique by technique.” | Made with version 1.1, 11 scenes | |
| none | The example that ships in the template, generated by score.py with the local voice |
Install
Claude Code (plugin)
/plugin marketplace add dev-isaacmello/extreme-motion-design
/plugin install extreme-motion-design@extreme-motion-design
Claude Code, Codex, Cursor and others (skills CLI)
npx skills add dev-isaacmello/extreme-motion-design
Claude (claude.ai and the desktop app)
git clone https://github.com/dev-isaacmello/extreme-motion-design
cd extreme-motion-design/skills
zip -r extreme-motion-design.zip extreme-motion-design/
Upload the zip in Customize > Skills. The zip must have the extreme-motion-design/ folder at the top.
Updating
- Plugin:
claude plugin update extreme-motion-design@extreme-motion-designand restart. - skills CLI: run
npx skills addagain. - claude.ai: remove the old skill and upload the new zip.
Use
Ask in plain language. The skill instructions are written in Portuguese and the agent follows them in any language.
a 20 second 16:9 video with a calm pt-BR narration presenting our annual plan launch
a 9:16 reel from this phone video, with the caption following my hand
animate this logo in 4 seconds and loop it seamlessly
How a video is made
| Step | What happens |
|---|---|
| Brief | Goal, audience, format, duration, tone and brand in five lines |
| Brand | brand.py extracts colours, fonts and logo from a site, a repository or screenshots, with the origin of each value. Nothing is invented: what is not found stays empty |
| Voice | voice.py measures the hardware and the agent asks: no voice, ElevenLabs, or a local model that fits the machine |
| Direction | Two or three directions as styleframes, the user picks, and the choice is written to direction.json |
| Score | score.py turns roteiro.json into voice, timeline.json and cues.json. Each phrase is cached by hash, so changing a pause or a cut costs nothing and changing one phrase regenerates only that phrase |
| Music and SFX | music.py fetches a track with a verified licence or generates one locally. sfx.py synthesises the effects. mix.py ducks the music under the voice |
| Scenes | 15 ready blocks (charts, counter, device frame, captions, code window, cursor, lower third and more) plus primitives for camera, morph, rig, kinetic type, tracking |
| Lint | lint.py checks the direction contract, the score and the code in under a second |
| Dailies | stills.cjs renders the key frames in one process, layout.py measures the text, contact_sheet.py builds the sheet |
| Review | A subagent with a clean context retells the message from the frames alone and marks each frame PASS or FIX |
| Render | render.cjs renders scene by scene, patches a single scene without a full render, and outputs reels, square and landscape from the same composition |
| Gate | qa.py on the final file. No FAIL, or no delivery |
Techniques covered: keyframing, easing and springs, camera moves and parallax, kinetic typography, morphing, seamless loops, UI micro interactions, anticipation, overshoot, squash and stretch, smear, speed ramps, match cuts, shape and liquid transitions, mattes, frame by frame, cel animation, stop motion, rigging with IK, lip sync, 3D, compositing, point, plane, face and hand tracking, match moving and rotoscoping.
Requirements
- Node 18 or newer.
- Python 3.10 or newer. Scripts declare their dependencies inline (PEP 723) and run with
uv run. - ffmpeg on the PATH.
Remotion licence
The skill is MIT. Remotion, which renders the video, is source available and not open source. Read this before adopting the skill at work:
- Free for individuals, for companies with up to 3 employees, for non profits and for evaluation.
- From 4 people on, a Company License is required. At the time I checked (2026-10-13) a seat cost US$ 25 per month and a seat is needed for each person who writes Remotion code, including through a coding agent.
- A freelancer or agency that hands over only the final file counts its own headcount. If the client operates the project, the headcounts add up.
- The draft terms for Remotion 5.0 say contractors will count towards team size. 5.0 was not released when I checked.
Sources: LICENSE.md, licence FAQ, pricing. The skill warns the user when the company has more than 3 people.
What the skill runs and accesses
npm installin the video project (Remotion, React, Three from the npm registry).uv runon the scripts inscripts/, which installs the Python dependencies each file declares.voice.pyreads threads, RAM, disk and GPU (nvidia-smi). With--check-keyit makes one read request toapi.elevenlabs.io.score.pyandtts.pysend the script to ElevenLabs only when that voice was chosen, using the key in the project.env.score.py --dryprints the character count first and the paid run needs--yes.tts.pydownloads the Kokoro voice model (about 330 MB) andalign.pydownloads Whispersmall(about 460 MB) on first use.track.py --facedownloads YuNet (230 KB) and--handdownloads the MediaPipe hand model (7.5 MB).roto.py --backend rembgdownloads its segmentation model.music.pyqueries Incompetech and Openverse.stock.pyqueries Wikimedia Commons, the NASA image library, Openverse and The Met, and Pixabay only when you put a key in.env. It downloads the file you pick and strips the audio track of videos.reference.pyonly reads the video file you give it. It does not download from any platform.brand.py --urlfetches the page you name and the stylesheets, fonts and images that page references, and takes two screenshots with a local headless Chrome.--repoonly reads files.- Nothing else is contacted.
Limits
- The agent reviews still frames and numbers. Rhythm and the feel of the motion still need a human eye before publishing.
- The layout probe only sees DOM text. Text drawn on canvas, in WebGL or inside an image is not measured, and text covered by another opaque layer is measured as if it were visible.
- Scene similarity compares 24x24 grey thumbnails. It was calibrated on six videos (medians from -0.08 to 0.71) and I had no repetitive video to calibrate the warning threshold against, so it is conservative.
- The fidelity score measures structure, not quality or content, and its tempo reading is unreliable when a voice sits over the music.
- The design meter thresholds come from practice and were calibrated on a handful of videos. Its verdict is a warning, not a gate.
- A free licence covers copyright only. Recognisable people, trademarks and recent artworks still need permission, and
stock.pycannot detect them. brand.pypicks the accent colour by heuristic. On a monochrome brand it can be wrong or empty, and it says so.- Face tracking fails on profiles and on faces looking down. Hand tracking loses fast gestures.
render.cjs --sceneonly knows what you tell it changed. After editing shared code, render everything.- The rhythm warnings of
qa.pyandlint.pyare heuristics tuned on a few videos. - Only Kokoro is integrated as a local voice. The other models in
assets/tts-models.jsonare recommendations by licence and memory. - The skill instructions are in Portuguese.
Licence
MIT
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add dev-isaacmello/extreme-motion-design