Loading...
Loading...
This skill should be used when the user asks to "draw every frame in JavaScript", "make an animation with no image assets", "animate this in code / on a canvas", "make a hand-drawn style animated video", "turn this into a short animated film", "make an animated explainer drawn in code", "make an animated story / picture book of my photos", or "make a zero-asset animation like the Opus 5.5 ones". Produces a single self-contained HTML file whose frames are computed on an HTML canvas (seekable, deterministic), renders it to MP4, and self-checks the result. Pairs with the soundtrack skill for code-synthesized music. NOT for charts from data (use chart-animation), pure text motion (use kinetic-typography), or 3D/WebGL (use threejs-animation / shader-glsl from webgl-animation-skills).
npx skill4agent add iart-ai/javascript-animation-skills javascript-animationreferences/forms.mdreferences/techniques.mdLOOK.wobbleLOOK.groundLOOK.fontLOOK.labelStylegroovescorereferences/storyboard.mdreferences/storyboard.mdBPMSECTIONSSHOTSEVENTStemplates/starter.htmlwithCameraclaim()draw(frame)rng(seed)hash2()Math.randomDatesoundtracknode scripts/render.mjs piece.html sheet.jpg --sheet 1 # one frame per second, stepping off cuts
node scripts/render.mjs piece.html shot --stills 90,300,610 # specific moments
node scripts/render.mjs piece.html piece.mp4 # full render (+ soundtrack if the page has one)
node scripts/asset-audit.mjs piece.html # proves zero-asset: exit 1 if anything is loaded or embedded
node scripts/layout-check.mjs piece.html # text colliding with text, or straddling a claimed object
node ../soundtrack/scripts/sync-check.mjs piece.mp4 --cues-file piece.cues.json # cuts on the beat, no startlereferences/qc.md--sheet .5| When | Do |
|---|---|
| A character appears in more than one scene | Before the scenes, render the character alone (expressions + poses) and check it yourself against |
| The user supplied photos of real people, pets or places | Build the character from the photos with the extraction method in |
| It's a real-person piece and the user is present | At delivery (not before), offer to use photos of key props or people to make it more theirs. |
| Text or a speech bubble follows a moving character | Place it with |
| On-screen text is not Latin (Chinese, Japanese...) | Use a CJK font stack; check every glyph renders (monospace fonts silently swap missing glyphs, e.g. |
| The page will be published as a web page | Deliver the HTML; keep the live preview loop and the click-to-play audio. |
requestAnimationFrametBOILEVENTSCUESsoundtracklayout-checktemplates/starter.htmlwithCameraclaimplaceFreescripts/render.mjswindow.CUESwindow.SCORE<out>.cues.jsonscripts/asset-audit.mjsscripts/layout-check.mjswindow.LAYOUTreferences/storyboard.mdreferences/techniques.mdreferences/forms.mdreferences/character.mdreferences/qc.mdnpx playwright install chromiumnpm i playwright-core