You can build push-to-talk dictation on a Mac against a hosted speech API: a small script records the microphone when you press a key, uploads the clip when you press it again, reads the text out of the reply and pastes it at your cursor. It works. It also leaves you owning an API key, a per-minute meter, several permission prompts and a script that cannot produce a word without a network.
If what you want is the result, words at the cursor in any Mac app when you press a key, ThinkScribe for Mac does it with one shortcut: press Option-Space, speak, then press it again or simply pause. Your speech is transcribed on your Mac, it works offline, and there is no key to manage.
This page covers both: how the cloud version works and where its time and money go, then how to set up the shortcut in a couple of minutes.
How a cloud dictation script works
Every hotkey dictation tool, hand-built or not, runs the same loop:
- Start recording when the hotkey is pressed, writing the microphone to a short audio file. Speech services expect 16 kHz mono audio; recording at higher rates or in stereo only makes the upload bigger, with no accuracy gain.
- Stop recording on the next press. The recorder has to be stopped cleanly, because common audio formats write their length into the file header when recording ends. A killed recorder leaves a file that a strict server rejects, after you have already paid for the upload.
- Transcribe. This is the one structural difference from dictation on the device. Instead of running a speech model on the Mac, the script opens a secure connection, uploads the clip with an API key, waits for the provider to process it and reads the text out of a JSON reply.
- Insert the text at the cursor, usually by placing it on the clipboard and sending a synthetic Command-V to the front app.
Everything else in a solid script exists to protect step 3: a safe place for the credential, a timeout so a dead connection does not hang the tool, a retry for brief failures, and a rule that never throws away your recording when a request fails for good.
What building it yourself really involves
The loop fits on one screen, but a version you can rely on every day asks for more than it looks like.
- Skills. Shell scripting, audio formats, HTTP requests and JSON parsing, plus careful reading of a provider's API reference, since field names, limits and model names differ between services and change over time.
- A credential on your laptop. The API key has to live somewhere safe (the macOS keychain, never the script itself), be scoped or spending-capped if the provider allows it, and be rotated now and then. If the laptop goes missing, it is one more thing to revoke.
- Permissions. Microphone access, permission to control System Events, and Accessibility permission to send the paste keystroke. They attach to whichever app launches the script, so you grant them once while testing and again for the hotkey tool you actually use.
- A hotkey manager. macOS does not run a script from a global shortcut on its own, so a launcher app or an automation shortcut sits in the middle, with its own settings and updates.
- Upkeep. Providers retire model names, change parameters and adjust rate limits. A macOS update can reset a permission. Each of these breaks dictation, usually on the morning you needed it.
None of this is hard for a developer. All of it is yours to maintain.
Where the time goes
A cloud request pays for the connection, the upload, the provider's queue and the reply, on top of the recognition itself. Rough figures for a ten-second clip (about 320 KB at 16 kHz mono) on a home connection:
| Stage | Rough estimate | Depends on |
|---|---|---|
| Stop and finish the audio file | Under 0.1 s | Nothing much |
| Connection and security handshake | 0.1 to 0.3 s | Distance to the provider |
| Upload of the clip | 0.2 to 1 s | Your upload speed |
| Provider queue and processing | 0.5 to 2 s | Model, load, plan |
| Reply and paste | Under 0.1 s | Nothing much |
The shape matters more than the numbers: about a second is fixed overhead that a two-word dictation pays in full. That is why short bursts feel slow. A 1.5-second wait after three seconds of speech is a 50 percent tax, while the same wait after a minute of speech is noise. Upload speed matters more than people expect, because home and cafe connections are much slower going up than coming down.
Streaming versus batch
Hosted speech services also sell a real-time tier. Instead of uploading a finished file, the app holds a connection open and sends audio in small frames while you talk. Text comes back as you speak, first as provisional words that may still change, then as final text. That is what makes commercial dictation feel live.
A shell script is the wrong tool for this. Streaming means keeping a connection open, framing audio continuously, replacing provisional text you have already shown, and surviving a reconnect mid-sentence. At that point you are writing an app, not a script.
What the cloud route costs, and what breaks
A meter on every press. Hosted speech is billed per second or minute of audio, typically somewhere between a fraction of a cent and a couple of cents per minute. Dictation is a many-times-a-day habit, so it adds up faster than occasional meeting transcription. Cloud transcription API costs does the arithmetic.
No offline mode. On a plane, on hotel Wi-Fi that is connected but useless, or in a building where you will not join the guest network, the script produces nothing.
Rate limits and outages. When you exceed a quota the service refuses requests, and when the provider has a bad hour, so does your dictation.
Your voice goes to a third party every time. Each press uploads audio, whatever the sentence contains. Retention periods, training defaults and subprocessors differ by provider and plan, and they change. That is a normal product shape, but it deserves a deliberate decision. On-device vs cloud transcription walks through the trade-offs.
How to dictate with a hotkey on a Mac in ThinkScribe
ThinkScribe for Mac runs on a Mac with Apple silicon and macOS 26 or later.
- Install ThinkScribe for Mac and go through the first run. Its Type With Your Voice step sets up the shortcut, the menu bar item, an optional floating mic button and opening at login.
- Open Settings > Voice Typing and check that Enable Global Hotkey is on. The shortcut is Option-Space (⌥Space). You can change it under Global Hotkey; a single F-key works too.
- Decide how text arrives. If you grant the optional Accessibility permission, the text lands at the cursor (Direct insertion). Without it, the text is copied and you see "Copied: press ⌘V to paste".
- Click into any app, press Option-Space and speak. Press it again to stop, or just pause: dictation stops after a short silence (the Silence Timeout, 3 seconds by default). Press Escape to cancel.
- Pick the indicator you prefer, a Floating Bar or a Menu Bar Icon, and add names and jargon you use often in Settings > Vocabulary.
There is no hold-to-talk on the Mac: press to start, press again or pause to stop. Dictate into any Mac app with Option-Space covers the shortcut in more depth, custom vocabulary explains how to teach it names, and voice typing on a Mac compares it with the dictation built into macOS.
A cloud script next to ThinkScribe
| Cloud dictation script | ThinkScribe for Mac | |
|---|---|---|
| Setup | An afternoon, plus a provider account and an API key | A few minutes, no account |
| Shortcut | Whatever your hotkey tool supports | Option-Space, or a key you choose |
| Works offline | No | Yes |
| Where your speech goes | Uploaded to the provider on every press | Transcribed on your Mac, never sent to us |
| Cost | Metered per minute of audio | Free to download, with free uses of voice typing and other Pro features |
| Upkeep | You, plus every change the provider makes | App updates |
A cloud script is a reasonable choice if you already have API credit, need one particular provider for an unusual language, or simply enjoy building tools. If you dictate all day, travel, or handle material you would rather not upload, a shortcut that transcribes on the Mac fits better.
On iPhone and iPad the same job is done by the ThinkScribe Voice keyboard; see offline dictation on iPhone. For the wider picture, the complete guide to voice to text covers every way to turn speech into text on Apple devices, and the voice typing page shows it in daily use.
Frequently asked questions
Can I use my own speech API key with ThinkScribe?
No. ThinkScribe does not take API keys or send your dictation to a speech provider. Your speech is transcribed on your Mac by a speech model the app sets up for you, so there is nothing to configure and no per-minute bill.
Is cloud dictation faster than dictation on the Mac?
Usually not for short sentences. A cloud request pays for the connection, the upload and the provider's queue before any speech is recognized, roughly a second of fixed overhead that a short clip cannot hide. Cloud services have more of an edge on very weak hardware and for some less common languages.
Does Option-Space dictation work offline?
Yes. Voice typing in ThinkScribe for Mac is transcribed on the Mac, so it keeps working on a plane or when you are not connected to any network. A cloud dictation script cannot work without a connection.
Is there hold-to-talk on the Mac?
No. Press Option-Space to start and press it again to stop, or pause and let the Silence Timeout end it. Escape cancels. Hold-to-talk exists in the ThinkScribe Voice keyboard on iPhone and iPad, where you hold the mic button.
Why does my dictated text land on the clipboard instead of at the cursor?
Typing into another app needs the optional Accessibility permission. Without it, ThinkScribe copies the text and shows "Copied: press ⌘V to paste", so you paste it yourself. Allow ThinkScribe in System Settings > Privacy & Security > Accessibility to have text land at the cursor.

