Record system audio from meetings (Zoom, Google Meet, Teams, etc.) on Linux using PipeWire + FFmpeg.
No-fuss local meeting recording — hit a keyboard shortcut when a call starts, hit it again when it ends. Audio is saved locally, no cloud services or meeting bots needed.
- Simple toggle workflow — one shortcut key to start/stop recording, with desktop notifications
- Universal — captures any audio playing through your speakers/headphones, works with any meeting app
- Local-first — recordings stay on disk at
~/Recordings/meetings/, no uploads - Low overhead — just FFmpeg recording a PipeWire monitor source
- Future: transcription — pipe recordings through Whisper or a transcription API for searchable meeting notes
- Discovers PipeWire audio sinks via
wpctl - Attaches to the monitor source of your default output device (captures everything you hear)
- Records via FFmpeg's PulseAudio input (
pipewire-pulsecompatibility layer) - Saves audio file + JSON metadata (timestamps, source, duration)
- Linux with PipeWire +
pipewire-pulse - FFmpeg
wpctl(WirePlumber)notify-send(for desktop notifications from toggle)- Python 3.14+ / uv
# Core only (recording, toggle, watch, devices)
uv pip install murmur
# With TUI dashboard
uv pip install murmur[tui]
# With AI summarization (DSPy + LiteLLM)
uv pip install murmur[ai]
# With transcription (faster-whisper)
uv pip install murmur[transcribe]
# Everything
uv pip install murmur[all]
# Or run from the project directory
uv run murmur --help# List audio output devices
murmur devices
# Start recording (interactive, Ctrl+C to stop)
murmur start
murmur start --tag standup --format mp3
# Toggle recording on/off (for keyboard shortcuts)
murmur toggle
# Check recording status
murmur status
# List saved recordings
murmur listMurmur can watch for meeting apps (Zoom, Google Meet, Teams, etc.) using your microphone and notify you — or automatically start recording.
# Get notified when a meeting app grabs your mic
murmur watch
# Auto-record when a meeting is detected
murmur watch --auto-record
# Auto-record with mic input (dual-channel: system left, mic right)
murmur watch --auto-record --mic
# Faster polling (default: 5s)
murmur watch --interval 3Works by polling PipeWire for Stream/Input/Audio nodes — detects Chrome, Firefox, Zoom, Teams, Slack, Discord, WebEx, Skype, and more. When the app releases the mic, you get a second notification and auto-recording stops.
Super+Shift+R toggles recording on/off with a desktop notification.
Set up via GNOME custom shortcuts — runs murmur toggle in the background.
Saved to ~/Recordings/meetings/ with naming convention:
meeting_standup_2026-03-18_14-30-00.flac
meeting_standup_2026-03-18_14-30-00.json # metadata
Optional TOML config at ~/.config/murmur/config.toml:
[recording]
output_dir = "~/Recordings/meetings"
format = "flac"
[watch]
interval = 3
auto_record = true
apps = ["chrome", "firefox", "zoom", "teams", "slack", "discord"]
[transcribe]
auto = true # auto-transcribe after recording
model = "base" # whisper model size
language = "en"
[summarize]
auto = true # auto-summarize after transcription
model = "llama3" # ollama model
ollama_url = "http://localhost:11434"
[diarize]
hf_token = "hf_..." # hugging face token for pyannote| Plugin | Command | What it does | Install |
|---|---|---|---|
| watch | murmur watch |
Detect meeting apps using the mic, notify + auto-record | built-in |
| memory | murmur memory |
Personal context for LLM summaries | built-in |
| tui | murmur tui |
Live dashboard with artifact viewer + generation | murmur[tui] |
| summarize | murmur summarize <file> |
DSPy structured summarization → .summary.md |
murmur[ai] |
| transcribe | murmur transcribe <file> |
Whisper transcription → .txt + .srt |
murmur[transcribe] |
| diarize | murmur diarize <file> |
Speaker diarization → .rttm + .diarized.txt |
murmur[diarize] |
# Set up dev environment
make install
# Run all checks (lint + format + test)
make check
# Individual targets
make lint # ruff check
make format # ruff format (auto-fix)
make format-check # ruff format --check (CI mode)
make test # pytest
make fix # ruff check --fix- Automatic transcription (Whisper local / Deepgram API)
- Speaker diarization
- Auto-detect meeting apps and start recording
- Web UI for browsing/searching recordings