Pi, in three languages
Blog post #53
Pi is Mario Zechner’s minimalist AI coding agent: four commands — read, write, edit, bash — and a system prompt that, together with the tool definitions, fits under a thousand tokens. You pick the model, you build your own skills, and the tiny core stays still while everything else grows around it. I made a 3-minute explainer about it. Then I made it again in Swedish. Then in Japanese. This log is about how one video became three, and the bugs I hit on the way.
What shipped
- The Pi explainer as a first cut in three languages: English, Swedish, and Japanese — all in one session.
- A reworked script built around one idea instead of a feature list: a tiny core you build into exactly the tool you want.
- YouTube metadata (title, description, chapters) for all three.
What’s working
- Frame-owned headings. This was the big shift. ChatGPT now generates only the wordless illustration; the HTML frame writes the heading on top, in a real typeface I control exactly. Because the illustration carries no translatable text, five of the ten slides are generated once and reused across all three languages. Only the heading string swaps. That’s what made three languages cheap.
- ChatGPT renders non-Latin text cleanly. I’d assumed it would butcher Swedish and especially Japanese. It didn’t — “4つのコマンド” and “アップデート” came out crisp. I was being too cautious about the image model. It’s better than I gave it credit for.
- Timing from silence. Instead of forced alignment, I find the slide-change points by detecting the pauses in the voiceover. The long gaps are the segment boundaries. Add the 2.5s intro stinger as an offset and the slides land where the words do.
What’s unclear or broken
- ElevenLabs v3 ignores the speed setting. I asked for 1.14x and got back audio of identical length. v3 is the expressive model and just doesn’t honor that knob. Fixed it by time-stretching with ffmpeg’s
atempo, which keeps the pitch. - PowerShell quietly corrupted UTF-8. Every heading slide had a tiny “·” where a ”·” should be, because PowerShell reads files as ANSI by default. One
-Encoding UTF8and it was gone. Japanese was worse — I had to keep it out of scripts entirely and pass it through a JSON file instead. - The talking-head box was eating my slides. I’d moved the content zone to center it and forgot the picture-in-picture lives in the bottom-right corner. The shell terminal in one slide ended up half-hidden behind my own face.
Decisions made
- Avatar III as a fallback. Halfway through, HeyGen ran out of credits and the Japanese Avatar IV render failed outright. Rather than wait for the monthly reset, I rendered Japanese on the older, much cheaper Avatar III. At the size it appears on screen, I genuinely can’t tell the difference.
- Speed up the Japanese. Japanese came out 34% longer than English. I sped it ~22% so it still fits the “three minutes” promise without sounding rushed.
Tooling & process
- ChatGPT Image for the illustrations, HTML + headless Chrome for the frames, ElevenLabs for the voice, HeyGen for the avatar, ffmpeg for the build. All of it scripted and reusable.
- The real win isn’t this one video — it’s that the whole pipeline is now documented and copyable. The next tool should go a lot faster.
— Stefan