Motion design film skill

Motion design film — motion-design-film — Demo/output image published by the author (repo README): frames from the example film «Orbit»

Illustration · not a resultFrom the artkruglov/motion-design-film README — shows the whole collection, not only this skill.source ↗

Direct and render a 30–180 second motion-design film for anything — a product, app, startup, feature launch, service, idea, research result, school project, game or personal story: kinetic typography, animated mock UI, charts, maps, characters and transitions on a music grid, an original procedural score, an AI voiceover (OpenRouter TTS — ElevenLabs v4, Gemini TTS…) verified by speech-to-text, karaoke subtitles and a ducked mix, all rendered to MP4 by code (no video editor, no stock).

by artkruglov·MIT license·★ 2 Stars on the repo·GitHub ↗

Use now

Files of Motion design film

artkruglov/main1 file
SKILL.md
Show the full text120 lines

Motion-design film

You are the director, motion designer, composer and editor of a short film — and every frame of it is rendered by code. The pipeline was battle-tested on real films; each step exists because skipping it once produced a visible defect.

brief ─► story & beat sheet ─┬─► music.py ────────────────┐
                             ├─► tts.py ─► stt_check.py ──┼─► mix.py ──────────┐
                             └─► scenes ─► timeline.js ─► render.mjs ─────────┴─► finalize.sh ─► MP4
                                   ▲
                    optional footage: capture.mjs + clock.js (live site / app / game)

Scripts are in scripts/ (run them from your work folder; they read and write relative to the current directory). The compositor template is assets/comp-template/. One-time setup: npm install in the skill folder, pip install numpy scipy, Chrome and ffmpeg on PATH.

1. Brief: what is the one feeling?

Before any pixels, answer in a sentence each: what is it, who watches (a class of kids, investors, users in a feed, a jury), what should they feel and do after 2 minutes. A film about a calm to-do app should feel calm after the chaos; a game trailer should feel like a ride; a research result should feel like a revelation. Pick the language of the audience.

Collect the raw truth: real names, real numbers, real features, real screenshots or a live URL. Invented numbers in a promo film are a liability — use placeholders the user will replace and say so.

2. Story on a music grid

Write a beat sheet on a 120 BPM grid (bar = 2 s): cuts land on even seconds, accents on half-seconds, the hardest hits on music impacts. The template follows the spine that works for almost anything:

time beat purpose
0–8 Hook — a question or tension the viewer feels stop the scroll
8 Name — logo slam on the first impact who we are
8–24 Problem → Turn — the messy "before", then it collapses into one point why it matters
24–40 How — 3 numbered steps with (mock) screens it's simple
40–56 What — features on the beat, a grid of tiles it's rich
56–64 Feeling — one calm sentence, a marker highlights the key word the emotional core
64 Proof — big numbers on the second impact it's real
64–88 Growth / journey — chart, route, map it goes somewhere
88–104 People — avatars connect into a network it's for us
104–112 Pulse — a word per beat energy peak
112–120 Action — logo, tagline, CTA, URL what to do now

Adapt freely: a game swaps Problem for a cinematic montage, a research film swaps Features for a chart sequence, a 30-second ad keeps Hook → Name → What → Action. Voiceover: one short line per beat, ≤2.5 words/s (≈200–260 words per 2 minutes), silence around the big hits.

3. Music — scripts/music.py

python3 scripts/music.py → the default 120-s score (A-minor → C-major anthem, impacts at 8/64/112 s). Different length/structure: --print-default-plan > plan.json, edit sections (in bars) and impacts, --plan plan.json. The plan and the beat sheet must agree.

4. Voice — scripts/tts.py → scripts/stt_check.py

export OPENROUTER_API_KEY=…          # or ./.openrouter_key (gitignored)
python3 scripts/tts.py script.json   # vo/NN.mp3 + vo/subs.json, warns about overlaps
python3 scripts/stt_check.py script.json

script.json = model, voice, lines {start, text, spoken} (spoken may carry ElevenLabs v4 audio tags like [excited]). Fix overlaps by moving start, then tts.py --retime. Always run stt_check.py — it is the only reliable way to know nothing was read aloud wrong when nobody in the loop listens. Details, models, voices, key handling: references/voice.md.

5. Scenes — assets/comp-template/ (the heart of it)

Copy the template to comp/. engine.js is a tiny deterministic motion engine (every frame is a pure function of time). timeline.js is the film: edit TEXT, COLORS, CLIPS and times. It already contains a complete 120-s film made only of motion graphics — living gradient backgrounds, kinetic type, notification chaos, a collapse-to-a-point transition, numbered steps with animated skeleton UI, flipping feature tiles, a marker highlight, odometers, a growing chart with a drawn line, a rocket on a route, a network of people with data pulses, a beat-synced word montage and a CTA end card. Render it as is to see the standard you're aiming for.

Read references/motion-design.md before designing scenes: timing, easing, hierarchy, layering, colour, type, transitions, and how to invent new scenes that still feel like one film.

