Not in the top 1,000 by GitHub stars
kuhnhomeuk-cell/procedural-film
Agent skill: turn a topic into a 30s vertical film drawn and scored entirely in JavaScript. Reference film: the life of a monarch butterfly.
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/procedural-film/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f59413999ae2 → f59413999ae2
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f59413999ae2
No earlier version was observed for comparison.
Heat
4.7- 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
- procedural-film
skills/procedural-film
How it works
procedural-film
When your agent uses it
Procedural film — turn a subject into a short animated film drawn and scored entirely in JavaScript, in one of three modes: drawn (every pixel computed, zero assets), photo-doodle (real photographs with animated doodles drawn over them) or retro (pixel art on an NES palette with a chip score). Use when the user asks for a procedural film, a short hand-drawn animated film about a subject, a film that doodles on photos, or a retro pixel-art film. It also makes a retro platformer game: use it when the user asks for a retro platformer game, an NES-style game or a pixel-art game to play in the browser.
What it loads into context
Frontmatter
143 tokensAlways available to the agent
SKILL.md
7,539 tokensWhen the skill is activated
Reference documents
34,870 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Modes — pick one before step 1
- The gate
- Worked example
- Pipeline
- Retro game
Scripts executed separately
foundation/src/core.jsfoundation/src/lib.jsfoundation/src/music.jsfoundation/src/player.jsfoundation/src/props.jsfoundation/tools/audio/analyze.cjsfoundation/tools/audio/bands.cjsfoundation/tools/audio/cost.cjsfoundation/tools/audio/diffwin.cjsfoundation/tools/audio/envdump.cjsfoundation/tools/audio/live.cjsfoundation/tools/audio/notes.cjsfoundation/tools/audio/peaks.cjsfoundation/tools/audio/probe.cjsfoundation/tools/audio/render-audio.cjsfoundation/tools/build.cjsfoundation/tools/check.cjsfoundation/tools/common.cjsfoundation/tools/cutout.pyfoundation/tools/fixtures/music.jsfoundation/tools/fixtures/scenes/01-lib-showcase.jsfoundation/tools/fixtures/scenes/02-fx-egg.jsfoundation/tools/fixtures/scenes/03-fx-meadow.jsfoundation/tools/fixtures/scenes/04-palette-sheet.jsfoundation/tools/fixtures/timeline.jsfoundation/tools/package.jsonfoundation/tools/photos.cjsfoundation/tools/render.cjsfoundation/tools/smoke.cjsfoundation/tools/snap.cjsfoundation/tools/stubgen.cjsgame/src/game/00-config.jsgame/src/game/01-levels.jsgame/src/game/10-engine.jsgame/src/game/15-tokens.jsgame/src/game/20-tape.jsgame/src/game/21-attract.jsgame/src/game/30-draw.jsgame/src/game/40-api.jsgame/src/game/45-clock.jsgame/src/game/50-menu.jsgame/src/manifest.jsgame/src/music.jsgame/src/scenes/01-game.jsgame/src/shell.jsgame/src/sprites.jsgame/src/timeline.jsgame/tools/art-check.cjsgame/tools/attract.cjsgame/tools/audio/contract.cjsgame/tools/audio/events.cjsgame/tools/audio/game-audio.cjsgame/tools/audio/host.cjsgame/tools/audio/mock-events.jsgame/tools/build.cjsgame/tools/config.cjsgame/tools/deploy.cjsgame/tools/e2e/lib.cjsgame/tools/e2e/run.cjsgame/tools/e2e/serve.cjsgame/tools/game-check.cjsgame/tools/gates.cjsgame/tools/levels-lint.cjsgame/tools/png.cjsgame/tools/proof/clock.cjsgame/tools/proof/determinism.cjsgame/tools/proof/engine-scenarios.cjsgame/tools/proof/fixtures/engine-defs.cjsgame/tools/proof/full.cjsgame/tools/proof/harness.cjsgame/tools/proof/levels.cjsgame/tools/proof/levels.data.cjsgame/tools/proof/menu.cjsgame/tools/proof/no-network.cjsgame/tools/proof/programs/1-1.cjsgame/tools/proof/programs/kit.cjsgame/tools/proof/programs/routes.cjsgame/tools/site.cjsretro/src/chip.jsretro/src/crt.jsretro/src/pixel.jsretro/tools/audio/melody.cjsretro/tools/fixtures/retro/music.jsretro/tools/fixtures/retro/scenes/01-sheet.jsretro/tools/fixtures/retro/scenes/02-crt.jsretro/tools/fixtures/retro/sprites.jsretro/tools/fixtures/retro/timeline.jstemplates/cast.jstemplates/music-retro.jstemplates/sprites.js
Files
SKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesSKILL.mdcore29,765 bytesfoundation/.gitignoreasset198 bytesfoundation/src/core.jsruns22,107 bytesfoundation/src/lib.jsruns88,979 bytesfoundation/src/music.jsruns50,116 bytesfoundation/src/player.jsruns6,746 bytesfoundation/src/props.jsruns15,339 bytesfoundation/tools/audio/analyze.cjsruns11,644 bytesfoundation/tools/audio/bands.cjsruns2,703 bytesfoundation/tools/audio/cost.cjsruns1,941 bytesfoundation/tools/audio/diffwin.cjsruns1,209 bytesfoundation/tools/audio/envdump.cjsruns1,459 bytesfoundation/tools/audio/live.cjsruns1,603 bytesfoundation/tools/audio/notes.cjsruns2,756 bytesfoundation/tools/audio/peaks.cjsruns1,250 bytesfoundation/tools/audio/probe.cjsruns1,664 bytesfoundation/tools/audio/render-audio.cjsruns4,046 bytesfoundation/tools/build.cjsruns2,439 bytesfoundation/tools/check.cjsruns46,984 bytesfoundation/tools/common.cjsruns29,783 bytesfoundation/tools/cutout.pyruns1,044 bytesfoundation/tools/fixtures/music.jsruns3,880 bytesfoundation/tools/fixtures/scenes/01-lib-showcase.jsruns9,865 bytesfoundation/tools/fixtures/scenes/02-fx-egg.jsruns1,361 bytesfoundation/tools/fixtures/scenes/03-fx-meadow.jsruns1,369 bytesfoundation/tools/fixtures/scenes/04-palette-sheet.jsruns2,452 bytesfoundation/tools/fixtures/timeline.jsruns1,225 bytesfoundation/tools/package-lock.jsonasset1,064 bytesfoundation/tools/package.jsonruns56 bytesfoundation/tools/photos.cjsruns1,941 bytesfoundation/tools/render.cjsruns10,923 bytesfoundation/tools/smoke.cjsruns453 bytesfoundation/tools/snap.cjsruns6,573 bytesfoundation/tools/stubgen.cjsruns4,843 bytesgame/src/game/00-config.jsruns986 bytesgame/src/game/01-levels.jsruns5,961 bytesgame/src/game/10-engine.jsruns66,073 bytesgame/src/game/15-tokens.jsruns3,048 bytesgame/src/game/20-tape.jsruns11,041 bytesgame/src/game/21-attract.jsruns822 bytesgame/src/game/30-draw.jsruns20,755 bytesgame/src/game/40-api.jsruns9,215 bytesgame/src/game/45-clock.jsruns2,253 bytesgame/src/game/50-menu.jsruns24,144 bytesgame/src/manifest.jsruns5,393 bytesgame/src/music.jsruns10,200 bytesgame/src/scenes/01-game.jsruns1,115 bytesgame/src/shell.jsruns59,312 bytesgame/src/sprites.jsruns22,546 bytesgame/src/timeline.jsruns2,297 bytesgame/tools/art-check.cjsruns4,743 bytesgame/tools/attract.cjsruns4,235 bytesgame/tools/audio/contract.cjsruns3,294 bytesgame/tools/audio/events.cjsruns1,651 bytesgame/tools/audio/game-audio.cjsruns18,411 bytesgame/tools/audio/host.cjsruns5,825 bytesgame/tools/audio/mock-events.jsruns2,150 bytesgame/tools/build.cjsruns4,736 bytesgame/tools/config.cjsruns1,837 bytesgame/tools/deploy.cjsruns11,543 bytesgame/tools/e2e/lib.cjsruns7,190 bytesgame/tools/e2e/run.cjsruns30,370 bytesgame/tools/e2e/serve.cjsruns4,742 bytesgame/tools/game-check.cjsruns21,551 bytesgame/tools/gates.cjsruns2,878 bytesgame/tools/levels-lint.cjsruns22,299 bytesgame/tools/png.cjsruns10,775 bytesgame/tools/proof/clock.cjsruns5,540 bytesgame/tools/proof/determinism.cjsruns5,779 bytesgame/tools/proof/engine-scenarios.cjsruns48,226 bytesgame/tools/proof/fixtures/engine-defs.cjsruns6,723 bytesgame/tools/proof/full.cjsruns5,233 bytesgame/tools/proof/harness.cjsruns11,621 bytesgame/tools/proof/levels.cjsruns9,497 bytesgame/tools/proof/levels.data.cjsruns2,673 bytesgame/tools/proof/menu.cjsruns19,132 bytesgame/tools/proof/no-network.cjsruns3,026 bytesgame/tools/proof/programs/1-1.cjsruns1,110 bytesgame/tools/proof/programs/kit.cjsruns23,269 bytesgame/tools/proof/programs/routes.cjsruns3,273 bytesgame/tools/proof/tapes/1-1-cellar.modern.jsonasset552 bytesgame/tools/proof/tapes/1-1-cellar.nes.jsonasset549 bytesgame/tools/proof/tapes/1-1.modern.jsonasset686 bytesgame/tools/proof/tapes/1-1.nes.jsonasset683 bytesgame/tools/proof/tapes/full.modern.jsonasset676 bytesgame/tools/proof/tapes/full.nes.jsonasset673 bytesgame/tools/site.cjsruns17,514 bytesreference/example-blueprint-frame.jpgasset77,673 bytesreference/example-contact-sheet.jpgasset544,834 bytesreference/example-paper-frame.jpgasset118,122 bytesreference/music.mddoc4,624 bytesreference/retro-display.mddoc6,745 bytesreference/retro-game.mddoc19,372 bytesreference/retro-sound.mddoc6,741 bytesreference/scene-anatomy.mddoc5,351 bytesreference/shot-types.mddoc8,340 bytesretro/src/chip.jsruns43,605 bytesretro/src/crt.jsruns74,517 bytesretro/src/pixel.jsruns27,041 bytesretro/tools/audio/melody.cjsruns4,877 bytesretro/tools/fixtures/retro/music.jsruns1,036 bytesretro/tools/fixtures/retro/scenes/01-sheet.jsruns1,267 bytesretro/tools/fixtures/retro/scenes/02-crt.jsruns393 bytesretro/tools/fixtures/retro/sprites.jsruns2,196 bytesretro/tools/fixtures/retro/timeline.jsruns1,538 bytestemplates/CONTRACT.mddoc8,468 bytestemplates/art-bible-photo-doodle.mddoc8,546 bytestemplates/art-bible-retro.mddoc12,316 bytestemplates/art-bible.mddoc12,545 bytestemplates/cast.jsruns11,075 bytestemplates/game-spec.mddoc19,125 bytestemplates/music-retro.jsruns3,457 bytestemplates/reference-analysis.mddoc8,179 bytestemplates/sprites.jsruns7,542 bytestemplates/storyboard.mddoc5,464 bytes
Read SKILL.md
# Procedural film
Turn a topic into a **film**: roughly 30 seconds at 24 fps, every event on a **beat grid** (bpm → beats → frames), every stroke and every audio sample computed in plain browser JavaScript. The deliverable is `dist/<slug>.html` (a self-contained player) plus `exports/<slug>.mp4` and its phone and preview transcodes.
The skill also makes a retro platformer game that plays in the browser. That track is under "Retro game" at the end of this file.
## Modes — pick one before step 1
| | **drawn** (default) | **photo-doodle** | **retro** |
|---|---|---|---|
| What is on screen | every pixel computed: hand-inked **paper plate** shots cut against navy **blueprint plate** shots | a background-removed **photograph** per shot, standing on tinted paper, with animated doodles drawn over and around it | pixel art on the NES palette, shown sharp or on an optional old TV |
| Frame | vertical 1080×1920 | square 1080×1080 | 1920×1080 at 60 fps, drawn at 320×180 |
| Subject | explaining something real: a life cycle, a process, how a thing works | a story staged on ordinary objects, where each photo becomes a set (a clock becomes a bed, a pine cone becomes a mountain) | a story told as a side-scrolling pixel scene |
| Assets | none at all | photographs you source, licence and cut out yourself | none at all |View the complete source on GitHubSkills included
- procedural-film
Repository facts
- License
- MIT
- Created
- Sep 17, 2026
- Last pushed
- Sep 25, 2026
- Forks
- 60
- Open issues
- 4
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 48 notes
skills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/procedural-film/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 48 network referencesin 13 files: procedural-film/game/tools/deploy.cjs:153 procedural-film/foundation/tools/package-lock.json:11 procedural-film/game/tools/e2e/run.cjs:69 and 10 more
- No hidden or obfuscated text
- No instruction overrides
- 90 executable scriptsin 90 files: procedural-film/foundation/src/core.js:1 procedural-film/foundation/src/lib.js:1 procedural-film/foundation/src/music.js:1 and 87 more
- 1 reference to secretsin 1 file: procedural-film/foundation/.gitignore:6
- No requests to vote in Hot
Show all 139 signals by file
skills/procedural-film/SKILL.md
- Network accessline 45
`butterfly-life` is a finished film from this pipeline, at `../../examples/butterfly-life/` from this skill folder, or online at https://github.com/kuhnhomeuk-cell/procedural-film/tree/main/examples/butterfly-life when that folder is absent
skills/procedural-film/foundation/.gitignore
- Access to secretsline 6
[Credential-related source omitted]
skills/procedural-film/foundation/src/core.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/src/lib.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/src/music.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/src/player.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/src/props.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/audio/analyze.cjs
- Executable scriptline 1
Executable file - Network accessline 223
c += x * y; ea += x * x; eb += y * y; } const nc = c / Math.sqrt(ea * eb + 1e-20); - Network accessline 224
} const nc = c / Math.sqrt(ea * eb + 1e-20); if (nc > bestC) { bestC = nc; bestLag = lag; } - Network accessline 225
const nc = c / Math.sqrt(ea * eb + 1e-20); - Network accessline 226
if (nc > bestC) { bestC = nc; bestLag = lag; }
skills/procedural-film/foundation/tools/audio/bands.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/audio/cost.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/audio/diffwin.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/audio/envdump.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/audio/live.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/audio/notes.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/audio/peaks.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/audio/probe.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/audio/render-audio.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/build.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/foundation/tools/check.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/foundation/tools/common.cjs
- Executable scriptline 1
Executable file - Network accessline 614
{ name: '.src/.srcset assignment', re: /\.\s*(?:src|srcset)\s*=(?!=)/g }, { name: 'setAttribute(src/srcset/href)', re: /setAttribute(?:NS)?\s*\(\s*(?:[^,()]*,\s*)?['"`](?:src|srcset|href|xlink:href)['"`]/gi }, { name: 'fetch(', re: /\bf - Network accessline 615
{ name: 'setAttribute(src/srcset/href)', re: /setAttribute(?:NS)?\s*\(\s*(?:[^,()]*,\s*)?['"`](?:src|srcset|href|xlink:href)['"`]/gi }, { name: 'fetch(', re: /\bfetch\s*\(/g }, { name: 'XMLHttpRequest', re: /XMLHttpRequest/g }, - Network accessline 616
{ name: 'fetch(', re: /\bfetch\s*\(/g },
skills/procedural-film/foundation/tools/cutout.py
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/fixtures/music.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/fixtures/scenes/01-lib-showcase.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/fixtures/scenes/02-fx-egg.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/fixtures/scenes/03-fx-meadow.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/fixtures/scenes/04-palette-sheet.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/fixtures/timeline.js
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/package-lock.json
- Network accessline 11
"node_modules/playwright": { "version": "1.63.0", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", - Network accessline 12
"version": "1.63.0", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", - Network accessline 13
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", - Network accessline 26
"node_modules/playwright-core": { "version": "1.63.0", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", - Network accessline 27
"version": "1.63.0", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", - Network accessline 28
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz",
skills/procedural-film/foundation/tools/package.json
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/photos.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/foundation/tools/render.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/foundation/tools/smoke.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/foundation/tools/snap.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/foundation/tools/stubgen.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/src/game/00-config.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/game/01-levels.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/game/10-engine.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/game/15-tokens.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/game/20-tape.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/game/21-attract.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/game/30-draw.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/game/40-api.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/game/45-clock.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/game/50-menu.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/manifest.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/music.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/scenes/01-game.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/shell.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/sprites.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/src/timeline.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/art-check.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/attract.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/audio/contract.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/audio/events.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/audio/game-audio.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/audio/host.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/audio/mock-events.js
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/build.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/config.cjs
- Executable scriptline 1
Executable file - Network accessline 32
if (explicit) return { url: String(explicit).replace(/\/+$/, ''), placeholder: false }; if (cfg.siteUrl) return { url: String(cfg.siteUrl).replace(/\/+$/, ''), placeholder: false }; return { url: `https://${cfg.slug}.vercel.app`, placeh - Network accessline 33
if (cfg.siteUrl) return { url: String(cfg.siteUrl).replace(/\/+$/, ''), placeholder: false }; return { url: `https://${cfg.slug}.vercel.app`, placeholder: true }; } - Network accessline 34
return { url: `https://${cfg.slug}.vercel.app`, placeholder: true };
skills/procedural-film/game/tools/deploy.cjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 153
name = REDEPLOY ? linkedName() || NAMES[0] : NAMES[0]; site = CFG.siteUrl ? CFG.siteUrl.replace(/\/+$/, '') : `https://${name}.vercel.app`; - Network accessline 154
site = CFG.siteUrl ? CFG.siteUrl.replace(/\/+$/, '') : `https://${name}.vercel.app`; - Network accessline 156
name = linkedName(); if (!name || !NAMES.includes(name)) throw new Error(`--redeploy needs web/.vercel/project.json linked to ${NAMES.join(' or ')} by an earlier run (found ${name})`); site = CFG.siteUrl ? CFG.siteUrl.replace(/\/+$/ - Network accessline 157
if (!name || !NAMES.includes(name)) throw new Error(`--redeploy needs web/.vercel/project.json linked to ${NAMES.join(' or ')} by an earlier run (found ${name})`); site = CFG.siteUrl ? CFG.siteUrl.replace(/\/+$/, '') : `https://${name}. - Network accessline 158
site = CFG.siteUrl ? CFG.siteUrl.replace(/\/+$/, '') : `https://${name}.vercel.app`; - Network accessline 160
} else { ({ name } = pickName()); site = CFG.siteUrl ? CFG.siteUrl.replace(/\/+$/, '') : `https://${name}.vercel.app`; - Network accessline 161
({ name } = pickName()); site = CFG.siteUrl ? CFG.siteUrl.replace(/\/+$/, '') : `https://${name}.vercel.app`; } - Network accessline 162
site = CFG.siteUrl ? CFG.siteUrl.replace(/\/+$/, '') : `https://${name}.vercel.app`;
skills/procedural-film/game/tools/e2e/lib.cjs
- Executable scriptline 1
Executable file - Network accessline 62
}); page.on('pageerror', (e) => t.errors.push('pageerror: ' + e.message)); page.on('request', (r) => t.requests.push(r.url())); - Network accessline 63
page.on('pageerror', (e) => t.errors.push('pageerror: ' + e.message)); page.on('request', (r) => t.requests.push(r.url())); await page.addInitScript(initScript); - Network accessline 64
page.on('request', (r) => t.requests.push(r.url()));
skills/procedural-film/game/tools/e2e/run.cjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 69
ok(nHashes === nScripts, `CSP lists ${nHashes} hashes for ${nScripts} scripts`); const origin = new URL(t.url).origin; const other = t.requests.filter((u) => { - Network accessline 70
const origin = new URL(t.url).origin; const other = t.requests.filter((u) => { const x = new URL(u); - Network accessline 71
const other = t.requests.filter((u) => { - Network accessline 77
ok(h['x-content-type-options'] === 'nosniff' && h['referrer-policy'] === 'no-referrer' && /frame-ancestors 'none'/.test(h['content-security-policy'] || ''), `document headers missing vercel.json values: ${JSON.stringify(h)}`); - Network accessline 78
`document headers missing vercel.json values: ${JSON.stringify(h)}`); return `${nHashes} script hashes; requests: ${t.requests.map((u) => new URL(u).pathname).join(' ')}; headers nosniff, no-referrer, frame-ancestors 'none'`; }, - Network accessline 79
return `${nHashes} script hashes; requests: ${t.requests.map((u) => new URL(u).pathname).join(' ')}; headers nosniff, no-referrer, frame-ancestors 'none'`;
skills/procedural-film/game/tools/e2e/serve.cjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 62
const server = http.createServer((req, res) => { const { cfg, rules } = loadConfig(root); // re-read: site.cjs may rewrite it between runs const u = new URL(req.url, 'http://x'); - Network accessline 63
const { cfg, rules } = loadConfig(root); // re-read: site.cjs may rewrite it between runs const u = new URL(req.url, 'http://x'); let p; - Network accessline 64
const u = new URL(req.url, 'http://x'); - Network accessline 98
const a = server.address(); resolve({ url: `http://${host}:${a.port}`, - Network accessline 99
resolve({ url: `http://${host}:${a.port}`, port: a.port, - Network accessline 100
url: `http://${host}:${a.port}`,
skills/procedural-film/game/tools/game-check.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/gates.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/levels-lint.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/png.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/proof/clock.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/proof/determinism.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/proof/engine-scenarios.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/proof/fixtures/engine-defs.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/proof/full.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/proof/harness.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/proof/levels.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/proof/levels.data.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/proof/menu.cjs
- Executable scriptline 1
#!/usr/bin/env node
skills/procedural-film/game/tools/proof/no-network.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/proof/programs/1-1.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/proof/programs/kit.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/proof/programs/routes.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/game/tools/site.cjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 8
// 2. W3: inserts right after <meta charset> a Content-Security-Policy <meta> with one sha256 per inline // script, and into the game page (before <style>) the share block from a fixed template whose only // variable is SITE (validate - Network accessline 9
// script, and into the game page (before <style>) the share block from a fixed template whose only // variable is SITE (validated against ^https://[a-z0-9-]+\.vercel\.app$). Then asserts that each final // page equals its scanned - Network accessline 10
// variable is SITE (validated against ^https://[a-z0-9-]+\.vercel\.app$). Then asserts that each final
skills/procedural-film/reference/retro-game.md
skills/procedural-film/retro/src/chip.js
- Executable scriptline 1
Executable file
skills/procedural-film/retro/src/crt.js
- Executable scriptline 1
Executable file
skills/procedural-film/retro/src/pixel.js
- Executable scriptline 1
Executable file
skills/procedural-film/retro/tools/audio/melody.cjs
- Executable scriptline 1
Executable file
skills/procedural-film/retro/tools/fixtures/retro/music.js
- Executable scriptline 1
Executable file
skills/procedural-film/retro/tools/fixtures/retro/scenes/01-sheet.js
- Executable scriptline 1
Executable file
skills/procedural-film/retro/tools/fixtures/retro/scenes/02-crt.js
- Executable scriptline 1
Executable file
skills/procedural-film/retro/tools/fixtures/retro/sprites.js
- Executable scriptline 1
Executable file
skills/procedural-film/retro/tools/fixtures/retro/timeline.js
- Executable scriptline 1
Executable file
skills/procedural-film/templates/cast.js
- Executable scriptline 1
Executable file
skills/procedural-film/templates/game-spec.md
- Network accessline 84
Banned in every `src` file, checked by the media scan and check 3: `url(`, `.src =`, `data:`, `base64`, `fetch(`, `import(`, `new Image`, `<link`, `@font-face`, quoted media file names, `Math.random`, `Date` (even inside a string), `perform - Network accessline 85
`url(`, `.src =`, `data:`, `base64`, `fetch(`, `import(`, `new Image`, `<link`, `@font-face`, quoted media file names, `Math.random`, `Date` (even inside a string), `performance.now` and crypto randomness.
skills/procedural-film/templates/music-retro.js
- Executable scriptline 1
Executable file
skills/procedural-film/templates/reference-analysis.md
- Network accessline 6
Source: https://x.com/kevin_t_ngo/status/2099858454043349342 (posted 15 Sep 2026, 633K views).
skills/procedural-film/templates/sprites.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: 132 facts
- Network access in prose of the SKILL.mdprocedural-film/SKILL.md:45Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/src/core.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/src/lib.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/src/music.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/src/player.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/src/props.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/analyze.cjs:1Low confidence
- Network access in code of a file that runsprocedural-film/foundation/tools/audio/analyze.cjs:223High confidence
- Network access in code of a file that runsprocedural-film/foundation/tools/audio/analyze.cjs:224High confidence
- Network access in code of a file that runsprocedural-film/foundation/tools/audio/analyze.cjs:225High confidence
- Network access in code of a file that runsprocedural-film/foundation/tools/audio/analyze.cjs:226High confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/bands.cjs:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/cost.cjs:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/diffwin.cjs:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/envdump.cjs:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/live.cjs:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/notes.cjs:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/peaks.cjs:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/probe.cjs:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/audio/render-audio.cjs:1Low confidence
- Executable script in code of a file that runsprocedural-film/foundation/tools/build.cjs:1High confidence
- Executable script in code of a file that runsprocedural-film/foundation/tools/check.cjs:1High confidence
- Executable script in a comment of a file that runsprocedural-film/foundation/tools/common.cjs:1Low confidence
- Network access in code of a file that runsprocedural-film/foundation/tools/common.cjs:614High confidence
- Network access in code of a file that runsprocedural-film/foundation/tools/common.cjs:615High confidence
- Network access in code of a file that runsprocedural-film/foundation/tools/common.cjs:616High confidence
- Executable script in prose of a file that runsprocedural-film/foundation/tools/cutout.py:1Low confidence
- Executable script in a comment of a testprocedural-film/foundation/tools/fixtures/music.js:1Low confidence
- Executable script in a comment of a testprocedural-film/foundation/tools/fixtures/scenes/01-lib-showcase.js:1Low confidence
- Executable script in a comment of a testprocedural-film/foundation/tools/fixtures/scenes/02-fx-egg.js:1Low confidence
- Executable script in a comment of a testprocedural-film/foundation/tools/fixtures/scenes/03-fx-meadow.js:1Low confidence
- Executable script in a comment of a testprocedural-film/foundation/tools/fixtures/scenes/04-palette-sheet.js:1Low confidence
- Executable script in a comment of a testprocedural-film/foundation/tools/fixtures/timeline.js:1Low confidence
- Executable script in code of a file that runsprocedural-film/foundation/tools/package.json:1High confidence
- Executable script in code of a file that runsprocedural-film/foundation/tools/photos.cjs:1High confidence
- Executable script in code of a file that runsprocedural-film/foundation/tools/render.cjs:1High confidence
- Executable script in code of a file that runsprocedural-film/foundation/tools/smoke.cjs:1High confidence
- Executable script in code of a file that runsprocedural-film/foundation/tools/snap.cjs:1High confidence
- Executable script in code of a file that runsprocedural-film/foundation/tools/stubgen.cjs:1High confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/00-config.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/01-levels.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/10-engine.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/15-tokens.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/20-tape.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/21-attract.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/30-draw.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/40-api.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/45-clock.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/game/50-menu.js:1Low confidence
- Executable script in a comment of a file that runsprocedural-film/game/src/manifest.js:1Low confidence
and 82 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md skills/procedural-film/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/procedural-film/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/procedural-film/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/procedural-film/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/procedural-film/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/procedural-film/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.