The first thing I did to make Knora funnier was delete the thing I thought made it funny.
If you read the September essay, one sentence in it is now out of date: "Four are live." The four comic methods I wrote about are gone. So is the style axis they lived on. The app now has fifteen English voices, each one a complete comic engine, plus the two Vietnamese and two Mandarin voices I kept. The update, 1.2, is live on the App Store.
Knora is 18+ — strong language and adult themes — and it is still free, with no account and no microphone. You shake the phone (or tap it), a short bit plays end to end, and then there is nothing else to look at.
Here is what is new in 1.2:
- A new English cast. Fifteen voices across American, British, South African and Indian accents, each with its own comic engine.
- Cleaner audio. Every line reads once, from the first word.
- iPad and tap-to-play. Shake is still the headline gesture, but a tap works too.
- A "Playing…" status. The screen is never blank while a bit runs.
The reason is not a new model or a better prompt. It is a change in what the app thinks the product is. For a year I treated the voice as a skin on the joke. It is not. The voice is the joke.
The model was the least important variable
If you run AI at work, this is the part worth stealing.
For this problem, the model was the least important variable. The brief decided what the output was allowed to be. The judge could triage, but it could not decide. The person who would use the thing had the final call. I had to rebuild a comedy app to learn that properly, but it is the same loop I would use for a campaign, a report, or a support reply.
The old app had 21 personas and seven styles. A style decided where the material came from and where the turn sat; the voice delivered it. I thought more styles would make it funnier. Measurement said otherwise. The voice was the variable; the drawn style was noise. In an earlier test, three of those methods produced good bits in five voices and nothing in one voice, so the method was not the engine. The character was.
The evidence was not subtle. The old pipeline wrote four drafts and let a selector pick the best. The selector agreed with me often enough to trust, and then it rejected a funny draft for not being a gag: its own reason on one pick was that the draft "re-reads the whole bit as a report about a real person rather than a gag." I called all 226 bits from that pipeline unfunny. A small manual run without the selector produced funny bits from the same cheap model. The selector was not the taste; it was a second opinion that could talk itself out of the joke. I turned it off.
So I deleted the style axis and moved the engine into the persona. Fifteen English voices, each with a worldview, a way of finding something funny, and a line they will not cross. The Anchor reads the news flat and believes none of it. The Storyteller holds the setup straight until the turn lands on him. The Confessor is cheerful and bleak and always the one at fault. The Son does his mother's voice and takes the judgement. The Riffer catches himself first, then you.
The four native voices — Bảo and Lan in Vietnamese, Zhìyuǎn and Xiaoyu in Mandarin — are not translations of the English cast. They are their own engines, built from local material. Vietnamese has nói lái, đồng âm and thành ngữ; Mandarin has 谐音, 成语 and 歇后语 — wordplay that only works inside the language. The English cast has accents because accent is part of character, not a setting. A voice is not a language with a hat on.
The app interface is in English, Vietnamese and Simplified Chinese; the voices are in English, Vietnamese and Mandarin.
Two of them did not work
Two of the voices I thought were safe were the two that failed: the Son and the Riffer. My note to myself was blunt: "these are not funny: the son, the riffer. The rest is fine."
Both briefs named their own failure. The Son had been sent to report on his family — a correspondent, not a participant. The Riffer's turn landed on the listener — the teller never appeared. Every bit I called funny had the same thing in common: the teller is in the room with something at stake. A correspondent reporting on the funny is not funny. A person who is about to lose something is.
The fix was not a new model. It was a rewrite of the two briefs so the teller is in the scene. The Son is now the one being judged. The Riffer confesses the thing before he names it in you. Same accents, same delivery palettes, same limits. Different room.
The lesson generalises: if the output is bland, audit the brief before you shop for a model. The model will happily give you exactly the point of view you asked for.
A cast change is a version change
A new cast is not a content update. It is a new version. A listener who already has 1.1 should not silently get a different set of tellers under the same number, so this is 1.2, not 1.1 build 5.
Then the unglamorous part. The App Store listing was a separate product surface, and it had drifted: it was older than the app, and still promised 21 characters and a four-style menu in all three store languages, and the screenshots showed the retired cast. I rewrote the copy from the app's own strings so the listing and the picker could not disagree, and re-shot the screenshots. It is boring work. It is also the difference between shipping a build and shipping a product.
An installed build on a phone spoke the old roster, and the server had to keep serving it: a server-side change is a client-contract change when the client is already installed. I kept the old catalog version alive so the update did not break anyone who had not updated yet.
App Review also rejected the previous build on an iPad because the screen went blank for the length of a bit. The flow worked; the screen said nothing. A bit runs 30 to 75 seconds, which is a long time to look at a blank screen. The fix was a "Playing…" status, tap-to-play alongside shake, and native iPad support.
Minimal is not the same as absent. I had confused the two.
The week every test was green
The week before release, every automated check said the audio was fine.
The text-to-speech model had been updated. The prompt had not. The old model treated the director's notes as directions; the new one treated the text field as a verbatim transcript. The production wrapper — notes, an instruction not to read the notes, and a transcript header — made it say every line twice. Four of four production renders doubled. A bare transcript was clean three times out of three. The fix was to send the transcript alone and move the accent into the voice.
Separately, a 44-byte WAV header was being decoded as raw audio samples. That put a click at the head of every clip. The transcripts were perfect. The test suite was green — 780 tests, none of which listened to the audio. My ear caught it.
The tests were green, the transcripts were perfect, and the audio was wrong. The ear caught it.
That is the sentence I would keep if I had to throw away the rest of this post. A green suite proves your assumptions, not your product. For text, the transcript is what you check. For audio, the waveform. For comedy, the ear.
What I am keeping
Three things.
The model is the least important variable. For this problem, it was. The brief, the judge and the ear did the work. If your AI output is bland, the first place to look is the brief, not the leaderboard.
A voice is not a skin on a joke. The cast is the product. The same joke in a different voice is a different joke, and a voice without a character is just an accent.
Minimal is not absent. A blank screen during a 60-second bit is not restraint; it is a bug. One gesture still needs a status line. A cast change still needs a listing. An installed client still needs its old contract.
What is still missing
The app still has no share button and no ratings. I still cannot see how you use it; there is no analytics SDK. If a bit does not land, the only signal is you telling me. That is the trade, and it has not changed.
If you tried 1.0 and it felt samey, this is the update. If you have only heard the English cast, try Bảo or Lan; the funny is not a translation.
Knora 1.2 is free on the App Store. The design notes are at /knora/. If a bit does not land, tell me — the whole app is the joke.
Frequently Asked Questions
What is Knora?
Knora is a free, 18+ voice-only comedy app for iPhone and iPad. You shake or tap, a short bit plays end to end in one or two voices, and then the phone goes back down. No account, no microphone, no analytics SDK.
What changed in 1.2?
A new English cast of fifteen voices across American, British, South African and Indian accents, plus the four Vietnamese and Mandarin voices. The audio is cleaner, iPad and tap-to-play are supported, and the screen shows "Playing…" while a bit runs.
How do I try it?
It is free on the App Store. The app interface is available in English, Vietnamese and Simplified Chinese.
Cheers, Chandler