Motion cartoon skill

Make a looping cartoon of an original mascot or character, 6 to 20 seconds, from a short brief.

by Kimeur·MIT license·★ 8 Stars on the repo·GitHub ↗

Use now

Real results

1 image made with this skill
Motion cartoon — frame from the example film rendered with this skill (cartoon-pip)
Kimeur · skill author · GitHub · source ↗

Posted publicly by the author. AgentAlley did not make or edit these images. Click an image for the original.

Files of Motion cartoon

Kimeur/main1 file shown
SKILL.md
Show the full text69 lines
motion-cartoon/SKILL.md69 lines · 9.2 KB

Motion cartoon

A character with a clear silhouette, a simple face and a short performance: it notices you, reacts, does one thing, and gets back to where it started, so the loop never ends. The whole film is one HTML file that can draw any moment from the time alone, so it previews in any browser, renders frame-exact, and loops without a seam.

The skill folder is ${CLAUDE_SKILL_DIR}; the reference files call it <skill>. If the variable shows up literally or empty in your shell (you opened this file directly, as a subagent or from a copy), it is the folder that holds this SKILL.md: put that absolute path in every command below.

A film lives in the user's project at videos/<film>/ (BRIEF.md, DESIGN.md, src/film.html, fonts/, the built <film>.html, stills/, renders/).

Ground rules

  • An original character only. Design it from the rig's shapes, or from the user's own mascot. Never draw an existing cartoon, game or brand character, a real person, or something close enough to pass for one. See reference/brief.md.
  • True claims only. Every word on the sign, in a bubble or in small print comes from the product's own live pages and is logged with its URL in BRIEF.md. A product with no live site takes its words from the user's brief only.
  • Four words a beat, one call to action (usually the product's name on the sign).
  • seek(t) is pure. No timers, Date, Math.random, state or CSS animation; seeded randomness only. Drawings and the line boil read the quantised frame, so a drawing is the same every time it is held.
  • One file. Fonts embedded as base64; nothing loads over the network. The build enforces it.
  • The loop is seamless. The default is a cycle loop: the performance ends where it began, every act brings its value back, and loopcheck finds the seam as smooth as any other instant.
  • Look before you ship. Numbers pass while frames look wrong; read the stills and the decoded frames.
  • The user decides what leaves the machine. Get a yes before any commit, push or upload.

Workflow

  1. Once per machine. node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" doctor checks Node 20+, playwright-core, a Chromium, ffmpeg with libx264, ffprobe, npm and tar, and prints the exact command for anything missing. Re-run it until it says DOCTOR OK.
  2. Brief intake. Name the video type first (a launch bumper, a feature highlight, a testimonial, an event promo...): reference/video-types.md gives each type its length, formats, beats and the styles that fit. Read the product's live site, then ask at most one round of questions: who the character is (the user's mascot, or a new one: what it is like in three words), the one thing it does, which formats (1:1, 9:16, 16:9: one film renders to each), duration, palette. Defaults: 1080 x 1080 (1:1) only, 10 s, 60 fps, 12 drawings a second, 120 BPM, cycle loop, the template's palette or the brand's colours. Fill templates/BRIEF.md into videos/<film>/BRIEF.md. See reference/brief.md.
  3. The performance. Write the beats as acting, not as moves: notices you, reacts, shows the thing, celebrates, settles. At most 4 words in any bubble or sign. Show the user the beats and proceed unless they object; when nobody can answer, write them into BRIEF.md and proceed.
  4. Character sheet and timing. Fill templates/DESIGN.md into videos/<film>/DESIGN.md: the character's proportions and colours (fill, shade, light, outline), the stage, then every act on the tempo grid with its anticipation and settle, the loop seam, and how each other delivered format is re-staged (its patch in FILM.formats: engine.md, Formats). Read reference/animation.md, reference/engine.md and reference/springs.md.
  5. Build. Copy templates/film.html to videos/<film>/src/film.html and transcribe DESIGN.md into its FILM block (edit nothing below it). Fetch the fonts and build:
    node "${CLAUDE_SKILL_DIR}/scripts/fonts.mjs" videos/<film>
    node "${CLAUDE_SKILL_DIR}/scripts/build.mjs" videos/<film>
    node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" layout videos/<film>    # the character's box, hops, sign size
    
    See reference/fonts.md and reference/core.md.
  6. Stills and critique. node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" stills videos/<film> runs the automated critique (glyph coverage, words, contrast of the sign, bubble and titles, the character inside the live area, the loop and its cycles, the face at the seam) and the palette gate, and writes a still for every key pose (each anticipation, stretch and impact, each bubble, sign and emote) plus stills/contact.png. Read them as an animator would: silhouette, squash, arcs, the face at thumbnail size. Fix and repeat. Run it once per delivered format: --format 9:16 checks the 9:16 cut, composition included, and writes stills/9x16/. See reference/review.md.
  7. Render and verify.
    node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" loopcheck videos/<film>   # purity 0, the seam continuous
    node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" render videos/<film>      # MP4, GIF (one frame per drawing), poster
    node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" verify videos/<film>      # ffprobe facts, tags, decoded pixels
    node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" mp4frames videos/<film>   # decoded review frames + PSNR
    
    Run the four once per delivered format, with the same --format 9:16 (outputs renders/<film>-9x16.mp4, preview-9x16.gif, poster-9x16.png). Look at stills/mp4/contact.png and a strip of the whole film. Report the files, their sizes and the verify, loopcheck and mp4frames lines. See reference/render.md and reference/loops.md.

