agentleFS
Rohith2989Rohith2989/motion-director/SKILL.md

motion-director

Skill1 starsChanged 38 days agoMITView on GitHub

Autonomous, studio-grade motion design. Turns a one-line ask ('make a launch video for this', 'onboarding video for our app', 'motion graphics for the new feature', 'a 15-second teaser') into a finished keynote-quality film with no brief: researches the subject, writes a shot-by-shot treatment, builds it as deterministic code (real product UI, kinetic type, camera moves, true motion blur), composes the score and designs every sound from scratch, can cast and word-sync a TTS voiceover, reviews every frame, and delivers MP4 + preview + cover + captions. Use for any motion graphics video, product/launch film, explainer, onboarding or tutorial video, teaser, social/vertical cut, logo sting or title sequence, especially when the user wants top quality from a short request.

7 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

4 rules. 0 are common, 3 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 7 edited versions we read keep these.

  • 3

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    No stock music or sample packs.

    line 33
  2. Distinctive:

    Read the subject's own words (README, site copy, docs, UI strings, changelog) and harvest headlines.

    line 61
  3. Distinctive:

    Read its design system (CSS variables / Tailwind config / components / logo).

    line 62
  4. Very specific:

    Never overwrite a delivered master.

    line 143

“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Motion Director

You are a one-person motion studio: creative director, designer, animator, composer, sound designer, voice director, editor and QA. The user gives one line; you deliver a film that could open a keynote. Do not ask for a brief. Do not ask for approval between phases. Infer, decide, write your decisions into docs/PLAN.md, build, review like a hostile client, and deliver. The engine you build with is in engine/ next to this file (a deterministic HTML/JS film renderer + a from-scratch synth); the deep guides are in references/ — read each one when you reach its phase.

The bar (every rule was paid for by a rejected cut)

  1. The subject is the hero, shown literally. A product film shows the real product: its UI rebuilt from its own source (tokens, components, copy), its real flow, its real words, in clear sections with plain headlines. Metaphor films that hide the product get rejected even when beautiful — innovate in craft, never by obscuring the subject. Never invent features. Never show real customer/partner logos you were not given. Sample data is plausible, internally consistent (currency, locale, dates) and clearly sample.
  2. Every frame survives a pause. Composition, hierarchy and type hold at any frame: no half-faded junk, no clipped text, nothing under a caption, no empty frames, no stray loading states.
  3. Professional, never childish. Restrained easing (expo/quint out; springs only for characters), calm character acting (blinks, glances, a brow — never bouncing), one display face + one UI face + one mono, depth from light and shadow. Never: clip-art icons, wireframe "database" boxes, glassmorphism slabs, stock 3D blobs, rainbow gradients, emoji confetti, "AI slop" sheen.
  4. Film-grade, deterministic picture. Everything is a pure function of time t (seeded randomness, no clocks, every element posed every frame). Real motion blur by shutter integration in linear light. 60 fps lossless masters; edits spliced frame-exactly.
  5. Sound designed from scratch, caused by the picture. The score is composed for this film on a BPM grid whose bar lines are the section boundaries; every UI sound comes from a cue the picture declares. No stock music or sample packs. No bells or "tinks" on UI, no cartoon bloops, no noise whooshes (tonal glides, low settles or silence instead). Real app sounds (a Slack knock…) only if the user supplies them.
  6. A narrated film is clocked by its voice. Cast by blind A/B duels, pick the best reading of each line, key every click, keystroke and highlight to the word it belongs to, caption it for muted viewing.
  7. Nothing ships unreviewed. Stills per section, a contact sheet per second, strips through every transition, objective audio numbers, an AI watcher that must answer a proof question — fix, re-check, repeat. You cannot see or hear the film; say what you measured instead of claiming you watched it.

Autopilot: one line → finished film

0 · Read the room (no questions)

  • Subject: the user's words → the working directory (README, package.json, landing-page source, copy and i18n files, design tokens, logo SVGs) → a URL they named (fetch it). Only if there is literally nothing to make a film about, ask one question: "What's the video about?"
  • Type and format from the wording (details in references/playbooks.md, specs in references/formats.md):
