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.zip

Install with Homebrew

brew tap nakak10/ptarmigan-flow https://github.com/NAKAK10/ptarmigan-flow
brew install ptarmigan-flow

Then run three setup commands.

Ptarmigan Flow app icon

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

  1. Hold

    Press and hold the right ⌘ key in any app. Recording starts immediately (up to 30 s by default).

  2. Speak

    Say what you want typed. A small on-screen indicator shows that the microphone is live.

  3. Release

    Let go of the key. A local model transcribes the audio on your Mac — nothing is uploaded.

  4. 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.

Mac App

Moonshine tiny

moonshine:tiny

The lightest option. Sub-second latency with minimal RAM. Bundled in the downloadable Mac app — no extra download needed.

Balanced

Moonshine base

moonshine:base

Slightly larger than tiny for better accuracy, still very fast. Great for English dictation on any machine.

Default

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.

Multilingual

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.

Real-time

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.

Custom

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

  1. Download the zip and unpack it.
  2. Move PtarmiganFlow.app to Applications and open it.
  3. 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.zip

2 — 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 → Microphone

Accessibility

Types the transcribed text (or sends the paste keystroke) into the active app.

System Settings → Privacy & Security → Accessibility

Input Monitoring

Detects the global hotkey (right ⌘) even while another app has focus.

System Settings → Privacy & Security → Input Monitoring

First 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.