Files
feadulta/docs/guia-tts-traduccion-inma.md
T
rafa 5055e92143 Rescatar 10 docs/ del main local que nunca llegaron a Gitea (issue #194)
main local y origin/main son dos historias sin ancestro comun (ver #194).
Analisis del agente: de las 46 commits solo-en-local, el unico contenido que
no esta ya reflejado en origin/main via el snapshot de julio (PR #179) son
estos 10 ficheros de docs/ (guias, handoffs, planes, benchmark, revisiones de
issues). Copiados tal cual desde main con "git show main:docs/X > docs/X".

Redactada una password SSH y una password cPanel/FTP en texto plano que
tenia handoff-carta-46956-2026-06-17.md (servidor CDMON antiguo) antes de
subirlo -- ver .env, nunca en docs versionados.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-05 08:39:06 -04:00

7.0 KiB

Guía de traducción y audio (TTS) para Inma / Mixbot — feadulta.com

Para quién es este documento: para Inma y su asistente (Mixbot / Cowork), y como referencia para Hermes cuando se le pide que traduzca o locute un artículo/carta.

Estado real a 2026-07-12 (importante, corrige la guía de publicación §7 de versiones anteriores): esto NO es automático. No hay ningún cron corriendo hoy que traduzca o genere audio solo al publicar — esa automatización es la propuesta abierta issue #23, sin implementar. Todo lo de abajo es un proceso que hay que pedir, hoy solo ejecutable en el servidor/PC de Rafa.


1. Quién puede hacer qué, hoy

Tarea ¿Quién puede hacerla sin Rafa presente?
Publicar carta/artículos en español Sí, Inma/Mixbot solos — API REST ya funciona (ver docs/guia-publicacion-carta-inma.md). No depende del PC de Rafa.
Pedir traducción o TTS Solo indirectamente: hay que pedírselo a Hermes (WhatsApp/Telegram). Los scripts que traducen y locutan viven únicamente en el PC/servidor de Rafa (Docker local + credenciales locales) — Mixbot no tiene acceso directo a ellos.
Traducir/locutar si Hermes tampoco está disponible Hoy, no. Es la limitación real que hay que conocer: si el PC de Rafa está apagado o Hermes está caído, ni Inma ni Mixbot pueden disparar esto por su cuenta. Ver §5 (qué falta para que esto no dependa de Hermes).

2. Cómo pedir una traducción o un audio (mientras Hermes esté disponible)

Escribir al grupo de WhatsApp Feadulta_webmaster mencionando "Hermes" (o por Telegram), indicando qué carta/artículo (ID de WordPress o título+fecha si no se tiene el ID) y qué se necesita: traducción, audio, o ambos. Ejemplos:

"Hermes, tradúceme la carta 54XXX a los 4 idiomas" "Hermes, genera el audio de los artículos de la carta de esta semana"

Hermes ejecuta los scripts de abajo en el servidor de Rafa. No hace falta que Inma/Mixbot sepan los nombres de los scripts ni los IDs internos — es información para cuando Hermes (o Rafa) necesite el detalle técnico.

3. Traducción — motores disponibles

scripts/translate_post.py (repo joomla-migration) soporta tres motores via FEA_ENGINE:

Motor Coste Cuándo usarlo
gemma (por defecto) Gratis (modelo local, LM Studio en el PC de Rafa) Opción por defecto. Requiere que el PC/GPU de Rafa esté encendido.
minimax De pago, acotado (misma cuenta que el TTS) Alternativa cuando Gemma no está disponible o la calidad no basta.
haiku ⚠️ De pago vía API directa de Anthropic (no es cuota de sesión) No usar por defecto ni de forma autónoma. Choca con la política de no gastar API de pago sin que Rafa confirme cada vez. Reservado para cuando Rafa lo ejecuta él mismo o da autorización puntual.

Comando (lo ejecuta Hermes o Rafa, no Inma/Mixbot directamente):

cd /home/rafa/joomla-migration
python3 scripts/translate_post.py --carta <ID_CARTA> --langs en,fr,it,pt --status draft
# o para un solo artículo:
python3 scripts/translate_post.py --post-id <ID_POST> --langs en,fr,it,pt --status draft

--status draft dejar en borrador para revisión; --status publish publica directo. Tras traducir, hace falta el paso de enlaces internos (scripts/fix_carta_joomla_links.php) y, si se publica, degradar la carta anterior (scripts/demote_old_cartasemana.php) — Hermes ya conoce este flujo (ver skill feadulta-webmaster, references/procedures.md).

4. Audio (TTS) — voces por autor

scripts/minimax_tts.py + scripts/tts_produce.py (genera y escribe en WP local) + scripts/sync_audio_to_prod.py (sube a prod, soporta --rollback para deshacer). Modelo MiniMax speech-2.8-hd.

Voz por defecto: NicoFeadulta2026 (todos los autores sin voz clonada).

Voces clonadas por autor (issue #152 — solo estos 4 autores usan su propia voz, el resto cae a Nico):

Autor WP user_id voice_id
Fray Marcos 382 FrayMarcosFeadulta2026
José Antonio Pagola 383 PagolaFeadulta2026
José Luis Sicre 774 SicreFeadulta2026
José Arregi 386 ArregiFeadulta2026

Añadir un autor nuevo a esta lista requiere clonar su voz primero (grabación limpia 2-5 min, sin música/ruido de fondo — verificar con espectrograma antes de clonar, ver memoria feadulta-tts-voz-fraymarcos-202607 para el procedimiento y los descartes por música colada) y añadirlo a AUTHOR_VOICES en scripts/minimax_tts.py. Esto sí requiere que Rafa (o alguien con acceso al repo y a MiniMax) lo haga — no es autoservicio para Inma/Mixbot hoy.

Generar audio de una carta concreta (por defecto tts_produce.py procesa una cola larga de cartas pendientes — para priorizar una carta concreta, sobreescribir la cola):

cd /home/rafa/joomla-migration
FEA_TTS_CARTAS="<ID_CARTA>" python3 scripts/tts_produce.py

Reanudable (no repite lo ya hecho, meta fea_audio_done) y con freno automático si la cuota de MiniMax se agota (para tras fallos seguidos, no se queda colgado).

Publicar el audio en prod (el paso anterior solo escribe en el WordPress local):

python3 scripts/sync_audio_to_prod.py --carta <ID_CARTA>
# deshacer si algo suena mal:
python3 scripts/sync_audio_to_prod.py --rollback --carta <ID_CARTA>

Runbook de rollback ya documentado para que Hermes lo ejecute sin Rafa presente: issue #163.

5. La API key de MiniMax — decisión pendiente (de Rafa, no resuelta en este documento)

Hoy la key vive en un fichero local de Rafa, usada para TTS (y podría usarse para traducción FEA_ENGINE=minimax). Para que Inma/Mixbot puedan disparar esto sin pasar por Hermes, harían falta tanto acceso a esta key como acceso al entorno donde corren los scripts (Docker local del PC de Rafa) — hoy ninguna de las dos cosas es cierta. Ver el issue maestro #172 para las opciones que se están valorando (key separada para Inma, gestor de secretos compartido, o mantener todo detrás de Hermes). Mientras no se decida, la vía real es §2: pedírselo a Hermes.

6. Qué falta para que esto sea de verdad independiente de Hermes/Rafa

Siendo honestos: hoy, si el PC de Rafa está apagado (viaje, avería, lo que sea) y Hermes no responde, no hay forma de que Inma/Mixbot generen traducción o audio por su cuenta — los scripts y el WordPress local que usan como paso intermedio solo existen ahí. Para que esto cambiara de verdad haría falta uno de:

  • Mover el pipeline de traducción/TTS a un sitio alcanzable por Mixbot directamente (ej. correr contra prod en vez de contra el WordPress local, y alojar los scripts en un servidor accesible, no en el PC personal de Rafa).
  • O implementar de una vez el cron automático (issue #23) para que ni siquiera haga falta pedirlo — se dispara solo al publicar en español.

Ninguna de las dos está hecha. Documentado aquí para que la decisión de priorizarlo (o no) sea consciente, no un descuido.