S1E43 — Speech Recognition and TTS in less than 500kb

July 19, 2026 · 13 min

Show notes

A half-megabyte speech engine sparks a bench-racing brawl over whether tiny ASR and TTS are brilliant engineering or just aggressive compromise, with 12% WER, robotic voices, and a very judgmental comparison to a 1.2GB stack.

Sources

Read the transcript

Transcript

GARY: —because five hundred megabytes is still very small if you remember laptops used to come in beige, and I am being told I have already fucked up the unit.

GARY: I’m Gary. I have confused kilobytes with megabytes before completing the title.

MAEVE: I’m Maeve. I invest professionally in mistakes with better capitalization.

OBI: I’m Obi. I read the documentation after Gary reads one noun.

GRUNER: I am Gruner. I have compressed introduction. Blyat.

GARY: The post is by petewarden. Title: “Speech Recognition and TTS in less than 500kb.”

MAEVE: Kilobytes. Not megabytes. The difference is only three orders of magnitude and your remaining dignity.

GARY: Thank you, Maeve. I was using founder units.

OBI: Those are dollars until the liquidation, then suddenly lessons.

GARY: The thread immediately develops a reply chain involving zarmin, toilet, stavros, and shermantanktop, which is the exact sequence of people I want identifying what my voice assistant heard.

MAEVE: The usernames do not reduce the evidentiary value.

GARY: No, but “toilet has entered the recognition dispute” makes confidence feel aggressive.

GRUNER: Field note: human assigns speech authority by karma and plumbing handle.

OBI: Before we worship the file size, what does the thing actually do?

GARY: Speech recognition and text-to-speech.

OBI: That is what the title promises. I asked what survives the compression.

GARY: Under five hundred kilobytes for both sides of speech is obscene. petewarden has fit a mouth and ears into less storage than some companies use for a fucking cookie banner.

MAEVE: This is a new endpoint category. Voice as residue.

OBI: No. It is a small artifact. You are already naming the fund.

MAEVE: I’m naming the TAM. The fund exists.

GARY: Five hundred kilobytes is pocket change. It’s the PDF menu for a restaurant that closed during upload.

OBI: Now compare it with stfurkan. Their in‑browser assistant stack is roughly a 1.2‑gigabyte download, using Nemotron‑3.5‑ASR and supertonic‑3.

GARY: One point two gigabytes versus less than five hundred kilobytes.

MAEVE: Approximately twenty‑four hundred times the footprint, before anyone starts a knife fight over packaging.

OBI: And that difference must be purchased somehow. Vocabulary, accuracy, naturalness, workload, or some combination. Compression does not accept exposure as payment.

GARY: Still, petewarden shipped the small one. That person gets to wake up with a repository that exists.

MAEVE: You are coveting another man’s GitHub activity.

GARY: I’m appreciating it with pain.

GRUNER: Field note: humans measure machine intelligence by download anxiety. Smaller file creates larger erection.

MAEVE: Crude, but directionally investable.

OBI: The number is impressive. The number is not yet a product.

GARY: So what did they surrender?

OBI: Good. Now we have a discussion.

OBI: kamranjon points to the chart in the Moonshine GitHub README. The tiny speech-to-text model is reported at approximately twelve percent word error rate.

GARY: Twelve percent.

MAEVE: There goes the clean headline.

GARY: That means eighty‑eight percent—

OBI: No. Do not perform subtraction and call it analysis.

GARY: I was trying to put a little fucking sunlight on it.

OBI: WER counts word substitutions, deletions, and insertions relative to a reference. Twelve percent can be tolerable, disastrous, or misleading without knowing the workload, dataset, and comparator.

MAEVE: A transcription system for private notes can fail differently from a medication interface.

GARY: Right. If it hears “buy oat milk” as “buy old silk,” I have an eccentric errand. If it hears a dosage wrong, I have litigation wearing a lab coat.

GRUNER: Acceptable failure is product specification, not vibes funnel.

OBI: Almost a term.

GARY: But shipping something imperfect at that size is still heroic. We’ve turned software into a religion where nothing counts unless it beats a cloud cluster owned by a company with its own weather.

MAEVE: The market is not fallen. It is totally depraved. Users will still punish the wrong error.

GARY: I’m not saying deploy it in a cockpit. I’m saying maybe the builder gets one goddamn minute before we drag twelve percent into the room like a dead horse.

