I’ve been using speech-to-text more lately, especially when I need to get a first draft out of my head without spending half the time typing it. There are plenty of dictation tools available now, but most of the good ones are desktop applications, browser extensions, or cloud services.
I wanted something simpler and privacy friendly so I built Dictate.
It is a small browser-based speech-to-text tool powered by Whisper. There’s no account, no installation and no desktop app. Open the page, wait for the model to load (it downloads a free open source model locally to your computer), then press Start and speak.
The interesting part is that the transcription happens in the browser and it is surprisignly good.
Whisper running locally in the browser
Dictate uses Whisper for speech recognition, but instead of sending the audio to a server, the model is downloaded to your browser and runs there.
The first load takes longer because the model has to be downloaded. After that, the browser can cache it and subsequent sessions are much quicker.
This also means that the audio does not need to be uploaded to a transcription service. The browser handles the speech recognition locally, and the resulting draft is autosaved in the browser as you work.
I wanted this property to be part of the design rather than another checkbox in a privacy policy. Dictating something can involve fairly private material: personal notes, work ideas, interview recordings, drafts, or things you simply don’t want passing through another company’s servers.
There are obviously trade-offs. Running a speech recognition model locally is more demanding than sending the audio to a remote API, and the initial model download isn’t tiny. But for a lightweight dictation tool, I think the trade-off makes sense.
Simple dictation and web based app
There are increasingly sophisticated voice products that don’t just transcribe what you say. They clean up the text, rewrite sentences, understand the application you’re using and integrate with specific workflows.
That’s useful for some people, but it wasn’t what I wanted to build here.
Dictate is closer to a digital notepad that happens to accept your voice.
You speak, it turns the speech into text, and you can edit the result immediately. There are buttons to copy the text or export it as either TXT or Markdown.
That makes it useful for things like drafting an article, capturing an idea while walking around, making meeting notes, recording an outline or simply getting a long paragraph onto the screen faster than typing it.
I also wanted the output to remain normal text. There isn’t a proprietary document format or another service where your notes have to live.
A couple of controls make a big difference
One thing that became apparent while working on it is that speech recognition isn’t only about the model.
The microphone is hearing everything around you. If you’re in a quiet room, the threshold for deciding what counts as speech can be relatively low. In a noisy environment, that can result in unwanted transcription.
Dictate therefore exposes a sensitivity setting. It controls how much louder than the ambient noise something needs to be before it is considered speech.
There’s also a pause length setting. Dictate doesn’t need to transcribe every tiny fragment independently. It listens for a pause, treats that as the end of a chunk and then processes it.
The default pause length is 1.2 seconds, but you can change it depending on how you speak.
These aren’t particularly exciting features, but they matter more in practice than adding another layer of AI text processing.
Language selection is explicit
Another small detail I wanted to get right was language selection.
Dictate lets you choose the language manually rather than relying entirely on automatic detection. The selected language is passed explicitly to Whisper, which is particularly useful when dictating in a language other than English.
This is one of those things that sounds minor until you use speech recognition in multiple languages. If you’re switching between languages, you don’t necessarily want the system making a guess based on the first few words.
Why make it a web app?
The browser is the main reason this project exists in its current form.
A desktop dictation application can integrate more deeply with the operating system, but then you have to support operating systems, installers, permissions, updates and all the other things that come with distributing native software.
A browser already gives me most of what I need here.
Dictate can run on macOS, Windows, Linux, ChromeOS and other modern systems with a compatible browser.
That also makes it convenient when I’m using a computer that isn’t mine. There is nothing to install and no account to configure. Open the page and use it.
The downside is equally obvious: the browser has to download the model and the computer has to be capable of running it. This isn’t trying to compete with a highly optimized native dictation application on every possible machine.
It’s a small web tool that does one job.
The project
Dictate is now part of my collection of small personal projects. I’ve been building these kinds of tools for years, usually because I run into a small problem and the existing solutions feel unnecessarily complicated.
Sometimes the resulting project is useful for other people too.
This one is free and available at:
https://xaviesteve.com/pro/dictate/
If you need to turn spoken thoughts into editable text without installing software or sending your recordings to a transcription service, that’s what Dictate is for.

No comments yet