File size: 1,708 Bytes
43fcbe8
cbfaa69
 
 
 
 
40c7de1
 
cbfaa69
 
 
 
 
 
fa201eb
cbfaa69
 
77c11ae
fa201eb
cbfaa69
720c3d5
c9d2e08
cbfaa69
 
 
 
 
 
 
 
 
 
77c11ae
cbfaa69
 
 
99b44b3
8337d0b
cbfaa69
 
d5141b3
9e5ee0a
d7f3a60
07b3b3d
cbfaa69
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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}
    )