File size: 2,985 Bytes
bdb3536
a3c1a92
65b3767
 
 
709cc8d
65b3767
 
a3c1a92
65b3767
 
a3c1a92
65b3767
 
 
 
 
 
 
 
bdb3536
65b3767
 
bdb3536
65b3767
 
 
bdb3536
65b3767
a3c1a92
 
 
 
 
 
 
65b3767
a3c1a92
bdb3536
a3c1a92
bdb3536
65b3767
 
a3c1a92
65b3767
 
 
 
a3c1a92
bdb3536
a3c1a92
65b3767
 
 
 
 
 
 
a3c1a92
65b3767
 
a3c1a92
65b3767
a3c1a92
bdb3536
a3c1a92
bdb3536
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65b3767
bdb3536
 
 
a3c1a92
bdb3536
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import os
import subprocess
import gradio as gr
import torch
import sys

# Verifica la versione di CUDA
print(f"CUDA disponibile: {torch.cuda.is_available()}")
if torch.cuda.is_available():
    print(f"CUDA versione: {torch.version.cuda}")
    print(f"Dispositivo: {torch.cuda.get_device_name(0)}")

# Esegui lo script di setup se necessario
if not os.path.exists("Open-Sora"):
    print("Esecuzione setup iniziale...")
    try:
        subprocess.run(["bash", "setup.sh"], check=True)
    except subprocess.CalledProcessError as e:
        print(f"Errore durante l'esecuzione di setup.sh: {e}")
        print("Continuando comunque...")

# Implementazione dell'inferenza seguendo la guida
def generate_video(prompt):
    try:
        # Directory per i video generati
        if not os.path.exists("outputs"):
            os.makedirs("outputs")
        
        # Comando esattamente come nella guida
        cmd = [
            "torchrun", 
            "--nproc_per_node", "1", 
            "--standalone", 
            "scripts/diffusion/inference.py", 
            "configs/diffusion/inference/256px.py",
            "--prompt", prompt,
            "--save-dir", "outputs"
        ]
        
        print(f"Esecuzione comando: {' '.join(cmd)}")
        
        # Esegui il comando nella directory di Open-Sora
        process = subprocess.run(
            cmd, 
            cwd="Open-Sora",
            capture_output=True,
            text=True,
            check=False
        )
        
        if process.returncode != 0:
            print(f"Errore: {process.stderr}")
            return "Errore durante la generazione", None
        
        # Cerca il video generato più recente
        video_files = [f for f in os.listdir("outputs") if f.endswith(".mp4")]
        if not video_files:
            return "Nessun video generato trovato", None
        
        # Ordina per data di creazione e prendi il più recente
        video_path = os.path.join("outputs", sorted(video_files, key=lambda x: os.path.getmtime(os.path.join("outputs", x)), reverse=True)[0])
        
        return "Generazione completata", video_path
    
    except Exception as e:
        print(f"Eccezione: {str(e)}")
        return f"Errore: {str(e)}", None

# Interfaccia Gradio
with gr.Blocks() as demo:
    gr.Markdown("# Generatore di Video con Open-Sora")
    
    with gr.Row():
        with gr.Column():
            prompt_input = gr.Textbox(
                label="Descrivi il video che vuoi generare",
                placeholder="Es. Un panda che mangia bambù in una foresta, stile cinematografico"
            )
            generate_btn = gr.Button("Genera Video")
        
        with gr.Column():
            status_output = gr.Textbox(label="Stato")
            video_output = gr.Video(label="Video Generato")
    
    generate_btn.click(
        fn=generate_video,
        inputs=[prompt_input],
        outputs=[status_output, video_output]
    )

# Avvia l'interfaccia
demo.launch()