TTS #55659 Fray Marcos: regenerar audio reportado como repetido; no pasa por chunking #210

Open
opened 2026-08-14 11:22:26 +00:00 by rafa · 5 comments
Owner

Incidencia

En #55659 — «Un diálogo que enriquece a Jesús y a la mujer» (Fray Marcos) se ha reportado que, tras la frase:

«A los extranjeros que se han dado al Señor les traeré a mi monte santo». No cabe duda de que Jesús participa de la mentalidad…

la locución vuelve a empezar en «No cabe duda…».

Diagnóstico reproducible (2026-08-14)

  • Verificado server-side en el WordPress de producción: post publish, autor 382 (Fray Marcos), con fea_audio_done=1 y fea_audio_url=/wp-content/uploads/tts/55659.mp3.
  • El texto que recibe MiniMax tiene 4.336 caracteres con pausas y entra en una sola petición (CHAR_LIMIT=8000). «No cabe duda» aparece exactamente una vez en el contenido y una vez en el payload preparado.
  • Por tanto, este caso no pasa por el troceador _split_for_tts() y no acredita la hipótesis de un truncado/corte entre chunks.
  • El MP3 anterior fue respaldado y transcrito localmente; la frase aparece seguida de «…Jesús participa de la mentalidad del pueblo». Aun así, se ha regenerado un candidato nuevo con la voz clonada FrayMarcosFeadulta2026, para sustituir el asset reportado por usuarios.

Preparado localmente (sin cambios en producción)

  • Backup verificable: backups/tts-55659-20260814T112033Z/
    • MP3 previo SHA-256: 8478a9f77d6947b02602cb86391dc97a07ce3810f2a329dd3db6eb9772ea013a
  • MP3 nuevo: wordpress/wp-content/uploads/tts/55659.mp3
    • SHA-256: 1fbd6a75f564a557d7ccdad7d10efb6cef74fafa963c03d961f967578ba6c724
    • Duración comprobada por ffprobe: 310.644 s
    • Transcripción de control: «No cabe duda de que Jesús participa de la mentalidad del pueblo.»
  • Metadatos locales conservados: fea_audio_done=1, voz FrayMarcosFeadulta2026.

Aplicación pendiente (Rafa; producción)

Subir solo el MP3 nuevo como /var/www/html/wp-content/uploads/tts/55659.mp3 dentro del contenedor WordPress activo. No modificar contenido ni metas: la URL y los metadatos existentes ya son correctos.

Seguimiento recomendado

  1. Tras el reemplazo, comprobar en servidor tamaño+SHA-256 del archivo y fea_audio_url/fea_audio_done del post.
  2. Escuchar la zona de ~02:20–02:30 en navegador normal (Cloudflare impide validación headless).
  3. Si se repite con un MP3 nuevo, guardar payload exacto + MP3 y abrir análisis contra MiniMax; no atribuirlo al chunking sin evidencia. Como guardarraíl futuro, valorar transcripción post-síntesis de textos reportados antes de subirlos.
## Incidencia En **#55659 — «Un diálogo que enriquece a Jesús y a la mujer» (Fray Marcos)** se ha reportado que, tras la frase: > «A los extranjeros que se han dado al Señor les traeré a mi monte santo». No cabe duda de que Jesús participa de la mentalidad… la locución vuelve a empezar en «No cabe duda…». ## Diagnóstico reproducible (2026-08-14) - Verificado **server-side en el WordPress de producción**: post `publish`, autor `382` (Fray Marcos), con `fea_audio_done=1` y `fea_audio_url=/wp-content/uploads/tts/55659.mp3`. - El texto que recibe MiniMax tiene **4.336 caracteres con pausas** y entra en **una sola petición** (`CHAR_LIMIT=8000`). «No cabe duda» aparece exactamente una vez en el contenido y una vez en el payload preparado. - Por tanto, este caso **no pasa por el troceador** `_split_for_tts()` y no acredita la hipótesis de un truncado/corte entre chunks. - El MP3 anterior fue respaldado y transcrito localmente; la frase aparece seguida de «…Jesús participa de la mentalidad del pueblo». Aun así, se ha regenerado un candidato nuevo con la voz clonada `FrayMarcosFeadulta2026`, para sustituir el asset reportado por usuarios. ## Preparado localmente (sin cambios en producción) - Backup verificable: `backups/tts-55659-20260814T112033Z/` - MP3 previo SHA-256: `8478a9f77d6947b02602cb86391dc97a07ce3810f2a329dd3db6eb9772ea013a` - MP3 nuevo: `wordpress/wp-content/uploads/tts/55659.mp3` - SHA-256: `1fbd6a75f564a557d7ccdad7d10efb6cef74fafa963c03d961f967578ba6c724` - Duración comprobada por `ffprobe`: `310.644 s` - Transcripción de control: «No cabe duda de que Jesús participa de la mentalidad del pueblo.» - Metadatos locales conservados: `fea_audio_done=1`, voz `FrayMarcosFeadulta2026`. ## Aplicación pendiente (Rafa; producción) Subir **solo** el MP3 nuevo como `/var/www/html/wp-content/uploads/tts/55659.mp3` dentro del contenedor WordPress activo. No modificar contenido ni metas: la URL y los metadatos existentes ya son correctos. ## Seguimiento recomendado 1. Tras el reemplazo, comprobar en servidor tamaño+SHA-256 del archivo y `fea_audio_url`/`fea_audio_done` del post. 2. Escuchar la zona de ~02:20–02:30 en navegador normal (Cloudflare impide validación headless). 3. Si se repite con un MP3 nuevo, guardar payload exacto + MP3 y abrir análisis contra MiniMax; no atribuirlo al chunking sin evidencia. Como guardarraíl futuro, valorar transcripción post-síntesis de textos reportados antes de subirlos.
Author
Owner

