Not in the top 1,000 by GitHub stars

haiderfarooq3/paper-reel

Claude Code skill: faceless 9:16 explainer reels in a cut-paper style. Voice-timed scenes, word-by-word captions. Free, local, no API keys.

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

SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 9c5bc57b5e10

No earlier version was observed for comparison.

Compare on GitHub

skills/paper-reel/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 9c5bc57b5e10

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 9c5bc57b5e10a0cf07d3935c91c2ac30971c69b2

85GitHub stars
Not availablestars in 7 days
2skills in this repository
3commits in 30 days

Heat

Insufficient history

Not enough history yet to measure heat. It appears after a few days of data.

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Nov 3, 2026Nov 4, 202685

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

paper-reel

When your agent uses it

Make a faceless 9:16 explainer reel in the cut-paper 'Claude mascot' style (flat textured paper shapes, a terracotta box mascot with a hat per scene, a screwed header sign, a typing terminal bar, counter cards, rubber stamps, word-by-word paper caption chips, hard cuts on every voice line, a soft lo-fi bed) — fully free and local: Kokoro voice, whisper.cpp word timing, canvas + Playwright + ffmpeg. Use when the user asks for a reel/short/TikTok in this paper or Claude-mascot style, a 'skill checkpoint'/tool-spotlight reel, or a faceless explainer with a comment-keyword CTA.

What it loads into context

Frontmatter

166 tokens

Always available to the agent

SKILL.md

2,435 tokens

When the skill is activated

Reference documents

2,284 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 0. Setup check
  2. 1. Script (approve with the user before drawing)
  3. 2. Voice + timing
  4. 3. Scenes
  5. 4. Check, then export
  6. 5. Deliver
  7. Kit API (styles/paper-reel/kit.js)
  8. Gotchas

Scripts executed separately

  • bin/reel
  • examples/khan-skill/src/bridges.js
  • examples/khan-skill/src/scenes.js
  • examples/khan-skill/src/score.js
  • kit/board.js
  • kit/core.js
  • kit/morph.js
  • kit/score-head.js
  • kit/score-tail.js
  • package.json
  • styles/paper-reel/kit.js
  • templates/starter/src/bridges.js
  • templates/starter/src/scenes.js
  • templates/starter/src/score.js
  • tools/align.mjs
  • tools/build.mjs
  • tools/export.mjs
  • tools/gpu.mjs
  • tools/kokoro_lines.py
  • tools/still.mjs
  • tools/storyboard.mjs
  • tools/textcheck.mjs
  • tools/tile.mjs
  • tools/voice.mjs

Files

  • .github/workflows/render.ymlasset831 bytes
  • .gitignoreasset87 bytes
  • LICENSEasset1,070 bytes
  • NOTICE.mddoc1,717 bytes
  • README.mddoc3,736 bytes
  • SKILL.mdcore8,208 bytes
  • SKILL.mdcore8,208 bytes
  • bin/reelruns5,144 bytes
  • docs/demo.mp4asset2,187,756 bytes
  • docs/strip.jpgasset485,535 bytes
  • examples/khan-skill/piece.jsonasset419 bytes
  • examples/khan-skill/src/bridges.jsruns161 bytes
  • examples/khan-skill/src/head.htmlasset3,431 bytes
  • examples/khan-skill/src/scenes.jsruns21,628 bytes
  • examples/khan-skill/src/score.jsruns2,467 bytes
  • examples/khan-skill/voice.jsonasset6,713 bytes
  • examples/khan-skill/voice/catch.wavasset182,316 bytes
  • examples/khan-skill/voice/cta.wavasset84,012 bytes
  • examples/khan-skill/voice/draw.wavasset157,740 bytes
  • examples/khan-skill/voice/free.wavasset170,028 bytes
  • examples/khan-skill/voice/hook.wavasset189,484 bytes
  • examples/khan-skill/voice/repo.wavasset173,100 bytes
  • examples/khan-skill/voice/script.jsonasset1,039 bytes
  • examples/khan-skill/voice/sync.wavasset149,548 bytes
  • examples/khan-skill/voice/voice.wavasset2,232,428 bytes
  • kit/board.jsruns2,583 bytes
  • kit/core.jsruns28,964 bytes
  • kit/morph.jsruns9,520 bytes
  • kit/score-head.jsruns11,474 bytes
  • kit/score-tail.jsruns2,366 bytes
  • package-lock.jsonasset1,633 bytes
  • package.jsonruns145 bytes
  • references/style.mddoc2,508 bytes
  • styles/paper-reel/kit.jsruns29,315 bytes
  • templates/starter/piece.jsonasset376 bytes
  • templates/starter/src/bridges.jsruns154 bytes
  • templates/starter/src/head.htmlasset1,751 bytes
  • templates/starter/src/scenes.jsruns8,188 bytes
  • templates/starter/src/score.jsruns1,652 bytes
  • templates/starter/voice/script.jsonasset658 bytes
  • tools/align.mjsruns2,721 bytes
  • tools/build.mjsruns7,751 bytes
  • tools/export.mjsruns15,576 bytes
  • tools/gpu.mjsruns1,531 bytes
  • tools/kokoro_lines.pyruns1,881 bytes
  • tools/still.mjsruns2,592 bytes
  • tools/storyboard.mjsruns2,191 bytes
  • tools/textcheck.mjsruns8,698 bytes
  • tools/tile.mjsruns3,503 bytes
  • tools/voice.mjsruns7,939 bytes
