Prueba A/B de voz TTS: carta 45018 (Ximena) vs carta 44997 (Álvaro) + encuesta pública #90

Closed
opened 2026-06-28 19:14:27 +00:00 by rafa · 0 comments
Owner

Labels: area:infra, area:plugin, improvement

Resumen

Prueba A/B de voz TTS con público real: generar el audio de todos los artículos de dos cartas semanales consecutivas, cada una con una voz distinta, y luego una encuesta para que el público decida qué voz prefiere. Sub-tarea de #76 (Audio TTS por artículo).

  • Carta de ESTA semana → voz es-ES-XimenaNeural (la que de momento gusta a Rafa).
  • Carta de la semana pasada → voz es-ES-AlvaroNeural (la actual).
  • Después: encuesta pública para elegir voz ganadora.

Datos verificados el 2026-06-15. Pendiente de ejecutar (solo documentado).


Conjunto exacto de la prueba

Grupo A — voz Ximena (es-ES-XimenaNeural)

Carta 45018"La puerta pequeña" (2026-06-13). 15 artículos (_carta_id=45018):

45019 45020 45021 45022 45023 45024 45025 45026 45027 45028 45029 45030 45031 45032 45033

Grupo B — voz Álvaro (es-ES-AlvaroNeural)

Carta 44997"20 años de fe adulta" (2026-06-06). 15 artículos (_carta_id=44997):

44998 44999 45000 45001 45002 45003 45004 45005 45006 45007 45008 45009 45010 45011 45012

Total: 30 audios. Tamaños de contenido entre ~1.6k y ~15k caracteres (la mayoría 2k-7k); los más largos (45025, 45031, 45004) darán audios de varios minutos.