Pass criteria

  • The composition row passes at every delivered format: the performance fills each frame, not the top of a tall one or the left of a wide one.
  • The silhouette reads at thumbnail size: in every key pose you can tell what the character is doing from its outline alone.
  • Every big move has an anticipation before it and a settle after it; every hop lands with a squash; the antenna and hands arrive after the body.
  • One action at a time; one expression per beat; the eyes lead (they look before the body moves).
  • Drawings held evenly (a divisor of the frame rate); the line boil subtle (1 to 2 px); no motion blur.
  • Every colour a palette role: fill, shade and light for each surface, one outline colour.
  • The loop closes: the last pose, face and every value are the first ones; the stage's cycles are whole.
  • The deliverable MP4 is H.264, yuv420p, BT.709-tagged in the stream, faststart, exactly DUR x FPS frames.

Known pitfalls

  • An act that moves a value must bring it back before the loop ends, or loop closes fails: a character that walks 300 px right walks 300 px back. A spring still settling at the end carries over the seam; a hop's arc and a walk's stride do not, so finish them before the end.
  • The face at the end must be the face at the start (start and the last face act), or it snaps at the loop point.
  • A hop taller than about 220 px lifts the antenna out of a 1080 frame; the critique warns when the head leaves it.
  • BOUNCY settles 3.1 s after it starts: fine in a cycle loop, where it carries over the seam, but it keeps the character wobbling if you meant it to hold still.
  • The sign is held by its lower corners: while it is up, the hands ignore their own targets. A sign wider than about 700 px leaves the live area. Held out to one side (sign.x), give it one hand (hold: 'L' or 'R'), or the far arm crosses the face.
  • In another format, move the stage with stage.raise, not by patching ground: the sunburst and titles pinned 'g' are measured from the ground as authored.
  • Drawings are held, so a move shorter than two drawings (1/6 s at 12 a second) can vanish between them. Make quick moves at least three drawings long, or give them an anticipation.
  • Stroke-heavy details (lashes, fingers, hair) boil into noise at 1080. Keep features to simple closed shapes.
