import gradio as gr import os import asyncio from conver import ConversationConfig, URLToAudioConverter from dotenv import load_dotenv load_dotenv() def synthesize_sync(article_url, text_input): return asyncio.run(synthesize(article_url, text_input)) async def synthesize(article_url, text_input): # Si hay texto manual, úsalo; si no, usa la URL input_text = text_input if text_input else article_url if not input_text: return "Ingresa una URL o texto", None try: config = ConversationConfig() converter = URLToAudioConverter(config, llm_api_key=os.environ.get("TOGETHER_API_KEY")) output_file, conversation = await converter.url_to_audio( input_text, "es-ES-AlvaroNeural", # Voz en español "es-ES-ElviraNeural" # Segunda voz en español ) return conversation, output_file except Exception as e: return f"Error: {str(e)}", None with gr.Blocks(theme='gstaff/sketch') as demo: gr.Markdown("# Convertir Artículo/Texto en Podcast") with gr.Group(): text_url = gr.Textbox(label="URL del artículo (opcional)", placeholder="Ej: https://example.com") text_input = gr.Textbox(label="O pega el texto aquí", lines=5, placeholder="Texto en español...") btn = gr.Button("Podcastify", variant="primary") with gr.Row(): conv_display = gr.Textbox(label="Conversación", interactive=False, lines=10) aud = gr.Audio(label="Podcast generado", interactive=False) btn.click( synthesize_sync, inputs=[text_url, text_input], outputs=[conv_display, aud] ) demo.queue().launch()