Created scripts/textos-from-images.py
— extrae texto de imágenes (OCR con Gemini 2.5 Flash via OpenRouter),
genera .md en textos/ con frontmatter
Lee imágenes de
materiales/raw/imagenes/textos/<dir>/ (una página por
imagen, orden alfabético)
Procesa imágenes una por una (redimensionadas a 1200px max),
max_tokens: 4096 — más confiable que enviar varias
juntas
Lee la API key de ~/.pi/agent/auth.json (fallback al
env OPENROUTER_API_KEY)
Extrae metadatos (título, autor, género) en un segundo call con
todas las imágenes
Primer resultado: textos/el-juego-de-cartas.md (3728
chars, 2 páginas de "El juego de cartas")
Fixed nav inconsistency — la nav estaba hardcodeada
en 10 archivos y había derivado:
/sobre/ devolvía 404 (página eliminada) pero estaba en
todos los menús
/contacto/ se buildeaba a
/paginas/_contacto/ pero la nav linkeaba a
/contacto/ (path mismatch)
/programa/ tenía nav rota (solo "Inicio") y era
inalcanzable
/episodios/ no tenía link a Textos
Estandarizó todas las páginas a: Inicio · Episodios
· Textos (con aria-current="page")
Eliminó paginas/_contacto.org y todos los links a
/sobre/ y /contacto/
/programa/ se linkea desde /episodios/
("Escuchá los programas completos →") en vez de en el menú
Quitó noindex de /programa/ para que sea
descubrible
Fixed CI failures encontradas al deployar:
build-show.mjs hacía process.exit(1) si
faltaba pandoc → cambiado a warning graceful (skip grillas)
check-js.mjs testeaba
/textos/el-aleph-fragmento/ (texto borrado) → hecho
dinámico: descubre el primer link de texto desde
/textos/
Programa episodio-002 — el release existía pero CI
corría 2 min antes de que se creara, por eso no aparecía. Triggered
rebuild manual (gh workflow run deploy.yml) → ahora
episodio-002 aparece en /programa/ (sirve el
.wav raw de 617MB; cuando haya MP3 editado:
./scripts/publish-episodio --update 002)
Next:
Documentar scripts/textos-from-images.py en README (no
está documentado)
Actualizar docs/workflow-programa.org línea 83 — dice
que /programa/ es "solo accesible por URL directa" pero
ahora se linkea desde /episodios/
Episodio-002 sirve .wav raw (617MB) — cuando se edite,
publicar MP3 con -dur