Communitygithub.com

reel-motion-graphics

Turn a script or concept into an on-brand 9:16 explainer reel (luxury tech, warm sand on near-black, glassmorphism, CSS 3D, Bodoni + Instrument Sans) built in HyperFrames, with the animation above the fold and the presenter's talking head below. Use when the user gives a script, transcript, paper summary or concept and asks for a reel, motion graphics, an animated explainer or "the same style as the upcycling reel". Produces a HyperFrames project, a rendered MP4 and a live artifact player.

What is reel-motion-graphics?

reel-motion-graphics is a Claude Code agent skill that turn a script or concept into an on-brand 9:16 explainer reel (luxury tech, warm sand on near-black, glassmorphism, CSS 3D, Bodoni + Instrument Sans) built in HyperFrames, with the animation above the fold and the presenter's talking head below. Use when the user gives a script, transcript, paper summary or concept and asks for a reel, motion graphics, an animated explainer or "the same style as the upcycling reel". Produces a HyperFrames project, a rendered MP4 and a live artifact player.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jamesisbuilding/App-Building-Skills/tree/main/skills/reel-motion-graphics

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Preview

From the skill README

Documentation

Reel motion graphics

This skill makes reels in the house style first built for "Upcycling in 30 Seconds". template/ is that reel as a working HyperFrames project, so a fresh copy renders correctly before you change anything. Your job is to replace its content with the new script's while keeping every rule below.

Load /hyperframes-core for the composition contract before writing composition HTML. Load /hyperframes-animation only if you need a motion pattern not in references/primitives.md.

1. Read the script and plan the beats

Gather or infer the following, and ask only for what changes the film:

  • The script or concept. Required.
  • Presenter footage (MP4) or a still. Without one, keep the template's placeholder still.
  • Source credit for the title eyebrow, e.g. ICLR 2023 · Author et al..
  • Target length. Default 30s; 20–60s works.

Break the script into: a title card (about 4s), 2–5 steps (4.5–6s each), and an optional result/closer (about 5.5s). For each step write:

  • a heading as plain words plus a 1–2 word italic accent ("Copy the MLP eight times"), at most about 22 characters so it fits 656px at 60px;
  • a caption: line 1 is one sentence of at most about 34 characters (Bodoni italic 40px), and line 2 is a supporting sentence of at most about 40 characters;
  • the diagram move from the primitives vocabulary (references/primitives.md → "Writing a new diagram").

Pace about 2.5 spoken words per second if the captions mirror narration. Write the plan to STORYBOARD.md in the project (beat, time range, heading, caption, visual move), show it to the user, and build once they approve. A short script the user has already approved can go straight to the build.

2. Scaffold

This skill lives in the Reel Creator project (.claude/skills/reel-motion-graphics/). Run commands from the project root, and put every new reel in reels/<slug>/. Script paths below such as scripts/solve-fold.py are relative to this skill's folder.

.claude/skills/reel-motion-graphics/scripts/new-reel.sh reels/<slug> [presenter.jpg|.mp4]

For presenter video, replace the <img id="presenter"> in index.html with: <video id="presenter" class="clip" src="assets/presenter.mp4" data-start="0" data-duration="<D>" data-has-audio="true" playsinline></video> The #presenter CSS (cover, 20% anchor, below --fold) applies unchanged.

3. Build: edit data first, then write the diagram

FileWhat to change
index.htmlRoot and host data-start/data-duration to match the plan. Hosts: bg (whole), title (0–4), headings and diagram (4–end), result (its window), captions (whole), presenter (whole).
compositions/title.htmlEyebrow credit, the two display lines, the two thesis lines, and the mini diagram if the idea isn't "1 → many".
compositions/headings.htmlOnly the STEPS array (host-local seconds). Bars and "Step n of N" are derived from it.
compositions/captions.htmlOnly the CAPS array (global seconds). Enter each about 0.35s after its step starts and leave at the step's end.
compositions/diagram.htmlRewrite the world for the new subject, using the primitives. Keep the lens/world/drift structure, the token-clock pattern and the backdrop recession.
compositions/result.htmlStat labels, values, counters and meta lines, or delete the host if the script has no numbers.
compositions/bg.htmlUsually unchanged. Scale its yoyo repeats so they finish at the root duration.

