Podcastking2 / app.py
gnosticdev's picture
Update app.py
280807d verified
raw
history blame
1.69 kB
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()