Voice dictationfor the AI era.
Hold fn and talk — your words land at your cursor in any Mac app. Say “take a screenshot” or “attach the PDF from downloads” mid‑sentence, and that lands too.
Speak. It’s written. Name it. It lands.
Now you
Pick something to say.
The screenshot really is this page, and the link really is this tab.
That picture is this page, taken the instant you said the words.
Every dictation app types what you said.
This one also does what you asked.
All of this sits on top of ordinary dictation — say a command mid-sentence and its result lands right where you said it.
Pictures of your screen, pasted where you said the words.
The screen your mouse is on, taken the instant you say the words. SayCtrl hides its own pill first, so it never appears in its own screenshot.
Also understood
What lands is what
you meant to say.
The “um”s and the false starts go before the text is pasted.
What you said
so I think we should, we should probably just um ship the thing on Friday you know and then like see what happens
False starts and self-corrections go too.
What was typed
If the cleanup can’t verify itself, your raw words land.
Spoken lists become real lists
“First of all… second of all…” lands numbered — never structure you didn’t speak.
Paragraphs where you changed subject
A new topic gets a blank line. A short dictation stays one paragraph.
Spoken formats, written correctly
- “sorower at gmail dot com”→sorower@gmail.com
- “twenty five dollars”→$25
Only when you clearly said it that way.
The app you’re in picks the register
Personal, Work, Email, Agents — tone moves punctuation and layout, never your words.
Code editors are left strictly alone
Xcode, VS Code, JetBrains, Sublime, Neovim: never tidied, never switchable.
Words land while you’re still talking
Live streaming answers in about 150 ms, so letting go of fn pastes what is already written.
Download a model.
Never pay again.
Pick Local in Settings, press Download once, and the audio never leaves your Mac again.
- No terminal, no Python, no server — the engines ship inside the app.
- Checksum-verified on download, deletable any time.
- Metal-accelerated on Apple silicon.
- Say “use the local model” to switch mid-flow.
Works with the Wi-Fi off.
- freeDownload
Parakeet v3 Small
356 MB · 25 languages · streams live
- freeDownload
Parakeet v3
669 MB · 25 languages · streams live
- freeDownload
Parakeet v3 Full
1.3 GB · 25 languages · streams live
- freeDownload
Whisper Small
488 MB · 99 languages
- freeDownload
Whisper Turbo
574 MB · 99 languages
- freeDownload
Whisper Large
1.6 GB · 99 languages
Weights land in ~/Library/Application Support/SayCtrl/Models, never in the app bundle.
It learns you.
From what you fixed, on this Mac.
Dictionary
It first typed
Slack
Let’s ship say control on Friday.
you fixed it onceEvery time since
Let’s ship SayCtrl on Friday.
Fix a word once — your names and jargon land right from then on.
Neighbours
It first typed
Notes
open it in the art browser
fixed with its neighbourEvery time since
open it in the Arc browser
Remembered with the word beside it, so plain “art” still types as art.
Screen
It would have typed
Mail — Reply
Thanks Shevaun, sending it now.
it read the window firstIt typed
Thanks Siobhán, sending it now.
It skims the front window before you speak, so what’s on screen is heard right.
Phrases
You said
Safari
Reach me at my email address.
expanded in fullIt typed
Reach me at sorower@sayctrl.com
Say the short thing, type the long thing — spelled right, always.
Nothing of yours
leaves this Mac
unless you send it.
Audio goes to the provider you chose, for transcription, and nowhere else.
- No subscription
- Bring your own API key and pay cents an hour, at cost.
- No telemetry
- No analytics, no crash pings, nothing phoned home.
- Offline when you want it
- Run a local model and the audio never leaves your Mac.
- Your files stay yours
- Keys, transcripts and clips live in ~/.config/sayctrl.