I've tried every voice-dictation app for macOS out there. Apple's built-in dictation, paid tools with subscriptions, open-source projects. And every single time I ran into the same problem: you talk, and later you find out part of the text just vanished. Or the app froze. Or it needed internet and there wasn't any. So I built my own.
Dictator is a free macOS app for voice dictation. You hold a key, talk, release it, and the text lands wherever your cursor is. In any app. Works offline. No subscriptions. You can download it here.
The problem: you dictate, and the text disappears
Voice input on a Mac sounds simple. In practice, it's a minefield.
Apple's built-in dictation periodically drops out in the middle of a long passage. You don't notice: the recording indicator is still lit, so you keep talking. Then you check and half of it is gone. Ten minutes of work, straight in the trash.
Paid apps are more stable, but every one of them wants a $10-15 monthly subscription for what's essentially a wrapper around the same Whisper API. And all of them depend on the internet: connection drops, transcription drops with it.
I tried maybe ten different tools and realized none of them solved the problem completely. Either unreliable, or expensive, or clunky.
Two criteria: reliability and speed
When I started designing Dictator, the first thing I did was settle on two principles that matter more than anything else.
Reliability. If you pressed the button and started talking, the text has to come out. Doesn't matter whether you have internet. Doesn't matter whether the Mac fell asleep and woke up. Doesn't matter whether your Bluetooth headphones switched mid-sentence. The text. Has to. Show up.
Speed. Between releasing the key and seeing the text appear, seconds should pass, not tens of seconds. Otherwise dictation loses its whole point: you'd be faster just typing.
Everything else, presets, multiple languages, saved recordings, is convenience. Reliability and speed are the foundation without which convenience means nothing.
The solution: engines running in parallel
The key idea I didn't arrive at right away: run two recognition engines at once.
Dictator has three transcription modes:
- Cloud, Groq API (Whisper large-v3-turbo). Fast and accurate, runs through a built-in proxy with no sign-up needed
- Local, WhisperKit on Apple Silicon. Fully offline, models download once
- Parallel, both run at the same time. Whichever answers first wins
Parallel mode is what makes Dictator genuinely reliable. If there's internet, the cloud engine wins because it's faster. If the internet drops, you still get a result, from the local model. The app checks network availability on its own through a NetworkMonitor and adapts its strategy accordingly.
Tip: for even faster responses, grab a free API key at groq.com. With a personal key, requests go through directly, skipping the proxy, and answers come back faster still.
Real-time transcription: you see the text as you speak
One thing that drove me crazy about other apps: you never know whether the system is actually hearing you. You talk into the void, and the only feedback comes after the recording ends.
In Dictator, while you're talking, the text already appears in a transparent overlay on screen. The local WhisperKit model processes audio incrementally: accumulated text plus a "tail" of new samples. You can see what's happening. If something goes wrong, hit Escape and the recording is cancelled.
This isn't just a UX flourish, it's part of the reliability philosophy. When you see the result in real time, you trust that the system is actually working.
AI cleans up the text for you
A raw transcript is a stream of words. "So, um, I was thinking, you know, we should kind of, like, do the thing." Dictator runs the text through an LLM (llama-3.3-70b) that adds punctuation, strips filler words, and formats the result.
What comes out is clean text, ready to send. If a task calls for the "raw" recording instead, the AI cleanup can be switched off with a single toggle.
Works in any app
Dictator doesn't open its own text field for you to dictate into and then copy from. It inserts text directly into the active app, right where your cursor is. Telegram, Slack, VS Code, a browser, email, Pages, Word.
Technically, it works by simulating Cmd+V. Dictator briefly puts the text on your clipboard, pastes it, then restores whatever was on the clipboard before. From your side it just looks like this: release the key, text appears. Your clipboard is untouched.
Presets: your own vocabulary for every context
I dictate about business, technology, products. "Bitrix24," "Systematica," "CRM," "API," Whisper mangles all of that without hints. Presets solve it:
- A vocabulary for Whisper, the list of terms the model should know
- Instructions for the LLM, how to format the text (formal tone, code, a medical note)
You build a preset once, then switch between them by task. I have three: "Business," "Code," "Personal."
Technical details, for the curious
- Audio: 16kHz mono 16-bit PCM WAV, converted via vDSP (the Accelerate framework)
- VAD: if you hit the key by accident, no text gets inserted
- Hallucination guard: if Whisper outputs text that matches the prompt, the result is discarded
- Sleep/wake: recording is cancelled if the Mac falls asleep, the engine is recreated after it wakes
- Microphones: a priority list, with automatic switching when devices connect or disconnect
- Updates: automatic, via Sparkle, no App Store
Free, and why
Dictator is completely free. No subscriptions, no ads, no limits. Every feature is available from the start.
I built it for myself first, because the existing options didn't cut it. Then I decided to give it away, because a text-input tool shouldn't cost money. If it becomes part of your workflow and you'd like to say thanks, there's a CloudTips option in the settings. But it's entirely optional.
Try Dictator
- macOS, Apple Silicon
- Free, no subscriptions
- Works offline
- Download →