claudiobxdai commited on
Commit
65b3767
·
verified ·
1 Parent(s): 574141e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -103
app.py CHANGED
@@ -1,56 +1,32 @@
1
- import gradio as gr
2
  import os
3
- import sys
4
- import tempfile
5
- import uuid
6
- import torch
7
  import subprocess
8
- from pathlib import Path
9
-
10
- if not os.path.exists("Open-Sora"):
11
- print("Esecuzione setup iniziale...")
12
- subprocess.run(["bash", "setup.sh"], check=True)
13
- print("Setup completato!")
14
 
15
- # Verifica la disponibilità della GPU
16
- print("CUDA disponibile:", torch.cuda.is_available())
17
  if torch.cuda.is_available():
18
- print("Dispositivo CUDA:", torch.cuda.get_device_name(0))
19
- print("Memoria GPU totale:", torch.cuda.get_device_properties(0).total_memory / 1e9, "GB")
20
-
21
- # Scarica i modelli se necessario
22
- model_dir = Path("./ckpts")
23
- if not model_dir.exists():
24
- print("Scaricamento del modello Open-Sora...")
25
- os.system("mkdir -p ./ckpts")
26
- os.system("huggingface-cli download hpcai-tech/Open-Sora-v2 --local-dir ./ckpts")
27
- print("Modello scaricato!")
28
- else:
29
- print("Modello già presente nella directory ckpts")
30
 
31
- # Directory per i video generati
32
- outputs_dir = Path("./outputs")
33
- outputs_dir.mkdir(exist_ok=True)
 
 
 
 
 
34
 
35
- def generate_video(prompt, motion_score=4, aspect_ratio="1:1", num_frames=33):
36
- """
37
- Genera un video usando Open-Sora in base al prompt fornito.
38
-
39
- Args:
40
- prompt: Il testo descrittivo per la generazione
41
- motion_score: Intensità del movimento (1-7)
42
- aspect_ratio: Proporzioni del video (1:1, 16:9, 9:16, 2.39:1)
43
- num_frames: Numero di frame (deve essere 4k+1 e <129)
44
-
45
- Returns:
46
- Tupla (stato, percorso_video)
47
- """
48
  try:
49
- # Crea un ID unico per il file di output
50
- output_id = str(uuid.uuid4())
51
- output_path = outputs_dir / f"{output_id}.mp4"
52
 
53
- # Crea il comando seguendo la guida ufficiale
54
  cmd = [
55
  "torchrun",
56
  "--nproc_per_node", "1",
@@ -58,39 +34,33 @@ def generate_video(prompt, motion_score=4, aspect_ratio="1:1", num_frames=33):
58
  "scripts/diffusion/inference.py",
59
  "configs/diffusion/inference/256px.py",
60
  "--prompt", prompt,
61
- "--motion-score", str(motion_score),
62
- "--aspect_ratio", aspect_ratio,
63
- "--num_frames", str(num_frames),
64
- "--save-dir", str(outputs_dir)
65
  ]
66
 
67
  print(f"Esecuzione comando: {' '.join(cmd)}")
68
 
69
- # Esegui il comando e cattura l'output
70
- process = subprocess.Popen(
71
  cmd,
72
- stdout=subprocess.PIPE,
73
- stderr=subprocess.PIPE,
74
- cwd="Open-Sora" # Imposta la directory di lavoro
 
75
  )
76
 
77
- stdout, stderr = process.communicate()
78
- print("STDOUT:", stdout.decode())
79
-
80
  if process.returncode != 0:
81
- print("STDERR:", stderr.decode())
82
- return f"Errore: {stderr.decode()}", None
 
 
 
 
 
83
 
84
- # Trova il video generato più recente se il file specifico non è trovato
85
- if not output_path.exists():
86
- video_files = list(outputs_dir.glob("*.mp4"))
87
- if video_files:
88
- # Ordina per data di creazione e prendi il più recente
89
- output_path = sorted(video_files, key=lambda f: f.stat().st_mtime, reverse=True)[0]
90
- else:
91
- return "Errore: Nessun video generato trovato", None
92
 
93
- return "Generazione completata", str(output_path)
94
 
95
  except Exception as e:
96
  print(f"Eccezione: {str(e)}")
@@ -106,49 +76,15 @@ with gr.Blocks() as demo:
106
  label="Descrivi il video che vuoi generare",
107
  placeholder="Es. Un panda che mangia bambù in una foresta, stile cinematografico"
108
  )