Read SKILL.md

# paper-reel

You make 18–25s vertical reels drawn entirely in code. The voice is the clock: every spoken line is one scene, and props, stamps and counters land on the words that name them. No paid APIs, no API keys.

Everything runs through `bin/reel` in this skill folder (call it `REEL=<this skill dir>/bin/reel`). The pieces live in the user's project, e.g. `<project>/pieces/<name>/`.

## 0. Setup check
`$REEL doctor` checks node, ffmpeg, Playwright and Chromium, whisper-cli and its model, Kokoro (Python and model), and the fonts. Run it first. It prints the exact install command for anything missing; tell the user that command and stop until it's fixed.

## 1. Script (approve with the user before drawing)
6–8 lines, 18–25s total, about 3.5 words/s. The proven arc:
1. **Hook:** what it is plus the payoff in one line ("This free Claude skill turns any topic into a Khan Academy style video.")
2. **How it works,** 2–3 lines, one concrete step each.
3. **The catch:** one honest limitation (it builds trust).
View the complete source on GitHub

Skills included

  • paper-reel
  • paper-reel

Repository facts

License
MIT
Created
Oct 23, 2026
Last pushed
Oct 27, 2026
Forks
12
Open issues
1
Project activity
Active

Before you install

Network or broad shell

Automated 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 2 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/paper-reel/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 58 signals by file