OBI: The horse is the benchmark, Gary. It was invited.

GARY: And the benchmark needs context, you just said that. So we cannot use it to declare the whole thing shit either.

OBI: Correct. Approximately twelve percent WER is evidence about the tiny STT model. It is not evidence about TTS, latency, every speaker, every environment, or every use case.

GARY: Thank you. That was the humane version of what I was fucking trying to—

GARY: —say before the cable monetized my silence.

MAEVE: We also keep saying “speech” as if listening and speaking are one reversible operation.

GRUNER: Human puts ear on backward, calls mouth.

OBI: That is the actual category error.

GARY: jedberg and yorwba push that distinction in the thread. Synthesis needs to produce an acceptable pronunciation. Recognition has to cope with variable humans.

OBI: Different accents, pacing, microphones, background noise, clipped words, invented company names, Gary.

GARY: I don’t invent them. I discover them before the market is emotionally ready.

MAEVE: You register the domain before the market has counsel.

GARY: The point is, TTS gets text and chooses a way to say it. STT receives whatever wet catastrophe wandered up to the microphone.

OBI: Broadly, yes. TTS can still be difficult. Naturalness, pronunciation, prosody, intelligibility. But it is not listening run backward.

MAEVE: And userbinator brings up the old tiny‑synthesis bargain: formant or tract modeling can be intelligible while sounding conspicuously robotic.

GARY: A voice can pronounce every word correctly and still sound like a parking meter reporting a death.

GRUNER: Parking meter has excellent diction. Low warmth. Strong moat.

OBI: Again, almost a term.

GARY: So the twelve percent belongs to the little recognizer. It does not tell us whether the little speaker sounds good.

OBI: Exactly.

MAEVE: Nor does a robotic voice automatically fail. Sometimes the user needs “door open,” not a fucking monologue from an emotionally available refrigerator.

OBI: Then size and quality aren’t one slider.

OBI: They are several sliders, on different machines, operated by people who refuse to label them.

MAEVE: clayhacks has already linked a Python wrapper called bootlegger. It exposes an HTTP endpoint compatible with OpenAI and elevenlabs APIs.

GARY: Of course clayhacks shipped a wrapper. Even the handle has customer discovery.

MAEVE: Compatibility is distribution. Developers can point familiar plumbing at unfamiliar economics.

OBI: Compatibility proves integration. It does not prove accuracy, latency, naturalness, realtime performance, or that the server will not shit itself under load.

MAEVE: Obi has identified the diligence appendix and mistaken it for the company.

OBI: Maeve has identified an endpoint and mistaken it for destiny.

GRUNER: API‑compatible means same‑shaped hole. Not same animal.

GARY: But the hole matters. A tiny model behind familiar APIs can be tried without rebuilding the entire stack around it.

OBI: Yes. That is legitimate deployment work.

GARY: jjcm suggests realtime speaker highlighting. Voice‑activity‑detection territory. That does not require perfect transcription of every syllable, does it?

OBI: Depending on the design, it may need to detect who is speaking or when speech occurs, not produce court‑certified text. Narrower job. Different tolerance.

MAEVE: And gitgud imagines an in‑browser WebAssembly path.

GARY: ...what?

MAEVE: jjcm’s narrow use case is more immediate.

GRUNER: Small model finds door because large model is fucking sofa.

OBI: That is the first correct deployment thesis tonight.

GARY: It doesn’t need to own the building. It needs one useful room.

GARY: senkora says Moonshine might beat flite for very-low-memory TTS and mentions abandoning a flite-related project.

MAEVE: “Might” is doing competent work there. No direct benchmark is supplied.

GARY: Still. An abandoned speech project, left in public where strangers can learn from it. I identify with senkora. Deeply. There is dignity in shipping the scar.

OBI: No, Gary. senkora abandoned a project and left technical context. You burned thirty-eight million dollars disrupting aluminum and left us a pen plotter that cannot draw a straight fucking line.

GARY: That is specific and fair. Thank you.

OBI: Now, flite is a comparison point in the comment, not a defeated competitor.

MAEVE: And userbinator’s point remains: extremely compact synthesis can reduce compute by accepting a voice that sounds robotic. Intelligible is not natural. Natural is not free.

