macOS menu bar app for instant voice-to-text — hold a hotkey, speak, release, and your transcription is pasted wherever your cursor is.
Inspired by and UI-compatible with WisperFlow. If you've used WisperFlow, Wisper will feel immediately familiar: same hotkey-to-paste workflow, same menu bar experience.
- One key to dictate — hold
fn, speak, release. Text appears at your cursor instantly. - Fully offline — transcription runs on-device via OpenAI Whisper. No audio or text ever leaves your machine.
- Multiple models — switch between tiny/base/small/medium/distil-large from the menu bar.
- Text cleanup — automatically remove filler words and polish transcriptions (see below).
- Clipboard-safe — your clipboard is fully restored after every paste, including images.
- History — recent transcriptions with model and latency, click any to re-copy.
git clone https://github.com/edisonmoy/wisper.git
cd wisper
bash install.shThe installer sets up a virtual environment, builds Wisper.app, and registers it as a login item so it starts automatically.
macOS will prompt on first use. Grant both:
- Accessibility — System Settings → Privacy & Security → Accessibility → enable Wisper
- Microphone — System Settings → Privacy & Security → Microphone → enable Wisper
If either permission is missing, Wisper shows a warning in the menu bar.
If the Globe/fn key opens the emoji picker instead of recording:
System Settings → Keyboard → "Press Globe key to" → set to Do Nothing
Hold fn to record, release to transcribe. Text is pasted at your cursor instantly.
Access history, model selection, and text cleanup from the menu bar icon.
| Model | Size | Speed |
|---|---|---|
tiny.en |
75 MB | ~0.3 s |
base.en |
145 MB | ~0.8 s (default) |
small.en |
465 MB | ~2 s |
medium.en |
1.5 GB | ~5 s |
distil-large-v3 |
1.5 GB | ~4 s (best accuracy/speed) |
Models download on first use and are cached at ~/.cache/huggingface/. Switch anytime from the menu bar.
Choose a cleanup mode from Text Cleanup in the menu bar:
| Mode | What it does | Latency |
|---|---|---|
| None | Raw Whisper output | 0 ms |
| Basic | Removes um/uh, stutters, "you know", "I mean", "right?"; detects first/second/third lists | ~0 ms |
| AI | Everything Basic does, plus context-aware rewriting and run-on sentence fixes | ~400–550 ms |
The AI mode runs a small language model entirely on your device — no internet connection, no cloud API. It uses Apple's MLX framework to run Qwen 2.5 0.5B (~400 MB) on Apple Silicon's Neural Engine and GPU.
Apple Silicon only (M1 and later). On Intel Macs, AI mode silently falls back to Basic. The model downloads automatically on first use and is cached at ~/.cache/huggingface/.
Your audio never leaves your device. Transcription runs entirely on your CPU using a local Whisper model. AI cleanup runs on-device via MLX. No data is sent to any server.
The only network connections Wisper makes:
| When | What |
|---|---|
| First launch | Downloads the Whisper model from Hugging Face (~75 MB – 1.5 GB depending on model) |
| AI mode, first use | Downloads the Qwen 2.5 0.5B cleanup model from Hugging Face (~400 MB) |
| Startup (optional) | Hugging Face makes a lightweight metadata version-check — no audio involved |
| Background | Checks GitHub for app updates via git fetch |
To disable the Hugging Face version-check after models are downloaded:
echo 'export HF_HUB_OFFLINE=1' >> ~/.zshrcRecent transcriptions are stored in plaintext at ~/.wisper/history.db (SQLite). This file is local only and never uploaded. Use Clear History in the menu bar to wipe it, or delete the file manually:
rm ~/.wisper/history.dbUpdates are fetched via git fetch from the configured GitHub remote. Wisper verifies the remote URL before applying any update. Only updates from the expected origin are accepted.
Click the menu bar icon and select Check for Updates. Wisper will download and restart automatically.
bash uninstall.shOr manually:
launchctl unload ~/Library/LaunchAgents/com.wisper.app.plist
rm ~/Library/LaunchAgents/com.wisper.app.plistTo also remove app data:
rm -rf ~/.wisper/To also remove cached models (~75 MB – 2 GB):
rm -rf ~/.cache/huggingface/See CHANGELOG.md.
See CONTRIBUTING.md for architecture, project structure, running tests, and local dev setup.
To report a vulnerability, see SECURITY.md.