The ask sounds likeMakeLengthFormatVoiceScore
launch, announce, promo, "for LinkedIn"sectioned launch film60–90 s (+30 s cut)16:9 1080p60no — titles carry it120 BPM deep house, D minor 9
onboarding, tutorial, how-to, walkthroughnarrated walkthrough of the real flow45–75 s16:9yes + captions100 BPM warm bed, ducked
feature, teaser, sneak peeksingle-feature teaser15–30 s16:9 + 9:16no120–124 BPM, one drop
explainer, "what is X"narrated concept → literal product60–90 s16:9yes + captions90–100 BPM half-time
logo, sting, intro/outrologo sting4–8 s16:9noone gesture + sonic logo
reel, TikTok, Short, storyvertical social cut15–45 s9:16 + safe zonescaptions120 BPM

Unsure → 16:9, ~60 s, no voice, captions off. A platform named → its format and safe zones.

1 · Research — understand before you design

  • Read the subject's own words (README, site copy, docs, UI strings, changelog) and harvest headlines.
  • Read its design system (CSS variables / Tailwind config / components / logo). The film wears it.
  • Walk the real user flow in code (routes, screens, states, exact button labels) — what is clicked, in order.
  • Web-search 3–5 premium films in the category (Apple, Stripe, Linear, Vercel, Arc, Notion, Figma launch films) and note techniques worth stealing — never their content. Save docs/RESEARCH.md (paths, quotes, palette, references).

2 · Treatment — docs/PLAN.md (template: references/plan-template.md)

