Powrót do strony głównej

CLI tapeback: stereo-diarizacja rozmów Linux

Tapeback — CLI do nagrywania rozmów w Linux z stereo-diarizacją: mikrofon na lewym kanale, monitor na prawym. Transkrypcja faster-whisper, opcjonalna pyannote i podsumowanie LLM w Markdown dla Obsidian. Modułowe extras minimalizują zależności.

Tapeback: lokalny rejestrator rozmów z diarizacją
Advertisement 728x90

Lokalny rejestrator spotkań CLI dla Linux: stereo-diaryzacja i podsumowanie LLM

Narzędzie CLI tapeback przechwytuje audio za pośrednictwem PipeWire/PulseAudio, transkrybuje z faster-whisper, rozdziela mówców na kanale stereo i generuje podsumowanie przez LLM. Wynik to plik Markdown w określonym katalogu, włączając vault Obsidian. Jedno polecenie uruchamia nagrywanie, Ctrl+C kończy pipeline: przechwytywanie → transkrypcja → diaryzacja → podsumowanie.

Obsługuje Zoom, Teams, Meet, Discord, Telegram. Przechwytywanie na poziomie systemowym, bez API usług.

tapeback start
# spotkanie
# Ctrl+C → przetwarzanie → Markdown

Stereo-rozdzielenie mówców

Architektura wykorzystuje stereo-WAV: lewy kanał to mikrofon ("Ty"), prawy to źródło monitora (inni). Whisper przetwarza kanały osobno. Diaryzacja pyannote stosowana jest tylko do prawego kanału dla numerowania Mówca 1, 2... Segmenty klasyfikowane są według energii RMS.

Google AdInline article slot

Fizyczne rozdzielenie eliminuje błędy klasteryzacji: brak pomylenia podobnych głosów, brak dzielenia jednego mówcy na klastry. GPU przyspiesza przetwarzanie, fallback na CPU w przypadku błędów CUDA.

┌─────────────┐     ┌──────────────┐     ┌────────────────────┐
│   Stereo    │     │   Whisper    │     │   Klasyfikacja    │
│  plik WAV   │───▶│  (na każdy   │───▶│   według kanałów:  │
│  L: mikrofon│     │   kanał      │     │   L -> "Ty"        │
│  R: monitor │     │   osobno)    │     │   R -> pyannote    │
└─────────────┘     └──────────────┘     │      dla Innych    │
                                         └────────────────────┘

Opcjonalne zależności

Podstawowa instalacja (~320 MB): nagrywanie + transkrypcja. Dodatkowe extras unikają niepotrzebnych 2 GB PyTorch:

| Wariant | Co dodaje | Rozmiar |

Google AdInline article slot

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

| tapeback | Nagrywanie + Whisper | ~320 MB |

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

Google AdInline article slot

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

| [tray] | Ikona w zasobniku systemowym | +1 MB |

Graceful degradation: bez pyannote prawy kanał to "Inni". Leniwy import w __init__.

Integracja LLM z fallbackiem

Obsługa 7 dostawców: Anthropic, OpenAI, Groq, Gemini, DeepSeek, OpenRouter, Qwen. Kompatybilne z OpenAI używają jednego API z base URL:

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

Błąd dostawcy → automatyczne przejście do następnego. Transkrypcja zawsze zapisywana. Podsumowanie w JSON wewnątrz Markdown:

## Summary
Krótki przegląd.
### Action Items
- [ ] **You:** Wyślij raport do piątku
- [ ] **Speaker 1:** Sprawdź PR
### Key decisions
- PostgreSQL zamiast MongoDB

Pakietowanie dla Arch Linux

W AUR 4 meta-pakiety:

  • tapeback – podstawowy.
  • tapeback-tray – ikona w zasobniku.
  • tapeback-llm – LLM.
  • tapeback-diarize – PyTorch + pyannote.

Instalacja przez yay doinstalowuje pip-zależności w venv. Wydanie: release.sh + CI na PyPI (Trusted Publisher) + skrypty AUR.

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

Konfig w ~/.config/tapeback/.env:

TAPEBACK_VAULT_PATH=~/Documents/obsidian/vault

Rozwój i lekcje

3 dni na MVP, 2 tygodnie na v0.8.9 (błędy, testy). Spec-driven: specyfikacje Markdown z kryteriami gotowości. Kod od Claude z recenzją. Sprawdzaj nazwy na PyPI/AUR wcześnie – normalizacja sprawia, że echo-vault == echovault.

Co jest ważne

  • Stereo-rozdzielenie: mikrofon (Ty) vs monitor (Inni) – deterministyczne, bez probabilistycznych błędów pyannote.
  • Lokalne przetwarzanie: faster-whisper + opcjonalny PyTorch, bez chmury.
  • Modularność: extras dla diarize/llm/tray, graceful fallback.
  • Integracja: Markdown w Obsidian z JSON-podsumowaniem (action items, decyzje).
  • Instalacja: uv tool install tapeback[tray,diarize,llm] lub AUR.

— Editorial Team

Advertisement 728x90

Czytaj dalej