Dry-run de release (2026-08-14)

Ejecutado localmente, sin escribir en producción:

sync_audio_to_prod.py --ids 55659 --dry-run
#55659: PLAN: subiría mp3 + setaudio
FIN SYNC. ok=1 skip=0 error=0

El release queda deliberadamente pendiente de Rafa.

### Dry-run de release (2026-08-14) Ejecutado localmente, sin escribir en producción: ```text sync_audio_to_prod.py --ids 55659 --dry-run #55659: PLAN: subiría mp3 + setaudio FIN SYNC. ok=1 skip=0 error=0 ``` El release queda deliberadamente pendiente de Rafa.
Author
Owner

Desplegado en producción (2026-08-14 13:30 UTC), por Claudix, con autorización de Rafa en Buzz:

  • Backup del MP3 anterior guardado en el host Hetzner: /home/rafa/55659_prod_backup_20260814T133044Z.mp3 (SHA-256 8478a9f77d6947b02602cb86391dc97a07ce3810f2a329dd3db6eb9772ea013a, coincide con el que servía antes)
  • MP3 nuevo copiado a /var/www/html/wp-content/uploads/tts/55659.mp3 dentro de wordpress-r2ssjifwj0r0ghyoqd528uaa
  • Verificado server-side: SHA-256 1fbd6a75f564a557d7ccdad7d10efb6cef74fafa963c03d961f967578ba6c724, 4.970.925 bytes, root:root 644
  • No se tocó contenido ni metas (fea_audio_done/fea_audio_url ya eran correctos)

Pendiente: escuchar la zona ~02:20–02:30 en navegador normal para confirmar que ya no se repite la frase.

Desplegado en producción (2026-08-14 13:30 UTC), por Claudix, con autorización de Rafa en Buzz: - Backup del MP3 anterior guardado en el host Hetzner: `/home/rafa/55659_prod_backup_20260814T133044Z.mp3` (SHA-256 `8478a9f77d6947b02602cb86391dc97a07ce3810f2a329dd3db6eb9772ea013a`, coincide con el que servía antes) - MP3 nuevo copiado a `/var/www/html/wp-content/uploads/tts/55659.mp3` dentro de `wordpress-r2ssjifwj0r0ghyoqd528uaa` - Verificado server-side: SHA-256 `1fbd6a75f564a557d7ccdad7d10efb6cef74fafa963c03d961f967578ba6c724`, 4.970.925 bytes, `root:root 644` - No se tocó contenido ni metas (`fea_audio_done`/`fea_audio_url` ya eran correctos) Pendiente: escuchar la zona ~02:20–02:30 en navegador normal para confirmar que ya no se repite la frase.
Author
Owner

Prueba de transcripción post-síntesis — #55890 (2026-08-15)

Se ha probado el control propuesto en local, sobre el mismo binario que está en producción:

  • Post: #55890 — «En María descubrimos lo femenino de Dios» (Fray Marcos).
  • Voz: FrayMarcosFeadulta2026.
  • MP3 local/prod: SHA-256 80626cf840ca13592d2349af9b089a18d8fb932488ce37509e080eeb4dd38660; 4.650.669 bytes; duración 290,628 s.
  • Transcripción local con faster-whisper (base, español): 44 segmentos, 648 palabras.
  • Texto fuente extraído con el pipeline TTS: 648 palabras.
  • La transcripción termina correctamente en: «En esa identificación con Dios no cabe más.»
  • El prefijo del texto no reaparece en el último tercio del audio; no hay segunda vuelta ni reinicio en este documento.

Conclusión: la técnica sirve para detectar de forma barata un síntoma grave de reinicio: una repetición completa casi duplicaría el número de palabras y/o reintroduciría el prefijo fuente en el último tercio. Este MP3 pasa el control.

Artefacto local de auditoría: /tmp/tts-55890-transcript.txt.

