# Grabador CLI Local de Reuniones para Linux: Separación Estéreo de Oradores y Resúmenes con IA
La herramienta CLI tapeback captura audio mediante PipeWire/PulseAudio, transcribe con faster-whisper, separa oradores por canales estéreo y genera resúmenes usando LLMs. El resultado es un archivo Markdown que se guarda en el directorio que especifiques, ¡incluso en bóvedas de Obsidian!. Un solo comando inicia la grabación, Ctrl+C la detiene y activa el pipeline: captura → transcripción → diarización → resumen.
Compatible con Zoom, Teams, Meet, Discord, Telegram. Captura audio del sistema, sin necesidad de APIs de servicios.
tapeback start
# ocurre la reunión
# Ctrl+C → procesamiento → Markdown
Separación Estéreo de Oradores
La arquitectura aprovecha archivos WAV estéreo: canal izquierdo para tu micrófono ("Tú"), canal derecho para la fuente del monitor (el resto). Whisper procesa cada canal por separado. La diarización de Pyannote se ejecuta solo en el canal derecho para etiquetar Orador 1, 2, etc. Los segmentos se clasifican por niveles de energía RMS.
La separación física de canales elimina errores de agrupación: sin confusiones entre voces similares, sin dividir un orador en varios clusters. La aceleración GPU acelera todo, con fallback a CPU en errores de CUDA.
┌─────────────┐ ┌──────────────┐ ┌────────────────────┐
│ Estéreo │ │ Whisper │ │ Clasificación │
│ WAV │───▶│ (por │───▶│ de Canales: │
│ I: micróf. │ │ canal) │ │ I → "Tú" │
│ D: monitor │ │ │ │ D → pyannote │
└─────────────┘ └──────────────┘ │ para Otros │
└────────────────────┘
Dependencias Opcionales
Instalación base (~320 MB): grabación + transcripción. Extras evitan el bloat de 2 GB de PyTorch que no necesitas:
| Variante | Agrega | Tamaño |
|---------------|------------------------|--------|
| tapeback | Grabación + Whisper | ~320 MB|
| [llm] | Resúmenes (Anthropic, OpenAI, Groq...) | +50 MB |
| [diarize] | pyannote + PyTorch | +2 GB |
| [tray] | Bandeja del sistema | +1 MB |
Degradación elegante: ¿sin pyannote? El canal derecho se convierte en "Otros". Importaciones perezosas en __init__.
Integración con LLM y Fallbacks
Soporta 7 proveedores: Anthropic, OpenAI, Groq, Gemini, DeepSeek, OpenRouter, Qwen. Los compatibles con OpenAI usan una API unificada con URLs base:
_OPENAI_COMPATIBLE_BASE_URLS = {
"groq": "https://api.groq.com/openai/v1",
"gemini": "https://generativelanguage.googleapis.com/v1beta/openai/",
"deepseek": "https://api.deepseek.com",
# ...
}
¿Error de proveedor? Fallback automático al siguiente. Las transcripciones siempre se guardan. Resumen en JSON embebido en Markdown:
## Resumen
Resumen rápido.
### Tareas Pendientes
- [ ] **Tú:** Envía informe antes del viernes
- [ ] **Orador 1:** Revisa PR
### Decisiones Clave
- PostgreSQL sobre MongoDB
Empaquetado para Arch Linux
Disponible en AUR como 4 meta-paquetes:
tapeback— núcleo.tapeback-tray— bandeja.tapeback-llm— soporte LLM.tapeback-diarize— PyTorch + pyannote.
yay maneja dependencias pip en un venv. Lanzamiento vía release.sh + CI de PyPI (Trusted Publisher) + scripts AUR.
yay -S tapeback tapeback-diarize tapeback-llm tapeback-tray
Config en ~/.config/tapeback/.env:
TAPEBACK_VAULT_PATH=~/Documents/obsidian/vault
Desarrollo y Lecciones Aprendidas
MVP en 3 días, v0.8.9 en 2 semanas (bugs, tests). Espec-driven: specs en Markdown con criterios de completado. Código de Claude con revisiones. Verifica nombres en PyPI/AUR temprano—la normalización hace echo-vault == echovault.
Lecciones Clave
- Separación estéreo: Micrófono (Tú) vs monitor (Otros)—determinística, evita errores probabilísticos de pyannote.
- Procesamiento local: faster-whisper + PyTorch opcional, sin nube.
- Modularidad: Extras para diarización/LLM/bandeja, con fallbacks suaves.
- Integración: Markdown para Obsidian con resúmenes JSON (tareas, decisiones).
- Instalación:
uv tool install tapeback[tray,diarize,llm]o AUR.
— Editorial Team
Aún no hay comentarios.