1---
2name: motion-cartoon
3description: Make a looping cartoon of an original mascot or character, 6 to 20 seconds, from a short brief. A bean-shaped rig with rubber-hose arms and an antenna walks, hops, blinks, waves, reacts, talks in a bubble and holds up a sign with the product's name, in outlined flat colour with cel shading, on twos with a boiling line, squash and stretch, follow-through and a sunburst stage. Claude writes the film as one self-contained HTML canvas file driven by a pure seek(t), checks it with an automated critique, and renders it to MP4, GIF and poster at 1:1, 9:16 or 16:9 with a verified seamless loop. Use it for a mascot intro, a brand character saying hi, a reaction loop or sticker, or a playful launch teaser. Not for existing or trademarked characters, real people or lip-sync to audio. Other styles have their own skills: motion-launch-videos (kinetic type), motion-shapes, motion-3d, motion-charts, motion-pixel, motion-particles, motion-ui, motion-photo, motion-captions, motion-overlays and motion-globe.
4---
5 
6# Motion cartoon
7 
8A character with a clear silhouette, a simple face and a short performance: it notices you, reacts, does one thing, and gets back to where it started, so the loop never ends. The whole film is one HTML file that can draw any moment from the time alone, so it previews in any browser, renders frame-exact, and loops without a seam.
9 
10The skill folder is `${CLAUDE_SKILL_DIR}`; the reference files call it `<skill>`. If the variable shows up literally or empty in your shell (you opened this file directly, as a subagent or from a copy), it is the folder that holds this SKILL.md: put that absolute path in every command below.
11 
12A film lives in the user's project at `videos/<film>/` (`BRIEF.md`, `DESIGN.md`, `src/film.html`, `fonts/`, the built `<film>.html`, `stills/`, `renders/`).
13 
14## Ground rules
15 
16- **An original character only.** Design it from the rig's shapes, or from the user's own mascot. Never draw an existing cartoon, game or brand character, a real person, or something close enough to pass for one. See [reference/brief.md](reference/brief.md).
17- **True claims only.** Every word on the sign, in a bubble or in small print comes from the product's own live pages and is logged with its URL in `BRIEF.md`. A product with no live site takes its words from the user's brief only.
18- **Four words a beat, one call to action** (usually the product's name on the sign).
19- **`seek(t)` is pure.** No timers, `Date`, `Math.random`, state or CSS animation; seeded randomness only. Drawings and the line boil read the quantised frame, so a drawing is the same every time it is held.
20- **One file.** Fonts embedded as base64; nothing loads over the network. The build enforces it.
21- **The loop is seamless.** The default is a cycle loop: the performance ends where it began, every act brings its value back, and `loopcheck` finds the seam as smooth as any other instant.
22- **Look before you ship.** Numbers pass while frames look wrong; read the stills and the decoded frames.
23- **The user decides what leaves the machine.** Get a yes before any commit, push or upload.
24 
25## Workflow
26 
270. **Once per machine.** `node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" doctor` checks Node 20+, playwright-core, a Chromium, ffmpeg with libx264, ffprobe, npm and tar, and prints the exact command for anything missing. Re-run it until it says `DOCTOR OK`.
281. **Brief intake.** Name the video type first (a launch bumper, a feature highlight, a testimonial, an event promo...): [reference/video-types.md](reference/video-types.md) gives each type its length, formats, beats and the styles that fit. Read the product's live site, then ask at most one round of questions: who the character is (the user's mascot, or a new one: what it is like in three words), the one thing it does, which formats (1:1, 9:16, 16:9: one film renders to each), duration, palette. Defaults: 1080 x 1080 (1:1) only, 10 s, 60 fps, 12 drawings a second, 120 BPM, cycle loop, the template's palette or the brand's colours. Fill [templates/BRIEF.md](templates/BRIEF.md) into `videos/<film>/BRIEF.md`. See [reference/brief.md](reference/brief.md).
292. **The performance.** Write the beats as acting, not as moves: notices you, reacts, shows the thing, celebrates, settles. At most 4 words in any bubble or sign. Show the user the beats and proceed unless they object; when nobody can answer, write them into BRIEF.md and proceed.
303. **Character sheet and timing.** Fill [templates/DESIGN.md](templates/DESIGN.md) into `videos/<film>/DESIGN.md`: the character's proportions and colours (fill, shade, light, outline), the stage, then every act on the tempo grid with its anticipation and settle, the loop seam, and how each other delivered format is re-staged (its patch in `FILM.formats`: engine.md, Formats). Read [reference/animation.md](reference/animation.md), [reference/engine.md](reference/engine.md) and [reference/springs.md](reference/springs.md).
314. **Build.** Copy [templates/film.html](templates/film.html) to `videos/<film>/src/film.html` and transcribe DESIGN.md into its `FILM` block (edit nothing below it). Fetch the fonts and build:
32 ```bash
33 node "${CLAUDE_SKILL_DIR}/scripts/fonts.mjs" videos/<film>
34 node "${CLAUDE_SKILL_DIR}/scripts/build.mjs" videos/<film>
35 node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" layout videos/<film> # the character's box, hops, sign size
36 ```
37 See [reference/fonts.md](reference/fonts.md) and [reference/core.md](reference/core.md).
385. **Stills and critique.** `node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" stills videos/<film>` runs the automated critique (glyph coverage, words, contrast of the sign, bubble and titles, the character inside the live area, the loop and its cycles, the face at the seam) and the palette gate, and writes a still for every key pose (each anticipation, stretch and impact, each bubble, sign and emote) plus `stills/contact.png`. Read them as an animator would: silhouette, squash, arcs, the face at thumbnail size. Fix and repeat. Run it once per delivered format: `--format 9:16` checks the 9:16 cut, composition included, and writes `stills/9x16/`. See [reference/review.md](reference/review.md).
396. **Render and verify.**
40 ```bash
41 node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" loopcheck videos/<film> # purity 0, the seam continuous
42 node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" render videos/<film> # MP4, GIF (one frame per drawing), poster
43 node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" verify videos/<film> # ffprobe facts, tags, decoded pixels
44 node "${CLAUDE_SKILL_DIR}/scripts/render.mjs" mp4frames videos/<film> # decoded review frames + PSNR
45 ```
46 Run the four once per delivered format, with the same `--format 9:16` (outputs `renders/<film>-9x16.mp4`, `preview-9x16.gif`, `poster-9x16.png`). Look at `stills/mp4/contact.png` and a strip of the whole film. Report the files, their sizes and the verify, loopcheck and mp4frames lines. See [reference/render.md](reference/render.md) and [reference/loops.md](reference/loops.md).
47 
48## Pass criteria
49 
50- The composition row passes at every delivered format: the performance fills each frame, not the top of a tall one or the left of a wide one.
51- The silhouette reads at thumbnail size: in every key pose you can tell what the character is doing from its outline alone.
52- Every big move has an anticipation before it and a settle after it; every hop lands with a squash; the antenna and hands arrive after the body.
53- One action at a time; one expression per beat; the eyes lead (they look before the body moves).
54- Drawings held evenly (a divisor of the frame rate); the line boil subtle (1 to 2 px); no motion blur.
55- Every colour a palette role: fill, shade and light for each surface, one outline colour.
56- The loop closes: the last pose, face and every value are the first ones; the stage's cycles are whole.
57- The deliverable MP4 is H.264, yuv420p, BT.709-tagged in the stream, faststart, exactly DUR x FPS frames.
58 
59## Known pitfalls
60 
61- An act that moves a value must bring it back before the loop ends, or `loop closes` fails: a character that walks 300 px right walks 300 px back. A spring still settling at the end carries over the seam; a hop's arc and a walk's stride do not, so finish them before the end.
62- The face at the end must be the face at the start (`start` and the last `face` act), or it snaps at the loop point.
63- A hop taller than about 220 px lifts the antenna out of a 1080 frame; the critique warns when the head leaves it.
64- BOUNCY settles 3.1 s after it starts: fine in a cycle loop, where it carries over the seam, but it keeps the character wobbling if you meant it to hold still.
65- The sign is held by its lower corners: while it is up, the hands ignore their own targets. A sign wider than about 700 px leaves the live area. Held out to one side (`sign.x`), give it one hand (`hold: 'L'` or `'R'`), or the far arm crosses the face.
66- In another format, move the stage with `stage.raise`, not by patching `ground`: the sunburst and titles pinned `'g'` are measured from the ground as authored.
67- Drawings are held, so a move shorter than two drawings (1/6 s at 12 a second) can vanish between them. Make quick moves at least three drawings long, or give them an anticipation.
68- Stroke-heavy details (lashes, fingers, hair) boil into noise at 1080. Keep features to simple closed shapes.
69 

