Files
Conal Mullan 6db40e9299 Add concept-explainer-short template: 9:16 TikTok/Reels explainer shorts (Python/moviepy) (#31)
* Add concept-explainer-short template: 9:16 TikTok/Reels explainer shorts (Python/moviepy)

First non-Remotion template. The whole video derives from scenes.json
(per-scene narration text + visual asset); a three-script pipeline turns
it into a finished vertical short:

- gen_vo.py — per-scene TTS via tools/voiceover.py (clone or built-in
  speaker, batch mode, --max-wpm pacing clamp), writes the
  vo_durations.json timeline anchor; warns past the 3-minute
  Shorts/Reels ceiling
- gen_captions.py — burned karaoke caption timing: whisper word
  timestamps force-aligned to the ground-truth script text via difflib
  (never burns whisper's own transcription, which mishears TTS)
- build.py — audio-anchored moviepy composite: Ken Burns on stills,
  boomerang-looped clips (asset extension decides), caption pills with
  width cap and platform-safe positioning, ducked looped music; renders
  at every stage (gradient placeholder cards before assets exist,
  word-count timing estimates before VO, silent before audio)

Pattern proven on a 3:41 hallucinations explainer; tested end-to-end
(out-of-box placeholder render + full Modal clone pipeline with three
takes auto-clamped 181-188→165 wpm). Registered in the toolkit registry,
CLAUDE.md, and /video (with Python-flow notes); openai-whisper documented
as an optional dependency.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Add sky-blue-short showcase example + fix Modal qwen3-tts batch custom_voice

examples/sky-blue-short: complete worked example of the
concept-explainer-short template — a 52s vertical "Why is the sky blue?"
short with Qwen3 VO (built-in Ryan, warm tone), two Ideogram diagram/CTA
cards, two LTX sky clips, ACE-Step music bed, and burned aligned captions
(~$0.80 total generation cost). All source assets committed; re-renders
in place with python3 build.py.

Building it surfaced two real bugs, fixed here:
- Modal qwen3-tts handler: batch custom_voice hit the same qwen-tts
  tensor-aliasing crash the clone path already works around — now
  iterates per text with the shared speaker (redeployed and verified)
- gen_vo.py: failed batch scenes crashed with KeyError instead of
  reporting which scenes failed and why

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Add hallucinations-short and sky-blue-short demo videos to README showcase

Both produced with the concept-explainer-short pipeline: sky-blue-short
uses the stock Qwen3-TTS Ryan voice; hallucinations-short uses a Qwen3
voice clone from a Pixabay voice-over sample.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 07:58:39 +01:00
..

Example Projects

Curated showcase projects demonstrating toolkit capabilities.

Available Examples

Example Stack Contributor Description Complexity
hello-world Remotion sprint-review — Minimal 25s video — zero config, renders in 2 minutes Beginner
quick-spot moviepy + PIL — 15s ad-style spot with audio-anchored timeline. Runs with zero external assets. Beginner
data-viz-chart moviepy + matplotlib — Animated time-series chart with deterministic title and source attribution. Runs with included data file. Beginner
ds-crt-stinger LTX-2 + moviepy + PIL — 6s brand stinger — LTX-2 CRT LoRA footage + post-processed grunged logo Intermediate
sky-blue-short concept-explainer-short (moviepy) — 52s vertical 9:16 explainer short — Qwen3 VO + Ideogram cards + LTX b-roll + burned captions. All assets committed; re-renders with python3 build.py. Intermediate
digital-samba-skill-demo Remotion product-demo Digital Samba Marketing video for Claude Code skill Intermediate
sprint-review-cho-oyu Remotion sprint-review Digital Samba iOS sprint review for Digital Samba Mobile Intermediate

Note: Remotion examples include configs and documentation but NOT large media files — see each example's ASSETS-NEEDED.md for what to create. The moviepy examples (quick-spot, data-viz-chart) are fully self-contained and run end-to-end with python3 build.py.

Contributors

Thank you to these organizations and individuals for sharing their video projects:

Contributor Website Examples Shared
Digital Samba digitalsamba.com digital-samba-skill-demo, sprint-review-cho-oyu

Want your project featured? Run /contribute and select "Share an example project".

Using Examples

Remotion examples (hello-world, digital-samba-skill-demo, sprint-review-cho-oyu):

cp -r examples/example-name projects/my-project
cd projects/my-project
npm install
npm run studio

moviepy examples (quick-spot, data-viz-chart) — run in place, no copy needed:

cd examples/quick-spot   # or examples/data-viz-chart
python3 build.py         # produces out.mp4 in the example directory

These are fully self-contained references for the moviepy skill. Read the build.py and README.md in each.

Adding Demo Assets

Examples don't include large media files (videos, audio). To run them:

  1. Record demos - Use /record-demo to capture screen recordings
  2. Generate voiceover - Use /generate-voiceover with the included script
  3. Add music - Use python tools/music.py for background tracks

Each example includes a ASSETS-NEEDED.md documenting what to create.

Contributing Examples

To share a project as an example:

  1. Run /contribute and select "Share a template" (examples work similarly)
  2. Or manually:
# Copy project to examples (without large media)
cp -r projects/my-project examples/

# Remove media files (these are gitignored anyway)
rm examples/my-project/public/demos/*.mp4
rm examples/my-project/public/audio/*.mp3

# Create asset documentation
# (describe what demos/audio are needed)

# Commit and PR
git add examples/my-project
git commit -m "Add example: my-project"
gh pr create

Example Structure

examples/example-name/
├── README.md              # What this example demonstrates
├── ASSETS-NEEDED.md       # What media to create
├── src/
│   └── config/
│       └── *-config.ts    # Example configuration
├── public/
│   ├── demos/             # Empty (add your recordings)
│   ├── audio/             # Empty (add your voiceover)
│   └── images/            # Logos, screenshots (tracked)
└── VOICEOVER-SCRIPT.md    # Script for narration