Record. Transcribe. Summarize.
A Linux desktop app that records meetings, transcribes them, and generates structured notes — all in a few clicks.
Supports cloud and local AI processing, with 100+ providers via LiteLLM.
Arch Linux · PipeWire + Wayland · GTK3
# Install from AUR
yay -S meeting-recorder # or: paru -S meeting-recorder
# Launch
meeting-recorderOpen Settings, pick your transcription and summarization providers, add API keys, and you're ready to record.
For fully offline use, select Whisper (transcription) + Ollama via LiteLLM (summarization) — no API keys needed.
- Two modes — Headphones (mic + system audio) or Speaker (mic only, avoids echo)
- Pause / Resume mid-recording
- Separate audio tracks — optionally save mic and system audio as independent files for better diarization
- Transcribe existing files — drop in any audio/video file for transcription without recording
| Provider | How it works | Requires |
|---|---|---|
| Google Gemini | Audio uploaded to Gemini multimodal API | API key |
| ElevenLabs Scribe v2 | Native diarization, up to 32 speakers | API key |
| Whisper | Runs locally via faster-whisper, GPU-accelerated if CUDA available | Model download (~500 MB – 3 GB) |
| LiteLLM | Routes to Groq, OpenAI, Deepgram, and more | Provider API key |
| Provider | How it works | Requires |
|---|---|---|
| Claude Code CLI | Shells out to claude --print |
Claude Code subscription |
| LiteLLM | Routes to Gemini, Ollama, OpenAI, Anthropic, OpenRouter, etc. | Provider API key (or local Ollama) |
Mix and match freely — e.g. Whisper + Ollama runs fully offline with no API keys.
- Per-monitor Wayland-native capture via gpu-screen-recorder
- Merge with audio — optionally combine screen recording + audio into a single video
- Night light inhibition — automatically pauses KDE night light during recording for accurate colors
- Browse all recorded meetings in a searchable list
- AI-generated titles — auto-name meetings from their notes, or generate titles manually
- Inline rename — double-click to rename any meeting
- Open folders, delete recordings, bulk-select
- Call detection — monitors PipeWire for active calls and notifies you to start recording
- Auto-title — AI generates a short title from your meeting notes after processing
- Artifact cleanup — choose which output files to keep (audio, transcripts, screen recordings, notes)
- GPU memory management — automatically unloads models between pipeline steps to prevent OOM on limited VRAM
- System tray — StatusNotifierItem on KDE (pystray fallback), configurable click actions, background job status
- Autostart — optionally launch on login
- Click Record (Headphones) or Record (Speaker) to start
- Pause / Resume as needed — a timer shows elapsed time
- Click Stop — transcription and summarization run automatically
- Browse results in the app or open the output folder
Each session saves to a dated hierarchy:
~/meetings/
└── 2026/
└── March/
└── 04/
└── 14-30_Standup/
├── recording.mp3 # Combined audio
├── recording_mic.mp3 # Mic track (if separate tracks)
├── recording_system.mp3 # System track (if separate tracks)
├── screen-eDP-1.mp4 # Screen recording (if enabled)
├── screen-eDP-1_merged.mp4 # Screen + audio merged (if enabled)
├── transcript.md
└── notes.md
LiteLLM routes to providers via the model string prefix:
gemini/gemini-2.5-flash # Google Gemini
ollama/phi4-mini # Local Ollama
openai/gpt-4o # OpenAI
anthropic/claude-sonnet-4-latest # Anthropic
openrouter/anthropic/claude-sonnet-4 # OpenRouter
groq/whisper-large-v3 # Groq (transcription)
Select from curated lists in Settings, or type any provider/model string.
| Provider | Requirement |
|---|---|
| Gemini | API key from aistudio.google.com |
| ElevenLabs | API key from elevenlabs.io |
| Whisper | Model downloaded in Settings → Model Config |
| Ollama | Ollama installed and running |
| Claude Code | Claude Code CLI installed and on PATH |
| Other LiteLLM providers | API key set in Settings → API Keys |
yay -S meeting-recorder
# or
paru -S meeting-recordergit clone https://github.com/AJV009/meeting-recorder.git
cd meeting-recorder
./install.shInstalls system deps via pacman, sets up a Python venv via uv, and auto-installs gpu-screen-recorder from AUR if yay/paru is available.
./uninstall.shYour recordings (
~/meetings/) and config (~/.config/meeting-recorder/) are preserved.
- Arch Linux with PipeWire (tested on KDE Plasma 6 / Wayland)
ffmpeg,pipewire,pipewire-pulse,wireplumber, Python 3, GTK3- Optional:
gpu-screen-recorder(AUR) for screen recording
Open Settings from the gear icon or system tray menu. Settings are organized into tabs:
| Tab | What it controls |
|---|---|
| General | Transcription/summarization providers, LiteLLM model, output folder, quality, timeout, autostart, call detection, auto-title |
| Platform | Separate audio tracks, screen recording (monitors, FPS, merge), night light inhibition |
| Model Config | Gemini model, Whisper model download, Ollama model + host + pull |
| API Keys | Provider API keys (Gemini, OpenAI, Anthropic, Groq, OpenRouter, ElevenLabs, Deepgram) |
| Prompts | Custom transcription and summarization prompts with reset-to-default |
| Artifacts | Choose which output files to keep after processing |
| Tray | Default click action when idle and when recording |
Whisper models
| Model | Size | Notes |
|---|---|---|
large-v3-turbo |
~1.6 GB | High quality, 8x faster than large-v3 — recommended |
distil-large-v3 |
~1.5 GB | Fast, near-large quality |
large-v3 |
~3 GB | Best accuracy, slow on CPU |
medium |
~1.5 GB | Good balance |
small |
~500 MB | Fast, lower accuracy |
GPU acceleration is automatic if CUDA is available.
Ollama models (curated)
| Model | Size | Notes |
|---|---|---|
phi4-mini |
~3 GB | Lightest, good quality |
gemma3:4b |
~4 GB | Good quality |
qwen2.5:7b |
~5 GB | Very capable |
llama3.1:8b |
~5 GB | Very capable |
gemma3:12b |
~8 GB | Best quality, needs more RAM |
Prompt customization
Edit transcription and summarization prompts in Settings → Prompts. Each has a Reset to default button. The {transcript} placeholder in the summarization prompt is replaced with the transcript text.
Note: transcription prompts apply to Gemini direct provider only — Whisper, ElevenLabs, and LiteLLM providers do not use custom prompts.
Noise reduction
Enable PipeWire's WebRTC noise suppression:
Temporary (current session):
pactl load-module module-echo-cancel aec_method=webrtc noise_suppression=truePermanent — create ~/.config/pipewire/pipewire-pulse.conf.d/echo-cancel.conf:
pulse.cmd = [
{ cmd = "load-module" args = "module-echo-cancel aec_method=webrtc noise_suppression=true" flags = [] }
]
Then restart PipeWire:
systemctl --user restart pipewire pipewire-pulseLogs
~/.local/share/meeting-recorder/meeting-recorder.log
Recovering corrupted screen recordings
If a screen recording is missing the moov atom (e.g. due to a crash), you can attempt recovery with ffmpeg:
ffmpeg -i corrupted.mp4 -c copy recovered.mp4git clone https://github.com/AJV009/meeting-recorder.git
cd meeting-recorder
python3 -m venv .venv --system-site-packages
.venv/bin/pip install -e ".[dev]"
PYTHONPATH=src python3 -m meeting_recorderRun tests:
python -m pytest tests/ -vMIT