Offline Whisper dictation on a Mac with a hotkey: what it takes

How offline Whisper dictation with a hotkey works on a Mac: model sizes, latency, permissions and limits of a DIY build, and the one-shortcut way to dictate.

You can build offline dictation on a Mac around Whisper, the open speech model OpenAI released in 2022: a recorder captures the microphone when you press a key, an open-source port of Whisper turns the clip into text on your Mac, and a paste step puts the text at your cursor. After the one-time model download it needs no network. Expect an afternoon of setup, a handful of permission prompts and a small tool you maintain yourself.

If you want the result without the build, ThinkScribe for Mac gives you the same thing as a shortcut: press Option-Space in any app, speak, press again or pause, and the text appears. It is transcribed on your Mac and works offline, and ThinkScribe sets up the speech model for you: nothing to install or convert.

This page explains how the do-it-yourself version works, which choices matter and where it falls short, then shows the shortcut setup.

The four parts of hotkey dictation

Every push-to-talk dictation tool, however it is dressed up, does the same four things:

  1. Start recording when the hotkey is pressed, writing 16 kHz mono audio to a temporary file.
  2. Stop recording when the key is pressed again (toggle) or released (hold-to-talk, if your hotkey tool can tell key down from key up).
  3. Transcribe the file with a speech model and collect the text.
  4. Insert the text at the cursor, usually by putting it on the clipboard and sending Command-V to the front app.

Only the first two steps need a global hotkey. The last two are a plain pipeline, which is why hand-built tools are usually a shell script glued to a hotkey app.

Picking a Whisper model for dictation

Whisper comes in sizes, and dictation changes which one is right. Clips are short, so the time to load the model matters as much as the time to recognize speech. Approximate file sizes for the common versions:

Model Approximate size What to expect
tiny about 75 MB Fastest, rough on names and jargon
base about 150 MB A sensible default for short English dictation
small about 490 MB Noticeably better, still quick on Apple silicon
large-v3-turbo about 1.6 GB, under 600 MB compressed Close to the largest model's accuracy, multilingual

The English-only variants (marked .en) are a little better for English and useless for anything else. For German, French, Spanish or other languages, use a multilingual model. Compressed (quantized) files load faster and use less memory at a small cost in accuracy; how much RAM a Mac needs explains the memory side.

Why audio format and a clean stop matter

Whisper expects 16 kHz, mono, 16-bit audio. Recording in that format from the start avoids a conversion step and keeps files small. The subtler problem is stopping: common recorders write the audio file's header, including its length, only when they exit. Stop the recorder with a hard kill and the file claims the wrong length. Some tools shrug that off, others read garbage or nothing, and the dictation silently fails. A reliable script sends a polite stop signal and waits for the recorder to finish before it reads the file.

Getting the text to the cursor

There is no universal "type this text into the front app" command on macOS. Hand-built tools put the text on the clipboard and simulate Command-V. The first time that runs, macOS asks two things: whether the launching app may control System Events, and whether it may use Accessibility features to send keystrokes. Without Accessibility permission, the paste step fails with a "not allowed to send keystrokes" error.

These permissions attach to whichever app launched the script, so you grant them once for Terminal while testing and again for the hotkey tool you actually use. The alternative is to skip the simulated paste, leave the text on the clipboard and press Command-V yourself: one keystroke more, no extra permission. Either way, whatever was on your clipboard before is gone after each dictation.

Latency: the model loads on every press

A script has no process that stays running, so each press reads the model from disk before it recognizes a single word. Rough round trips for a ten-second clip on an Apple silicon Mac, from stop to pasted text:

Model Typical round trip
tiny Under a second
base About a second
small One to two seconds
large-v3-turbo Several seconds

Longer clips scale roughly linearly. On a Mac with 8 GB of memory, the base or small model is the practical ceiling for a snappy feel.

Languages

Whisper assumes English unless told otherwise. For other languages you pass a language code and use a multilingual model. Automatic language detection exists, but it listens to the start of the clip, and a five-second dictation gives it little to go on, so a fixed language is more reliable for short bursts.

The limits of a hand-built Whisper hotkey

