papermorph
Skill1k starsChanged 2 days agoMITView on GitHub
Make or edit animated, narrated, interactive web books from reference PDFs, animated picture books (paper-puppet films) from a story, a joke or a fairy tale, narrated documentaries about a book or an idea, built from public-domain pictures, and upright shorts for a phone feed that make one point in under three minutes. Use for book planning, storyboards, chapter animation and exercises, narration, and cover and contents pages, including "make the next chapter", "turn this story into a picture book", "make a documentary about this book", "make a short about this for YouTube Shorts" or "fix this animation". Deliver runnable static book files; bookshelf design, bookshelf registration and hosting are separate tasks.
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 20
Read the tier's first file, then only what the current step needs.
- Distinctive: line 29
Every tier shares the core:
- Very specific: line 61
All in SKILL/scripts/; each prints its usage with --help when run with the uv run --with … its docstring's first lines name (without its …
- Distinctive: line 75
Use the engine API and inspect individual functions when needed.
- Very specific: line 76
Keep style.json current and short.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Papermorph
Papermorph makes three tiers of book on one engine:
- Lessons, from a textbook PDF: each chapter is a short animated lesson film where the picture carries the explanation, the narration says it, and quick checks and practice happen inside the picture.
- Picture books, from a story, a joke or a fairy tale: short films of paper puppets in front of sets, drawn in code or painted by an image model, with voices, effects and music.
- Films, from a book, an idea or the user's argument: narrated documentaries of found public-domain pictures, words and maps moved in step with the voice, and upright shorts for a phone feed that make one point in under three minutes.
All are an SVG stage (1600×900, or 900×1600 for a short) plus a player; beats pair narration clips with timed actions. Good means alive (things act and change with weight and timing), composed (each moment reads as one picture, text beside what it names), true (motion, labels and numbers agree at every moment) and smooth (it plays without stutter, Firefox included).
What the picture should be depends on the book and on the user, so the work starts with a conversation that ends in style.json: the user's words, the look they chose, the voices, which model does which step, and later the approved chapters. Every chapter is made against it; how each beat is laid out and choreographed is yours to judge against it and the approved chapters. User requests override defaults. Re-create explanations, examples and drawings; keep source PDFs, page images and extracted text outside the static output folder and out of version control (.gitignore: *.pdf, books/*/pages/). A chapter the Skill made is a first cut: review rounds and the user's viewing come before it is published.
Which tier
Read the tier's first file, then only what the current step needs. Every file below is linked from here; none needs another to be found.
| The user brings | Tier | Start with | Then, as the step needs |
| A textbook PDF (a course book too) | Lessons | lessons.md | intake.md · authoring.md · diagrams.md (tier 1) · scenes.md (tier 2) · assets.md · questions.md · checks.md · cover.md · courses.md (citations, item bank, SCORM: only when the book calls for them) |
| A story, a joke, a fairy tale, or a story book's PDF | Picture books | stories.md | puppets.md · painting.md (a painted look) |
| A book, an idea or a stretch of history to explain as a narrated film | Films: documentary | films.md | documentary.md |
| One point to make in under three minutes, upright, for a phone feed (YouTube Shorts, TikTok, Reels), or a long film to recut | Films: shorts | films.md | shorts.md |
Every tier shares the core:
| File | What it holds |
| core/style.md | how to ask the user, the models step, style.json |
| core/publish.md | new_book.py, language, minutes, preview and delivery, video export |
| core/sound.md | the narration file, voices, levels, effects, music, captions |
| core/review.md | seeing your own work in motion, frames, smoothness, director rounds |
| core/team.md | making chapters with subagents, the coordinator, workers in parallel |
| core/engine.md | the player and drawing API, timing, camera, performance, traps |
Start with the tier's intake whenever books/<book>/style.json does not exist yet; reuse answers and approvals already given. The reference books on https://papermorph.diamonddoge.org/ are the bar: the maths and science books for lessons, Joke Collection and Little Red Riding Hood for picture books, Madness and Civilization, Shooting an Elephant (interactive) and The Pandemic for documentaries, the Madness and Civilization shorts for shorts.
Project layout
books/<book>/ private: source, style.json, storyboards, art, review/ (tier files list their own)
content/<book>/chNN/ narration.<lang>.json and the voice cache
tools/<book>/ tests, audio scripts, evidence
site/<book>/ the static book (only this is delivered)
index.html cover and contents, or a series page
lib/ the engine (synced by engine.py), lib/book.css (this book's settings), the tier's kit, the book's own pieces
img/ the book's pictures
chNN/index.html, audio/<lang>/ a chapter or episode, its beat MP3s and timings.js (films and picture books: audio/sfx/, audio/bgm/)SKILL means this skill's absolute folder; <book> is the book slug, <lang> its primary language code. new_book.py starts a book of any tier (core/publish.md).
Needs: uv, ffmpeg/ffprobe, Edge TTS network access (or Kokoro, local), github.com for engine.py when the repository's engine/ folder is not at hand, an OpenRouter key only for the paid steps the user chooses (paint.py, eleven.py, video.py; paint_openai.py takes an OpenAI key), and Playwright browsers (uv run --with playwright playwright install chromium firefox; where Playwright's Chromium does not run, set CHROME to an installed Chrome, Chromium, Brave or Edge). Preview: python3 SKILL/scripts/serve.py 8765 site (no browser caching).
Scripts
All in SKILL/scripts/; each prints its usage with --help when run with the uv run --with … its docstring's first lines name (without its packages even --help stops on the import).
| For | Scripts |
| Every book | new_book.py start a book folder · serve.py preview without caching · engine.py sync the engine into books · tts.py narration and word times · level.py even loudness · lint.py static checks · check.py page errors, console warnings and beat lengths in Chromium and Firefox · shot.py beat screenshots · strip.py storyboard sheets and motion strips · still.py stretches where nothing moves · playlog.py sounds and captions against the picture · perf.py Firefox frame times · export.py MP4 and .srt · sfx.py synthesized effects |
| Lessons | outline.py and split_pages.py page map and chapter text · check_blank.py empty openings · overlap.py arrows through text · sprites.py image processing steps · refs.py verified citations · items.py question bank · scorm.py LMS package |
| Picture books | mouths.py mouth shapes · join.py one clip per scene · bake_sets.py set layers · bake_puppets.py puppet bitmaps · paint.py / paint_openai.py image-model pictures · painted.py place them in the book |
| Films | commons.py public-domain pictures and recordings with their licences · prep.py print, line and full-bleed treatments · trace.py drawings that draw themselves on · video.py a clip from a still · frames.py a clip as treated frames · geo.py the map kit's data from Natural Earth · eleven.py ElevenLabs narration with word times · music.py a track cut to the film, and the bed in the voice's gaps · safe.py words outside an upright film's safe area |
silence.py, ledger.py (the one cost ledger: date, chapter, file, model, what, cost) and browsers.py are helpers the others import.
Context
- Talk with the user from the main conversation: intake, and every sheet and choice of the pilot. When subagents are available, later chapters are made as a team, each step on the model the user chose (core/team.md); without them, run the same steps in the current agent with file-based state.
- Use the engine API and inspect individual functions when needed; copy kit files rather than reading their full source as instructions.
- Keep
style.jsoncurrent and short; chapter status, errata and historical feedback stay inchapters.mdandchapters/chNN.md.
In this repository2 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .claude/CLAUDE.mdCLAUDE.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

