Hand Codex or Claude a brief. Get a motion graphic in one HTML file.
A Codex and Claude Code skill that turns a brief and reference material — docs, PDFs, numbers, screenshots, URLs — into a beat-synced, 1920×1080 canvas motion graphic with synthesized music, a scrubbable player that works on phones, and automated visual checks.
English · 한국어

The bundled demo (24 s, 5 scenes), two stills per scene — generated by the skill’s own verification script.
The first three samples were made with v0.4.0: Claude Opus 5.5 and Claude Sonnet 5.5 each made one film from the same prompt, so you can compare them side by side. Codex Motion Studio was also remade with v0.4.0, retaining its original 30-second, seven-scene brief. The videos below are recorded from the HTML with record.js (sound on 🔊); the ▶ links open the interactive HTML itself. Each folder in samples/ also keeps the sourced facts.md, the storyboard.md the agent wrote and, for the v0.4.0 films, the review_log.md of the scored critique rounds. The Claude samples had one storyboard approval before building; the Codex remake retains the existing sample’s story under the remake request.
Opus 5.5 — a laptop lid collecting stickers
https://github.com/user-attachments/assets/cff67aee-17bd-4aff-a487-eba07781b96a
▶ Play live (한국어) · source · 7 scenes, electro groove at 128 BPM
Sonnet 5.5 — a capsule-toy machine
https://github.com/user-attachments/assets/bcf7a0ce-7537-4bf6-90e6-34d1f37131d9
▶ Play live (한국어) · source · 7 scenes, electro groove at 128 BPM
Cost and time with three critique rounds each: Opus 5.5 $17.06 in 52 min · Sonnet 5.5 $9.43 in 41 min.
Opus 5.5 — a golden time machine
https://github.com/user-attachments/assets/0ccf1637-1888-45f5-b94c-a544b3f66c2b
▶ Play live (한국어) · source · 9 scenes, soft groove at 120 BPM, every number sourced to NASA
Sonnet 5.5 — the observatory unfolding, step by step
https://github.com/user-attachments/assets/8c317f24-4814-454c-8190-1673ae609434
▶ Play live (한국어) · source · 9 scenes, soft groove at 96 BPM, every number sourced to NASA
Cost and time with three critique rounds each: Opus 5.5 $19.24 in 58 min · Sonnet 5.5 $9.57 in 44 min.
Opus 5.5 — one brew bar, read off the scale
https://github.com/user-attachments/assets/14931d4c-3f9e-4431-8ff3-78e5b3bbf71d
▶ Play live (한국어) · source · 7 scenes, soft groove at 104 BPM, recipe from the SCA, technique from Hario
Sonnet 5.5 — the cup fills as you learn
https://github.com/user-attachments/assets/b40f14da-2def-4fda-ba0b-bcc3791f79fe
▶ Play live (한국어) · source · 7 scenes, soft groove at 100 BPM, recipe from the SCA, technique from Hario
Cost and time with three critique rounds each: Opus 5.5 $18.79 in 57 min · Sonnet 5.5 $9.96 in 50 min.
Download MP4 · English · 한국어 · Critique log
▶ Play live (한국어) · source · 7 scenes, electro groove at 128 BPM, remade with Codex using v0.4.0
The videos show the English version; the ▶ links have a Korean one too.
electro, soft, pulse, none) plus a palette of effects (slam, scan, riser, stamp, laser, error → correct…).facts.md, big metrics get a same-scale companion metric, and rounding stays consistent.| Clean style (same scenes, restyled) | Phone portrait | Phone landscape |
|---|---|---|
![]() |
![]() |
![]() |
The same skills/motion-graphic folder supports both agents, including the engine, references and scripts.
With the skills CLI, one command installs the skill for Claude Code, Codex and other supported agents:
npx skills add JakeB-5/motion-graphic-skill --skill motion-graphic
It installs into the current project by default; add -g to install for your user instead. The sections below cover the agent-specific alternatives.
When you open this repository in Codex, .agents/skills/motion-graphic links to the shared skill so it can be discovered locally. To use it in other projects, copy it to your personal skills directory (macOS/Linux/WSL):
git clone https://github.com/JakeB-5/motion-graphic-skill.git
mkdir -p ~/.agents/skills
cp -R motion-graphic-skill/skills/motion-graphic ~/.agents/skills/
If you already cloned the repository, skip git clone. For installation in just one other project, use that project’s .agents/skills/ instead of ~/.agents/skills/. Copy the entire skill folder, including assets, references, scripts and agents. Choose one installation scope to avoid duplicate entries. If the skill does not appear, restart Codex. See the official skill discovery documentation.
As a plugin:
/plugin marketplace add JakeB-5/motion-graphic-skill
/plugin install motion-graphic@motion-graphic-skill
Or manually — copy (or symlink) the skill into your skills folder:
git clone https://github.com/JakeB-5/motion-graphic-skill.git
mkdir -p ~/.claude/skills
cp -R motion-graphic-skill/skills/motion-graphic ~/.claude/skills/
Dependencies (recommended — the skill uses them to check its own work):
assemble.py)puppeteer-core, installed once next to the script:# Codex personal installation
npm i --prefix ~/.agents/skills/motion-graphic/scripts puppeteer-core@23
# Claude Code manual installation
npm i --prefix ~/.claude/skills/motion-graphic/scripts puppeteer-core@23
Run only the command for your installation. For a repository-local skill, use skills/motion-graphic/scripts as the prefix from this repository root; for a plugin installation, use the installed skill’s scripts directory.
Chrome is found automatically on macOS, Linux and Windows; otherwise set CHROME=/path/to/chrome.
In Codex, invoke the skill explicitly with $motion-graphic:
$motion-graphic Make a 30-second product intro from README.md, in English and Korean.
Both agents can also select the skill automatically for requests like:
Make a 30-second motion graphic introducing our product from README.md and docs/metrics.csv — it opens my lightning talk.
여기 포트폴리오 PDF랑 지원 공고 있어. 지원서에 넣을 1분짜리 모션그래픽 만들어줘. 끝에는 PDF 링크.
Turn these three case studies into a 15-second intro for our investor update. Keep it calm and corporate.
Codex or Claude will ask once for anything essential that’s missing (audience, length, link), show a storyboard for approval, build, verify, and hand you the file.
facts.md: each fact and number that will appear, with its source.assemble.py splits the engine into small parts (config, style, copy, geometry, scenes, plan…); the agent fills them and reassembles with a syntax check. The player, audio and mobile layout come from the engine untouched.check.js renders contact sheets (full and phone size), cut strips and a determinism check, and the agent fixes failures until there are none. Then a scored critique: a reviewer with a fresh context — or the agent itself when the host can’t start one — fills a defect table with file-and-time evidence, scores seven axes, and the agent fixes the three worst problems. It ships when no defect fails, every axis reaches 8 and at least two rounds have run — or after three reviewed rounds, with the open issues listed in review_log.md and the delivery report.record.js is checked with ffprobe before it is reported.Every frame is a pure function of time (render(t)), so scrubbing, freezing a frame and verification stills all show exactly what playback shows.
?t=12.5 |
freeze on a frame (also #t12.5) |
?lang=en |
switch language when the piece has several |
?audiotest |
render the audio offline and report peak and per-scene levels |
| Space · ← → · M · F | play/pause · seek 2 s · mute · full screen |
Play them live (GitHub Pages), or open the files in a browser:
skills/motion-graphic/assets/engine.html — the engine with its five example scenes, console styleexamples/clean-style.html — the same scenes with a clean, light style and a soft groove.agents/skills/ Codex discovery link to the shared skill
.claude-plugin/ Claude Code plugin + marketplace manifests
skills/motion-graphic/
SKILL.md shared workflow for Codex and Claude Code
agents/openai.yaml Codex display metadata and default prompt
assets/engine.html the engine (player, audio, helpers, example scenes)
references/ story.md · styles.md · scene-patterns.md · critique.md
scripts/assemble.py split the engine into parts / assemble them back
scripts/check.js verification: stills, phone sheet, cut strips, determinism, clipping, audio, layouts, touch
scripts/record.js HTML → mp4 (frame-exact render + the engine's own audio, verified with ffprobe)
samples/ pieces made from one prompt each (HTML, mp4, prompt, facts, storyboard; opus/ and sonnet/ versions)
examples/ prebuilt style examples
docs/images/ README images
node scripts/record.js <file.html> --out film.mp4 (needs ffmpeg; the progress bar is part of the picture).Issues and pull requests are welcome — see CONTRIBUTING.md.