What you will get
Dictation that runs on your Mac with Wi-Fi off. The speech model, your vocabulary, your rules and your scripts all run locally. Nothing you say is uploaded.
| You say | You get |
|---|---|
| um we have twenty one users and the meeting is at ten fifteen | We have 21 users and the meeting is at 10:15 |
What needs the network
Some steps go online once. A few go online every time, and you can turn them off.
| What | Network | When |
|---|---|---|
| Installing the app | Yes | Once |
| The speech models, about 1.5 GB | Yes | Once, at first launch |
| A model fetched the first time a feature uses it | Yes | Once, on first use |
| eSpeak NG, optional | Yes | Once, through Homebrew |
| Ollama and a local language model, optional | Yes | Once, to pull the model |
| The update check | Yes | Until you turn it off |
A cloud model you add under models: |
Yes | Every call |
| Dictation, vocabulary, rules, scripts, reading the screen | No | |
| A model that Ollama runs on your Mac | No |
Steps
-
Check the Mac. ParrotFlow needs Apple silicon and macOS 15 or later. It uses about 3 GB of disk and about 1 GB of memory.
-
Install the app while you are online.
brew install znat/tap/parrotflowWithout Homebrew, the install script puts the same app in the same place:
curl -fsSL https://raw.githubusercontent.com/znat/parrotflow/main/scripts/install.sh | sh -
Grant the microphone. The app asks at first launch.
-
Choose how text reaches your app. The default types it into the app you are in, and needs the Accessibility permission. If you would rather not grant it, set
insert_mode: clipboardundertranscription:inconfig.yaml. ParrotFlow then copies the text and you press ⌘V. See Permissions. -
Let the setup window download the models. It starts at launch and shows the model it is fetching. Parakeet, the speech model, is about 470 MB of it. Stay online until the last screen says “Ready”.
-
Optional. Install eSpeak NG while you are still online. It helps ParrotFlow match your own names and jargon by sound. The setup window shows the command:
brew install espeak-ngOnce it is installed, ParrotFlow installs about 170 MB of Python into
~/Library/Application Support/ParrotFlow/pythonin the background. Let that finish before you go offline. -
Dictate a few sentences while you are still online. Some models are fetched the first time a feature uses them. For example, the 81 MB sound model for your vocabulary is fetched on the first English dictation that has a vocabulary in it.
-
Optional. Turn off the update check. Add this to
config.yaml:updates: after_days: -1-1never asks. The check is a call to GitHub’s release API. It sends nothing about you and nothing you dictate.
Check that it works offline
The commands below use the full path to the app. If you installed with Homebrew, parrotflow runs the same binary.
Ask the app what it loaded:
/Applications/ParrotFlow.app/Contents/MacOS/ParrotFlow --check-config
With the update check off, the output has this line:
· updates never checked
Any model that leaves your Mac is named in the same output. If you added a cloud model, you see a line like this one:
· models: "gpt" sends text off this Mac — https://api.openai.com/v1, gpt-5.6-luna, key from the Keychain
Then turn Wi-Fi off and dictate a sentence into any text field.
You can also test transcription with no microphone. macOS can speak a sentence into a file:
say -o /tmp/pf-check.wav --data-format=LEI16@16000 --channels=1 "Testing one two three"
/Applications/ParrotFlow.app/Contents/MacOS/ParrotFlow --transcribe /tmp/pf-check.wav
Testing 123. is a correct result. What matters is that text came back. If the speech model was not on disk yet, this command downloads it, so run it once while you are online.
Limits
- A model that failed to download is fetched again the first time ParrotFlow needs it. That needs the network.
- Prompt transforms need a language model. Offline, that means Ollama on your Mac with the model already pulled. Without one, the rest of dictation still works.
- A cloud model fails open with no network. The text stays exactly as it was dictated.
- Spoken spelling corrections, such as “hey parrot, Tasmin spells T A S M E E N”, need a model. Without one, “hey parrot” still opens the correction panel.
--check-configcannot report Accessibility, because macOS credits the check to the terminal. The app logs the real value at launch. Rungrep "launched —" ~/Library/Logs/ParrotFlow.log | tail -1and look foraccessibility=Granted.
Related
- Local dictation, for what runs on your Mac and how.
- Install and Permissions, for the details of each step.
- Download, for the short version.
- Setup for coding agents, if you want an agent to do the setup with you.