When the library has no fitting graphic: ask for a HyperFrames link

The library is references/primitives.md. When a beat needs a visual that no primitive covers (a chart type, map, timeline, comparison or anything else not listed), do not improvise one from scratch. Pause and ask the user for a link:

"Beat 3 ('revenue tripled since 2021') needs a growth chart and the library doesn't have one. Can you send a HyperFrames catalog link for a graphic you like? I'll restyle it to our brand."

To help them pick, you may list 2–4 candidates from npx --yes [email protected] catalog "<keyword>", but let the user choose. Keep building the other beats while you wait, and leave a labelled placeholder in the gap.

When the link arrives:

  1. Install it. The registry item name is the last path segment of the catalog link. Run npx --yes [email protected] add <name> --no-clipboard --json from the project. For a link that isn't from the registry, read the page or source and rebuild it.
  2. Restyle it to the house rules:
    • swap the colours for brand tokens and the panels for .glass;
    • use Bodoni and Instrument Sans with the opsz-18 files;
    • put every spacing value on the 4px grid;
    • fit it to the content column and zones;
    • add the sheen, gloss and drift accents;
    • remove anything off-brand, such as flat bright fills, other fonts or drop-shadow styles.
  3. Wire it in as a sub-composition host on the graphics track, or fold its motion into diagram.html when it has to share the continuous world. Then check, snapshot and fix as usual.
  4. Add it to the library. Append an entry to references/primitives.md under "Restyled from HyperFrames": the name, the source link, what it shows, and its key parameters. Copy the restyled file into template/compositions/library/ so the next reel can reuse it without asking again.

4. House rules (every reel, no exceptions)

  1. Fold equidistant. The fold sits halfway between the lowest animation content (caption bottom, about y 900) and the top of the presenter's head. Solve it with scripts/solve-fold.py <presenter still or a frame> 900 and set --fold in brand.css (a multiple of 4). Verify with scripts/measure-fold.py <snapshot> <fold>. With video, check a frame where the head is highest.
  2. 4px grid. Every padding, gap, offset, size and line-height is a multiple of 4. Containers pad evenly and size to their content; never give a card a fixed height. Run scripts/audit-grid.sh <project>; the only allowed leftovers are hairline borders, glow radii and tween motion offsets.
  3. Sturdy serif. Use only the *-opsz18.woff2 Bodoni files in fonts/. The variable font's automatic optical size picks hairline display cuts that disappear after H.264 and phone downscaling. Never switch back to the variable file or Google's 6..96 range.
  4. Zones. App bar 0–175 (keep clear), animation 192–780, caption band 812–904, presenter below --fold, content column x 172–828 (clear of the right rail). Captions live on one track only.
  5. One continuous diagram world. Elements that persist across steps live in diagram.html and move. They never re-enter in a new scene file.
  6. Determinism. Use only paused GSAP timelines registered on window.__timelines["<id>"]. Use seeded rng() or hh() instead of Math.random, and no requestAnimationFrame, clocks or network. Animated counters and particles are pure functions of a proxy tween's value.
  7. Lint-safe authoring.
    • Target a sub-composition's own root with document.querySelector('[data-composition-id="<id>"]:not([data-composition-src])'), never #root (several roots share that id once assembled).
    • Prefix element ids with the composition (dg-, hd-, rs-, ti-).
    • Use one fromTo per element-property pair, then to.
    • Never tween letterSpacing, width, height, top or left; use transforms and opacity.
    • Stagger lone labels so they don't overlap at rest.
  8. Look. Near-black warm background with drifting light and grain; .glass for every panel; gold sheen on accents; small camera drift on every hold; hold each finished state at least 1s.

5. Verify, then deliver

Run these from the project directory:

