Turn repo activity into a narrated devlog video: mine git history for story beats, write narration that sounds like a person talking, synthesize voiceover with any neural TTS, and assemble the edit with ffmpeg. Use when someone wants devlog episodes generated from a release cycle, a changelog turned into a video, or a repeatable release-to-video publishing pipeline that runs every release with the same effort.
./install.sh devlog-video-automationname: "devlog_video_automation" description: "Turn repo activity into a narrated devlog video: mine git history for story beats, write narration that sounds like a person talking, synthesize voiceover with any neural TTS, and assemble the edit with ffmpeg. Use when someone wants devlog episodes generated from a release cycle, a changelog turned into a video, or a repeatable release-to-video publishing pipeline that runs every release with the same effort."
Take a development period (a release, a sprint, a week of commits) and turn it into a finished narrated devlog video with minimal hand work. The pipeline mines real git history for story beats, drafts narration over actual evidence, renders voiceover, and assembles the edit. It is built to run on a release cadence, so episode ten costs the same effort as episode one.
Tool-agnostic by design: any git repo, any neural TTS voice, any publishing platform. The craft lives in beats one and two; everything after is machinery.
Run the miner against the repo for the period:
bash
python3 bin/mine_beats.py /path/to/repo --since v1.2.0 --until HEAD -o beats.json
It reads history with read-only git commands and clusters commits into story beats: features, fixes, refactors, reversals, docs, deps. Every beat carries evidence: commit hashes, dates, authors, diffstat, the actual message text. Commit messages are treated as claims, diffs as the evidence that backs them. A beat with weak evidence (junk subjects like "fix stuff" or "update", no diff info) gets flagged, not invented.
Open references/narration-craft.md and write one narration segment per beat, 20-45 seconds each. Rules: one idea per beat, concrete nouns over abstractions, no invented numbers or quotes, technical terms spelled for the TTS voice. Save as narration.yaml:
yaml
segments:
- beat: features
text: "The big one this week: the plugin system finally landed. Three new hooks, one config file, and the old monkey-patching is gone for good."
visual: cards/01-plugin-system.png
- beat: fixes
text: "We also killed the auth race condition that had been haunting the login flow since March. Turns out the token refresh was firing twice."
visual: cards/02-auth-fix.png
Pick one voice and keep it for the entire series. Swapping voices mid-season breaks the illusion. Generate one audio file per segment (edge-tts, ElevenLabs, OpenAI TTS, any neural voice). One segment per file is the discipline that keeps timing clean. Validate: every file has real size, no empty renders, spot-listen to the first and last segment.
Follow references/assembly.md: one title card per beat, slow Ken Burns drift on each card, narration audio padded to exact video length (never trust -shortest on the mux, it clips tails), per-segment mux then concat, subtitles burned in or shipped alongside as SRT.
Watch the full episode once at 1x speed before it ships:
references/publishing.md).Tie publishing to the release cycle, not to inspiration. Numbered episodes, consistent titles, the same upload slots each cycle, one short trailer clip per episode for socials. See references/publishing.md.
beats.json: mined story beats with commit evidencenarration.yaml: narration segments with matching visualsaudio/segNN.mp3: one TTS file per segmentdevlog-NN.mp4: finished episode, subtitles burned in or shipped alongsidedevlog-NN.srt: subtitle filethumbnail.png + description.txt: ready for uploadpublisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.