Back to Home

CLI tapeback: stereo diarization calls Linux

Tapeback β€” CLI for Linux call recording with stereo diarization: microphone on left channel, monitor on right. Transcription faster-whisper, optional pyannote and LLM-summary in Markdown for Obsidian. Modular extras minimize dependencies.

Tapeback: local call recorder with diarization
Advertisement 728x90

Local CLI Meeting Recorder for Linux: Stereo Speaker Separation and AI Summaries

The CLI tool tapeback captures audio via PipeWire/PulseAudio, transcribes with faster-whisper, separates speakers by stereo channels, and generates summaries using LLMs. The result is a Markdown file dropped into your specified directoryβ€”even Obsidian vaults. One command starts recording, Ctrl+C ends it and kicks off the pipeline: capture β†’ transcription β†’ diarization β†’ summary.

Supports Zoom, Teams, Meet, Discord, Telegram. Captures system audioβ€”no service APIs needed.

tapeback start
# meeting happens
# Ctrl+C β†’ processing β†’ Markdown

Stereo Speaker Separation

The architecture leverages stereo WAV files: left channel for your mic ("You"), right channel for the monitor source (everyone else). Whisper processes each channel separately. Pyannote diarization runs only on the right channel to label Speaker 1, 2, etc. Segments are classified by RMS energy levels.

Google AdInline article slot

Physical channel separation eliminates clustering errors: no mix-ups between similar voices, no splitting one speaker across clusters. GPU acceleration speeds things up, with CPU fallback on CUDA errors.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Stereo    β”‚     β”‚   Whisper    β”‚     β”‚   Channel          β”‚
β”‚  WAV file   │───▢│  (per        │───▢│   Classification:  β”‚
β”‚  L: mic     β”‚     β”‚   channel)   β”‚     β”‚   L β†’ "You"        β”‚
β”‚  R: monitor β”‚     β”‚              β”‚     β”‚   R β†’ pyannote     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚      for Others    β”‚
                                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Optional Dependencies

Base install (~320 MB): recording + transcription. Extras skip the 2 GB PyTorch bloat you don't need:

| Variant | Adds | Size |

Google AdInline article slot

|---------------|-----------------------|--------|

| tapeback | Recording + Whisper | ~320 MB|

| [llm] | Summaries (Anthropic, OpenAI, Groq...) | +50 MB |

Google AdInline article slot

| [diarize] | pyannote + PyTorch | +2 GB |

| [tray] | System tray | +1 MB |

Graceful degradation: no pyannote? Right channel becomes "Other". Lazy imports in __init__.

LLM Integration with Fallbacks

Supports 7 providers: Anthropic, OpenAI, Groq, Gemini, DeepSeek, OpenRouter, Qwen. OpenAI-compatible ones use a unified API with base URLs:

_OPENAI_COMPATIBLE_BASE_URLS = {
    "groq": "https://api.groq.com/openai/v1",
    "gemini": "https://generativelanguage.googleapis.com/v1beta/openai/",
    "deepseek": "https://api.deepseek.com",
    # ...
}

Provider error? Auto-fallback to the next. Transcripts always save. Summary in JSON embedded in Markdown:

## Summary
Quick overview.
### Action Items
- [ ] **You:** Send report by Friday
- [ ] **Speaker 1:** Review PR
### Key Decisions
- PostgreSQL over MongoDB

Packaging for Arch Linux

Available in AUR as 4 meta-packages:

  • tapeback β€” core.
  • tapeback-tray β€” tray.
  • tapeback-llm β€” LLM support.
  • tapeback-diarize β€” PyTorch + pyannote.

yay handles pip deps in a venv. Release via release.sh + PyPI CI (Trusted Publisher) + AUR scripts.

yay -S tapeback tapeback-diarize tapeback-llm tapeback-tray

Config in ~/.config/tapeback/.env:

TAPEBACK_VAULT_PATH=~/Documents/obsidian/vault

Development and Lessons Learned

MVP in 3 days, v0.8.9 in 2 weeks (bugs, tests). Spec-driven: Markdown specs with done criteria. Code from Claude with reviews. Check PyPI/AUR names earlyβ€”normalization makes echo-vault == echovault.

Key Takeaways

  • Stereo separation: Mic (You) vs monitor (Others)β€”deterministic, skips pyannote's probabilistic errors.
  • Local processing: faster-whisper + optional PyTorch, no cloud.
  • Modularity: Extras for diarization/LLM/tray, with smooth fallbacks.
  • Integration: Markdown for Obsidian with JSON summaries (action items, decisions).
  • Installation: uv tool install tapeback[tray,diarize,llm] or AUR.

β€” Editorial Team

Advertisement 728x90

Read Next