Herramienta web local de captura, 4 pestañas:
- Transcribir: arrastras una grabación (audio o video) o pegas un link y sale un transcript .md con timestamps. Opcional: minuta automática y guardado en el Second Brain. Corre en la GPU (faster-whisper large-v3); el audio nunca sale del PC.
- Descargar video: link de YouTube, TikTok, Instagram, X, etc. → mp3 o
mp4 (720p/1080p/máxima) en
~/Downloads. Todas las calidades prefieren H.264+AAC: el AV1 que YouTube sirve por defecto se ve negro en reproductores sin ese códec y atora a CapCut/Premiere. IG/FB privados: elegir el navegador con la sesión iniciada (cookies). Facebook anónimo está roto en yt-dlp 2026.07.04. - Resumir link: artículo, post o paper (PDF) → resumen .md en 3 modos
(rápido / detallado / paper técnico) con el link original siempre visible.
PDF y arxiv preseleccionan el modo paper. Salen en
salidas/resumenes/. - Grabar reunión: botón grabar/detener para reuniones en vivo, sin archivo
previo. Virtual graba mic + lo que suena por los parlantes en 2 pistas
(el transcript sale etiquetado "Juan" / "Los demás"); presencial graba solo
el mic. El audio se escribe incremental a
grabaciones/: si algo muere a mitad, lo capturado sobrevive. Al detener entra al mismo pipeline (transcribir → minuta → vault). El diálogo se arma por timestamps de palabra y un anti-eco de dos pasadas descarta lo que el mic capta de los parlantes; aun así, con audífonos la separación queda mucho más limpia.
La minuta y los resúmenes usan DeepSeek (misma credencial que Claude Code). En el wifi de la universidad DeepSeek está bloqueado; transcribir y descargar sí funcionan allá.
./run.sh # levanta http://localhost:7860 y abre el navegador| Archivo | Qué hace |
|---|---|
app.py |
UI web (Gradio, 3 pestañas) |
nucleo.py |
archivo/link → audio (ffmpeg) → transcript .md (faster-whisper) |
descargador.py |
yt-dlp → mp3/mp4 con calidades a ~/Downloads |
resumidor.py |
URL/PDF → texto (trafilatura/pymupdf) → resumen por modo |
grabador.py |
graba mic + monitor del sink (PipeWire) en 2 pistas wav y las intercala en un transcript etiquetado |
llm.py |
cliente único DeepSeek (lee ~/.claude/settings.deepseek.json) |
minuta.py |
prompt de minuta de reuniones sobre llm.py |
vault.py |
copia .md a `raw/transcripciones |
descargar_modelo.py |
baja modelos whisper desde ModelScope (la U bloquea huggingface.co por SNI) |
- Modelos en
modelos/(gitignoreado). Descarga manual:uv run python descargar_modelo.py large-v3 - Si whisper da "CUDA out of memory": ollama suele tener un modelo cargado
(3.9GB de los 8GB).
ollama pspara verlo yollama stop <modelo>lo suelta. - Si un día huggingface.co vuelve a funcionar en la red, todo sigue igual: la copia local tiene prioridad.
- Diarización (quién dijo qué) planeada para v1.1; no está en v1.