A macOS menu bar app for local speech-to-text transcription powered by OpenAI Whisper and NVIDIA Parakeet.
Wispr runs entirely on-device — your audio never leaves your Mac.
- Hotkey-triggered dictation — press a shortcut to start/stop recording, transcribed text is inserted at the cursor
- Dual engine architecture — choose between OpenAI Whisper and NVIDIA Parakeet models through a unified interface
- Multiple models — Whisper Tiny (~75 MB) to Large v3 (~3 GB), Parakeet V3 (~400 MB), and Realtime 120M (~150 MB)
- Low-latency streaming — Parakeet Realtime 120M provides end-of-utterance detection for near-instant results (English)
- Model management — download, activate, switch, and delete models from a single UI
- Multi-language support — Whisper supports 90+ languages, Parakeet V3 supports 25 languages
- Menu bar native — lives in your menu bar, stays out of the way
- Onboarding flow — guided setup for permissions, model selection, and a test dictation
- Accessibility-first — full keyboard navigation, VoiceOver support, and high-contrast mode
| Model | Engine | Size | Streaming | Languages | Notes |
|---|---|---|---|---|---|
| Tiny | Whisper | ~75 MB | No | 90+ | Fastest, lower accuracy |
| Base | Whisper | ~140 MB | No | 90+ | Good balance for quick tasks |
| Small | Whisper | ~460 MB | No | 90+ | Solid general-purpose |
| Medium | Whisper | ~1.5 GB | No | 90+ | High accuracy |
| Large v3 | Whisper | ~3 GB | No | 90+ | Best Whisper accuracy |
| Parakeet V3 | Parakeet | ~400 MB | No | 25 | Fast, high accuracy, multilingual |
| Realtime 120M | Parakeet | ~150 MB | Yes | English | Low-latency with end-of-utterance detection |
brew tap sebsto/macos && brew trust sebsto/macos
brew install wisprRequires macOS 26.2+ and Xcode 26+ (Apple Silicon only)
- Clone the repo
- Open
wispr.xcodeprojin Xcode - Build and run (⌘R)
- Follow the onboarding flow to grant permissions and download a model
- macOS 26.2+
- Apple Silicon (ARM64)
- Microphone permission
Wispr bundles a CLI for transcribing existing audio and video files offline, at
Wispr.app/Contents/Resources/bin/WisprCLI. Symlink it somewhere on your PATH:
ln -s /Applications/Wispr.app/Contents/Resources/bin/WisprCLI /usr/local/bin/wispr-cliwispr-cli recording.m4a
wispr-cli meeting.mp4 --model large-v3 --language en
wispr-cli podcast.mp3 --output transcript.txt --verbose
wispr-cli --list-modelsSupported formats: MP3, WAV, M4A, FLAC, AAC, MP4, MOV. Models are downloaded by the GUI app, so launch Wispr.app and download at least one model first.
The CLI reads models from the GUI app's sandbox container, which macOS protects as app-private data. Without Full Disk Access it cannot list them and will tell you so. To grant it:
- System Settings → Privacy & Security → Full Disk Access
- Click +, then press ⌘⇧G and enter your terminal's path, for example
/System/Applications/Utilities/Terminal.app - Enable the toggle, then quit and reopen the terminal — the grant only applies to newly launched processes
Over SSH the relevant process is sshd, so add /usr/libexec/sshd-keygen-wrapper
instead. If you use tmux, run tmux kill-server and reconnect afterwards, because an
existing tmux server keeps the permissions it was started with.
Note that Full Disk Access applies to every command run in that terminal, not just
wispr-cli.
| Layer | Path | Description |
|---|---|---|
| Models | wispr/Models/ |
Data types — model info, permissions, app state, errors |
| Services | wispr/Services/ |
Core logic — audio engine, Whisper/Parakeet integration, hotkey monitoring, settings |
| UI | wispr/UI/ |
SwiftUI views — menu bar, recording overlay, settings, onboarding |
| Utilities | wispr/Utilities/ |
Logging, theming, SF Symbols, preview helpers |
The app uses a CompositeTranscriptionEngine that routes to the correct backend (WhisperService or ParakeetService) based on the selected model. Both engines conform to a shared TranscriptionEngine protocol, so switching between them is seamless.
This project is licensed under the Apache License 2.0. See LICENSE for details.