NOTICE.md

  • Network accessline 3
    `kit/` (core.js, morph.js, board.js, score-head.js, score-tail.js) and `tools/` (build, still, tile, textcheck, export, gpu, voice, storyboard) are vendored from **animate** by cth9191 (https://github.com/cth9191/animate), MIT License. `too

README.md

  • Network accessline 7
    **[Watch the example reel](docs/demo.mp4)** (23 s, made with this skill, about the [khan-explainer](https://github.com/haiderfarooq3/khan-explainer) skill).
  • Network accessline 9
    Write-up: [paper-reel: a free Claude Code skill that draws cut-paper explainer reels from one prompt](https://haiderfarooq.dev/blog/paper-reel-explainer-reels-in-code). How the skill explains itself, on YouTube: [wide cut](https://youtu.be/
  • Network accessline 33
    git clone https://github.com/haiderfarooq3/paper-reel ~/.claude/skills/paper-reel
  • Network accessline 67
    Made by [Haider Farooq](https://github.com/haiderfarooq3). MIT licensed.
  • Network accessline 69
    The renderer, frame tools and kit core are vendored from [animate](https://github.com/cth9191/animate) by cth9191 (MIT). See [NOTICE.md](NOTICE.md).

bin/reel

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 25
    ok=1; c() { if eval "$2" >/dev/null 2>&1; then echo "  ok    $1"; else echo "  MISSING $1 -> $3"; ok=0; fi; }
  • Dangerous shell operationline 25
    ok=1; c() { if eval "$2" >/dev/null 2>&1; then echo "  ok    $1"; else echo "  MISSING $1 -> $3"; ok=0; fi; }
  • Network accessline 30
    c "chromium"            "node -e \"const fs=require('fs');process.exit(fs.existsSync(require('playwright').chromium.executablePath())?0:1)\"" "cd '$SKILL' && npx playwright install chromium"     c "whisper-cli"         "command -v whisper-c
  • Network accessline 30
    c "chromium"            "node -e \"const fs=require('fs');process.exit(fs.existsSync(require('playwright').chromium.executablePath())?0:1)\"" "cd '$SKILL' && npx playwright install chromium"     c "whisper-cli"         "command -v whisper-c
  • Network accessline 31
    c "whisper-cli"         "command -v whisper-cli" "brew install whisper-cpp"     c "whisper model"       "test -f '$WHISPER_MODEL'" "mkdir -p ~/.cache/whisper && curl -L -o ~/.cache/whisper/ggml-base.en.bin https://huggingface.co/ggerganov/w
  • Network accessline 31
    c "whisper-cli"         "command -v whisper-cli" "brew install whisper-cpp"     c "whisper model"       "test -f '$WHISPER_MODEL'" "mkdir -p ~/.cache/whisper && curl -L -o ~/.cache/whisper/ggml-base.en.bin https://huggingface.co/ggerganov/w
  • Network accessline 32
    c "whisper model"       "test -f '$WHISPER_MODEL'" "mkdir -p ~/.cache/whisper && curl -L -o ~/.cache/whisper/ggml-base.en.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin"
  • Network accessline 32
    c "whisper model"       "test -f '$WHISPER_MODEL'" "mkdir -p ~/.cache/whisper && curl -L -o ~/.cache/whisper/ggml-base.en.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin"
  • Network accessline 33
    c "kokoro python ($KOKORO_PY)" "'$KOKORO_PY' -c 'import kokoro_onnx, soundfile, espeakng_loader'" "python3 -m venv ~/.venvs/kokoro && ~/.venvs/kokoro/bin/pip install kokoro-onnx soundfile (or set KOKORO_PY to a python that has them)"     c 
  • Network accessline 33
    c "kokoro python ($KOKORO_PY)" "'$KOKORO_PY' -c 'import kokoro_onnx, soundfile, espeakng_loader'" "python3 -m venv ~/.venvs/kokoro && ~/.venvs/kokoro/bin/pip install kokoro-onnx soundfile (or set KOKORO_PY to a python that has them)"     c 
  • Network accessline 34
    c "kokoro model"        "test -f '$KOKORO_DIR/models/kokoro-v1.0.onnx' -a -f '$KOKORO_DIR/voices/voices-v1.0.bin'" "mkdir -p $KOKORO_DIR/models $KOKORO_DIR/voices && curl -L -o $KOKORO_DIR/models/kokoro-v1.0.onnx https://github.com/thewh1te
  • Network accessline 34
    c "kokoro model"        "test -f '$KOKORO_DIR/models/kokoro-v1.0.onnx' -a -f '$KOKORO_DIR/voices/voices-v1.0.bin'" "mkdir -p $KOKORO_DIR/models $KOKORO_DIR/voices && curl -L -o $KOKORO_DIR/models/kokoro-v1.0.onnx https://github.com/thewh1te
  • Dangerous shell operationline 53
    rm -rf "$p/frames"
  • Dangerous shell operationline 53
    rm -rf "$p/frames"

examples/khan-skill/src/bridges.js

  • Executable scriptline 1
    Executable file

examples/khan-skill/src/scenes.js

  • Executable scriptline 1
    Executable file

examples/khan-skill/src/score.js

  • Executable scriptline 1
    Executable file

kit/board.js

  • Executable scriptline 1
    Executable file

kit/core.js

  • Executable scriptline 1
    Executable file

kit/morph.js

  • Executable scriptline 1
    Executable file

kit/score-head.js

  • Executable scriptline 1
    Executable file

kit/score-tail.js

  • Executable scriptline 1
    Executable file

package-lock.json

  • Network accessline 12
    "node_modules/fsevents": {       "version": "2.3.2",       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
  • Network accessline 13
    "version": "2.3.2",       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",       "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
  • Network accessline 14
    "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
  • Network accessline 26
    "node_modules/playwright": {       "version": "1.58.0",       "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.0.tgz",
  • Network accessline 27
    "version": "1.58.0",       "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.0.tgz",       "integrity": "sha512-2SVA0sbPktiIY/MCOPX8e86ehA/e+tDNq+e5Y8qjKYti2Z/JG7xnronT/TXTIkKbYGWlCbuucZ6dziEgkoEjQQ==",
  • Network accessline 28
    "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.0.tgz",
  • Network accessline 44
    "node_modules/playwright-core": {       "version": "1.58.0",       "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.0.tgz",
  • Network accessline 45
    "version": "1.58.0",       "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.0.tgz",       "integrity": "sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==",
  • Network accessline 46
    "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.0.tgz",

package.json

  • Executable scriptline 1
    Executable file

styles/paper-reel/kit.js

  • Executable scriptline 1
    Executable file

templates/starter/src/bridges.js

  • Executable scriptline 1
    Executable file

templates/starter/src/scenes.js

  • Executable scriptline 1
    Executable file

templates/starter/src/score.js

  • Executable scriptline 1
    Executable file

tools/align.mjs

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

tools/build.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

tools/export.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

tools/gpu.mjs

  • Executable scriptline 1
    Executable file

tools/kokoro_lines.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Access to secretsline 20
    [Credential-related source omitted]
  • Access to secretsline 20
    [Credential-related source omitted]

tools/still.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

tools/storyboard.mjs

  • Executable scriptline 1
    Executable file

tools/textcheck.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

tools/tile.mjs

  • Executable scriptline 1
    Executable file

tools/voice.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

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.

Declared and executed: 1 fact
  • Contacts huggingface.co, which SKILL.md, the README and the plugin manifest do not mentionbin/reel:32High confidence
Signal confidence: 49 facts

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeFrontmatter field argument-hint in SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md 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.