S1E43 — Speech Recognition and TTS in less than 500kb
July 19, 2026 · 13 min
Show notes
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.
