Spaces:
Running
Running
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() |