Project · Self-directed · Software · AI · Media

In-house media services

Voice cloning, animated video rendering, vertical Shorts and podcast rendering, all as small HTTP services on the Pi.

LiveAug 2026 – present

Summary

A set of single-purpose render services that the pipelines call over HTTP. voice-render runs Chatterbox TTS against a reference sample of my voice and has a batched segments mode. makeit-media renders storyboards with weighted-random camera moves, transitions, text motion and ambient effects. shorts-render adds burned-in captions, a stinger intro and an end card. The Arkham podcast renderer cuts episodes and vertical clips.

The problem

ffmpeg on a small ARM board punishes naive filter graphs, TTS is slow, and one bad render shouldn't take the box down.

Why I built it

Hosted rendering and TTS APIs cost money per minute and make you work to their schedule. Owning the render step means pipelines can retry, re-render and batch without anyone checking a bill.

The solution

One job at a time per service, job IDs with polling, watchdogs, explicit timeouts, verification by frame analysis rather than exit codes, and CPU caps.

What it does

  • Fixed a 'chrome drift' bug in which the watermark and progress bar panned along with the camera move. The chrome is now rendered as a separate overlay, and frame diffs confirm it's pixel-identical.
  • Verified lightning and candlelight effects by per-frame luma analysis, not just by eye.
  • Pause-anchored caption timing reuses the existing silence detection, so no speech-to-text dependency is needed.

Technologies, and what they're for

  • Python / FastAPIRender service APIs
  • ffmpegComposition, zoompan, overlays, concat
  • Chatterbox + PiperTTS, with Piper as the fast fallback
  • DockerIsolation and resource caps

AI involvement

  • Voice cloning with Chatterbox
  • Gemini imagery consumed by the renderers

Automation

  • Called by n8n pipelines, polled with timeouts and retries

Infrastructure

  • Raspberry Pi 5, CPU-capped containers

Hard parts

  • A truncated PNG made ffmpeg hang forever instead of failing. Since then, every binary asset is integrity-checked before it's used.

Outcome

Powers the Ninth Volume, Ninth Archive and TFCD videos and the Arkham podcast.