Know what you are not getting before you rely on it daily.

  • Nothing while you speak. Text appears only after you stop. Streaming demos exist, but they re-decode a sliding window rather than committing text, which is not the same as dictation.
  • No spoken commands. Whisper adds punctuation from context. Saying "comma" or "new paragraph" types the word.
  • A model load every time. Quick with small models, the bulk of the wait with large ones.
  • Filler words stay. False starts and repeated phrases land in the text as spoken.
  • Invented text on silence. Press the key by mistake and Whisper can produce a fluent sentence nobody said. Why Whisper hallucinates explains the cause.
  • Upkeep. Package updates rename binaries and change flags, and a macOS update can reset a permission. The script is yours to fix when that happens.

For a developer who enjoys tinkering, none of this is a deal-breaker. For someone who just wants to talk instead of type, it is a lot of moving parts for one keystroke.

How to set up offline hotkey dictation in ThinkScribe

ThinkScribe for Mac runs on a Mac with Apple silicon and macOS 26 or later.

  1. Install ThinkScribe for Mac and follow the first run. The Type With Your Voice step sets up the shortcut, the menu bar item, an optional floating mic button and opening at login.
  2. In Settings > Voice Typing, make sure Enable Global Hotkey is on. The default is Option-Space (⌥Space); change it under Global Hotkey if you like, and a single F-key works.
  3. Grant the optional Accessibility permission if you want text typed at the cursor. Without it, ThinkScribe copies the text and shows "Copied: press ⌘V to paste".
  4. Click into any app, press Option-Space and speak. Press again to stop, or pause and it stops by itself after the Silence Timeout (3 seconds by default). Escape cancels.
  5. Choose a Floating Bar or Menu Bar Icon as the indicator, and add names and technical terms in Settings > Vocabulary so they come out spelled right.

The Mac shortcut is press to start and press again (or pause) to stop; there is no hold-to-talk on the Mac. Dictate into any Mac app with Option-Space has more detail, and the voice typing page shows the same idea on iPhone, where the ThinkScribe Voice keyboard does the job in any app.

A hand-built Whisper hotkey next to ThinkScribe

DIY Whisper hotkey ThinkScribe for Mac
Setup An afternoon: recorder, model, script, hotkey app A few minutes, no account
Speech model You choose, download and update it Set up for you, nothing to install or convert
Works offline Yes, after the model download Yes
Stopping Press again, or release if your hotkey tool supports it Press again, pause, or Escape to cancel
Text at the cursor Clipboard plus simulated paste, with permissions per launcher Direct insertion with Accessibility, otherwise ⌘V
Languages Whatever your model covers, with a language code per run 28 transcription languages
Upkeep Yours App updates

macOS also has dictation built in. Voice typing on a Mac explains what it does and where it stops, and the complete guide to voice to text puts all the options side by side.

Frequently asked questions

Can Whisper do real-time dictation on a Mac?

Not in the way a dictation app does. Whisper transcribes a finished piece of audio, so a hotkey script shows text only after you stop. Streaming experiments re-decode a sliding window every fraction of a second, which is a demo rather than dictation. Real-time dictation needs a tool that keeps a model loaded and commits text as you go.

Which Whisper model is best for dictation?

For English, base is the usual starting point: it loads in a fraction of a second and handles clear speech well. Move up to small if names and technical terms come out wrong. The large models are more accurate still, but reloading them on every press makes short sentences feel slow. For other languages, use a multilingual model.

Which speech model does ThinkScribe use for dictation?

ThinkScribe sets up the speech model for you, so there is nothing to choose, install or convert. Your dictation is transcribed on your Mac and works offline, and your recordings and transcripts are never sent to us.

Why can my script not paste the text?

Sending keystrokes needs Accessibility permission for the app that launched the script, and controlling System Events needs a separate Automation approval. Enable the launcher in System Settings > Privacy & Security > Accessibility. In ThinkScribe the same permission is optional: without it, text is copied for you to paste with ⌘V.

Does ThinkScribe voice typing on the Mac work without internet?

Yes. Dictation with Option-Space is transcribed on the Mac, so it keeps working on a plane or with Wi-Fi off. There is no account to sign in to and no per-minute meter.