Workshop · Part 1
The blog that reads itself aloud

There is a play button beneath this post. Press it, and a voice reads the text aloud — including this very sentence. The voice does not come from a cloud service. It is generated on my notebook, and per word it costs exactly zero cents.
This part tells the story of how a blog gets its own voice. And it ends, I will say this up front, with an unsolved mystery.
Why not just rent a voice?
Text-to-speech is available as an API, in excellent quality. Three reasons still favoured the self-hosted route — the same three as everywhere else in this series:
- The texts stay in-house. Posts here often pass through the toolchain days before publication. With a cloud API, a third party would read every draft.
- Zero marginal cost. A rented voice charges per character. If you record two language versions per post and regenerate after every correction, you pay for the text many times over. Your own voice renders once — with electricity.
- An agent can operate it. The narration is a script in the repo. New post, script runs, audio is there. No account, no quota, no surprise on the invoice.
The tool is called Piper: a lean, open TTS system that runs on ordinary hardware. German is spoken by a model named Thorsten, English by one named Lessac. Together they take up less space than half a dozen holiday photos.
The trouble with “St”
The first run sounded good — until the series title. The German voice turned “Own Your Stack” into something like “Ohn Yoor Shtack”. No accident: the model only knows German pronunciation, and in German a sharp “St” at the start of a word is simply pronounced “sht”. Stein, Strasse, Stack.
A tech blog in German is full of traps like this, because it is full of English. The naive fix — spelling English words out phonetically — only half works: the German model simply does not know some English sounds; its phoneme inventory does not contain them.
The solution that stuck is more honest: English is spoken by the English voice. The narration script knows a list of English phrases — the series title, technical terms like “Architecture Decision Record” — and has exactly those passages spoken by the English model. The audio snippets are then spliced into the German stream sample-accurately, precise to the sampling rate, so nothing clicks at the seam.
That this comes down to hundredths of a second and individual samples is not perfectionism. It is foreshadowing.
Fine-tuning with measurements instead of gut feeling
The raw voice spoke too fast and mumbled on hard consonants. Piper has the knobs for this built in: speaking rate, intonation variance, articulation sharpness. But — how do you know which setting is better?
This is where it turned strangely beautiful for the first time: the AI agent that built all of this cannot hear. So it went looking for measurements. It had a speech recognizer transcribe the generated audio back into text and compared the word confidences — how certain the recognizer was about each word. Change a setting, regenerate, remeasure. The articulation became measurably more precise, not just perceptibly.
A deaf sound engineer, mixing by the numbers. Remember that image.
And then came the morning with the noise
The system was running. Two languages, clean seams, measured pronunciation. The audio files went into the pipeline, the player onto the page.
Then, one morning: loud white noise, in the middle of the text. Not at the start, not at the end — right in the middle. For seconds at a time. Then a clear voice again. Then noise again. Sometimes it hit one paragraph, sometimes half a minute.
I did what one does: read the logs. Nothing. The script ran through without errors, every line green. Regenerated — noise in a different place. Again — somewhere else again. No pattern, no error, no crash. Just this noise that came and went as if it had plans of its own.
Anyone who operates software knows this kind of bug: not reproducible, no stack trace, “works on my machine”. It is the most expensive kind.
And here it was special: the bug was audible — but the investigator, my agent, has no ears.
How you find a bug you can only hear when you cannot hear: part 2, on Thursday.
Best to check the result for yourself right now: the play button above reads this post aloud — with exactly the voice this was all about.