Not in the top 1,000 by GitHub stars
iart-ai/javascript-animation-skills
Every frame drawn in JavaScript — the Opus 5.5-style animation technique as agent skills: hand-drawn canvas animation, zero image assets, code-synthesized soundtrack, A/V sync check.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/javascript-animation/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f7d0882a3132 → f7d0882a3132
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f7d0882a3132
No earlier version was observed for comparison.
skills/soundtrack/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f7d0882a3132 → f7d0882a3132
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f7d0882a3132
No earlier version was observed for comparison.
Verified commit f7d0882a313249cbd43f0e4e9e209b1622870253
git clone --filter=blob:none --no-checkout https://github.com/iart-ai/javascript-animation-skills.git .hotskills/iart-ai-javascript-animation-skills && git -C .hotskills/iart-ai-javascript-animation-skills checkout --detach f7d0882a313249cbd43f0e4e9e209b1622870253
# Copy each selected skill directory from .hotskills/iart-ai-javascript-animation-skills into .claude/skills/<skill-name>/Heat
4.1- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- javascript-animation
skills/javascript-animation - soundtrack
skills/soundtrack
How it works
javascript-animation
When your agent uses it
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) or 3D/WebGL (use threejs-animation / shader-glsl from webgl-animation-skills); pure text motion and depth drawn by projection on the 2D canvas are in scope.
What it loads into context
Frontmatter
209 tokensAlways available to the agent
SKILL.md
2,132 tokensWhen the skill is activated
Reference documents
6,370 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Model
- Default flow: don't stop to ask
- Self-check (the agent does this; the user never sees it)
- Only if triggered
- Rules that prevent the common failures
- Files
Scripts executed separately
scripts/asset-audit.mjsscripts/layout-check.mjsscripts/render.mjs../soundtrack/scripts/sync-check.mjs../soundtrack/scripts/sync-check.mjs
Files
../../.claude-plugin/marketplace.jsonasset395 bytes../../.claude-plugin/plugin.jsonasset624 bytesSKILL.mdcore9,088 bytesSKILL.mdcore9,088 bytesreferences/character.mddoc2,912 bytesreferences/forms.mddoc1,919 bytesreferences/qc.mddoc3,732 bytesreferences/storyboard.mddoc4,666 bytesreferences/techniques.mddoc10,243 bytesscripts/asset-audit.mjsruns3,273 bytesscripts/layout-check.mjsruns3,848 bytesscripts/render.mjsruns9,083 bytestemplates/starter.htmlasset19,510 bytes../soundtrack/scripts/sync-check.mjsruns7,215 bytes../soundtrack/scripts/sync-check.mjsruns7,215 bytes
Read SKILL.md
# JavaScript Animation (every frame drawn in code)
Make short animated films where every pixel is computed: no images, no fonts to load, no libraries. One HTML file holds the whole piece; a headless browser seeks it frame by frame into an MP4.
## Model
Built and tested with Claude Opus 5.5; drawing quality depends heavily on the model. The self-check below needs image input: if the current model can't see images, say so to the user and treat visual verification as not done. Other models are untested; if the result looks crude, say that a stronger model is likely to help rather than claim it's the best possible.
## Default flow: don't stop to ask
Run straight through. Pick sensible defaults and mention alternatives at delivery. Ask *before* starting only if there is no subject at all (e.g. "make an animation", nothing else).
1. **Read the brief.** Infer the form (story, explainer, poem, loop, interactive page), length (default 15-20 s; longer only when the subject cannot be told in that time) and aspect (default 1920x1080) from what the user said. On-screen text is in the language the user wrote the brief in; make it bilingual only if they ask or the audience clearly is. `references/forms.md` has a short structure for each form.
2. **Plan the look and sound from the subject and the audience,** in your own words: what the film is, how it looks and sounds, and why that fits this subject and this audience. There is no list to fill in; `references/techniques.md` has ingredients, and the starter's values are placeholders, not a house style. Never reuse the look or sound of a previous piece by default: two different subjects should not come out looking or sounding alike. If the user points at someone else's piece ("like that viral one"), borrow its techniques, never its characters, story or compositions.View the complete source on GitHubsoundtrack
When your agent uses it
This skill should be used when the user asks to "add music to the animation", "make the music in code", "synthesize a soundtrack", "compose background music that fits the cuts", "sync the music to the video", "check if the audio lines up with the picture", or "the music is too sudden / startling". Covers a code-synthesized score that lives inside the animation page (Web Audio API, rendered offline to WAV), AI-generated or user-supplied music, and an automatic check that cuts land on the beat without a startling jump in loudness.
What it loads into context
Frontmatter
132 tokensAlways available to the agent
SKILL.md
1,169 tokensWhen the skill is activated
Reference documents
465 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Write the sound for this film
- How the music follows the picture
- Other sources (only when asked)
- Always: check it
- Limits
Scripts executed separately
scripts/sync-check.mjstemplates/groove.jstemplates/score.js
Files
SKILL.mdcore4,862 bytesSKILL.mdcore4,862 bytesSKILL.mdcore4,862 bytesreferences/ai-music.mddoc1,528 bytesscripts/sync-check.mjsruns7,215 bytestemplates/groove.jsruns12,131 bytestemplates/score.jsruns5,595 bytes
Read SKILL.md
# Soundtrack
## Write the sound for this film
A film's sound is written for that film: its own instruments, rhythm and harmony in Web Audio, from nothing, in `window.SCORE = ac => { … }` (oscillators, noise, filters, envelopes, delays: whatever the piece calls for). Drums, a groove or a music-box bed are written the same way, for this film: no two films should sound alike because they share a template. `templates/groove.js` and `templates/score.js` are two ready-made scores, used only when the user asks for them; each file documents its options.
`render.mjs` (from the `javascript-animation` skill) renders `window.SCORE` offline with `OfflineAudioContext`, writes `<out>.wav` and muxes it into the MP4; the page's live preview plays the same score when clicked.
Don't ask the user to choose a music source up front. At delivery, mention in one line that AI-generated music or their own track also work.
## How the music follows the picture
- **Tempo map.** Each scene gets a whole number of bars (the tempo may flex per scene), so every cut lands on a downbeat.
- **Mark cuts with harmony, not volume.** Each scene walks home to the dominant and the cut arrives on the tonic. A loud accent on a cut (bass + bright chime at once) reads as a jump scare: users flagged a +7 to +10 dB jump as startling; +3 to +5 dB with a chord change reads as a clean edit.View the complete source on GitHubSkills included
- javascript-animation
- soundtrack
Repository facts
- License
- MIT
- Created
- Sep 23, 2026
- Last pushed
- Sep 30, 2026
- Forks
- 5
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 7, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 4 notes
skills/javascript-animation/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/soundtrack/scripts/sync-check.mjs:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/soundtrack/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/soundtrack/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 1 dangerous shell commandin 1 file: soundtrack/references/ai-music.md:10
- 13 network referencesin 4 files: .claude-plugin/plugin.json:5 .claude-plugin/marketplace.json:3 javascript-animation/scripts/asset-audit.mjs:46 and 1 more
- 2 obfuscation signalsin 1 file: soundtrack/references/ai-music.md:10
- No instruction overrides
- 8 executable scriptsin 6 files: skills/soundtrack/scripts/sync-check.mjs:1 javascript-animation/scripts/asset-audit.mjs:1 javascript-animation/scripts/layout-check.mjs:1 and 3 more
- 2 references to secretsin 1 file: soundtrack/references/ai-music.md:10
- No requests to vote in Hot
Show all 26 signals by file
.claude-plugin/marketplace.json
.claude-plugin/plugin.json
- Network accessline 5
"author": { "name": "iart.ai", "url": "https://iart.ai" - Network accessline 6
"name": "iart.ai", "url": "https://iart.ai" }, - Network accessline 7
"url": "https://iart.ai" - Network accessline 8
}, "homepage": "https://iart.ai", "repository": "https://github.com/iart-ai/javascript-animation-skills", - Network accessline 9
"homepage": "https://iart.ai", - Network accessline 10
"repository": "https://github.com/iart-ai/javascript-animation-skills",
skills/javascript-animation/scripts/asset-audit.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 46
let browser; try { browser = await chromium.launch({ channel: 'chrome' }); } catch { browser = await chromium.launch(); } const page = await browser.newPage(), self = 'file://' + resolve(file); page.on('request', r => { if (!r.url().sta - Network accessline 47
const page = await browser.newPage(), self = 'file://' + resolve(file); page.on('request', r => { if (!r.url().startsWith(self)) requests.push(r.url()); }); await page.goto(self + '?render'); await page.waitForTimeout(1500); - Network accessline 48
page.on('request', r => { if (!r.url().startsWith(self)) requests.push(r.url()); });
skills/javascript-animation/scripts/layout-check.mjs
- Executable scriptline 1
#!/usr/bin/env node
skills/javascript-animation/scripts/render.mjs
- Executable scriptline 1
#!/usr/bin/env node
skills/soundtrack/references/ai-music.md
- Dangerous shell operationline 10
[Credential-related source omitted] - Network accessline 10
[Credential-related source omitted] - Possible obfuscationline 10
[Credential-related source omitted] - Access to secretsline 10
[Credential-related source omitted] - Access to secretsline 11
[Credential-related source omitted] - Possible obfuscationline 13
| python3 -c "import sys,json,base64;b=''.join(json.loads(l[5:]).get('choices',[{}])[0].get('delta',{}).get('audio',{}).get('data','') for l in sys.stdin if l.startswith('data:') and 'DONE' not in l);open('bgm.mp3','wb').write(base64.b64dec
skills/soundtrack/scripts/sync-check.mjs
skills/soundtrack/templates/groove.js
- Executable scriptline 1
Executable file
skills/soundtrack/templates/score.js
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 17 facts
- Executable script in code of a file that runsjavascript-animation/scripts/asset-audit.mjs:1High confidence
- Network access in code of a file that runsjavascript-animation/scripts/asset-audit.mjs:46High confidence
- Network access in code of a file that runsjavascript-animation/scripts/asset-audit.mjs:47High confidence
- Network access in code of a file that runsjavascript-animation/scripts/asset-audit.mjs:48High confidence
- Executable script in code of a file that runsjavascript-animation/scripts/layout-check.mjs:1High confidence
- Executable script in code of a file that runsjavascript-animation/scripts/render.mjs:1High confidence
- Dangerous shell operation in code of documentationsoundtrack/references/ai-music.md:10Low confidence
- Network access in code of documentationsoundtrack/references/ai-music.md:10Low confidence
- Possible obfuscation in code of documentationsoundtrack/references/ai-music.md:10Low confidence
- Access to secrets in code of documentationsoundtrack/references/ai-music.md:10Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuesoundtrack/references/ai-music.md:11Low confidence
- Possible obfuscation in code of documentationsoundtrack/references/ai-music.md:13Low confidence
- Executable script in code of a file that runsskills/soundtrack/scripts/sync-check.mjs:1High confidence
- Executable script in code of a file that runsskills/soundtrack/scripts/sync-check.mjs:1High confidence
- Executable script in code of a file that runssoundtrack/scripts/sync-check.mjs:1High confidence
- Executable script in a comment of a file that runssoundtrack/templates/groove.js:1Low confidence
- Executable script in a comment of a file that runssoundtrack/templates/score.js:1Low confidence
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/javascript-animation/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/javascript-animation/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/javascript-animation/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/javascript-animation/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/javascript-animation/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.