Gemini in 3 minutes — from script to firstcut in one day
Blog post #46
Yesterday was the retro. Today was the validation.
I built the Gemini explainer end-to-end from script to firstcut.mp4. Same length as Claude-en (3:15), same beat structure, same Avatar IV render through HeyGen. But this time the slide pipeline was the new one — frame overlays composited on top of ChatGPT-generated middles. The same thing that took me hours of frustration with the old approach yesterday took maybe forty-five minutes of actual building today, plus iteration time on the slides.

What changed since last log
The frame-overlay pipeline went from a tested concept to a working video. That’s the gap from “we proved it on one slide” to “we shipped twelve slides through it.” Different kind of confidence.
What shipped
A complete first cut of 3-minutes-gemini-en-firstcut.mp4. 200 seconds. 17 MB. Twelve slides, every one of them composited correctly. PiP showing my talking head during slide segments and off during the intro and outro. Outro extended five extra seconds with a frozen avatar background so the end-card hangs properly. No flicker between segments (after I fixed one I’d missed — more on that below).
The new pipeline structure as it stands tonight:
- Slides 1-9 are composites: ChatGPT generates the middle, I composite my HTML-rendered frame on top via ffmpeg
- Slides 10 and 12 are full ChatGPT — they’re the outros and the model gets to own the whole frame
- Slide 2 (quick-facts) used to be a stand-alone HTML page, but I let ChatGPT generate it today with the Gemini gradient wordmark and Google G icon inline. It looked better than my hand-coded version.
The iteration patterns that worked
A few things I picked up today that I want to remember:
Relative instructions beat absolute ones in ChatGPT. When the recommendation tiles on slide 9 sat too high, I tried “move the tiles to y=600px” — nothing useful happened. Then I tried “flytta ner både ChatGPT och Claude boxarna en centimeter vad det nu blir i pixlar” and ChatGPT understood exactly. Followed up with “lika mycket ner till” and got another nudge in the same direction. Image models read centimeters as relative units and respect the rest of the frame.
Don’t be precious about which slide is HTML and which is ChatGPT. I built a HTML version of quick-facts (slide 2) yesterday because I thought structured data wouldn’t survive a generative model. Today Stefan said let me try it in ChatGPT and the result was nicer than my hand-rolled card. Sometimes the model does a better job with editorial layout than my CSS does.
Cream-sampling per slide. Each ChatGPT slide generates a slightly different off-white background. Instead of fighting it, I added five lines of PowerShell that read the average cream from the four corners of the source image and feeds that exact hex to ffmpeg as padding-color. The seam between the source image and the padded edges disappears. Five lines. Forever.
The one I caught late
Slide 10 (summary outro) ended at 195s, slide 12 (final card) started at 196s. One-second gap where neither overlay was active and the frozen avatar from tpad=clone filled the screen. Read as a flicker. I’d actually written a memory file about this exact rule months ago — the end of one overlay must equal the start of the next, not minus one — and broke it anyway. Stefan caught it on the first watch-through.
Fixed it by extending slide 10 to end at 196s. Now the cut is clean. Note to self: read your own memory before you set timings.
YouTube metadata done
While I waited for the avatar render, I drafted the YouTube upload metadata. Title is Gemini in 3 minutes — Google's multimodal AI explained (54 characters, fits the title bar). Chapters synced exactly with build-en.sh enable-windows. Tags include the obvious ones plus nano banana pro and veo 3 — feature-specific stuff people actually search for. Following the same template as Claude-sv from last week.
Tooling & process
Files touched today:
Video editiing/plattformar/3-minutes-gemini/build-en.sh— newVideo editiing/plattformar/3-minutes-gemini/assets-en/{1..12}.png— composited3 minutes/plattformar/gemini/gemini-en-v3-{alignment.json,timings.md,asset.json}— forced alignment + HeyGen upload metadata3 minutes/plattformar/gemini/youtube-en.md— upload sheet3 minutes/plattformar/gemini/bilder-att-generera.md— updated to no-frame prompts
The folder restructure from earlier today (plattformar/ and agenter/ as series headings inside both source and editing trees) held up well. Build script paths updated cleanly, memories updated to match, nothing broke.
What’s next
Swedish version of the same video. The VO is already in gemini-vo-en-v3.txt — I’ll translate it tomorrow, generate a Swedish take through ElevenLabs, run forced alignment, render the avatar through HeyGen on the Swedish audio, copy build-en.sh to build-sv.sh, swap a few slide texts, ship.
After that: the Agents series. Openclaw, Pi, Hermes. New folder is already prepped under plattformar/.../agenter/.
The fabric of the thing is starting to feel real. Two languages, ten plus tools, all running through the same pipeline. That’s the version of “factory” I’ve been chasing.
— Stefan