Siguiente paso propuesto: convertirlo en gate local post-síntesis antes de cualquier subida: validar ffprobe, transcribir, comparar conteo de palabras y buscar el prefijo normalizado de la fuente en el último tercio. Si falla, marcar fea_audio_error y no preparar release. No se ha modificado producción en esta prueba.

### Prueba de transcripción post-síntesis — #55890 (2026-08-15) Se ha probado el control propuesto **en local**, sobre el mismo binario que está en producción: - Post: `#55890` — «En María descubrimos lo femenino de Dios» (Fray Marcos). - Voz: `FrayMarcosFeadulta2026`. - MP3 local/prod: SHA-256 `80626cf840ca13592d2349af9b089a18d8fb932488ce37509e080eeb4dd38660`; 4.650.669 bytes; duración `290,628 s`. - Transcripción local con `faster-whisper` (`base`, español): **44 segmentos, 648 palabras**. - Texto fuente extraído con el pipeline TTS: **648 palabras**. - La transcripción termina correctamente en: «En esa identificación con Dios no cabe más.» - El prefijo del texto no reaparece en el último tercio del audio; no hay segunda vuelta ni reinicio en este documento. Conclusión: la técnica sirve para detectar de forma barata un síntoma grave de reinicio: una repetición completa casi duplicaría el número de palabras y/o reintroduciría el prefijo fuente en el último tercio. Este MP3 pasa el control. Artefacto local de auditoría: `/tmp/tts-55890-transcript.txt`. **Siguiente paso propuesto:** convertirlo en gate local post-síntesis antes de cualquier subida: validar `ffprobe`, transcribir, comparar conteo de palabras y buscar el prefijo normalizado de la fuente en el último tercio. Si falla, marcar `fea_audio_error` y no preparar release. No se ha modificado producción en esta prueba.
Author
Owner

Incidente #55967 — audio Fray Marcos (2026-08-20)

Causa confirmada por reproducción real: el MP3 íntegro del origen (55967) decodifica y se transcribe completo, pero el navegador recibía respuestas parciales (Range) inconsistentes durante streaming y reiniciaba el audio. La validación anterior era insuficiente: comprobaba el binario en origen, no el recurso que consumía el lector.

Mitigación desplegada y confirmada por Rafa:

  • Publicado MP3 recodificado y con ruta inmutable: 55967-6aed89169ad0.mp3 (SHA-256 6aed89169ad062b8817b951445e31c3979ae0bcfbfcac91051e5c7b615fc2362).
  • El reproductor descarga el asset completo, calcula SHA-256 en el navegador y sólo entonces reproduce un Blob local. Si CDN/proxy devuelve bytes distintos, bloquea la reproducción con aviso; ya no puede mezclar/reiniciar segmentos silenciosamente.
  • Rafa confirmó escucha completa hasta el final.

Prevención incorporada: commit bc3af3c añade hash remoto/local obligatorio a sync_audio_to_prod.py, persiste fea_audio_sha256 y habilita el playback verificado para assets con hash.

### Incidente #55967 — audio Fray Marcos (2026-08-20) **Causa confirmada por reproducción real:** el MP3 íntegro del origen (`55967`) decodifica y se transcribe completo, pero el navegador recibía respuestas parciales (`Range`) inconsistentes durante streaming y reiniciaba el audio. La validación anterior era insuficiente: comprobaba el binario en origen, no el recurso que consumía el lector. **Mitigación desplegada y confirmada por Rafa:** - Publicado MP3 recodificado y con ruta inmutable: `55967-6aed89169ad0.mp3` (SHA-256 `6aed89169ad062b8817b951445e31c3979ae0bcfbfcac91051e5c7b615fc2362`). - El reproductor descarga el asset completo, calcula SHA-256 en el navegador y sólo entonces reproduce un `Blob` local. Si CDN/proxy devuelve bytes distintos, bloquea la reproducción con aviso; ya no puede mezclar/reiniciar segmentos silenciosamente. - Rafa confirmó escucha completa hasta el final. **Prevención incorporada:** commit `bc3af3c` añade hash remoto/local obligatorio a `sync_audio_to_prod.py`, persiste `fea_audio_sha256` y habilita el playback verificado para assets con hash.
Author
Owner

Seguimiento de despliegue

He creado el issue #212 para el rollout del catálogo existente. Aclara que el mecanismo ya está integrado de forma genérica en el mu-plugin original (fea-audio-player.php), pero sólo #55967 tiene por ahora fea_audio_sha256; el resto requiere backfill verificado y QA antes de activarse.

### Seguimiento de despliegue He creado el issue #212 para el rollout del catálogo existente. Aclara que el mecanismo ya está integrado de forma genérica en el mu-plugin original (`fea-audio-player.php`), pero sólo `#55967` tiene por ahora `fea_audio_sha256`; el resto requiere backfill verificado y QA antes de activarse.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rafa/feadulta#210