macOS · Apple Silicon · 100% on-device
Hold to talk.
Release to type.
ptarmigan-flow is a push-to-talk dictation daemon for macOS. Hold the right ⌘ key and speak; release it, and a local speech-to-text model types the words into whatever app you’re in. Your audio never leaves the Mac.
Download the Mac app
Signed & notarized · macOS 14+ · Apple Silicon (arm64)
Download PtarmiganFlow.zipInstall with Homebrew
brew tap nakak10/ptarmigan-flow https://github.com/NAKAK10/ptarmigan-flow
brew install ptarmigan-flow
Then run three setup commands.
Demo
See it type
A short recording of ptarmigan-flow in use: hold the key, speak, and the transcription lands in the active app.
How it works
Four moments, no windows
-
Hold
Press and hold the right ⌘ key in any app. Recording starts immediately (up to 30 s by default).
-
Speak
Say what you want typed. A small on-screen indicator shows that the microphone is live.
-
Release
Let go of the key. A local model transcribes the audio on your Mac — nothing is uploaded.
-
It’s typed
The text is typed straight into the active app, or pasted from the clipboard if you prefer.
Features
Built for privacy, tuned for flow
Local & private
All speech-to-text runs on your Mac. No cloud, no account, no telemetry — this page doesn’t load third-party assets either.
Choice of local models
Moonshine tiny/base, IBM Granite Speech (default), Whisper large-v3-turbo via MLX, Mistral Voxtral, or your own vLLM server.
Correction, still local
An optional correction dictionary fixes recurring terms, and a local LLM via Ollama or LM Studio can post-correct the transcript.
Types like you do
Direct typing leaves your clipboard untouched. Prefer pasting? Clipboard mode is one setting away.
Starts with your Mac
Install the launchd agent once and the daemon is ready at every login — no dock icon to babysit.
Stays out of the way
An optional activity indicator shows recording and transcription. Recordings cap at 30 s by default (configurable).
Models
Five engines, one command to switch
All models run entirely on your Mac — nothing is streamed to a server. Switch any time with pflow list model, or search thousands of community models on Hugging Face Hub.
Moonshine tiny
moonshine:tiny
The lightest option. Sub-second latency with minimal RAM. Bundled in the downloadable Mac app — no extra download needed.
Moonshine base
moonshine:base
Slightly larger than tiny for better accuracy, still very fast. Great for English dictation on any machine.
IBM Granite Speech
granite:ibm-granite/granite-4.0-1b-speech
The recommended preset. Enterprise-grade accuracy across Japanese and English. Runs on Apple Silicon via MLX, or CPU via Transformers.
Whisper large-v3-turbo
mlx:openai/whisper-large-v3-turbo
OpenAI's battle-tested ASR model, running locally on Apple Silicon via MLX. Strong multilingual accuracy across 99 languages.
Mistral Voxtral Mini
voxtral:mistralai/Voxtral-Mini-4B-Realtime-2602
Streaming-capable ASR from Mistral AI. Runs locally via MLX Audio on Apple Silicon — powerful and private.
vLLM server
vllm:<any-compatible-model>
Point to your own vLLM endpoint. Max model length is auto-tuned from your recording limit. Full control over the backend.
Search Hugging Face Hub for any public ASR model and drop it in as your backend:
pflow list model --hub-search whisper --backend mlx --limit 20
AI Correction
Local LLM post-processing
After each transcription, optionally pipe the text through a local language model for context-aware fixes — proper nouns, punctuation, jargon. Works with Ollama and LM Studio. Your words never leave the Mac.
Ollama
Run any Ollama model as a post-correction pass. List and select from your downloaded models with one command.
pflow list ollama
LM Studio
Already running LM Studio locally? Point ptarmigan-flow at its OpenAI-compatible server endpoint.
pflow list lmstudio
Zero cloud, by design. The correction LLM runs on the same Mac as the STT model. No API key, no subscription, no telemetry — the entire pipeline from microphone to typed text stays local.
Install
Two ways in
1 — Download the Mac app
- Download the zip and unpack it.
- Move
PtarmiganFlow.appto Applications and open it. - Grant the three permissions below when prompted.
The app is signed and notarized. If macOS still warns on first launch, right-click the app and choose Open.
Download PtarmiganFlow.zip2 — Homebrew
brew tap nakak10/ptarmigan-flow https://github.com/NAKAK10/ptarmigan-flow
brew install ptarmigan-flow
Then check the install, request permissions, and start the daemon:
pflow doctor
pflow check-permissions --request
pflow run
pflow is the short alias for ptarmigan-flow.
Permissions
Three macOS permissions, explained
ptarmigan-flow listens for a key, records your voice, and types text for you — each of those needs its own permission. You can request all three from the command line:
pflow check-permissions --request
Microphone
Records your voice — but only while the hotkey is held down.
System Settings → Privacy & Security → MicrophoneAccessibility
Types the transcribed text (or sends the paste keystroke) into the active app.
System Settings → Privacy & Security → AccessibilityInput Monitoring
Detects the global hotkey (right ⌘) even while another app has focus.
System Settings → Privacy & Security → Input MonitoringFirst launch of the downloaded app: the app is signed and notarized, so it should open normally. If Gatekeeper warns anyway, right-click PtarmiganFlow.app and choose Open once.
After granting permissions: if the daemon was already running as a launch agent, apply them with pflow restart-launch-agent.