109
-
110
- with gr.Row():
111
- motion_score = gr.Slider(
112
- minimum=1,
113
- maximum=7,
114
- value=4,
115
- step=1,
116
- label="Intensità movimento (1-7)"
117
- )
118
-
119
- aspect_ratio = gr.Dropdown(
120
- choices=["1:1", "16:9", "9:16", "2.39:1"],
121
- value="1:1",
122
- label="Proporzioni"
123
- )
124
-
125
- num_frames = gr.Slider(
126
- minimum=5,
127
- maximum=125,
128
- value=33,
129
- step=4,
130
- label="Numero di frame (4k+1)"
131
- )
132
-
133
  generate_btn = gr.Button("Genera Video")
134
 
135
  with gr.Column():
136
  status_output = gr.Textbox(label="Stato")
137
  video_output = gr.Video(label="Video Generato")
138
 
139
- # Esempi di prompt
140
- gr.Examples(
141
- examples=[
142
- ["Un gatto che gioca con un gomitolo di lana, stile cinematografico", 4, "1:1", 33],
143
- ["Cascata in una foresta pluviale, raggi di sole, alta qualità", 3, "16:9", 33],
144
- ["Astronave che viaggia attraverso un campo di asteroidi, stile 3D", 5, "16:9", 33],
145
- ],
146
- inputs=[prompt_input, motion_score, aspect_ratio, num_frames],
147
- )
148
-
149
  generate_btn.click(
150
  fn=generate_video,
151
- inputs=[prompt_input, motion_score, aspect_ratio, num_frames],
152
  outputs=[status_output, video_output]
153
  )
154
 
 
 
1
  import os
 
 
 
 
2
  import subprocess
3
+ import gradio as gr
4
+ import torch
5
+ import sys
 
 
 
6
 
7
+ # Verifica la versione di CUDA
8
+ print(f"CUDA disponibile: {torch.cuda.is_available()}")
9
  if torch.cuda.is_available():
10
+ print(f"CUDA versione: {torch.version.cuda}")
11
+ print(f"Dispositivo: {torch.cuda.get_device_name(0)}")
 
 
 
 
 
 
 
 
 
 
12
 
13
+ # Esegui lo script di setup se necessario
14
+ if not os.path.exists("Open-Sora"):
15
+ print("Esecuzione setup iniziale...")
16
+ try:
17
+ subprocess.run(["bash", "setup.sh"], check=True)
18
+ except subprocess.CalledProcessError as e:
19
+ print(f"Errore durante l'esecuzione di setup.sh: {e}")
20
+ print("Continuando comunque...")
21
 
22
+ # Implementazione dell'inferenza seguendo la guida
23
+ def generate_video(prompt):
 
 
 
 
 
 
 
 
 
 
 
24
  try:
25
+ # Directory per i video generati
26
+ if not os.path.exists("outputs"):
27
+ os.makedirs("outputs")
28
 
29
+ # Comando esattamente come nella guida
30
  cmd = [
31
  "torchrun",
32
  "--nproc_per_node", "1",
 
34
  "scripts/diffusion/inference.py",
35
  "configs/diffusion/inference/256px.py",
36
  "--prompt", prompt,
37
+ "--save-dir", "outputs"
 
 
 
38
  ]
39
 
40
  print(f"Esecuzione comando: {' '.join(cmd)}")
41
 
42
+ # Esegui il comando nella directory di Open-Sora
43
+ process = subprocess.run(
44
  cmd,
45
+ cwd="Open-Sora",
46
+ capture_output=True,
47
+ text=True,
48
+ check=False
49
  )
50
 
 
 
 
51
  if process.returncode != 0:
52
+ print(f"Errore: {process.stderr}")
53
+ return "Errore durante la generazione", None
54
+
55
+ # Cerca il video generato più recente
56
+ video_files = [f for f in os.listdir("outputs") if f.endswith(".mp4")]
57
+ if not video_files:
58
+ return "Nessun video generato trovato", None
59
 
60
+ # Ordina per data di creazione e prendi il più recente
61
+ video_path = os.path.join("outputs", sorted(video_files, key=lambda x: os.path.getmtime(os.path.join("outputs", x)), reverse=True)[0])
 
 
 
 
 
 
62
 
63
+ return "Generazione completata", video_path
64
 
65
  except Exception as e:
66
  print(f"Eccezione: {str(e)}")
 
76
  label="Descrivi il video che vuoi generare",
77
  placeholder="Es. Un panda che mangia bambù in una foresta, stile cinematografico"
78
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  generate_btn = gr.Button("Genera Video")
80
 
81
  with gr.Column():
82
  status_output = gr.Textbox(label="Stato")
83
  video_output = gr.Video(label="Video Generato")
84
 
 
 
 
 
 
 
 
 
 
 
85
  generate_btn.click(
86
  fn=generate_video,
87
+ inputs=[prompt_input],
88
  outputs=[status_output, video_output]
89
  )
90