Pipeline (a implementar, ver #76)

Por cada artículo:

  1. Leer post_content, limpiar HTML → texto plano (quitar imágenes, shortcodes, "pensamiento aleatorio", nav). Lectura fiel (sin reescritura de Gemma; contenido doctrinal).
  2. Normalización ligera opcional (abreviaturas / citas bíblicas), conservadora.
  3. edge-tts con la voz del grupo:
    ~/.hermes/hermes-agent/venv/bin/edge-tts --voice es-ES-XimenaNeural --text-file art.txt --write-media art.mp3
    # grupo B: --voice es-ES-AlvaroNeural
    
  4. Importar a Media Library → meta audio_url (+ audio_voz, audio_generado_en). Guardar también audio_voz para saber qué grupo es cada audio.
  5. Player compacto arriba del artículo (template single FSE ID 42359 / filtro the_content), visible solo si hay audio_url.
  6. Idempotente (--force para regenerar) y reanudable; estado en JSON + log.

Tiempo/almacenamiento: 30 audios, despreciable. No bloquea nada.

Encuesta de voz (fase posterior)

Objetivo: que el público vote qué voz prefiere tras escuchar.

  • Dónde: bajo el player, o una página dedicada con un ejemplo de cada voz.
  • Mecanismo (opciones):
    • (a) Plugin de encuestas WP ligero (ej. una pregunta con 2 opciones) — rápido, datos en WP.
    • (b) Google Form / formulario Brevo (ya se usa Brevo para el boletín) — cero plugins, datos externos.
    • (c) Votación propia minimalista (2 botones → contador en post meta / tabla) — control total, sin dependencias.
    • Recomendado: (a) o (c) para mantener el voto junto al audio. A decidir.
  • Página A/B ciega (requisito firme): las dos cartas tienen contenidos distintos → el voto se contaminaría por el tema, no solo la voz. Por eso, además del audio in-situ en los artículos, hay una página de encuesta con el mismo fragmento leído por las dos voces, etiquetadas "Voz 1" / "Voz 2" (asignación de etiqueta↔voz oculta y, idealmente, aleatorizada por visita para evitar sesgo de orden). El voto se emite ahí, comparando voz y no contenido.

Plan de ejecución (cuando se apruebe)

  1. Implementar el pipeline base de #76 (limpieza + edge-tts + Media Library + player) parametrizado por voz.
  2. Generar Grupo A (Ximena, carta 45018) y Grupo B (Álvaro, carta 44997).
  3. Verificar reproducción en local; revisar con Rafa.
  4. Montar la encuesta (mecanismo elegido) + página A/B ciega con el mismo fragmento.
  5. Deploy a prod (/web/wp-nuevo): audios a Media Library, sin scp (ssh 'cat > ruta'), sin proc_open; verificar con Rafa (Cloudflare).
  6. Recoger votos un tiempo y decidir voz por defecto para #76.

Ficheros y referencias

  • Pipeline base: #76 + patrón ytsummaries/scripts/audio_briefing.py.
  • edge-tts: ~/.hermes/hermes-agent/venv/bin/edge-tts.
  • Muestras previas de voz: wordpress/wp-content/uploads/tts-samples/.
  • Template single FSE: wp_posts ID 42359.

Criterios de aceptación

  • Los 15 artículos de la carta 45018 tienen audio con voz Ximena.
  • Los 15 artículos de la carta 44997 tienen audio con voz Álvaro.
  • Cada audio guarda audio_voz para identificar el grupo.
  • Player compacto arriba de cada artículo.
  • Página A/B ciega con el mismo fragmento en ambas voces ("Voz 1"/"Voz 2", asignación oculta) operativa.
  • Encuesta pública operativa, con el voto recogido en la página A/B ciega.
  • Resultado de la encuesta documentado y voz por defecto decidida en #76.
**Labels:** area:infra, area:plugin, improvement ## Resumen Prueba A/B de voz TTS con público real: generar el audio de **todos los artículos de dos cartas semanales consecutivas**, cada una con una voz distinta, y luego una **encuesta** para que el público decida qué voz prefiere. Sub-tarea de #76 (Audio TTS por artículo). - **Carta de ESTA semana → voz `es-ES-XimenaNeural`** (la que de momento gusta a Rafa). - **Carta de la semana pasada → voz `es-ES-AlvaroNeural`** (la actual). - Después: encuesta pública para elegir voz ganadora. > Datos verificados el 2026-06-15. **Pendiente de ejecutar** (solo documentado). --- ## Conjunto exacto de la prueba ### Grupo A — voz Ximena (es-ES-XimenaNeural) Carta **45018** — *"La puerta pequeña"* (2026-06-13). 15 artículos (`_carta_id=45018`): ``` 45019 45020 45021 45022 45023 45024 45025 45026 45027 45028 45029 45030 45031 45032 45033 ``` ### Grupo B — voz Álvaro (es-ES-AlvaroNeural) Carta **44997** — *"20 años de fe adulta"* (2026-06-06). 15 artículos (`_carta_id=44997`): ``` 44998 44999 45000 45001 45002 45003 45004 45005 45006 45007 45008 45009 45010 45011 45012 ``` > Total: 30 audios. Tamaños de contenido entre ~1.6k y ~15k caracteres (la mayoría 2k-7k); los más largos (45025, 45031, 45004) darán audios de varios minutos. --- ## Pipeline (a implementar, ver #76) Por cada artículo: 1. Leer `post_content`, **limpiar** HTML → texto plano (quitar imágenes, shortcodes, "pensamiento aleatorio", nav). Lectura **fiel** (sin reescritura de Gemma; contenido doctrinal). 2. Normalización ligera opcional (abreviaturas / citas bíblicas), conservadora. 3. **edge-tts** con la voz del grupo: ```bash ~/.hermes/hermes-agent/venv/bin/edge-tts --voice es-ES-XimenaNeural --text-file art.txt --write-media art.mp3 # grupo B: --voice es-ES-AlvaroNeural ``` 4. Importar a Media Library → meta `audio_url` (+ `audio_voz`, `audio_generado_en`). Guardar también `audio_voz` para saber qué grupo es cada audio. 5. Player compacto arriba del artículo (template single FSE ID 42359 / filtro `the_content`), visible solo si hay `audio_url`. 6. Idempotente (`--force` para regenerar) y reanudable; estado en JSON + log. **Tiempo/almacenamiento:** 30 audios, despreciable. No bloquea nada. ## Encuesta de voz (fase posterior) Objetivo: que el público vote qué voz prefiere tras escuchar. - **Dónde:** bajo el player, o una página dedicada con un ejemplo de cada voz. - **Mecanismo (opciones):** - (a) Plugin de encuestas WP ligero (ej. una pregunta con 2 opciones) — rápido, datos en WP. - (b) Google Form / formulario Brevo (ya se usa Brevo para el boletín) — cero plugins, datos externos. - (c) Votación propia minimalista (2 botones → contador en post meta / tabla) — control total, sin dependencias. - **Recomendado:** (a) o (c) para mantener el voto junto al audio. A decidir. - **Página A/B ciega (requisito firme):** las dos cartas tienen contenidos distintos → el voto se contaminaría por el tema, no solo la voz. Por eso, **además** del audio in-situ en los artículos, hay una **página de encuesta** con el **mismo fragmento** leído por las dos voces, etiquetadas "Voz 1" / "Voz 2" (asignación de etiqueta↔voz oculta y, idealmente, aleatorizada por visita para evitar sesgo de orden). El voto se emite ahí, comparando voz y no contenido. ## Plan de ejecución (cuando se apruebe) 1. Implementar el pipeline base de #76 (limpieza + edge-tts + Media Library + player) parametrizado por voz. 2. Generar Grupo A (Ximena, carta 45018) y Grupo B (Álvaro, carta 44997). 3. Verificar reproducción en local; revisar con Rafa. 4. Montar la encuesta (mecanismo elegido) + página A/B ciega con el mismo fragmento. 5. Deploy a prod (`/web/wp-nuevo`): audios a Media Library, sin scp (`ssh 'cat > ruta'`), sin `proc_open`; verificar con Rafa (Cloudflare). 6. Recoger votos un tiempo y decidir voz por defecto para #76. ## Ficheros y referencias - Pipeline base: #76 + patrón `ytsummaries/scripts/audio_briefing.py`. - edge-tts: `~/.hermes/hermes-agent/venv/bin/edge-tts`. - Muestras previas de voz: `wordpress/wp-content/uploads/tts-samples/`. - Template single FSE: `wp_posts` ID 42359. ## Criterios de aceptación - [ ] Los 15 artículos de la carta 45018 tienen audio con voz Ximena. - [ ] Los 15 artículos de la carta 44997 tienen audio con voz Álvaro. - [ ] Cada audio guarda `audio_voz` para identificar el grupo. - [ ] Player compacto arriba de cada artículo. - [ ] Página A/B ciega con el mismo fragmento en ambas voces ("Voz 1"/"Voz 2", asignación oculta) operativa. - [ ] Encuesta pública operativa, con el voto recogido en la página A/B ciega. - [ ] Resultado de la encuesta documentado y voz por defecto decidida en #76.
rafa closed this issue 2026-06-28 19:14:27 +00:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rafa/feadulta#90