# Motion Showreel Skill **Stunning short videos made entirely in code: motion showreels, product films, UI motion, kinetic typography, logo stings, generative loops and era-spanning retrospectives, with optional beat-synced music.** [中文文档](./README.zh-CN.md) · [Back to collection root](../../README.md) ![Motion Showreel Skill](../../dist/imgs/covers/motion-showreel.webp) --- ## What Is This? `motion-showreel` turns one sentence into a finished short video (MP4 plus editable source). The kind of video it makes is mostly graphics, type or interface animation. The agent writes a web page whose picture is a pure function of time, renders it frame by frame, scores it on the same timeline and checks the result before handing it over. It is designed for: - Motion showreels and portfolio pieces - Product teasers and launch films (from the user's own facts and screenshots) - UI motion demos: morph chains, micro-interactions - Kinetic typography and beat-synced quote cards - Logo stings, title sequences and channel bumpers - Generative-art loops and data "number drops" - Era-spanning retrospectives that change medium as they go (pixel → vector → 3D …) Typical length is 5–60 s; music-driven pieces without narration can run to about 2 minutes. Out of scope: narrated explainers (use [`web-video-presentation`](../web-video-presentation)), web pages and prototypes (use [`web-design-engineer`](../web-design-engineer)), photoreal people, live footage and editing existing video. --- ## Showcase Every clip below was made by an agent with this skill from a short request. For most of them the request was just a style and "the rest is up to you". These previews are 4-second, 12 fps excerpts; the real renders are 1920×1080 at 30 fps with sound.
Motion Showreel trailer: a new medium every beat
Motion Showreel trailer · 80 s
The skill's own trailer. One orange dot is redrawn in a new medium every beat (ink, paper, risograph, CRT, collage, glass, clay …), then bursts into a wall of 22 live styles. The synthesized score changes instruments with the medium.
AFTERGLOW synthwave title
AFTERGLOW · 19 s · synthwave-neon
Title sequence for a fictional album. The camera drives through neon gates; after the last gate there is half a beat of black, then the chrome title springs up from the horizon on the drop.
boink soft 3D chain reaction
boink · 18 s · soft-3d-toy
A one-take chain reaction (after Honda's "Cog"). Every domino plays a marimba note; the jelly's slam sends a squash wave through the world, and the opening ball lands as the dot of the i.
LAST STROKE ink stick-figure game trailer
LAST STROKE · 30 s · custom "stick ink" style
Trailer for a fictional game where every line you draw becomes real. The single stroke through 40 enemies is followed by the film's only beat of total silence; then the enemies burst into ink and the stroke becomes the title.
UMBRA cinematic eclipse title
UMBRA · 27 s · cinematic-title
Opening titles for a fictional film about a total eclipse, letterboxed at 2.39:1. A beat of absolute silence, then the last Baily's bead flares into the diamond ring and the title develops inside the moon. The piano is a sampled Salamander grand (tier 2) with synthesized trailer sound design (booms, braam) layered on top.

What you get for every piece
out/final.mp4 + out/poster.png
brief.md: a reusable structured prompt
index.html / timeline.js / score.mjs: editable source
sh build.sh: rebuild everything, or one segment
qa/: contact sheets, phone-size check, per-shot motion, text-framing marks, waveform and spectrum
Technical checks (all PASS) and an honest review log
--- ## Core Ideas - **Picture = a function of time.** The page exposes a deterministic `window.render(t)` (no `Math.random`, timers, rAF or CSS animation). Playwright captures every frame and ffmpeg encodes the MP4. Motion blur (`--subframes`), supersampling (`--dpr`) and film grain (`--grain`) are render flags, not page code. - **One timeline for picture and sound.** `timeline.js` holds every cut, hit and cue; the page and the score both import it, so hits land on the exact frame. - **Benchmark first, then three structures.** Before anything is drawn, the agent picks 1–2 reference works (what to learn, what not to copy) and writes down three candidate structures. A reference video can be measured: `inspect.mjs grid` finds its cuts and the beat grid they sit on, `heat` shows where each segment moves. The first idea that comes to mind is usually the style's cliché. - **A style library that is a starting point, not a menu.** 28 styles, each with fixed rules for look, palette, type, motion, camera grammar, sound palette, native moves and pitfalls. Every style also lists 8–12 recognition signals to pick 2–3 from and spells out its own cliché, so choosing "synthwave" does not mean the same grid-and-sunset every time. Use one, adapt it, mix two, or write your own from the template. - **Sound gets its own direction.** The brief covers sound too: a reference, groove, harmony, palette and dramatic arc. A list of audio defaults keeps pieces from all ending up with the same song. - **One checkpoint, then all-out.** The only stop is the style-frame review. If no style was given, the agent offers three deliberately different directions, one key frame each. After that it builds autonomously. - **Technical acceptance is separate from taste.** Programmatic checks (size, fps, duration, frame count, black frames, loudness, true peak, loop seams, determinism) must all pass. Measured review material sits next to them without blocking anything: per-shot motion with sudden jumps and one-frame flashes, and a text-framing pass (text cut by the frame, overlapping, in the safe zone, too small). The agent's review notes help the user watch faster; they never replace the user's own viewing. - **Free mode.** Say "go all out" or "surprise me" and the agent keeps only the baseline rules and the technical pipeline. Style, structure and technique are left to the model. --- ## Workflow ```text 0 Environment check (once) 1 Ask once ─────────── max 5 questions; anything inferable is not asked 2 brief.md ─────────── benchmark → format + style → Reel Read → beat grid + shot list + forbidden list 3 Style frames ─────── 🛑 the only checkpoint: style given → 3 frames; no style → 3 directions × 1 frame 4 Build ────────────── timeline → shot by shot → stills → determinism → proxy → master 5 Sound (optional) ─── synthesized / user's track / silent 6 Acceptance ───────── technical checks (must PASS) + review notes for the user 7 Delivery ``` --- ## Style Library 28 styles in 8 groups: graphics & type, interface & product, retro & screens, 3D & material, generative & abstract, illustration & comics, handmade, cinematic. A few of them, rendered by the skill:
swiss-editorial
swiss-editorial
ink-wash
ink-wash
risograph-print
risograph-print
editorial-collage
editorial-collage
isometric-infographic
isometric-infographic
liquid-shader
liquid-shader
data-motion
data-motion
generative-geometry
generative-geometry
pixel-game
pixel-game
synthwave-neon
synthwave-neon
paper-cut
paper-cut
minimal-ui
minimal-ui
comic-pop
comic-pop
flat-vector
flat-vector
guochao
guochao
painterly
painterly
glitch-digital
glitch-digital
soft-organic
soft-organic
Also in the library: kinetic-brutalist · dark-keynote · glass-material · soft-3d-toy · particle-field · crt-vhs · terminal-ascii · crayon-storybook · cinematic-title · mixed-media-era. See references/styles/INDEX.md for the directory, the three-direction rule and how to mix styles. --- ## Sound | Tier | Engine | Good for | |---|---|---| | 1 · built-in synth (default) | `score.mjs`, zero-dependency and fully deterministic. Drums and hand percussion, bass, pads, plucks, mallets (marimba / glockenspiel / kalimba / steel pan), organ, formant choir, FM bells, ambience beds (tape, vinyl, wind, rain), swing / step rhythms, sidechain, bitcrush and tape wow | Electronic, UI, retro, abstract, handmade, lo-fi | | 2 · Tone.js | `score.tone.js`, rendered offline in headless Chromium. Sampled instruments (Salamander grand piano, CC BY), convolution reverb, chorus / phaser / distortion | Cinematic, premium product, anything that needs a real instrument and space | | Your track | `audio.mjs beats` detects BPM, beats, downbeats and drops (librosa when available); SFX are layered on top | Existing music | The two tiers can be layered (Tone.js music underneath, synthesized SFX on top, mastered once). Every mix is mastered to −14 LUFS / −1 dBTP. The agent can't hear, so `audio.mjs check` reports loudness, band balance and silences, measures the "breath" before each declared drop, and draws a waveform and spectrum for the agent to look at. --- ## What It Ships ```text skills/motion-showreel/ ├── SKILL.md workflow, baseline rules, tool cheat sheet ├── README.md / README.zh-CN.md ├── manifest.json ├── references/ │ ├── formats.md 9 formats (showreel, product film, UI motion, kinetic type, logo, loop, data, era, green-screen) │ ├── styles/ INDEX.md + _template.md + 28 style files │ ├── craft.md rhythm, motion, transitions, camera, type, colour, texture, signature moments, default-look blocklist │ ├── sound.md sound direction, synth API, Tone.js, arcs, groove / harmony vocabulary, mixing, audio defaults │ ├── stack.md page contract, determinism, per-tech pitfalls, fonts, multi-format, performance │ ├── recipes.md ready-made snippets (masked type, morph chains, particle type, seamless loops, WebGL post, canvas pseudo-3-D …) │ ├── brief-template.md the structured prompt every piece starts from │ ├── review.md technical checks, review sheet, independent review, common problems, delivery checklist │ └── field-notes.md what proved to work in real pieces, with evidence (written back after each delivery) ├── scripts/ │ ├── setup.sh · check-env.mjs · scaffold.sh │ ├── render.mjs stills, sheets, three directions, poster, determinism, text framing, proxy, master │ ├── audio.mjs build · check · beats · samples · mux │ ├── inspect.mjs qa · sheet · phone · strip · frames · motion · loop · grid · heat │ ├── lib/ synth, Tone.js renderer, FFT, browser, project, frame analysis, text hook │ └── test/ regression tests (npm test) └── assets/starter/ index.html · motion.js · timeline.js · score.mjs · score.tone.js · score.layer.mjs · build.sh ``` --- ## Quick Start Install the skill (see the [collection README](../../README.md#install)), then run the one-time setup from the skill folder: ```bash sh scripts/setup.sh # Playwright + Chromium + Tone.js, then an environment check ``` Requirements: **Node 18+** and **ffmpeg** on `PATH`. The setup script never installs system software for you. Then just ask: ```text Make a 15-second motion piece for our launch. Go all out. Make a logo sting for "Garden", swiss-editorial style. Turn these three screenshots into a 20-second product teaser, with music. A 6-second seamless generative loop, no sound. ``` The agent scaffolds `/`, shows you style frames once, then builds, scores, checks and delivers. To rebuild or tweak later: ```bash sh /build.sh # full rebuild with the spec at the top of build.sh node scripts/render.mjs --start 6 --duration 3 --out out/seg.mp4 # re-render one segment ``` Tools ship with their own regression tests: `cd scripts && npm test`.