Skip to content
Back to skills

Papermotion

ASecurity

Make short animated films in the papermotion paper-cutout engine: everything generated by code (no image models or assets), characters rigged with bones, springs and strands, physics, parallax sets, choreography with beats, multi-shot edits, weather and film finishing, rendered offline to MP4. Use when asked to create, extend or polish a papermotion scene, short, story, demo, character, set or camera work, or to add engine features for one.

  • 4 stars
  • 0 votes
  • 1 copy
  • 3 views
  • Added October 22, 2026
designtypescriptgobashnodespringapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 8 files and shows the line behind each finding

Scanned October 22, 2026

npx -y skills add VisualxIntelligence/motion-tools-and-skills --skill papermotion --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Papermotion?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Papermotion
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/visualxintelligence-papermotion/badge)](https://www.skillsdirectory.com/skills/visualxintelligence-papermotion)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: papermotion
description: Make short animated films in the papermotion paper-cutout engine: everything generated by code (no image models or assets), characters rigged with bones, springs and strands, physics, parallax sets, choreography with beats, multi-shot edits, weather and film finishing, rendered offline to MP4. Use when asked to create, extend or polish a papermotion scene, short, story, demo, character, set or camera work, or to add engine features for one.
compatibility: Needs Node with pnpm, ffmpeg, and a Chromium for playwright-core (npx playwright install chromium, or CHROMIUM_PATH).
metadata:
  project: papermotion
  version: "1.0"
---

# papermotion

papermotion is a TypeScript engine that makes short films out of **cut paper**:
- torn edges that boil, fiber texture and drop shadows;
- rim light and core shadow;
- characters built from bones with springs, and strands for hair and tails;
- a deterministic Verlet physics world;
- parallax camera layers, choreography, weather and film finishing.

You write a scene as code, render it offline and look at the frames. The engine lives in `src/`, and
scenes import only from its public index (`src/index.ts`).

A good papermotion short:
- has a clear little story;
- has original characters and sets, each a cohesive piece of paper with detail where the camera is
  close;
- moves with physics that reads right in a paper world;
- is shot with intention: framing, cuts, moves.

## Before you start

1. Read `AGENTS.md` and `README.md` at the repo root (conventions, commands).
2. Skim [references/engine-api.md](references/engine-api.md) to know what exists. Don't reinvent a
   primitive the engine has.
3. Read [references/pitfalls.md](references/pitfalls.md). Every item there cost hours once.

Load the other references when you reach that part of the work:

| You are… | Read |
| --- | --- |
| Structuring the scene, beats, shots, cameras, transitions | [references/scenes.md](references/scenes.md) |
| Building a character or creature | [references/characters.md](references/characters.md) |
| Designing sets, light, color, composition, close-ups | [references/art-direction.md](references/art-direction.md) |
| Checking your work (probes, frame grabs, renders) | [references/inspection.md](references/inspection.md) |
| Adding sound effects, ambience or music | [references/sound.md](references/sound.md) |

## Principles

- **Generated by code.** No image files, no image models. Everything is a polygon, a strand or a
  gradient drawn with `Paper`.
- **Engine vs content.** A new reusable behaviour goes in `src/` as a generic, parameterized primitive,
  with a test and an export in `src/index.ts`. Examples: a way to move, a contact, a paper effect, a
  camera or edit tool. Story-specific content (this cat, this bus, this house) stays in the scene
  folder. Don't grow a catalog of props in the engine.
- **Original work.** Invent the cast, sets and story for each new short. Reuse engine primitives
  freely, but not another short's characters or props.
- **Life at bone level.** Motion comes from intents (speed, look, reach, crouch) driving springs, gaits,
  strands and physics. It never comes from keyframing positions. Use `keys()` only to shape an intent
  over time.
- **Acceptable within the universe.** Physics should read right for paper, not be realistic. Snappier
  jump gravity, soft collisions and stylized drag are fine.
- **Deterministic.** Fixed timestep, seeded `rng`/`hash`/`noise1`. Never use `Math.random` or wall-clock
  time. Frames render in increasing order only.
- **Offline rendering.** Judge motion only from the rendered MP4 (`pnpm render`), never from the live
  browser view.

## Workflow

Follow this loop. Iterating on numbers and single frames is cheap; full renders take minutes.

### 1. Pitch and plan (before code)

- Write a one-paragraph story with a beginning, a turn and an ending. Keep it to 10–30 s.
- **Make it different** from the obvious. Ask what the engine has not shown yet. Prefer one clear
  action over subtle symbols: viewers didn't read a lost shoe or an unravelling scarf as metaphors.
- List the **beats** of each actor (what they do, what ends each beat) and the **shots**
  (framing, zoom, when to cut).
- List the **interactions with the environment**. They make a short feel alive: grass bending,
  something bouncing, a splash, a wire that sags, seeds blown away.
- Decide what is **engine** (new primitive) and what is **content**.

### 2. Scaffold

- Create `examples/<name>/main.ts` with a class extending `Stage`, and register it in
  `examples/catalog.ts`. Put characters and props in files next to it.
- The minimal shape is in [references/scenes.md](references/scenes.md#anatomy-of-a-scene).
- Add a `probe()` from the start. Include positions, the current beat and shot, and the beat history.

### 3. Build in passes

1. **Blocking.** Place the set and the actors as simple shapes, get the beats and timing right, and
   verify them with probes.
2. **Motion.** Gaits, jumps, contacts, physics props, cameras and cuts.
3. **Look.** Paper sheets, tones, light direction, layers, atmosphere.
4. **Detail pass** on anything close to camera: eyes, faces, markings, texture of masses. See the
   checklist in [references/characters.md](references/characters.md#detail-pass).
5. **Finishing.** Grade, grain, vignette, letterbox, transitions, titles.
6. **Sound.** Cues and levels from the simulation, then a `soundtrack` with effects, ambience and a
   score. See [references/sound.md](references/sound.md).

### 4. Inspect, fix, repeat

```bash
pnpm grab <name> 1 3.5 6 9 --probe   # numbers only: beats, positions (seconds, increasing)
pnpm grab <name> 1 3.5 6 9           # frames → out/grab/<name>_<t>.jpg + a contact sheet
pnpm render <name>                   # full offline render → out/<name>.mp4
pnpm render <name> --draft           # half resolution, ~3× faster → out/<name>_draft.mp4
pnpm sheet <name> 2 0 10             # contact sheet of the video (fps, from, seconds)
pnpm listen <name>                   # soundtrack only (seconds): wav, spectrogram, loudness, cue list
pnpm typecheck && pnpm test
```

- Look at the images you grab.
- **Check at full resolution**: proportions, seams, faces, silhouettes.
- **Check the video** for timing and smoothness.
- Don't declare something done until you have seen it.
- See [references/inspection.md](references/inspection.md).

### 5. Report honestly

Say what works and what still looks weak. Keep notes for next time in `docs/field-notes.md`: the
mistake, the fix, and why it worked.

## Quality bar (check before you call it done)

- [ ] The story reads without text. The key moment happens in frame, big enough, and clearly staged.
- [ ] Each character is **one piece of paper** (`paper.sheet`). Limbs don't read as separate parts,
      and markings stay inside the silhouette (`paper.inside`, `paper.clip`).
- [ ] Nothing near the camera is a flat color: it has a core shadow, a rim light and at least two tones.
- [ ] Eyes have life: an iris or shape, a catchlight, lids or blinks, and a look direction.
- [ ] There is one light direction per shot (`paper.light`), and rim and shade agree with it.
- [ ] Layers separate by value: far layers take on the color of the air.
- [ ] Parallax works: far layers move slower, and props on them are placed with `cam.toLayer`.
- [ ] Nothing pops. Strands and props don't jump between frames, and cameras have no violent first
      frames.
- [ ] Contacts are real: feet on the floor, bodies touching what they touch, no floating props.
- [ ] Cuts happen on action. Close-ups keep line weights thin (scale rim, shade and lines by zoom).
- [ ] Deterministic: the same frame renders the same image twice. Typecheck and tests pass.

Files in this skill

  • SKILL.md7.6 KB
  • references/art-direction.md4.5 KB
  • references/characters.md9.5 KB
  • references/engine-api.md15.5 KB
  • references/inspection.md2.7 KB
  • references/pitfalls.md5.4 KB
  • references/scenes.md6.6 KB
  • references/sound.md4.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.