spoolcast — AI-to-video pipeline
scripts + Remotion + rule files that turn chat logs, docs, or ideas into narrated illustrated videos via a coding agent
spoolcast is the pipeline behind the dev-log and explainer videos — not a single project output, it's the tooling itself. point a coding agent (Claude Code, Cursor, Codex) at the rule files + your source material, and the agent drives editorial stages (source analysis → core message → screenplay v1/v2/v3 → shot-list), then the scripts drive production (kie.ai image gen → TTS → preprocessor frame sequences → Remotion render → post-render audit → publish).
key pieces:
- six rule files (rules.md, PIPELINE.md, STORY.md, VISUALS.md, SHIPPING.md, DESIGN_NOTES.md) that encode pacing, visual, and publishing discipline as explicit agent-consumable procedures
- per-session content dir separate from the repo — one clone drives many videos
- style anchor locked per session, style references stored in the session's style library for character/prop consistency across chunks
- deterministic preprocessor (no AI tokens for animation) — stroke-reveal / fade / paint generated locally from AI-gen scene PNGs
- mechanical render audit as a hard gate — render isn't "done" until audit_render.py passes on the final mp4
shipped with it: pilot video (Meta TRIBE explainer), spoolcast explainer (I don't make videos, my AI pipeline does), dev-log #1 (Building with AI: how I stopped my AI from silently breaking rules), dev-log #2 (How I caught AI lying). each video is a session in spoolcast-content/ and works as a concrete reference for the rule-file patterns.
recent changes (2026-04-24, shipped during dev-log #2 production)
- meme placement rule rewrite: three valid modes (overlay on narration chunk, own chunk with narration audio, own chunk with SFX — blocked until ROADMAP §6). silent-hold memes banned; they create dead air.
- beat-vocabulary alignment rule added: beat descriptions must use the locked style library's character terms, not generic placeholders. prevents silent style drift from mixed prompt/anchor vocabulary.
- text-card → visible-action hold recalibration rule added: when converting a text-card chunk to a visible-action beat, hold_duration_sec must be reset from read-time to registration-time (~1s). inheriting the old hold produces dead air.
- fixed generate_scene.py prompt builder: when a chunk had both beat_description and on_screen_text, the beat_description was silently dropped, producing text-only renders. now falls back to beat_description when visual_direction isn't set.
stack
← select a file to view