npx --yes [email protected] check
npx --yes [email protected] snapshot --at <the midpoint of every beat>
  • check must pass with 0 errors. Review any warnings.
  • Look at the contact sheet. Crop and zoom any dense frame: watch for overlaps, clipped text, tokens landing off target and uneven padding.
  • Run measure-fold.py and audit-grid.sh, and fix anything they flag.
  • Render with npx --yes [email protected] render; the result goes to renders/. Make a share copy under 30 MB for phone viewing: ffmpeg -i renders/<file>.mp4 -c:v libx264 -crf 23 -preset slow -pix_fmt yuv420p -movflags +faststart renders/<slug>-share.mp4
  • Live player: from the project root run node viewer/build.mjs. It rebuilds every reel's live player (reel/ plus each reels/<slug>/) and writes the carousel viewer/index.html, with one copy per reel in viewer/reels/. Publish viewer/index.html to the reel library artifact https://claude.ai/artifact/Joet84qdr6Kb47vYZzc8YR, passing every viewer/reels/*.html in files. The user prefers the live HTML player over an embedded video. For a single reel on its own, node build-preview.mjs in its folder writes dist/preview.html.
  • Report the runtime, what was checked (frames, fold gaps, audit), and anything not yet verified.

Reference

  • references/primitives.md: every visual building block, with the file that implements it.
  • template/: the complete Upcycling reel. It is the quality bar; compare new work against it.

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

app-icon-design

Create, revise, and audit app icons using Apple's Human Interface Guidelines, with a clear visual identity and production-ready deliverables.

app-keyword-research

Validate an app idea against the App Store before building it. Turns the idea into search phrases, measures demand (App Store autocomplete) and competition (current top-10 apps) for each, ranks keywords by opportunity, and maps which apps own the market. Use when the user wants keyword research, ASO, "is there demand for…", "who are the competitors for…", "what should we call it / which keywords", or to validate or compare app ideas.

app-offer

Designs one opinionated "Grand Slam Offer" for any app idea, new or already shipped, by running Alex Hormozi's $100M Offers method adapted to app stores. It covers the market and niche, the commodity check, a value-equation audit, the problem inventory, delivery vehicles, the trimmed value stack, pricing and tiers, scarcity, urgency, bonuses, the guarantee, naming, the paywall per placement, the onboarding fast win, a test plan and a ship plan. It works within App Store and Google Play rules. For a shipped app it reads the code and notes first and produces a before/after. Use it when the user says "/app-offer", "run app-offer on <idea>", "make a grand slam offer for my app", "Hormozi my app", "price my app" or "design my paywall offer", or asks how to package, price, name, guarantee or paywall an app. It writes offer/grand-slam-offer.md (or ./<app-slug>-grand-slam-offer.md for a new idea).

brand-reference-pack

Build or refresh a shortform brand reference pack for any app from its real surfaces — website, App Store listing and reviews, socials, the live app (driven end to end on the simulator) and its code tokens — plus a status check of the upstream foundations (ICP, voice of customer, brand voice). Produces the context that content formats and design decisions are made from, as markdown, tokens.json and a PDF. Use for "build a brand pack for <app>", "refresh the brand pack", "capture the site/app/socials for shortform", "/brand-reference-pack".

deep-work

Timekeeper and scribe for the user's own timeboxed build session, default 90 min, also 1h / 1.5h / 2h (Orient, Build, Verify, Harden, Close, scaled to the block). Use when the user says "start a session", "deep work", "90 min block", "work block", or invokes /deep-work. Subcommands: status, park <note>, close, abort.

new-app-info

Builds the information pack Apple asks for when App Review replies "We need additional information to better understand the app". It covers all six required items: (1) a screen recording on a physical device, as a shot list the user records; (2) the app's purpose and target audience; (3) setup and main features, with any login credentials or sample files; (4) the external services the app uses; (5) regional differences; (6) regulated industry or protected third-party material. It also runs Apple's "Prevent common issues" checks. Every answer comes from the app's own code (accounts, user-generated content, in-app purchases, SDKs, locales, screen-capture blocking, data deletion). It reads the connected iPhone's iOS version and checks it is the latest. It ends by telling the user to paste the reply into App Review Information → Notes. Use it when the user pastes that App Review message, says "/new-app-info", "we got rejected, they want more info", "answer App Review", or "make the App Store review pack". It w...

Related Skills