Introducción: la idea surgió al querer convertir publicaciones de blog en episodios de podcast de forma más rápida y automática. Al principio se seguía un flujo manual largo que incluía pegar el enlace en NotebookLM, esperar a que se generara el audio, ajustar opciones, descargar el audio y luego crear un vídeo para YouTube con Headliner. Ese proceso implicaba muchas esperas y la posibilidad de automatizarlo resultó obvia.
Visión general del proyecto: desarrollé podcast-it como un Cloudflare Worker capaz de recibir el texto de una entrada de blog y devolver un archivo de audio reproducible. El objetivo fue crear una API REST fácil de integrar con cualquier sitio para convertir texto en audio de manera escalable y rápida.
Selección de la pila tecnológica: la limitación principal fue que algunas herramientas no ofrecen API públicas, por lo que fue necesario recrear la funcionalidad clave. Elegí Cloudflare Workers por su baja latencia y plan gratuito generoso. Para generación de texto y síntesis de voz utilicé OpenAI. El almacenamiento de audio quedó en R2 y la metadata en D1. La API REST facilita la integración con sitios y flujos de publicación existentes.
Configuración del proyecto: partí de una plantilla backend para Workers con OpenAPI que agiliza el desarrollo de APIs. Instalé el SDK de OpenAI y añadí bindings en la configuración para R2 y D1, además de crear migraciones para versionar la base de datos y un directorio de tests. De este modo se garantizó reproducibilidad entre entornos y control de cambios en la estructura de datos.
Funcionalidad principal: texto a voz: en lugar de convertir directamente el texto del blog, primero genero un guion de narración con OpenAI para obtener un tono más natural y luego envío ese guion a la API de text to speech. El flujo interno es sencillo y robusto: recibir texto bruto, generar guion, sintetizar audio, almacenar el audio en R2 y guardar metadatos en D1.
Creación asíncrona de episodios: la generación y almacenamiento de audio toman varios segundos, por lo que el endpoint de creación es asíncrono. Al recibir un POST a la ruta de episodios la API responde inmediatamente con un slug y estado pendiente, mientras que el procesamiento continúa en segundo plano. Un endpoint GET por slug devuelve el estado actual y la metadata cuando el audio esté listo.
Flujo interno resumido: 1 recibir el post como texto; 2 generar guion de narración con OpenAI; 3 sintetizar audio con la API de text to speech; 4 guardar el audio en R2 usando el slug como clave; 5 registrar metadata en D1 con estado, marcas de tiempo y transcripción; 6 actualizar el estado a completo cuando el audio esté disponible.
Recuperación de episodios: consultar el endpoint GET por slug devuelve el estado actual del episodio y sus metadatos. Cuando el campo audioFile está poblado se puede descargar el audio desde el endpoint dedicado que sirve el binario directamente desde R2. Separar almacenamiento de audio y metadata permite respuestas rápidas para consultas y entrega eficiente de archivos grandes sin incluir audio en formato base64 dentro de JSON.
Almacenamiento y entrega: los ficheros de audio viven en R2 con la clave basada en el slug, y la tabla D1 contiene metadata como transcripción, estados y timestamps. Para obtener el audio el Worker hace streaming desde R2 al cliente, y D1 solo se consulta para obtener la metadata. Esta separación simplifica la arquitectura y mejora el rendimiento.
Pruebas e integración: las pruebas de integración ejercitan los endpoints reales con OpenAI mockeado. Se verifican rutas inexistentes, listados de episodios, creación de episodios con mocking de las respuestas de OpenAI y la recuperación de audio binario con el tamaño esperado. También se validan respuestas ante duplicados. Hubo algunos retos con Vitest y el entorno Workers, como limitaciones en modo watch y en mocks automáticos para D1, lo que requirió soluciones alternativas en los tests.
Conclusiones del proyecto: podcast-it permitió explorar Cloudflare Workers más allá del hosting estático y demostrar la sinergia entre R2 y D1. La decisión de separar audio y metadata simplificó el diseño y evitó complicaciones como enviar audio embebido en JSON. El proyecto está funcional y útil para convertir textos en audio rápidamente y sirve como base para integración directa con flujos de publicación.
Sobre Q2BSTUDIO: somos Q2BSTUDIO, una empresa de desarrollo de software y aplicaciones a medida con experiencia en software a medida y soluciones avanzadas de inteligencia artificial. Ofrecemos servicios integrales que incluyen ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio y consultoría en ia para empresas. Diseñamos agentes IA personalizados y aprovechamos herramientas como power bi para ofrecer dashboards y reporting robusto que impulsan la toma de decisiones basada en datos. Nuestro equipo combina experiencia en desarrollo a medida con prácticas de seguridad y operaciones cloud para entregar soluciones escalables y seguras.
Beneficios para empresas: si tu organización necesita automatizar la producción de audio a partir de contenidos escritos, integrar IA en procesos de negocio, o desplegar aplicaciones a medida en la nube, Q2BSTUDIO puede ayudar a diseñar e implementar la solución. Podemos adaptar pipelines de generación de voz, integrar agentes IA para tareas repetitivas y conectar pipelines a servicios cloud aws y azure, además de ofrecer seguridad y analítica avanzada con power bi.
Recursos y próximos pasos: el proyecto original está disponible en github.com/h93xV2/podcast-it para quien quiera explorar el código. Si te interesa una solución a medida o migrar este tipo de capacidades a tu flujo de publicación, contacta con Q2BSTUDIO para evaluar un plan que incluya desarrollo de software a medida, integración de inteligencia artificial, ciberseguridad y servicios cloud aws y azure.