Individual skill
procedural-film
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.
skills/procedural-film/SKILL.md
Source commit f59413999ae24f6e1f9165b73a0eaa97a0b1c407
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- Yes
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Network or broad shell
- Last checked
- Nov 10, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 544
- Repository last updated
- Sep 25, 2026
- License
- MIT
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- engineering Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesSKILL.mdcore · 29,765 bytesfoundation/.gitignoreasset · 198 bytesfoundation/src/core.jsruns · 22,107 bytesfoundation/src/lib.jsruns · 88,979 bytesfoundation/src/music.jsruns · 50,116 bytesfoundation/src/player.jsruns · 6,746 bytesfoundation/src/props.jsruns · 15,339 bytesfoundation/tools/audio/analyze.cjsruns · 11,644 bytesfoundation/tools/audio/bands.cjsruns · 2,703 bytesfoundation/tools/audio/cost.cjsruns · 1,941 bytesfoundation/tools/audio/diffwin.cjsruns · 1,209 bytesfoundation/tools/audio/envdump.cjsruns · 1,459 bytesfoundation/tools/audio/live.cjsruns · 1,603 bytesfoundation/tools/audio/notes.cjsruns · 2,756 bytesfoundation/tools/audio/peaks.cjsruns · 1,250 bytesfoundation/tools/audio/probe.cjsruns · 1,664 bytesfoundation/tools/audio/render-audio.cjsruns · 4,046 bytesfoundation/tools/build.cjsruns · 2,439 bytesfoundation/tools/check.cjsruns · 46,984 bytesfoundation/tools/common.cjsruns · 29,783 bytesfoundation/tools/cutout.pyruns · 1,044 bytesfoundation/tools/fixtures/music.jsruns · 3,880 bytesfoundation/tools/fixtures/scenes/01-lib-showcase.jsruns · 9,865 bytesfoundation/tools/fixtures/scenes/02-fx-egg.jsruns · 1,361 bytesfoundation/tools/fixtures/scenes/03-fx-meadow.jsruns · 1,369 bytesfoundation/tools/fixtures/scenes/04-palette-sheet.jsruns · 2,452 bytesfoundation/tools/fixtures/timeline.jsruns · 1,225 bytesfoundation/tools/package-lock.jsonasset · 1,064 bytesfoundation/tools/package.jsonruns · 56 bytesfoundation/tools/photos.cjsruns · 1,941 bytesfoundation/tools/render.cjsruns · 10,923 bytesfoundation/tools/smoke.cjsruns · 453 bytesfoundation/tools/snap.cjsruns · 6,573 bytesfoundation/tools/stubgen.cjsruns · 4,843 bytesgame/src/game/00-config.jsruns · 986 bytesgame/src/game/01-levels.jsruns · 5,961 bytesgame/src/game/10-engine.jsruns · 66,073 bytesgame/src/game/15-tokens.jsruns · 3,048 bytesgame/src/game/20-tape.jsruns · 11,041 bytesgame/src/game/21-attract.jsruns · 822 bytesgame/src/game/30-draw.jsruns · 20,755 bytesgame/src/game/40-api.jsruns · 9,215 bytesgame/src/game/45-clock.jsruns · 2,253 bytesgame/src/game/50-menu.jsruns · 24,144 bytesgame/src/manifest.jsruns · 5,393 bytesgame/src/music.jsruns · 10,200 bytesgame/src/scenes/01-game.jsruns · 1,115 bytesgame/src/shell.jsruns · 59,312 bytesgame/src/sprites.jsruns · 22,546 bytesgame/src/timeline.jsruns · 2,297 bytesgame/tools/art-check.cjsruns · 4,743 bytesgame/tools/attract.cjsruns · 4,235 bytesgame/tools/audio/contract.cjsruns · 3,294 bytesgame/tools/audio/events.cjsruns · 1,651 bytesgame/tools/audio/game-audio.cjsruns · 18,411 bytesgame/tools/audio/host.cjsruns · 5,825 bytesgame/tools/audio/mock-events.jsruns · 2,150 bytesgame/tools/build.cjsruns · 4,736 bytesgame/tools/config.cjsruns · 1,837 bytesgame/tools/deploy.cjsruns · 11,543 bytesgame/tools/e2e/lib.cjsruns · 7,190 bytesgame/tools/e2e/run.cjsruns · 30,370 bytesgame/tools/e2e/serve.cjsruns · 4,742 bytesgame/tools/game-check.cjsruns · 21,551 bytesgame/tools/gates.cjsruns · 2,878 bytesgame/tools/levels-lint.cjsruns · 22,299 bytesgame/tools/png.cjsruns · 10,775 bytesgame/tools/proof/clock.cjsruns · 5,540 bytesgame/tools/proof/determinism.cjsruns · 5,779 bytesgame/tools/proof/engine-scenarios.cjsruns · 48,226 bytesgame/tools/proof/fixtures/engine-defs.cjsruns · 6,723 bytesgame/tools/proof/full.cjsruns · 5,233 bytesgame/tools/proof/harness.cjsruns · 11,621 bytesgame/tools/proof/levels.cjsruns · 9,497 bytesgame/tools/proof/levels.data.cjsruns · 2,673 bytesgame/tools/proof/menu.cjsruns · 19,132 bytesgame/tools/proof/no-network.cjsruns · 3,026 bytesgame/tools/proof/programs/1-1.cjsruns · 1,110 bytesgame/tools/proof/programs/kit.cjsruns · 23,269 bytesgame/tools/proof/programs/routes.cjsruns · 3,273 bytesgame/tools/proof/tapes/1-1-cellar.modern.jsonasset · 552 bytesgame/tools/proof/tapes/1-1-cellar.nes.jsonasset · 549 bytesgame/tools/proof/tapes/1-1.modern.jsonasset · 686 bytesgame/tools/proof/tapes/1-1.nes.jsonasset · 683 bytesgame/tools/proof/tapes/full.modern.jsonasset · 676 bytesgame/tools/proof/tapes/full.nes.jsonasset · 673 bytesgame/tools/site.cjsruns · 17,514 bytesreference/example-blueprint-frame.jpgasset · 77,673 bytesreference/example-contact-sheet.jpgasset · 544,834 bytesreference/example-paper-frame.jpgasset · 118,122 bytesreference/music.mddoc · 4,624 bytesreference/retro-display.mddoc · 6,745 bytesreference/retro-game.mddoc · 19,372 bytesreference/retro-sound.mddoc · 6,741 bytesreference/scene-anatomy.mddoc · 5,351 bytesreference/shot-types.mddoc · 8,340 bytesretro/src/chip.jsruns · 43,605 bytesretro/src/crt.jsruns · 74,517 bytesretro/src/pixel.jsruns · 27,041 bytesretro/tools/audio/melody.cjsruns · 4,877 bytesretro/tools/fixtures/retro/music.jsruns · 1,036 bytesretro/tools/fixtures/retro/scenes/01-sheet.jsruns · 1,267 bytesretro/tools/fixtures/retro/scenes/02-crt.jsruns · 393 bytesretro/tools/fixtures/retro/sprites.jsruns · 2,196 bytesretro/tools/fixtures/retro/timeline.jsruns · 1,538 bytestemplates/CONTRACT.mddoc · 8,468 bytestemplates/art-bible-photo-doodle.mddoc · 8,546 bytestemplates/art-bible-retro.mddoc · 12,316 bytestemplates/art-bible.mddoc · 12,545 bytestemplates/cast.jsruns · 11,075 bytestemplates/game-spec.mddoc · 19,125 bytestemplates/music-retro.jsruns · 3,457 bytestemplates/reference-analysis.mddoc · 8,179 bytestemplates/sprites.jsruns · 7,542 bytestemplates/storyboard.mddoc · 5,464 bytes
Read excerpt
# 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 |