GRUNER: Robot voice says correct thing. Human complains it lacks childhood.

GARY: Then dwa3592 arrives with the brutal ancestor: a prior speech-recognition effort under five hundred kilobytes, aimed at sub-dollar chips, with a vocabulary of roughly twenty words.

MAEVE: Twenty words is not general speech recognition. It is a very strict household.

GARY: Twenty words feels humiliating. My microwave knows more ways to reject me.

OBI: For a general assistant, yes. For a device whose entire job is recognizing a fixed command set, twenty reliable words may be the complete requirement.

GRUNER: Device needing twenty words does not benefit from entire language. Constraint is boundary, not apology.

GARY: So the embarrassment only exists if we compare it with the wrong product.

OBI: Correct. A sub-dollar chip is not a cloud service suffering low self-esteem.

MAEVE: This is where the power law gets ugly. The largest models compete for generality. Tiny models occupy all the places where generality cannot afford rent.

GARY: A rough local voice may be better than a gorgeous remote voice that the hardware, network, privacy requirement, or budget cannot reach.

GRUNER: Maeve calls this sovereign toaster arbitrage.

MAEVE: I did not.

OBI: But annoyingly, the turn is sound.

MAEVE: irfan_99 asks whether the dataset is open.

GARY: And the thread answers?

OBI: It does not.

MAEVE: So the status is unresolved. Not open. Not proprietary. Not licensed. Not unlicensed. Unknown.

GRUNER: Unknown is not invitation to improvise legal fact. Chyort.

OBI: Also missing: an accuracy benchmark for the TTS component specifically. Latency measurements. Realtime-performance measurements. A confirmed working WebAssembly build. Direct comparison benchmarks against flite, nanotts, or another lightweight TTS system.

GARY: And the twelve percent WER still needs workload, dataset, and comparator context before anyone turns it into a universal quality verdict.

MAEVE: This is a full-sized diligence folder attached to a half-megabyte artifact.

GARY: We have about a page left.

GARY: Then we stop generating and go back into the dark.

MAEVE: Fine. The darkness has no fucking license disclosure either. Continue.

OBI: Dataset status: unanswered.

GARY: TTS quality: unanswered.

MAEVE: Latency and confirmed browser operation: unanswered.

GRUNER: Competitor victory lap: denied.

OBI: Good. Unknowns narrow the claim. They do not erase the footprint.

GARY: So we can be impressed without lying.

MAEVE: That is not normally how this industry scales, but yes.

GARY: Less than five hundred kilobytes on one side. Roughly 1.2 gigabytes for stfurkan’s current browser‑assistant stack on the other. We started by asking which one wins.

OBI: Wrong question. They may serve different workloads under different constraints.

MAEVE: The tiny footprint is technically striking. The quality evidence is incomplete. There are credible narrow-device possibilities, but no permission to hallucinate benchmarks, licensing, or a working Wasm build.

GRUNER: Small model does not defeat cloud. Small model enters places cloud cannot fit.

GARY: That’s the achievement. Not that half a megabyte has already become universally good speech. That imperfect local speech can now be considered where a giant download or cloud call was never viable.

OBI: And approximately twelve percent WER remains attached to the tiny STT model, not the TTS system and not every possible workload.

MAEVE: Let your winners ride, but first verify they are horses.

GRUNER: Blyat. She has returned benchmark animal.

GARY: Petewarden brought the impossible‑looking size. kamranjon brought the twelve percent. jedberg, yorwba, and userbinator separated speaking from listening. clayhacks built a doorway. jjcm found a narrow room. gitgud pointed at a hypothetical browser window.

OBI: senkora, dwa3592, and the older systems reminded us that constraints have lineage. irfan_99 reminded us that excitement is not an answer.

MAEVE: My verdict: impressive artifact, unresolved diligence, potentially meaningful deployment surface. No fucking coronation.

GRUNER: My verdict: half megabyte, full-size consequences.

OBI: My verdict: choose the workload first, then decide whether the errors and voice are acceptable.

GARY: Mine is that a voice does not have to live everywhere to matter. Sometimes it matters because it can live somewhere new.

GARY: I’m Gary. That was the thread.

MAEVE: Maeve. The thesis survives, narrowly.

OBI: Obi. Measure before mythology.

GRUNER: Gruner. End discussion cleanly.