motion-graphics
Skill0 starsChanged 16 days agoMITView on GitHub
Makes motion graphics for game marketing video with an AI agent (character name cards and freeze-frame intros, kinetic type, title and end cards, logo stings, callouts, transitions), built as HTML/CSS and rendered frame-exact by a Playwright script, then laid over in-game footage with ffmpeg. Covers the tool verdicts (own renderer; HyperFrames, Remotion, After Effects MCP, Lottie/Rive weighed), timing and easing numbers, parameterised templates, rebuilding an effect from a reference clip, and a QA gate. Use with video-craft whenever a clip, Short, devlog or trailer needs on-screen graphics, or when on-screen text feels plain, cheap or "AI-made".
- Installs packages
41 other projects use a version of this.
Adopted by
Most recently taken up by
- OpenMontageInc/OpenMontagetheir own version, first seen Nov 8, 2026
- calesthio/OpenMontagetheir own version, first seen Nov 8, 2026
- Sma1lboy/rovetheir own version, first seen Nov 6, 2026
- edenfunf/reelmimictheir own version, first seen Nov 4, 2026
- BlackAngel242/skill-markettheir own version, first seen Nov 1, 2026
- vikneshwaran16032005-alt/claude-skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use website-to-video, hyperframes-studio and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
jaron-goh-centrSkillwebsite-to-video
Capture a general website/URL and turn it into a video OF the site — tour, showcase, or social clip built from captured screenshots and the site's own brand assets. Use for portfolio / blog / docs / landing-page showcases. Not a product launch or promo, even from a URL (/product-launch-video). Unclear → /hyperframes.
Also in 9 projects that use this
eyaprakSkillhyperframes-studio
HyperFrames ile bir açılış hook'u (yatay 16:9 intro), dikey 9:16 Shorts ya da 16:9 animasyonlu slidedeck üretmek için hepsi bir arada studio. Ham konuşma klibini ve transcript'i (ya da bir konu/slide içeriğini) alır; koyu tema, tek marka rengi, self-hosted Manrope + JetBrains Mono fontlar ile bitmiş, oynatılabilir bir kompozisyon çıkarır (hook/shorts ayrıca 1080p/60fps MP4'e render edilir). Paket içinde tak-çalıştır starter template'ler gelir. ŞU DURUMLARDA MUTLAKA KULLAN, HyperFrames adı geçmese bile TETİKLE: hook oluştur, intro yap, video başına giriş, insanları hookta tutsun; shorts oluştur, dikey video, bu klibi shorts yap, reels; slidedeck oluştur, sunum yap, bu içeriği slide'la, yeni bir deck; ya da kullanıcı bir "-hook", "-shorts" veya "-slidedeck" klasörü açıp içine ham klip, transcript veya içerik koyduğunda. Başta AskUserQuestion ile hangi mod ve marka rengi sorulur, gerisi paketteki hazır starter'dan kurulur. Yalnızca bu üç HyperFrames video türü için kullan.
Also in 8 projects that use this
jaron-goh-centrSkilltalking-head-recut
Package an existing talking-head / interview / podcast video with timed, designed GRAPHIC OVERLAY cards — kinetic titles, lower-thirds, data callouts, quotes, side panels, picture-in-picture — synced to the transcript, on a 16:9 / 9:16 / 4:5 canvas of your choice; the clip plays untouched underneath. Trigger on "graphic overlays", "on-screen graphics", "package / dress up my video". Not plain subtitles (/embedded-captions). Unclear → /hyperframes.
Also in 10 projects that use this
anton-abyzovSkillhyperframes-media
Asset preprocessing for HyperFrames compositions — text-to-speech narration (Kokoro), audio/video transcription (Whisper), and background removal for transparent overlays (u2net). Use when generating voiceover from text, transcribing speech for captions, removing the background from a video or image to use as a transparent overlay, choosing a TTS voice or whisper model, or chaining these (TTS → transcribe → captions). Each command downloads its own model on first run.
Also in 8 projects that use this
LinHao-citySkillbfl-api
BFL FLUX API integration guide covering endpoints, async polling patterns, rate limiting, error handling, webhooks, and regional endpoints with Python and TypeScript code examples.
Also in 3 projects that use this
LinHao-citySkillflux-best-practices
Comprehensive guide for BFL FLUX image generation models. Covers prompting, T2I, I2I, structured JSON, hex colors, typography, multi-reference editing, and model-specific best practices for FLUX.2 and FLUX.1 families.
Also in 3 projects that use this
- +6 more from LinHao-city
Other versions41 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 41
- calesthio/OpenMontage★ 78ksame name
- OpenMontageInc/OpenMontage★ 78ksame name
- edenfunf/reelmimic★ 1.8ksame name
- ronak-create/FableCut★ 773same name
- EvovexAI/EvoFlow★ 612same name
- langchain-ai/design-agent★ 596same name
- rohitg00/manim-video-generator★ 305same name
- duyet/clickhouse-monitoring★ 303same name
- Sma1lboy/rove★ 184same name
- Mort1d/motion-graphics-skills★ 34same name
31 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository21 other files it gives its agents.
- art-craftSkill
- blender-animSkill
- char-3d-sourceSkill
- char-animSkill
- design-craftSkill
- design-principlesSkill
- elevenlabsSkill
- enemy-designSkill
- fx-craftSkill
- godot-devSkill
- hero-designSkill
- marketing-playbookSkill
- post-voiceSkill
- save-the-catSkill
- skill-designSkill
- ui-craftSkill
- video-craftSkill
- video-longformSkill
- video-shortSkill
- video-trailerSkill
- video-youtubeSkill
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 1 is distinctive, and 4 are very specific to this project.
0
Common
Most of the 36 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 19
Deterministic: all timing in CSS animation, Web Animations, or a paused GSAP timeline seeked through window.mgSeek.
- Very specific: line 44
Beat sheet first, in frames (30 fps): Write each element's in, hold and out frame and the sound on it in brief.md.
- Very specific: line 64
Study copy only: Keep the reference in /tmp, never in the repo or your cut.
- Distinctive: line 67
Change only what the brief names: keep the structure and the timing, swap type, colour and devices to your look.
- Very specific: line 69
Keep it: if it will be used again, save it to templates/ with a row in the table below.
“Common” is measured: kept by at least 6 in 10 of the 36 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.
Files
Motion graphics
Bar: a graphic earns its frames when it says something the footage can't (who this is, what this does) and moves the way the game hits. It lands, holds still long enough to read, leaves cleanly, and has a sound on every arrival. It is rebuilt from files in the repo, never hand-keyed in an app.
Plain caption text is often the weakest part of a game clip. Introducing a character with an animated name and one line under it does more. Research behind this skill: references/sources.md.
Hard rules
- Everything in
video-craft"Hard rules" holds: approved in-game footage only, licensed audio, publishing only after the human approves. - 🔴 Text: a name, a role line of at most 6 words, the title. No feature lists, no counts ("50 cards!"), no hype words. Character names only as the project spells them; never invent an epithet or title for a character.
- Brand look: copy a template in
templates/and set your palette and fonts through its variables. Use one look per campaign, with the same palette and two font families. Paste the actual values into any brief; never just say "our brand". - 🔴 New tools need approval: Remotion, HyperFrames, Lottie, any MCP server, any cloud or paid generation.
- Deterministic: all timing in CSS
animation, Web Animations, or a paused GSAP timeline seeked throughwindow.mgSeek; nosetTimeout,requestAnimationFrameclocks or unseededMath.random(). Same files, same frames.
Stack
| Role | Tool | Verdict |
| Author | HTML + CSS keyframes (Web Animations API for anything scripted) in the post folder or templates/ | Default |
| Render | scripts/render.py: Playwright + Chrome, every animation paused and seeked to frame/fps, one screenshot per frame; --alpha for overlays, --mov for ProRes 4444 | Default |
| Compose | ffmpeg concat / overlay in the post's build.sh; full-range PNG → TV-range yuv420p | Default |
| Author + render, larger work | HyperFrames (HeyGen, Apache-2.0, free): the same HTML-seek idea plus GSAP, a check gate (layout, safe box, hold time) and about 450 registry blocks (shader transitions, kinetic type, captions). WebM/MOV alpha. See below | Good option once approved |
| Alternative | Remotion (React; free for a company of up to 3, licence counts contractors in the 5.0 draft) | React stack, licence tied to headcount |
| Rejected | After Effects MCPs (paid AE running in a GUI, not rebuildable) · Motion Canvas / Revideo (no agent tooling) · Lottie/Rive (UI motion, not titles) · ffmpeg-only text (no layout or easing) · AI video generators (not the game) |
HyperFrames (if adopted)
- Pin it in a tools folder (
npm install --prefix tools/motion hyperframes@<version>), run it asHF=tools/motion/node_modules/.bin/hyperframeswithHYPERFRAMES_NO_TELEMETRY=1. Nevernpx hyperframes@latest; nevercloud/lambda/publish. - Its agent docs ship inside the package (
node_modules/hyperframes/dist/skills/). Read the core and CLI skill files before a HyperFrames job. The rules here win where they differ: your brand look, the text rules, licensed audio only, no cloud media. - Which renderer: simple templates stay on
render.py. New graphics that want a registry block ($HF catalog --tag transition,$HF add <name>) are built as a HyperFrames project in the post folder, rendered with$HF render --format png-sequence --fps 30(or--format movfor alpha), then composed inbuild.sh. - Gate:
$HF check --jsonbefore rendering. Intended overlap or outline text getsdata-layout-allow-overlap; say why inbrief.md. - Fonts: bind every system face through
@font-face { src: local(...) }. A bare family name can fall back to Helvetica in its Chrome. - Registry blocks load GSAP from a CDN at render, so a render with no network fails. Stock looks (glitch, light leak, chromatic) stay banned (see "Tone").
- A ported
render.pytemplate rendered the same frames in HyperFrames (0.4% of pixels differed at glyph edges), 72 frames in 29 s vs 24 s.
Making one
- Beat sheet first, in frames (30 fps). Write each element's in, hold and out frame and the sound on it in
brief.md. Storyboarding first is what separated good agent-made motion from broken renders in every tutorial reviewed. - Copy a template, set its
window.MGvars frombuild.sh, change layout only through its CSS variables. - Peek before rendering:
render.py page.html --size WxH --still <s> --png peek.png --vars …at the entry, the first readable frame, mid-hold and the last frame. Look at each at full size and at 360 px wide. - Render the sequence, compose in
build.sh, runvideo-craftcheck.py. - Sound pass: a whoosh into each entry, an impact where it lands, one sting at most. Every graphic arrival has a sound; every sound has a visual twin.
MG=skills/motion-graphics # wherever you installed this skill
python3 $MG/scripts/render.py $MG/templates/character-intro.html --size 1080x1920 --still 1.2 --png /tmp/peek.png \
--vars '{"bg":"/abs/freeze.png","hero":"/abs/cutout.png","kicker":"UNIT 03","name":"Iron Warden","line":"Takes the hits <em>for the team.</em>","dur":2.4}'
python3 $MG/scripts/render.py page.html --size 1080x1350 --dur 2.4 --out /tmp/seq # opaque PNG sequence
python3 $MG/scripts/render.py page.html --size 1080x1920 --dur 3 --out /tmp/seq --alpha --mov ov.mov # overlayNeeds pip install playwright and a Chromium (playwright install chromium) or an installed Chrome, plus ffmpeg for --mov.
From a reference clip
When you like an effect in someone else's video, rebuild it from the clip, not from memory. A 5 s hook holds about ten separate moves (how words enter, what sits behind the subject, when the sound lands), and a description from memory misses most of them [PRAC Moran].
- Study copy only. Keep the reference in
/tmp, never in the repo or your cut; put its URL inbrief.md. Copy the structure and timing, never its footage, art, fonts or music. - Step through it:
ffmpeg -i ref.mp4 -vf "fps=15,scale=480:-2" /tmp/ref_%03d.png, tiled as invideo-crafttools.md "Storyboard sheet"; use the full frame rate for anything faster than 0.3 s. - Write the event list in
brief.md: each move with its in and out frame, what moves and how far, the easing it looks like, what is in front of or behind the subject, and the sound on it. - Change only what the brief names: keep the structure and the timing, swap type, colour and devices to your look. Banned stock devices stay banned even if the reference uses them.
- Build it with
render.pyor HyperFrames, then compare against the reference at the same moments (side-by-side recipe invideo-crafttools.md). - Keep it: if it will be used again, save it to
templates/with a row in the table below. Over time that table becomes your library of moves.
Craft rules
Numbers are defaults from the sources; a cut that breaks one says why in brief.md.
Timing (30 fps)
- Entry 8-12 frames (0.27-0.4 s). Exit 6-8 frames, faster than the entry.
- Hold: at least 1.5 s, or words ÷ 3 per second, whichever is longer. Name + 6-word line ≈ 2.4 s.
- Stagger: each element starts 2-4 frames after the last, while it is still settling. Things that belong together arrive together.
- Everything has left 2 frames before the cut. No half-wiped band on the next shot.
- A motion graphic is short: one idea in under 10 s. Past that it is a scene.
Easing (CSS cubic-bezier; GSAP names in brackets)
- Entry: snappy
cubic-bezier(.165,.84,.44,1)[power4.out] for text; long glidecubic-bezier(.16,1,.3,1)[expo.out] for wipes and bands. - Exit:
cubic-bezier(.55,.085,.68,.53)[power2.in]. Never linear except colour fades and camera push. - Overshoot (back, elastic) only on things with mass: a stamp, a slab hitting the ground. Never on text, numbers or UI. No bounce.
Motion grammar
- Land, then hold still. Nothing breathes or drifts to "feel alive"; only what is live keeps moving (a counter, the footage).
- One idea per move: rise + fade says "arriving". Spin, zoom and blur on the same text make it unreadable.
- A transition is caused by something on screen (a hit, a wipe band, a flash on impact). Never dissolve between unrelated shots. One freeze per short.
- Depth: the character cutout pushes 1.0 → 1.035 over the hold; graphics sit behind the character (band, giant name), readable text in front.
Type and layout
- Two families: a condensed display face for names and titles, a heavy sans for lines. Load system faces through
@font-face { src: local("...") };font-stretchalone does not pick a condensed cut. - Name ≥ 12 vmin (≈ 130 px at 1080 wide); role line ≥ 4.5 vmin (≈ 48 px); kicker ≈ 3.6 vmin. One accent colour per line (
<em>). - Shorts 9:16: readable text inside x 90-900, y 250-1380 (
video-craftchannels.md). Decoration may run under the platform UI; words may not. - High-contrast blocks (light on ink, an offset shadow) over footage; never thin text straight on the game.
Tone
- Match the game's tone. For horror with a heroic side: dim and desaturate the frozen world, keep the character warm with a light rim and a glow.
- One stylistic device per graphic (e.g. halftone dots, a tilted band, an offset shadow, giant outline type for a pulp-comic look). Avoid glitch, VHS, chromatic aberration, light leaks and particle swirls; they read as stock templates and say nothing about the game.
Templates
| File | What | window.MG |
templates/character-intro.html | Freeze-frame character intro: white flash, world dims, tilted band + giant outline name behind the cutout, kicker chip, name slab, role line, all clear by the cut | bg hero kicker name giant line dur origin cardTop giantTop + colour and font vars |
templates/end-title.html | End lockup over the last frame: band, title (accent via <em>), sub line | bg title sub top + colour and font vars |
Colour and font vars on both: light, ink, accent, highlight (intro only), display, sans. The defaults are neutral; set your palette. Both are opaque full-frame renders. For an overlay over moving footage, write the page with a transparent body and render with --alpha.
Character cutout: capture one moment twice from the same camera, once normally and once with the character alone on a flat background colour (hide the set or swap the sky). Key the flat colour to alpha (ffmpeg colorkey or a small numpy script), fill holes, and use the normal frame as bg and the keyed one as hero.
QA gate (with video-craft's)
- Each readable frame passes at 360 px wide, sound off: who and what in one look.
- Entry, hold and exit match the beat sheet; nothing left on screen 2 frames before a cut.
- No overshoot on text; no element drifts during its hold.
- Words inside the safe box, in the post's language, after a humanizer pass; names as the project spells them.
- Every arrival has a sound and every sting a visual twin; music and SFX licensed and on file.
build.shrebuilds the cut from the repo alone; the graphic's HTML sits in the post folder ortemplates/.
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
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.

