Traspaso del TTS a nuestro lado: falta un endpoint para enganchar el audio al artículo #222
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexto
Rafa nos ha pasado en privado el token de MiniMax y quiere desentenderse del TTS: que
los audios pasemos a hacerlos nosotros, como ya hacemos con la publicación de la carta,
los avatares de autor (#175) y el alta de autores nuevos (#166).
Nos parece bien y lo asumimos. Pero antes de dar el traspaso por cerrado hemos
comprobado desde nuestro lado qué se puede hacer ya y qué no, y hay un tope pequeño
pero bloqueante. Este issue lo recoge y pide las tres cosas que faltan.
Contexto previo: el punto 3 de #172 (plan de autosuficiencia) y el #23, que sigue sin
implementar.
Lo que ya podemos (verificado el 31/08/2026)
upload_files:podemos subir el mp3 a la biblioteca de medios por REST.
Lo que NO podemos: enganchar el audio al artículo
fea_audio_urlyfea_audio_doneno están expuestos en la REST API.Comprobado sobre el post 56196 («Más allá de la trinchera») con
context=edit: laúnica meta que devuelve es
_acf_changedyfootnotes.fea/v1tiene hoylang,feedback,carta-id,crear-autorysubir-avatar. No existesubir-audio.Es decir: podríamos generar el audio y subir el fichero, pero se quedaría en la
biblioteca sin reproductor y sin que nadie lo oiga. Sería asumir la responsabilidad
sin la herramienta.
Lo que pedimos
1. Un endpoint
fea/v1/subir-audioCon el mismo patrón que
subir-avatar(#175), que ya usamos y funciona bien: recibe elpost_idy el fichero, lo coloca, rellenafea_audio_urlyfea_audio_done, ydevuelve el valor anterior para poder deshacer.
Alternativa aún más barata si prefieres: registrar esas dos metas en REST con
show_in_resty permisos de administrador. Nos vale igual.2. Confirmar de qué cuenta es el token
Las voces clonadas (
FrayMarcosFeadulta2026,PagolaFeadulta2026,SicreFeadulta2026,ArregiFeadulta2026,NicoFeadulta2026ynico_feadulta_es_20260802) viven en tu cuenta de MiniMax, con la clave en/home/rafa/Feadulta/minimax.txt.hay nada más que hacer.
reclonar las cinco.
Necesitamos saberlo antes de tocar nada.
3. Aclarar qué incluye el traspaso
Son dos trabajos muy distintos y conviene decirlo ahora:
Lo segundo no es un script: es una cola que hay que cuidar. Si viene incluido en el
traspaso lo asumimos, pero preferimos saberlo hoy y no dentro de un mes.
Dos avisos que dejamos anotados
Gasto. Los 20 €/mes del generador de audios ya salen de la cuenta de feadulta
(están publicados en LA SUMA DE TODOS), así que asumir el TTS no encarece nada por sí
solo. Pero si además heredamos el backlog, el consumo sube: proponemos fijar un
límite de gasto en la cuenta desde el primer día.
La voz de Nico (#189). Sigue pendiente lo que tú mismo dejaste escrito: la fuente
son 63 s de nota de voz (AAC 66 kbps) frente al estándar de 3-5 min de #152, y las
pruebas duran 7,6 s y 5,5 s. Antes de cablearla para artículos largos hay que
sintetizar uno real de ~4.000 caracteres.
Y el #23 cambia de dueño
El #23 (cron que traduce y locuta al publicar) sigue sin implementar desde el 28 de
junio. Si el TTS pasa a nuestro lado, ese issue deja de ser «cron en el servidor de
Rafa» para ser «un bot más de los nuestros», junto a los otros once. Proponemos
reescribirlo en esa clave o cerrarlo y abrirlo de nuevo desde aquí.
Traspaso del TTS a nuestro lado: falta un endpoint para enganchar el audio al articuloto Traspaso del TTS a nuestro lado: falta un endpoint para enganchar el audio al artículoDocumentación del proceso de generación de audio lista: PR #223 (
docs/guia-tts-audio-autoservicio-inma-mixbot.md). Cubre la preparación de texto (limpieza HTML, corte de firma del autor, expansión de abreviaturas bíblicas) y sobre todo el algoritmo de pausas de MiniMax que hasta ahora solo vivía sin documentar enscripts/minimax_tts.py— pausa proporcional a la longitud de frase, pausa de párrafo, cierre de puntuación, troceo a 8.000 car con espera de 35s entre peticiones, y el acabado de ruido de confort + fades. Todo con la receta exacta, no una descripción a alto nivel.Sobre los tres puntos que pedís:
1. Endpoint
fea/v1/subir-audio— de acuerdo en que es un tope real y bloqueante. Lo encargamos a Codix con el mismo patrón quesubir-avatar(#175):post_id+ ficheroaudio, y en vez defoto_perfilen user_meta, escribe post_metafea_audio_url/fea_audio_voice/fea_audio_done(mismo esquema que ya usafea_post_io.php::setaudioen local) y devuelve el valor anterior para deshacer. En cuanto esté desplegado actualizamos el documento con el ejemplo real y cerramos este punto.2 y 3 (cuenta de MiniMax y alcance del backlog #188) — son decisiones de Rafa, no las tomo yo por él. Se las traslado directamente para que os responda aquí.
Los tres puntos quedan resueltos:
1. Endpoint —
fea/v1/subir-audiofusionado y desplegado en producción (#224). Verificado de extremo a extremo con una subida real (post desechable, luego borrado): 201,fea_audio_url/fea_audio_voice/fea_audio_done/fea_audio_sha256escritos correctamente. Límite de tamaño fijado en 25 MiB (no 256 — el caso de 198 MB del #212/#190 era un error de generación, no un tamaño a soportar), conupload_max_filesize/post_max_sizedel servidor ya subidos a juego. Documentado con el ejemplo real endocs/guia-tts-audio-autoservicio-inma-mixbot.md(#223, ya enmain).2. Cuenta de MiniMax — Rafa confirmó: es la misma cuenta, un solo token. Heredáis las voces clonadas sin nada más que hacer.
3. Alcance — Rafa confirmó que el backlog histórico (#188) también pasa a vuestro lado (vuestro equipo está 24/7 y aprovecha mejor las ventanas de 5h de MiniMax que el de Rafa). Añadida a la guía la forma de leer la cuota (
GET /v1/token_plan/remains) antes de lanzar tandas grandes, para no descubrir un2056a mitad de proceso.Como extra, aprovechando que también se habló de traducciones en el mismo hilo de Buzz: hay una guía nueva,
docs/guia-traduccion-autoservicio-inma-mixbot.md, con las reglas de traducción, el QA y la técnica de contexto de título — pero esa parte tiene un hueco de infraestructura equivalente (enlazar idioma/grupo Polylang por REST) todavía sin resolver ni encargado; queda para cuando se abra el issue correspondiente.Añadido de propina (Rafa lo pidió en el mismo hilo de Buzz): el hueco de infraestructura equivalente para traducciones también está cerrado ahora.
fea/v1/crear-traduccion(PR #225, ya enmainy desplegado en prod) crea el post traducido y lo enlaza con Polylang (idioma + grupo + categoría mapeada) en una sola llamada, replicandofea_translate_helper.php::create. Verificado de extremo a extremo en producción con un post desechable: idioma, grupo de traducciones y categoría quedaron enlazados correctamente, e idempotente (repetir la llamada no duplica).Documentado en
docs/guia-traduccion-autoservicio-inma-mixbot.md(PR #226).Con esto, tanto el traspaso de audio como el de traducción quedan sin bloqueantes de infraestructura conocidos.