Ear
English speech-to-text, entirely in your browser. Nothing you say is sent anywhere — the model runs locally via WebAssembly.
How Ear compares
| Model | Artifact size | WER test-clean | CER test-clean | In-browser | Architecture |
|---|---|---|---|---|---|
| Ear int8 this demo | 24 MB | 8.6% | 2.7% | ✅ WebAssembly | TinyConformer-CTC, greedy |
| Ear fp32 | 59 MB | 8.6% | 2.6% | — | Same accuracy, fp32 weights |
| Ear int4 exp. | 9.7 MB | 9.7% | 3.0% | — | Groupwise int4 (group=64) |
| Whisper tiny.en | 142 MB | 5.1%† | — | ⚠️ ~340 MB total | Encoder-decoder, beam search |
| Whisper base.en | 244 MB | 4.2%† | — | ⚠️ ~600 MB total | Encoder-decoder, beam search |
| Whisper small.en | 967 MB | 3.3%† | — | ❌ Too large | Encoder-decoder, beam search |
† Whisper WER from the OpenAI Whisper paper (greedy, test-clean).
In-browser size includes the ONNX/WASM runtime — Whisper requires a full transformer runtime and tokenizer on top of the weights.
Ear's 8.6% is on the full 2,620-utterance test-clean set. On short utterances (≤3s), WER rises to 12.5%.
English clean read speech only. Trained on LibriSpeech train-clean-460 (460h, CC-BY-4.0). 29-character alphabet — no BPE, no vocab files, no language model.
Ear re-runs inference on all audio so far every ~1.5 s — updates appear in italic while recording, then lock in when you stop. Chrome Web Speech streams in real time via Google's servers. Neither transcript leaves your device for Ear; Chrome's does.