Stills in. Launch video out.
Turn a creator's AI-generated stills + a one-page brief into a cinematic, narrated launch video — fully offline, no cloud, no credits, no mercy.
pip install pyyaml pillow
renderreel render demo/brief.yml --out ./launch --voice en_US-lessac-medium.onnxWhat you get: 1080p MP4 with Ken Burns motion, crossfades, AI narration (Piper), a generated music bed ducked under the voice, burned-in captions, a thumbnail, and a QC report.
Screen recordings don't sell renders. Cloud video tools burn credits on every retry. RenderReel is the boring-reliable middle: your stills, your words, one command, a launch video in under a minute — on a Raspberry Pi.
brief.yml → lint → stills → Ken Burns clips → narration → music bed → mux → QC
│ │ │ │ │ │ │ │
│ Credit- PIL gra- zoompan + Piper synthesized side- dimen-
│ Guard- dient xfade neural pulse/noir/ chain sions,
│ style 1080p voice ember beds duck duration,
└ checks audio
| Stage | What it does | Module |
|---|---|---|
lint |
Fails fast on weak hooks, missing taglines, narration overflow | brief.py |
stills |
Forges cinematic title cards (PIL) or normalizes your stills | stills.py |
captions |
Distributes narration lines as .srt across scene slots |
captions.py |
assemble |
Ken Burns + xfade + sidechain-ducked mux + burned-in captions + QC | assemble.py |
git clone https://github.com/madebysaira/RenderReel && cd RenderReel
pip install pyyaml pillow pytest
python -m pytest tests/ -q # 10 tests, no ffmpeg needed
renderreel doctor # checks ffmpeg / piper / fonts
renderreel render demo/brief.yml --out ./launch --voice <piper-voice.onnx>No voice model? Download one (~60MB): Piper voices — e.g. en_US-lessac-medium. Or skip --voice for a music-only cut.
product: "Neon Bazaar"
hook: "Your shop launch in twenty seconds flat."
tagline: "Stalls up. Lights on."
format: landscape # landscape | portrait | square
palette: royal # ember | royal | noir | pulse
mood: pulse # pulse | noir | ember (music bed)
scenes:
- title: "Selling online is boring."
body: "same grid. same scroll. same yawn."
narration: "Selling online is boring."
seconds: 5
cta: "github.com/madebysaira/RenderReel"The linter enforces: hook ≤ 12 words, tagline present, every scene has a visual, narration fits its slot, total 10–60s.
demo/brief.yml → demo/renderreel-launch.mp4 (17s, 1080p, narrated). RenderReel bragging about itself, in its own voice.
RenderReel is the launch layer on top of my AI-video toolchain:
- AIVideoQualityGate — QC philosophy (the
qcgate here is its little sibling) - cinematic-ai-prompts — where the stills' prompts come from
- RemotionPlaybook — motion patterns the Ken Burns presets follow
- AIVideoDiagrams — the pipeline drawing habit, now executable
Python 3.10+, ffmpeg + ffprobe on PATH, one Piper .onnx voice (optional). Tested on Raspberry Pi (Debian) and Linux x86_64.
MIT.