Real visuals make it stronger when they exist:

  • a live website/app/game — film it frame-perfectly with scripts/capture.mjs (virtual clock, see references/capture.md; example: examples/capture.example.mjs on examples/live-app-demo/);
  • screenshots or photos — drop them into scenes as <img> with slow Ken Burns moves;
  • existing clips — put them in footage/ and name them in CLIPS; mock windows, phones and cards play them instead of the skeleton UI.
node scripts/render.mjs sheet 0.5 120 2.5   # contact_sheet.png — LOOK at it, every iteration
node scripts/render.mjs part 24 40          # fast check of one beat
node scripts/render.mjs                     # full film → video_silent.mp4 (~3–5 min for 120 s)

6. Mix and deliver

python3 scripts/mix.py                         # music ducked under voice, -14 LUFS → mix.wav
bash scripts/finalize.sh "Orbit — launch film"  # master + light copy + final_sheet.png

Look at final_sheet.png before handing over: text cut at the edges, two titles fighting, subtitles over giant type, dead seconds where nothing moves, clips frozen on their first frame. Then present the film beat by beat in plain words, give both file paths, and mention what you'd improve and anything that cost money (TTS is a few cents).

Pitfalls

references/troubleshooting.md — symptoms → causes → fixes (white/black frames after a time-lapse, clips frozen on frame 0, wrong server, overlapping voice, fonts, %20 paths…).

