murmo
Just talk — murmo turns your speech into text, right in your clipboard.
A small command-line tool that records audio from your microphone and transcribes it locally with OpenAI Whisper. Nothing is sent to the cloud: the model runs on your machine.
Works on macOS, Linux, and Windows.
Features
- Auto-stop on silence — recording starts when you speak; 3 seconds of silence after speaking stops it automatically
- Append mode — chain multiple recordings into a single transcript file (perfect for meetings)
- Punctuation enhancement — nudge Whisper towards proper punctuation and capitalization with a punctuated initial prompt
- Clipboard copy — the transcript is copied to the clipboard automatically, no manual Cmd+C needed (
--no-clipboardto disable) - Plain terminal output — the transcript is printed as-is, easy to copy
Requirements
- Python 3.10 or newer (check with
python3 --version)
Installation
1. Install system dependencies
macOS (requires Homebrew):
brew install ffmpeg portaudio
Ubuntu / Debian (Linux):
sudo apt install ffmpeg libportaudio-dev
Other Linux (Fedora, Arch, …):
# Fedora
sudo dnf install ffmpeg portaudio-devel
# Arch
sudo pacman -S ffmpeg portaudio
Windows:
# Install FFmpeg via winget:
winget install Gyan.FFmpeg
# Then add it to PATH (it installs to C:\Program Files\FFmpeg\bin\).
# Add that path to your environment:
# Settings → System → About → Advanced system settings → Environment Variables
# Add C:\Program Files\FFmpeg\bin to your Path variable.
Windows: No extra PortAudio install is needed — the
sounddevicewheels for Windows ship with PortAudio included.
2. Install murmo
Pick one of the following.
From PyPI as a global command (recommended) — installs murmo into its own isolated environment and puts murmo on your PATH. Requires pipx or uv:
pipx install murmo
# or
uv tool install murmo
To uninstall later: pipx uninstall murmo or uv tool uninstall murmo.
With pip — into the currently active (virtual) environment:
pip install murmo
Directly from GitHub — e.g. to get the latest unreleased version:
pipx install git+https://github.com/AICDEV/murmo.git
# or
uv tool install git+https://github.com/AICDEV/murmo.git
# or, into the active environment
pip install git+https://github.com/AICDEV/murmo.git
Append @v0.1.0 (or any tag, branch, or commit) to the URL to install a specific version.
Note: pip installs only the Python dependencies. FFmpeg and PortAudio (step 1) must be installed separately. Whisper pulls in PyTorch, so the first install is a few hundred MB.
From a local clone (for development) — useful if you want to hack on the code:
git clone https://github.com/AICDEV/murmo.git
cd murmo
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
With -e (editable), changes to murmo.py take effect immediately. The murmo command is available whenever the virtual environment is active.
Usage
Run:
murmo
Then:
- Just start talking — recording begins when speech is detected (silence before that is ignored).
- Just stop talking — 3 seconds of silence stops it automatically. Or press Enter to stop manually.
- Whisper transcribes the audio and prints the text in the terminal.
The Whisper model is downloaded on first use, which can take a moment.
macOS: On the first run, the system prompts whether Terminal may access the microphone. Click Allow.
Windows: If you get a
PortAudioError/SoundDeviceError, check that a microphone is connected and your terminal has microphone access (Settings → Privacy → Microphone). For--file, make sure FFmpeg is on your PATH.
Options
| Option | Description | Default |
|---|---|---|
--model |
Model size: tiny, base, small, medium, large, turbo |
small |
--language |
Language code, e.g. en or de |
auto-detect |
--out |
Save audio and transcript to a folder | prints to stdout only |
--no-clipboard |
Don't copy the transcript to the clipboard | clipboard on |
--append |
Append to the latest transcript in --out instead of creating a new file |
off |
--punctuate |
Enhance output with proper punctuation and capitalization | off |
--file |
Transcribe an existing audio file instead of recording (requires ffmpeg) | — |
Recording options
| Option | Description | Default |
|---|---|---|
--silence-threshold |
dB level below which audio counts as silence | -30 |
--silence-duration |
Seconds of silence before auto-stop | 3 |
--max-duration |
Maximum recording time in seconds | 300 (5 min) |
Examples
# Quick dictation: record, auto-stop on silence, copy to clipboard
murmo
# Punctuation-enhanced recording, saved to a folder
murmo --out ~/Documents/notes --punctuate
# Meeting mode: each run appends its transcript to the latest file in the folder
murmo --out ~/Documents/meeting --append
# Transcribe an existing file with punctuation, English only
murmo --file interview.m4a --language en --punctuate
# Custom silence settings (picks up quieter speech, stops faster)
murmo --silence-threshold -35 --silence-duration 1.5
Choosing a model
Bigger models are more accurate but slower. Whisper runs on the CPU on a Mac, so transcription can take longer than the recording itself.
| Model | Speed | Accuracy |
|---|---|---|
tiny / base |
fastest | basic |
small |
good balance (default) | good |
medium |
slow | very good |
large / turbo |
slowest / fast for its size | best |
Setting --language explicitly usually improves results compared to auto-detection.
Troubleshooting
- No sound recorded / permission error
- macOS: System Settings → Privacy & Security → Microphone → enable your terminal app (Terminal, iTerm, VS Code, …) → restart terminal.
- Windows: Ensure your terminal has microphone access (Settings → Privacy → Microphone).
- Linux: Add your user to the
audiogroup:sudo usermod -a -G audio $USER, then log out and back in.
- PortAudio library not found
- macOS:
brew install portaudio, thenpip install --force-reinstall sounddevice. - Linux:
sudo apt install libportaudio-dev(Debian/Ubuntu) or equivalent, then reinstallsounddevice. - Windows: PortAudio is bundled with
sounddevice; runpip install --force-reinstall sounddevice.
- macOS:
- ffmpeg not found (only when using
--file)- macOS:
brew install ffmpeg. - Linux:
sudo apt install ffmpeg. - Windows: Ensure FFmpeg is on your PATH.
- macOS:
- Wrong microphone is used — The script uses the system default input. Change it in your OS sound settings.
- Very slow transcription — Use a smaller model, e.g.
--model base. - Recording stops too early — Lower
--silence-threshold(e.g.-40) so quieter speech still counts, or use--silence-duration 5. - Recording doesn't stop — Background noise is above the threshold: raise
--silence-threshold(e.g.-25) or decrease--silence-duration. - FP16 is not supported on CPU (macOS) — Harmless. The script already disables
fp16for the Mac CPU.
Testing
Run the test suite with pytest:
pip install -e ".[dev]"
python3 -m pytest -v
34 tests covering WAV writing, argument parsing, output directory creation, both record and file modes, stdout formatting, clipboard integration, silence detection, append mode, and punctuation enhancement.
Metadata
Release files for murmo 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| murmo-0.1.0.tar.gz | 12.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| murmo-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.7 kB
Release files / murmo-0.1.0.tar.gz
| Download URL | murmo-0.1.0.tar.gz |
|---|---|
| Size | 12.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
72148fbb7578fc2b6d9406bec9a9843c1cb410e870c60bc543e5ad6f12e7075b
|
|
BLAKE2b-256 checksum How to use checksums |
2061e58ae94a8fdab6bd70635cf6c9190f9ff23c044181158e869dd3be928fde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency logRelease files / murmo-0.1.0-py3-none-any.whl
| Download URL | murmo-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3e3a4fed09c9ec1b605a4c9abfc1fbf8f28bac4566f397adb289b02b8575e8ee
|
|
BLAKE2b-256 checksum How to use checksums |
927ffa9612b301951356282892a2db464c64cb0d51acbc758d79d4d61ab24d7a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency log