# Enregistreur CLI de réunions local pour Linux : Séparation stéréo des locuteurs et résumés IA
L'outil CLI tapeback capture l'audio via PipeWire/PulseAudio, transcrit avec faster-whisper, sépare les locuteurs par canaux stéréo et génère des résumés via des LLM. Le résultat est un fichier Markdown déposé dans le répertoire de votre choix — même dans vos coffres Obsidian. Une seule commande lance l'enregistrement, Ctrl+C l'arrête et déclenche le pipeline : capture → transcription → diarisation → résumé.
Compatible Zoom, Teams, Meet, Discord, Telegram. Capture l'audio système — pas besoin d'API de services.
tapeback start
# la réunion se déroule
# Ctrl+C → traitement → Markdown
Séparation stéréo des locuteurs
L'architecture exploite les fichiers WAV stéréo : canal gauche pour votre micro (« Vous »), canal droit pour la source moniteur (tout le monde d'autre). Whisper traite chaque canal séparément. La diarisation pyannote ne s'exécute que sur le canal droit pour étiqueter Locuteur 1, 2, etc. Les segments sont classés par niveaux d'énergie RMS.
La séparation physique des canaux élimine les erreurs de clustering : pas de confusion entre voix similaires, pas de fractionnement d'un locuteur sur plusieurs clusters. L'accélération GPU accélère le tout, avec repli sur CPU en cas d'erreur CUDA.
┌─────────────┐ ┌──────────────┐ ┌────────────────────┐
│ Stéréo │ │ Whisper │ │ Classification │
│ WAV │───▶│ (par │───▶│ des canaux : │
│ G : micro │ │ canal) │ │ G → « Vous » │
│ D : moniteur│ │ │ │ D → pyannote │
└─────────────┘ └──────────────┘ │ pour les autres │
└────────────────────┘
Dépendances optionnelles
Installation de base (~320 Mo) : enregistrement + transcription. Les extras évitent le bloat PyTorch de 2 Go dont vous n'avez pas besoin :
| Variante | Ajoute | Taille |
|---------------|-------------------------|---------|
| tapeback | Enregistrement + Whisper| ~320 Mo |
| [llm] | Résumés (Anthropic, OpenAI, Groq...) | +50 Mo |
| [diarize] | pyannote + PyTorch | +2 Go |
| [tray] | Barre système | +1 Mo |
Dégradation élégante : pas de pyannote ? Le canal droit devient « Autre ». Imports paresseux dans __init__.
Intégration LLM avec replis automatiques
Supporte 7 fournisseurs : Anthropic, OpenAI, Groq, Gemini, DeepSeek, OpenRouter, Qwen. Les compatibles OpenAI utilisent une API unifiée avec URLs de base :
_OPENAI_COMPATIBLE_BASE_URLS = {
"groq": "https://api.groq.com/openai/v1",
"gemini": "https://generativelanguage.googleapis.com/v1beta/openai/",
"deepseek": "https://api.deepseek.com",
# ...
}
Erreur de fournisseur ? Repli automatique sur le suivant. Les transcriptions sont toujours sauvegardées. Résumé en JSON intégré au Markdown :
## Résumé
Aperçu rapide.
### Tâches à suivre
- [ ] **Vous :** Envoyer rapport vendredi
- [ ] **Locuteur 1 :** Revoir PR
### Décisions clés
- PostgreSQL plutôt que MongoDB
Emballage pour Arch Linux
Disponible dans l'AUR en 4 méta-paquets :
tapeback— noyau.tapeback-tray— barre système.tapeback-llm— support LLM.tapeback-diarize— PyTorch + pyannote.
yay gère les dépendances pip dans un venv. Publication via release.sh + CI PyPI (Trusted Publisher) + scripts AUR.
yay -S tapeback tapeback-diarize tapeback-llm tapeback-tray
Config dans ~/.config/tapeback/.env :
TAPEBACK_VAULT_PATH=~/Documents/obsidian/vault
Développement et leçons apprises
MVP en 3 jours, v0.8.9 en 2 semaines (bugs, tests). Développement spec-driven : specs Markdown avec critères de complétion. Code généré par Claude avec revues. Vérifiez tôt les noms PyPI/AUR — la normalisation rend echo-vault == echovault.
Points clés
- Séparation stéréo : Micro (Vous) vs moniteur (Autres) — déterministe, évite les erreurs probabilistes de pyannote.
- Traitement local : faster-whisper + PyTorch optionnel, sans cloud.
- Modularité : Extras pour diarisation/LLM/barre, avec replis fluides.
- Intégration : Markdown pour Obsidian avec résumés JSON (tâches, décisions).
- Installation :
uv tool install tapeback[tray,diarize,llm]ou AUR.
— Editorial Team
Aucun commentaire pour le moment.