# 리눅스 CLI 미팅 레코더: 스테레오 화자 분리와 AI 요약
CLI 도구 tapeback은 PipeWire/PulseAudio를 통해 오디오를 캡처하고, faster-whisper로 전사하며, 스테레오 채널로 화자를 분리한 뒤 LLM으로 요약을 생성합니다. 결과는 지정한 디렉터리에 Markdown 파일로 저장됩니다—Obsidian 볼트도 가능합니다. 한 명령어로 녹음을 시작하고 Ctrl+C로 종료하면 파이프라인이 작동합니다: 캡처 → 전사 → 화자 분리 → 요약.
Zoom, Teams, Meet, Discord, Telegram을 지원합니다. 시스템 오디오만 캡처하므로 서비스 API가 필요 없습니다.
tapeback start
# 미팅 진행
# Ctrl+C → 처리 → Markdown
스테레오 화자 분리
이 아키텍처는 스테레오 WAV 파일을 활용합니다: 왼쪽 채널은 내 마이크("나"), 오른쪽 채널은 모니터 소스(다른 모든 사람)입니다. Whisper는 각 채널을 별도로 처리합니다. Pyannote 화자 분리는 오른쪽 채널에서만 실행되어 Speaker 1, 2 등을 라벨링합니다. 세그먼트는 RMS 에너지 레벨로 분류됩니다.
물리적 채널 분리는 클러스터링 오류를 없앱니다: 비슷한 목소리 혼동 없음, 한 화자를 여러 클러스터로 나누지 않음. GPU 가속으로 속도를 높이고, CUDA 오류 시 CPU로 폴백합니다.
┌─────────────┐ ┌──────────────┐ ┌────────────────────┐
│ Stereo │ │ Whisper │ │ Channel │
│ WAV file │───▶│ (per │───▶│ Classification: │
│ L: mic │ │ channel) │ │ L → "나" │
│ R: monitor │ │ │ │ R → pyannote │
└─────────────┘ └──────────────┘ │ for Others │
└────────────────────┘
선택적 종속성
기본 설치(~320 MB): 녹음 + 전사. 필요 없는 2 GB PyTorch 부피를 피할 수 있는 추가 기능:
| 변형 | 추가 기능 | 크기 |
|---------------|-----------------------|---------|
| tapeback | 녹음 + Whisper | ~320 MB|
| [llm] | 요약 (Anthropic, OpenAI, Groq...) | +50 MB |
| [diarize] | pyannote + PyTorch | +2 GB |
| [tray] | 시스템 트레이 | +1 MB |
우아한 폴백: pyannote 없음? 오른쪽 채널은 "기타"로 처리. __init__에서 지연 임포트.
LLM 통합과 폴백
7개 제공자 지원: Anthropic, OpenAI, Groq, Gemini, DeepSeek, OpenRouter, Qwen. OpenAI 호환은 통합 API와 베이스 URL 사용:
_OPENAI_COMPATIBLE_BASE_URLS = {
"groq": "https://api.groq.com/openai/v1",
"gemini": "https://generativelanguage.googleapis.com/v1beta/openai/",
"deepseek": "https://api.deepseek.com",
# ...
}
제공자 오류? 다음으로 자동 폴백. 전사는 항상 저장. Markdown에 내장된 JSON 요약:
## 요약
간단 개요.
### 액션 아이템
- [ ] **나:** 금요일까지 보고서 보내기
- [ ] **Speaker 1:** PR 검토
### 주요 결정
- MongoDB 대신 PostgreSQL
Arch Linux 패키징
AUR에서 4개 메타패키지로 제공:
tapeback— 핵심.tapeback-tray— 트레이.tapeback-llm— LLM 지원.tapeback-diarize— PyTorch + pyannote.
yay가 venv에서 pip 종속성을 처리합니다. release.sh + PyPI CI (Trusted Publisher) + AUR 스크립트로 릴리스.
yay -S tapeback tapeback-diarize tapeback-llm tapeback-tray
설정은 ~/.config/tapeback/.env:
TAPEBACK_VAULT_PATH=~/Documents/obsidian/vault
개발과 배운 점
MVP 3일 만에 완성, v0.8.9는 2주(버그, 테스트). 명세 주도: 완료 기준이 있는 Markdown 명세. Claude 코드에 리뷰. PyPI/AUR 이름은 일찍 확인—정규화로 echo-vault == echovault.
주요 요점
- 스테레오 분리: 마이크(나) vs 모니터(기타)—결정적, pyannote의 확률적 오류 피함.
- 로컬 처리: faster-whisper + 선택적 PyTorch, 클라우드 불필요.
- 모듈성: 화자 분리/LLM/트레이 추가 기능, 부드러운 폴백.
- 통합: JSON 요약(액션 아이템, 결정) 포함 Obsidian용 Markdown.
- 설치:
uv tool install tapeback[tray,diarize,llm]또는 AUR.
— Editorial Team
아직 댓글이 없습니다.