El pipeline del podcast: de grabación a episodio publicado con IA local
Nuestro flujo completo real: cómo usamos nuestra propia IA para producir En Local — transcripción, acta, capítulos, show notes y publicación web, casi sin tocar nada.

Esta es LA receta meta: la que produce este mismo podcast. Cada pieza la hemos probado en nuestro laboratorio. El resultado: de audio crudo a episodio publicado en la web con 15 minutos de trabajo humano.
El flujo completo
1. GRABACIÓN → audio.mp3 (Toni + Jaume)
2. TRANSCRIPCIÓN → Whisper large-v3 local
3. LIMPIEZA → LLM local quita muletillas, marca hablantes
4. SHOW NOTES → LLM genera resumen, títulos, capítulos, links
5. WEB → Markdown + frontmatter → Astro build
6. PUBLICACIÓN → rsync al servidor → live
Pieza 1: Transcripción con diarización ligera
Whisper transcribe, pero no distingue quién habla. Truco nuestro: grabar cada micrófono a un canal separado (o pista separada con Audacity/OBS), transcribir cada pista por separado y unir por timestamps:
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
for pista, hablante in [("toni.wav", "Toni"), ("jaume.wav", "Jaume")]:
segments, _ = model.transcribe(pista, language="es")
for s in segments:
print(f"[{s.start:.1f}] {hablante}: {s.text}")
Luego se ordenan todos los segmentos por start y ya tienes el diálogo completo.
Pieza 2: Show notes con el LLM local
Pásale la transcripción a tu modelo con este prompt (funciona sorprendentemente bien con modelos de 7-14B):
Eres el editor del podcast En Local. Con esta transcripción, genera en Markdown:
1. Título del episodio: gancho, máximo 8 palabras, sin clickbait.
2. Descripción: 2 frases para iTunes/web.
3. Capítulos con timestamps: "## 12:34 Título del tema" (usa los timestamps reales).
4. Menciones: herramientas, modelos y links mencionados en lista.
5. 3 frases destacables para redes sociales.
Transcripción:
<pega aquí la transcripción>
Pieza 3: El frontmatter automático
Otro prompt que convierte las show notes en el frontmatter de la web:
Convierte esto a frontmatter YAML válido para un post:
- title (sin comillas dobles internas)
- description (máximo 160 caracteres)
- pubDate: AAAA-MM-DD de hoy
- tags: máximo 4
Devuelve SOLO el bloque YAML entre ---.
Juntas ambos, pegas el Markdown debajo, guardas en src/content/episodios/ y:
npm run build
rsync -avz --delete dist/ miservidor:/tmp/stage/
ssh miservidor "echo TU_PASSWORD | sudo -S rsync -avz --delete /tmp/stage/ /www/wwwroot/llme.midominio.es/"
Pieza 4: El botón final (n8n)
Todo lo anterior encadenado en un workflow n8n: carpeta watch → Whisper → LLM → genera Markdown → SSH al server → build → deploy. El sueño: grabar, colgar el audio, y ver la web actualizarse.
Lo que todavía hacemos a mano (y por qué)
- Revisar la transcripción: los nombres propios y anglicismos (¡“HuggingFace”!) Whisper los mata. 5 minutos de revisión evitan vergüenzas.
- Aprobar las show notes: el modelo resumen bien pero los títulos los elegimos nosotros. La IA propone, el humano decide.
- El audio no se toca: ni EQ ni magia (todavía). Falta tiempo.
Números reales del pipeline
- Transcripción: 1 hora de audio en ~6 min (GPU) o ~40 min (CPU)
- Show notes: ~2 min con un 14B local
- Publicación web: <1 min (build + rsync)
- Tiempo humano total: ~20 min por episodio