local speech-to-text via CLI, port of python blurt by https://github.com/satyaborg/blurt
- Rust 97.3%
- Shell 2%
- Ruby 0.4%
- Makefile 0.3%
mouthpipe
On-device speech-to-text for macOS. Hold a key, speak, release — transcribed text is pasted at your cursor.
Powered by whisper.cpp (Metal-accelerated) with zero cloud dependencies. All processing happens locally on your Mac.
Features
- Hold-to-record — hold your shortcut key, speak, release. Transcribed text is pasted instantly at your cursor position.
- Fully local — runs entirely on-device using whisper.cpp with Metal acceleration. No network calls, no API keys, no cloud.
- Single binary — one static executable, no runtime dependencies. Install and go.
- Live TUI — full-screen terminal interface with waveform visualizer, status indicators, and transcription history.
- Configurable shortcut — press
sin the TUI to choose your trigger key (right/left Command, Control, or Option). - Output modes — press
bto switch between paste-at-cursor, copy-to-clipboard, or buffer-only. - Audio source selection — press
ato pick your input device (built-in mic, USB mic, etc.). - Custom vocabulary — add domain-specific words to improve recognition accuracy. Fed to Whisper as an initial prompt.
- Transcription history — press
hto browse, copy, or delete past transcriptions. Full log stored as JSONL. - Hallucination filtering — automatically detects and suppresses common Whisper hallucinations (silence loops, repetitive output).
- Themes — ocean (default) and vapor color themes.
Install
curl -fsSL http://files.anuna.io/mouthpipe/latest/install.sh | bash
Or build from source:
git clone https://codeberg.org/anuna/mouthpipe.git
cd mouthpipe
cargo build --release
cp target/release/mouthpipe /usr/local/bin/
Setup
- Accessibility permission — System Settings > Privacy & Security > Accessibility. Grant access to your terminal app.
- Microphone permission — Granted automatically on first recording.
- Whisper model — Downloaded automatically on first run (~1.5 GB). Stored at
~/.mouthpipe/models/.
Usage
mouthpipe # Start listening
mouthpipe --key <key> # Set shortcut key and start (e.g. --key ctrl)
mouthpipe add <word/phrase> # Add to custom vocabulary
mouthpipe rm <word/phrase> # Remove from vocabulary
mouthpipe vocab # List vocabulary words
mouthpipe log [-n N] # Show recent transcriptions (default 20)
mouthpipe --version # Show version
mouthpipe help # Show help
TUI Keyboard Shortcuts
| Key | Action |
|---|---|
s |
Change trigger shortcut |
v |
Manage vocabulary |
b |
Change output behaviour |
a |
Select audio source |
h |
Browse transcription history |
Ctrl+C |
Quit |
Data Directory
All data is stored in ~/.mouthpipe/:
| File | Purpose |
|---|---|
models/ggml-large-v3-turbo.bin |
Whisper model (GGML format) |
mouthpipes.jsonl |
Transcription log |
audio/ |
Recorded WAV files (16kHz mono 16-bit PCM) |
vocab.txt |
Custom vocabulary (one word per line) |
shortcut.txt |
Saved trigger key |
behaviour.txt |
Saved output mode |
Requirements
- macOS on Apple Silicon (M1/M2/M3/M4)
- Accessibility permission for global hotkey
- ~1.5 GB disk space for the Whisper model
Credits
Ported from blurt by @satyaborg — motivation was to add features and ship a portable binary.
License
MIT