ISS
← Field Notes
AI & AGENTS
June 20, 2026 · AI & Agents · 2 min read

A Reproducible Pipeline for Turning Stories Into Narrated Long-Form Video

A faceless AI video factory that converts written stories into narrated, illustrated YouTube videos and shorts, built so the whole pipeline rebuilds from configs.

Mockingbird is a faceless video factory. You feed it a written story and it produces a narrated, illustrated long-form YouTube video plus a vertical short, then auto-publishes to YouTube and assembles a TikTok kit. The tagline I gave it, "it mimics any voice, tells any story," is also the design brief.

The interesting constraint: 159 GB you never store

The most consequential architecture decision was about what not to keep. A single run generates a lot of media: image frames, narration WAVs, and rendered MP4s. In this project that came to roughly 159 GB of generated artifacts. None of it lives in the repo. The .gitignore excludes all of it, because every byte is reproducible from the per-generation configs.

That reframes the repository. It stops being an archive of outputs and becomes the recipe for the outputs. The code, the per-generation configs, the brand assets, the voice library, and the docs are the durable thing. The rendered video is a derivative you can regenerate on any capable host. It is the same instinct that makes source control valuable in the first place, applied to a media pipeline where the temptation to hoard renders is strong.

Running on Apple Silicon and Metal

The pipeline assumes an Apple Silicon Mac because the image and text-to-speech models run on MLX and Metal. It was built and tested on an M1 Max with 64 GB. Rendering leans on ffmpeg 7.x with h264_videotoolbox, so encoding rides the hardware video engine rather than the CPU. Python 3.13 ties the scripting together. Standing it up on a fresh host is a short list: install the system prerequisites, restore the working tree, and rebuild the Python environment.

There is one honest wart worth naming. Several scripts hardcode the original /Users/drake/videogen path. The frame builder's keyframe helper and the TikTok kit builder both carry it. On a host with a different username you either grep for that path and adjust, or recreate the exact directory. I documented it plainly rather than pretending the pipeline is fully path-agnostic, because a portability repo that hides its sharp edges is worse than one that names them.

The takeaway

The lesson I carry forward from Mockingbird is that a good media pipeline is defined by its configs, not its output directory. Treating generated frames and renders as disposable, and treating the config plus voice library as the real asset, kept the repository small and made "stand it up on another machine" a believable claim instead of a hopeful one. Store the recipe, regenerate the meal.

Have something that needs building, or stabilizing?

These notes are the work log. The paid work runs through Moonshine Labs, my product and engineering studio. Tell us what you're building, or grab a call.

Work with us →
the studio: moonshinelabs.io