One founder interview in, eight videos and three written assets out
Written by Shahzaib Shoaib, founder and lead engineer
A Remotion video pipeline for an Australian program helping SMEs adopt AI. One recorded founder interview becomes two testimonial films, six square promos and three written files, and every finished master is transcribed again before it ships.

- 8
- Videos from each founder interview: two 16:9 testimonials and six square promos
- 3
- Written assets per founder, including a 16-post LinkedIn workbook
- 4.0 s
- Median render time per second of finished video on a 16 vCPU EC2 box, from 550 chunk logs
- 45
- Founder project folders built in the studio
- Client
- Australian SME AI program
- Our role
- Solo build, one engineer with Claude Code
- Industry
- Education · SME Programs
- Region
- Australia
- Services
- Video AutomationAI ContentWorkflow Automation
- Year
- 2026
Eight green checks and a repeating line
The first founder package went back to the client with eight automated checks passing. It came back with a short note saying a line was repeating. When I went through the cuts properly I found nine defects, and the captions had hidden every one of them.
The captions were right because they are built from the word timestamps in the transcript, so they always show what the script asked for. The audio was another matter. The renderer was mounting some segments at frame 0, and what the founder said on the soundtrack no longer matched what the caption said on screen. Every gate I had written checked the plan for a video. Nothing in the pipeline had ever opened a finished file and listened to it.
So now something does. Each delivered master goes back through ElevenLabs Scribe, and the new transcript is diffed against the edit. That check alone takes 21 to 50 transcription calls per package, which is 17 to 45 minutes of audio, and it is the one I trust most.
The pipeline turns one recorded interview with a startup founder into eight short films and three written documents, for an Australian program helping SMEs adopt AI. To be clear up front, it is one engineer driving Claude Code inside a Remotion project, with a lot of checks wrapped around the work. Nobody presses a button and walks away.

Five cities, five kinds of footage
The program records its founders city by city, and the interview library holds 55 recordings across 5 cities. For each founder the client wanted the same package. Two 16:9 testimonial films of about 90 to 105 seconds. Then three square families (a program promo, a founder story and a startup promo), each cut at 60 and 30 seconds at 1080x1080. That makes eight videos and between 6.8 and 9.0 minutes of finished runtime per founder.
Alongside the films go three files. One is the interview transcript, with a clean script and the verbatim version. One is a written case study. The last is an Excel workbook of 16 LinkedIn posts, two per cut, for the client's team to post.
The footage was never consistent. Sydney and Perth were shot in 4K HEVC .MOV at 25 frames per second. Adelaide came in as 4K at 23.976. Brisbane was 1080p at 50, and the Melbourne interviews were recorded online at 59.94. Sydney also had two cameras and a separate recorder, synced by cross-correlating the audio. Every delivered file is 24 fps at 48 kHz, mastered to -14 LUFS, so each city needs its own conversion. One of those conversions caused the worst bug of the project.
Part of the studio already existed, making product promos for the client since June with an ElevenLabs voice and generated music. The founder pipeline is newer. Its playbook was written on August 29, 2026, from the first full run. Shared brand files hold the program's colors, fonts and a locked corner logo, and each new founder project is scaffolded from a reference one.

Only the founder's own voice
The decision I would defend in any room is that founder videos use the founder's real voice and nothing else. There is no voiceover and no b-roll. The graphics on screen are info cards and metaphor scenes, coded in React and timed to the exact word the founder says. The sound effects were generated with ElevenLabs, and the music is one track the client supplied.
We had other tools to hand. The same repo has a plugin that drives Veo 3.1 and OmniHuman lip-sync for AI presenter reels. I kept it out of the founder films. A generated shot of a product shows something the founder never showed us, and on a testimonial that is a made-up claim. Before anything goes on screen, a fact sheet sorts every claim into an approved column or a forbidden one, using two sources only: the interview and the founder's live website.
The second decision was to write the script before anything else. Each cut starts as prose. A script gate checks for a topic sentence, coverage of the arc, a pace of 110 to 200 words per minute and a payoff at the end. A ledger gate makes sure no soundbite turns up in two different families. There are four treatments to pick from (Documentary, Kinetic, Metaphor and Direct address), and the 60 and 30 second cuts of one family always use different ones.
Then there is where the AI actually sits. No language model is called from the pipeline code. Transcription is ElevenLabs Scribe v1, with word timestamps and speaker labels, and spelling fixes go in by hand. The scripts and the written files are written by Claude Code during a working session and saved to disk. It works from skills kept in the repo, with agents running in parallel and subagents building the graphics, and one package takes between 470 and 1,190 model calls. Afterwards, scripts check every quote word for word against the transcript.