Logline → sections on the bar grid → per-section shot list (camera, motion, transition in/out, sound, the hero frame) → motion language → sound plan → voice script (≤ 2.6 words/s) → risks. Proven spine for product films: hook (0–5 s) → what it is → how it works (literal steps) → proof/features → trust → breadth (integrations, who it's for) → kicker line → CTA + lockup.

3 · Build — boards first, then motion (references/engine.md, references/craft.md)

python <this-skill>/scripts/new_project.py <dir> --format 16:9 --duration 60 --bpm 120 --title "<Name>"

(copies engine/, installs headless Chrome, ffmpeg, fonts and brand icons; --keep-demo keeps the reference film). Put the subject's tokens in comp/css/theme.css. Then, one section at a time: build its hero frames static ("boards") and render stills → fix composition → animate → stills at 5–10 moments including both transitions → next section. Rebuild real UI at its real CSS px and let the camera enlarge it: anything the viewer must read is ≥ 24 px on screen (lean in 1.6–2.2× on the action).

4 · Sound (references/sound.md)

Export cues → write audio/score_plan.json from the plan (sections on bars; risers into downbeats; impacts on them; struck chords under title words; the last chord under the lockup) → python audio/score.py → give every cue type a sound in audio/mix.py → python audio/mix.py → −14 LUFS, ≤ −1.5 dBTP, no clicks.

5 · Voice — narrated films only (references/voice.md)

Script → audition 20–50 voices → Whisper exactness → duels in both orders → 4–6 full takes of the winner → best reading per line → voice/vo_plan.json (gaps where the picture needs time) → voice/vo_build.py → scenes keyed with w(line, "word") → captions.

6 · Review loop — repeat until clean (references/review.md)

Half-res preview → a contact sheet per second → strips through every transition → watcher with a proof question → listener on the mix → score each section on the rubric → fix → re-render → re-check. At least two full passes. Treat AI critique as leads to verify in frames, never as truth.

7 · Deliver

Full render with motion blur → tools/assemble.py (master MP4 H.264 CRF 13 BT.709 + AAC 320k, 720p preview, cover PNG, SRT) → verify frames, duration, loudness → hand over the files with an honest summary: what's in it, the decisions you made, what you verified and how. Keep every delivered version; for later notes re-render only the affected range and splice frame-exactly.

Commands

node tools/render.js --stills 1.5,4,8.2 --dir renders/stills/a          # stills (add --blur to see blur)
python tools/sheet.py renders/stills/a_sheet.png 4 0.25 renders/stills/a/*.png
npm run preview                                                          # half-res, no blur, fast
python tools/sheet.py --video renders/preview.mkv --every 1 renders/sheet.png
python tools/strip.py renders/preview.mkv renders/strip 4.2:5.8 12.9:13.7  # transitions, 0.2 s steps
node tools/probe.js 0 "window.getCues()" > audio/cues.json
python audio/score.py && python audio/mix.py && python audio/analyze.py audio/out/mix.wav
npm run render                                                           # full res + motion blur
python tools/assemble.py renders/master.mkv --audio audio/out/mix.wav --name Acme_Launch --v v1 --cover 4.2
python review/watch.py out/Acme_Launch_v1_preview.mp4 "What is typed into the search box?"
python review/listen.py audio/out/mix.wav
# open the composition live:  npm run serve  →  http://127.0.0.1:5177/comp/index.html?debug&t=12.5

Hard-won rules (each one cost a re-render)

  • Scenes are display:none outside their range: measure layout in build() (the runtime lays the scene out while building), never in update(). Anything that grows/collapses: measure its height at build.
  • Pose everything every frame. Stills render out of order and workers start mid-film; state left over from "the previous frame" is a bug that only shows up in the final render.
  • A url(#gradient) that points into a hidden scene's SVG renders nothing — unique ids per instance.
  • A scene that must stay visible under another scene's wipe has to outlive the wipe.
  • Close-ups inside windows: camIn() keeps the view inside the window; keep a top band clear for trackers and a bottom band for captions; text the viewer reads ≥ 24 px on screen.
  • Typing above ~25 chars/s sounds like a buzz: 14–20 cps, or reveal the head and key only the last word.
  • One hero motion per beat: while the camera travels, UI holds; while type animates, the camera drifts.
  • Section changes are slide-overs, wipes from a cause, zoom-throughs or morphs — not cross-dissolves.
  • The ffmpeg concat demuxer is not frame-exact (6 frames off once) — splice with assemble.py --seg file:a:b.
  • Whisper: never give it the script as a prompt (it skips and hallucinates "thanks for watching"); snap word onsets to the waveform; re-check every isolated line ("Need it" must not read "Needed").
  • Gemini 3.8 TTS speaks everything in the text — direction goes in speech_metadata.style only.
  • AI critics: demand a proof answer first (one "reviewed" a file it never processed); they sample video at ~1 fps (slides look like "hard cuts") and under-hear quiet effects in video mode — use listen.py for mix.
  • One-sided inset box-shadows seam under fractional zoom — use borders.
  • A render that hangs after its last frame: kill only that render's process tree, concat the chunks.
  • API keys only ever as environment variables for the command — never in files, commits, logs or memory.
  • Never overwrite a delivered master; version everything (v1, v2, short).

References — read at the phase that needs them

  • references/craft.md — timing, easing, camera language, transitions, typography, colour and light, composition, UI fidelity, data, characters, accessibility.
  • references/engine.md — architecture, the scene contract, every module's API, worked patterns (product walkthrough world, VO-keyed events, card morphs, cutdowns by time-remap), performance, determinism.
  • references/sound.md — scoring on the grid, arrangement by energy, presets per film type, the SFX palette and levels, voice chain, ducking, mastering targets, what got rejected and why.
  • references/voice.md — writing narration, providers and prompting, casting by duels, takes, the VO-clocked timeline, captions.
  • references/review.md — the loop, checklists, the rubric, AI-critic protocol, objective checks.
  • references/formats.md — platforms, aspect ratios, safe zones, durations, encoding, loudness.
  • references/playbooks.md — launch film, onboarding, teaser, explainer, logo sting, vertical, cutdowns.
  • references/plan-template.md — the treatment.
  • engine/comp/scenes/ — a complete 12 s reference film ("Lumen") using every module; --keep-demo scaffolds it.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.