Drop 008 put Whisper in your browser. It works — and it charges every visitor a multi-megabyte model download before they can say one word. Chrome 150 makes that toll optional: you can now ask the device what quality of recognition it can actually manage locally, and if the answer is good enough, you ship zero bytes of model.
The rule this page holds itself to: if on-device isn't available, it stops and tells you. It will not quietly stream your microphone to a server to paper over a gap.
Pick a quality tier, press listen, and talk. Nothing is recorded, nothing is stored, and — unless you explicitly opt into cloud mode below — no audio leaves your device.
Each tier is a real SpeechRecognition.available() call for the selected language. Before Chrome 150, on-device capability was a black box — you tried it and hoped. Now you can route the decision before you commit a user to a download or a server round-trip.
Why you have to press a button for this. available() does not throw on builds that ship the API with no speech service behind it — it crashes the renderer. We verified it on Chrome for Testing 151.0.7922.34: every argument shape killed the tab outright. A renderer crash can't be caught with try/catch, so there is no way to make an automatic probe safe.
So this page never calls it on load. Opening it can't kill your tab; the worst case is a crash on a button you chose to press. That's the cost of building on an API this raw, and hiding it behind a spinner would just move the crash somewhere less explicable.
This is a genuine trade, not a clean upgrade. Earshot is dramatically cheaper for the user and dramatically narrower in reach, and you give up the ability to choose or pin the model. For a booking widget on a client site, that trade is obviously worth it. For a transcription product, it probably isn't — keep 008 for those, and treat the two as a pair with a capability check between them.
Silent cloud fallback is the default failure mode of every voice tutorial on the web. You set processLocally = true, the device can't manage it, the browser quietly uses server recognition, and your "private, on-device" feature is now streaming a stranger's voice to a third party. The user is never told. Nothing in the UI changes.
So this page keeps processLocally pinned true, checks availability before it ever opens a microphone, and treats cloud mode as a separate, explicitly-labelled thing you have to ask for. When it's on, the badge says so for as long as it's on.
That's the whole "never phones home" claim made checkable rather than asserted — which is the only version worth putting on a site.