Every gate I had written checked the plan for a video. None of them had ever opened a finished file and listened to it.
The frame that froze at every cut
Git only tells part of the timeline. The repository was reset to a clean snapshot on September 14, which squashed the earlier history, and it has 60 commits up to October 9. They come in bursts: 10 on September 30, then 10, 20 and 14 on October 6, 7 and 8. Each burst is a city cohort going through the pipeline, Perth first, then Adelaide, then Brisbane.
Perth is where it went wrong. Perth footage is 25p and the output is 24p. I was seeking into each clip with ffmpeg's -ss and setting the rate with -r 24, and that combination showed the first frame of every shot twice. On screen it is a one-frame freeze at every cut. It was in 33 cuts across 7 founders, plus 5 of another founder's 6. Every gate stayed green the whole time, because none of them looked for repeated frames.
The fix is small once you see it: seek half a second early, convert with fps=24:round=near, then trim. A new repeated-frame gate re-scanned everything and found 0 in 54 cuts. I should have had that gate on day one. I had tested that the output was 24 fps and never what was in the frames.
The music had its own bug. Every founder film uses the same supplied track, 127.4 seconds long, which fades out from about 120 seconds. On cuts longer than two minutes the code repeated it with numpy's tile, so the song faded out and then started again under the founder. It now does a single splice with a 0.8 second equal-power crossfade.
Then there was disk. Early renders ran on a Mac. Remotion bundles reached about 10 GB each, because the public folder held every proxy, and crashed renders left 48 GB of temp files behind. With under 5 GB free, macOS swap killed the compositor mid-render with 'Could not extract frame from compositor'. Later renders moved to an EC2 box with 16 vCPUs and 30 GB of memory, split into five render slots. One render uses 2 to 3 cores and about 2.5 GB, so five fit side by side.

From the camera card to SharePoint
A new interview starts as a proxy. The pipeline makes a 2560x1440 copy and checks that its duration matches the raw file.
Scribe then produces a words file with a timestamp on every word, and captions, on-screen stamps and graphic timings all read from it. The captions are burned in, and a cleaner strips the fillers out of them. The edit has to cut those same fillers out of the audio, or you get tidy captions over a soundtrack that still has every filler in it.
Next come the fact sheet and the scripts, then the render, which runs about 11 gates. The encoded master gets its own checks for format, repeated frames, black frames, loudness, shoulder centring and the re-transcription diff. On top of that come shot-change detection, contact sheets for a human to look at, and regression checks.
Each package lands in its own founder folder with an md5 delivery manifest. From there it goes up to the client's SharePoint through its REST API, using my signed-in browser session.
The written files come out of the same session. The case study goes through a skill kept in the repo, and a script builds the LinkedIn workbook as an .xlsx with 16 posts. Nothing posts on its own. The client's team reads the workbook and posts by hand.

Scripts that passed every check and still got rejected
The hardest feedback had nothing to do with rendering. The client rejected a set of scripts that passed every gate. Their message, roughly, was that the scripts did not read well and should use the parts of the interview that were relevant. They were right. The ledger that stops a soundbite appearing in two families had ended up choosing the material, and relevance came second. I had written a rule against repetition and then let it do the editing. The skill now puts relevance first, and the ledger works inside that.
Here is where the studio stands, counted from the repo. There are 45 founder project folders, and 29 of them carry a delivery manifest. The main Remotion root registers 231 compositions. Across 550 chunk logs on the EC2 box, rendering takes a median 4.0 seconds of wall time per second of finished video, with the 10th percentile at 2.7 and the 90th at 8.7. The notes and skills the agent reads total 6,972 lines.
Some things I can't tell you. There is no engagement data in this project. The posts go out by hand from a spreadsheet, and nothing in the repo tracks how they did. There is no clean cost per package either. ElevenLabs spend was never recorded in the repo, and the agent sessions ran on a subscription, so there is no bill to divide.

What I would write first next time
If I started again, the first code I would write is the check that opens the finished file. Transcribe the master and diff it, scan it for repeated frames, then put a contact sheet in front of a person. The three worst bugs here lived in the gap between a correct plan and a wrong file, and all three sat behind green gates.
I would also keep proxies out of the Remotion public folder from day one. A 10 GB bundle is a cost you pay on every render.
Posting is the obvious next step, and it is not built. A follow-on project to automate it was planned on October 9, 2026, and its own planning document says nothing is built yet. Today the LinkedIn output is a spreadsheet for people. The last commit to the studio landed the same day, after the Brisbane cohort went through.
- Remotion
- React
- TypeScript
- ElevenLabs Scribe
- ffmpeg
- MediaPipe
- Claude Code
- AWS EC2
Programmatic video makes eight films from one interview repeatable, and the checks are where most of the work goes. Ours were all green while a frame froze at every cut and a line played twice. What fixed it was checking the finished file the way a viewer meets it, by transcribing it again and scanning it frame by frame. If you hire someone to build this, ask what their pipeline does after the render.