Discussion

Alternatives

/bragTurn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag", "let's brag about this", "make a launch video", "turn this into a video", or wants to share what they built. Reads the project code directly — no live URL or screenshots needed.Business & ops · MIT/brag-slimTurn a project directory or a website URL into a short, shareable launch video with music, motion, and share copy. One file, no bundled assets — built entirely by the model with the tools already on the machine. Use when someone says "/brag-slim", "let's /brag about this", "brag about <url>", "make a launch video", or wants to show off what they built. If the /brag skill is also installed, let /brag handle those phrases; it hands off here on Opus 5.5.Business & ops · MITBusiness motion filmPlan, build and quality-check a premium short commercial for a real business (roofing, property, ecommerce, B2B software) using AI-generated footage, code-built motion (HTML/GSAP), selective Three.js and an independent-critic "Gauntlet" loop. Use when asked to make a launch-style / SaaS-style video, business ad, explainer, sample reel or pitch video, or to review and improve one. Encodes motion principles distilled from 28 professional launch films, a quality bar, audio rules and a business-offer playbook.Business & ops · MITAI Product Launch PlaybookLaunch your AI product to global attention — the playbook behind Manus, Devin, and AFFiNE's breakout launches. Covers AI-specific GTM strategy, hype cycle management, waitlist tactics, and multi-market rollout for maximum day-one impact.Business & ops · MIT