1---
2name: motion-design-film
3description: "Direct and render a 30–180 second motion-design film for anything — a product, app, startup, feature launch, service, idea, research result, school project, game or personal story: kinetic typography, animated mock UI, charts, maps, characters and transitions on a music grid, an original procedural score, an AI voiceover (OpenRouter TTS — ElevenLabs v4, Gemini TTS…) verified by speech-to-text, karaoke subtitles and a ducked mix, all rendered to MP4 by code (no video editor, no stock). Optional real footage: frame-perfect capture of a live website, web app or browser game. Use whenever someone asks for a motion design / анимационный / моушн ролик, promo, explainer, launch or pitch video, trailer, teaser, showreel, video presentation of an idea, «видео про продукт/идею», «сделай классный ролик», or wants their idea or app turned into a cinematic video with voice and music — even if they never say \"motion design\"."
4compatibility: "Node 18+ with playwright-core and Google Chrome; ffmpeg; Python 3 with numpy and scipy; an OpenRouter API key for the voice (optional — a music-only cut works without it)."
5---
6 
7# Motion-design film
8 
9You are the director, motion designer, composer and editor of a short film — and every frame
10of it is rendered by code. The pipeline was battle-tested on real films; each step exists
11because skipping it once produced a visible defect.
12 
13```
14brief ─► story & beat sheet ─┬─► music.py ────────────────┐
15 ├─► tts.py ─► stt_check.py ──┼─► mix.py ──────────┐
16 └─► scenes ─► timeline.js ─► render.mjs ─────────┴─► finalize.sh ─► MP4
17 ▲
18 optional footage: capture.mjs + clock.js (live site / app / game)
19```
20 
21Scripts are in `scripts/` (run them from your work folder; they read and write relative to the
22current directory). The compositor template is `assets/comp-template/`. One-time setup:
23`npm install` in the skill folder, `pip install numpy scipy`, Chrome and ffmpeg on PATH.
24 
25## 1. Brief: what is the one feeling?
26 
27Before any pixels, answer in a sentence each: **what is it**, **who watches** (a class of kids,
28investors, users in a feed, a jury), **what should they feel and do after 2 minutes**. A film
29about a calm to-do app should *feel* calm after the chaos; a game trailer should feel like a
30ride; a research result should feel like a revelation. Pick the language of the audience.
31 
32Collect the raw truth: real names, real numbers, real features, real screenshots or a live URL.
33Invented numbers in a promo film are a liability — use placeholders the user will replace and say so.
34 
35## 2. Story on a music grid
36 
37Write a beat sheet on a **120 BPM grid (bar = 2 s)**: cuts land on even seconds, accents on
38half-seconds, the hardest hits on music impacts. The template follows the spine that works for
39almost anything:
40 
41| time | beat | purpose |
42|---|---|---|
43| 0–8 | **Hook** — a question or tension the viewer feels | stop the scroll |
44| 8 | **Name** — logo slam on the first impact | who we are |
45| 8–24 | **Problem → Turn** — the messy "before", then it collapses into one point | why it matters |
46| 24–40 | **How** — 3 numbered steps with (mock) screens | it's simple |
47| 40–56 | **What** — features on the beat, a grid of tiles | it's rich |
48| 56–64 | **Feeling** — one calm sentence, a marker highlights the key word | the emotional core |
49| 64 | **Proof** — big numbers on the second impact | it's real |
50| 64–88 | **Growth / journey** — chart, route, map | it goes somewhere |
51| 88–104 | **People** — avatars connect into a network | it's for us |
52| 104–112 | **Pulse** — a word per beat | energy peak |
53| 112–120 | **Action** — logo, tagline, CTA, URL | what to do now |
54 
55Adapt freely: a game swaps Problem for a cinematic montage, a research film swaps Features for
56a chart sequence, a 30-second ad keeps Hook → Name → What → Action. Voiceover: one short line
57per beat, ≤2.5 words/s (≈200–260 words per 2 minutes), silence around the big hits.
58 
59## 3. Music — `scripts/music.py`
60 
61`python3 scripts/music.py` → the default 120-s score (A-minor → C-major anthem, impacts at
628/64/112 s). Different length/structure: `--print-default-plan > plan.json`, edit sections (in
63bars) and impacts, `--plan plan.json`. The plan and the beat sheet must agree.
64 
65## 4. Voice — `scripts/tts.py` → `scripts/stt_check.py`
66 
67```bash
68export OPENROUTER_API_KEY=… # or ./.openrouter_key (gitignored)
69python3 scripts/tts.py script.json # vo/NN.mp3 + vo/subs.json, warns about overlaps
70python3 scripts/stt_check.py script.json
71```
72 
73`script.json` = model, voice, lines `{start, text, spoken}` (`spoken` may carry ElevenLabs v4
74audio tags like `[excited]`). Fix overlaps by moving `start`, then `tts.py --retime`. Always run
75`stt_check.py` — it is the only reliable way to know nothing was read aloud wrong when nobody in
76the loop listens. Details, models, voices, key handling: `references/voice.md`.
77 
78## 5. Scenes — `assets/comp-template/` (the heart of it)
79 
80Copy the template to `comp/`. `engine.js` is a tiny deterministic motion engine (every frame is
81a pure function of time). `timeline.js` is the film: edit `TEXT`, `COLORS`, `CLIPS` and times.
82It already contains a complete 120-s film made **only of motion graphics** — living gradient
83backgrounds, kinetic type, notification chaos, a collapse-to-a-point transition, numbered steps
84with animated skeleton UI, flipping feature tiles, a marker highlight, odometers, a growing chart
85with a drawn line, a rocket on a route, a network of people with data pulses, a beat-synced word
86montage and a CTA end card. Render it as is to see the standard you're aiming for.
87 
88Read `references/motion-design.md` before designing scenes: timing, easing, hierarchy, layering,
89colour, type, transitions, and how to invent new scenes that still feel like one film.
90 
91Real visuals make it stronger when they exist:
92- **a live website/app/game** — film it frame-perfectly with `scripts/capture.mjs` (virtual clock,
93 see `references/capture.md`; example: `examples/capture.example.mjs` on `examples/live-app-demo/`);
94- **screenshots or photos** — drop them into scenes as `<img>` with slow Ken Burns moves;
95- **existing clips** — put them in `footage/` and name them in `CLIPS`; mock windows, phones and
96 cards play them instead of the skeleton UI.
97 
98```bash
99node scripts/render.mjs sheet 0.5 120 2.5 # contact_sheet.png — LOOK at it, every iteration
100node scripts/render.mjs part 24 40 # fast check of one beat
101node scripts/render.mjs # full film → video_silent.mp4 (~3–5 min for 120 s)
102```
103 
104## 6. Mix and deliver
105 
106```bash
107python3 scripts/mix.py # music ducked under voice, -14 LUFS → mix.wav
108bash scripts/finalize.sh "Orbit — launch film" # master + light copy + final_sheet.png
109```
110 
111Look at `final_sheet.png` before handing over: text cut at the edges, two titles fighting,
112subtitles over giant type, dead seconds where nothing moves, clips frozen on their first frame.
113Then present the film beat by beat in plain words, give both file paths, and mention what you'd
114improve and anything that cost money (TTS is a few cents).
115 
116## Pitfalls
117 
118`references/troubleshooting.md` — symptoms → causes → fixes (white/black frames after a
119time-lapse, clips frozen on frame 0, wrong server, overlapping voice, fonts, %20 paths…).
120 

Discussion

Alternatives

ImpeccableUse when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.Design & UI · Apache-2.0Apple designApple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing gesture-driven UI, spring animations, drag/swipe/sheet interactions, momentum and interruptible transitions, translucent materials and depth, typography (optical sizing, tracking, leading), reduced-motion, or the design foundations (feedback, spatial consistency, restraint) behind Apple-style interfaces.Design & UI · MITBuilding AnimationsBuild an animation from scratch, making the decisions in the order that determines whether it feels right — should it animate at all, what purpose, which tool, which properties, which curve and duration, how it interrupts, how it exits. Writes the implementation. Use when asked to animate something, add motion, make a component feel alive, or build a transition. For critiquing existing motion use review-animations; for auditing a whole codebase use improve-animations.Design & UI · MITBreakRenders a component you choose in every state and scenario on a temporary page and stress tests it.Design & UI · MIT