INVIDEO_BASIC / app.py
gnosticdev's picture
Update app.py
40c7de1 verified
raw
history blame
1.71 kB
import os
import asyncio
from concurrent.futures import ThreadPoolExecutor
import gradio as gr
# Configuraci贸n CR脥TICA para evitar timeouts
GRADIO_TIMEOUT = 6000 # 10 minutos (en segundos)
MAX_VIDEO_DURATION = 1000 # 2 minutos (evita procesos eternos)
async def crear_video_profesional(prompt, custom_script, voz_index, musica=None):
try:
# 1. Simulamos un proceso largo (隆esto es lo que causa el timeout!)
# Reemplaza esto con tu l贸gica real de generaci贸n
await asyncio.sleep(30) # Solo para prueba
# 2. Devuelve un video de prueba (eliminar en producci贸n)
return "video_prueba.mp4"
except Exception as e:
print(f"ERROR: {str(e)}")
return None
# 馃憞 **Soluci贸n M谩gica**: Ejecuci贸n en hilos separados
def run_async_with_timeout(prompt, script, voz_index, musica=None):
with ThreadPoolExecutor() as executor:
future = executor.submit(
lambda: asyncio.run(crear_video_profesional(prompt, script, voz_index, musica))
)
return future.result(timeout=GRADIO_TIMEOUT)
# Interfaz Minimalista (para enfocarnos en el timeout)
with gr.Blocks() as app:
with gr.Row():
prompt = gr.Textbox(label="Tema")
btn = gr.Button("Generar")
output = gr.Video()
btn.click(
fn=run_async_with_timeout, # 馃憟 Usamos el wrapper anti-timeout
inputs=[prompt, gr.Textbox(visible=False), gr.Number(visible=False)],
outputs=output
)
if __name__ == "__main__":
app.launch(
server_name="0.0.0.0",
server_port=7860,
# 鈿狅笍 Configuraci贸n CLAVE para el timeout
app_kwargs={"timeout": GRADIO_TIMEOUT}
)