Ntdeseb commited on
Commit
b400c3e
·
1 Parent(s): 34fc777

Corregir problemas de generación de video - Corregido nombre del modelo AnimateDiff-Lightning-v1.0, evitado múltiples ejecuciones simultáneas, arreglado procesamiento de video con forma (batch, frames, height, width, channels)

Browse files
Files changed (1) hide show
  1. app.py +52 -9
app.py CHANGED
@@ -122,7 +122,7 @@ MODELS = {
122
  },
123
  "video": {
124
  # ⚡ Modelos Rápidos (Optimizados para ZeroGPU)
125
- "ByteDance/AnimateDiff-Lightning": "⚡ AnimateDiff Lightning (Más rápido)",
126
  "cerspense/zeroscope_v2_576w": "⚡ Zeroscope v2 576w (Rápido)",
127
  "damo-vilab/text-to-video-ms-1.7b": "⚡ Text-to-Video MS 1.7B (Rápido)",
128
 
@@ -150,6 +150,9 @@ MODELS = {
150
  # Cache para los modelos
151
  model_cache = {}
152
 
 
 
 
153
  def load_text_model(model_name):
154
  """Cargar modelo de texto"""
155
  if model_name not in model_cache:
@@ -546,7 +549,7 @@ def load_video_model(model_name):
546
 
547
  # Modelos optimizados para velocidad
548
  fast_models = [
549
- "ByteDance/AnimateDiff-Lightning",
550
  "cerspense/zeroscope_v2_576w",
551
  "damo-vilab/text-to-video-ms-1.7b"
552
  ]
@@ -690,6 +693,15 @@ def load_video_model(model_name):
690
  @spaces.GPU(compute_unit="gpu.t4.micro", timeout=60) # Timeout de 60 segundos para video
691
  def generate_video(prompt, model_name, num_frames=16, num_inference_steps=20):
692
  """Generar video optimizado con ZeroGPU H200"""
 
 
 
 
 
 
 
 
 
693
  try:
694
  print(f"🎬 Iniciando generación de video...")
695
  print(f"📝 Modelo: {model_name}")
@@ -811,9 +823,35 @@ def generate_video(prompt, model_name, num_frames=16, num_inference_steps=20):
811
  return temp_path
812
 
813
  elif len(video_frames.shape) == 5: # (batch, frames, height, width, channels)
814
- # Tomar el primer batch
815
- frames = video_frames[0]
816
- return generate_video(prompt, model_name, optimized_frames, optimized_steps)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
817
  else:
818
  print(f"❌ Forma no reconocida: {video_frames.shape}")
819
  return None
@@ -844,6 +882,11 @@ def generate_video(prompt, model_name, num_frames=16, num_inference_steps=20):
844
  import traceback
845
  traceback.print_exc()
846
  raise Exception(f"Error generando video con {model_name}: {error_message}")
 
 
 
 
 
847
 
848
  def generate_text(prompt, model_name, max_length=100):
849
  """Generar texto con el modelo seleccionado"""
@@ -1447,7 +1490,7 @@ with gr.Blocks(title="Modelos Libres de IA", theme=gr.themes.Soft()) as demo:
1447
  with gr.Column():
1448
  video_model = gr.Dropdown(
1449
  choices=list(MODELS["video"].keys()),
1450
- value="ByteDance/AnimateDiff-Lightning", # Modelo más rápido por defecto
1451
  label="Modelo de Video",
1452
  info="⚡ Modelos marcados son más rápidos"
1453
  )
@@ -1483,8 +1526,8 @@ with gr.Blocks(title="Modelos Libres de IA", theme=gr.themes.Soft()) as demo:
1483
  with gr.Column():
1484
  # Información del modelo
1485
  video_model_info = gr.Markdown(
1486
- value="**Modelo:** ByteDance/AnimateDiff-Lightning\n\n"
1487
- "⚡ AnimateDiff Lightning • Frames recomendados: 8-16 • "
1488
  "Pasos recomendados: 10-20 • Velocidad: Muy rápida\n\n"
1489
  "**Estado:** ✅ Disponible • **Optimizado para ZeroGPU**"
1490
  )
@@ -1512,7 +1555,7 @@ with gr.Blocks(title="Modelos Libres de IA", theme=gr.themes.Soft()) as demo:
1512
  # Función para actualizar info del modelo de video
1513
  def update_video_model_info(model_name):
1514
  model_descriptions = {
1515
- "ByteDance/AnimateDiff-Lightning": "⚡ AnimateDiff Lightning • Frames recomendados: 8-16 • Pasos recomendados: 10-20 • Velocidad: Muy rápida",
1516
  "cerspense/zeroscope_v2_576w": "⚡ Zeroscope v2 576w • Frames recomendados: 8-16 • Pasos recomendados: 10-20 • Velocidad: Rápida",
1517
  "damo-vilab/text-to-video-ms-1.7b": "⚡ Text-to-Video MS 1.7B • Frames recomendados: 8-16 • Pasos recomendados: 10-20 • Velocidad: Rápida",
1518
  "cerspense/zeroscope_v2_XL": "🎬 Zeroscope v2 XL • Frames recomendados: 12-24 • Pasos recomendados: 20-30 • Velocidad: Media",
 
122
  },
123
  "video": {
124
  # ⚡ Modelos Rápidos (Optimizados para ZeroGPU)
125
+ "ByteDance/AnimateDiff-Lightning-v1.0": "⚡ AnimateDiff Lightning v1.0 (Más rápido)",
126
  "cerspense/zeroscope_v2_576w": "⚡ Zeroscope v2 576w (Rápido)",
127
  "damo-vilab/text-to-video-ms-1.7b": "⚡ Text-to-Video MS 1.7B (Rápido)",
128
 
 
150
  # Cache para los modelos
151
  model_cache = {}
152
 
153
+ # Variable para evitar múltiples ejecuciones simultáneas
154
+ video_generation_in_progress = False
155
+
156
  def load_text_model(model_name):
157
  """Cargar modelo de texto"""
158
  if model_name not in model_cache:
 
549
 
550
  # Modelos optimizados para velocidad
551
  fast_models = [
552
+ "ByteDance/AnimateDiff-Lightning-v1.0",
553
  "cerspense/zeroscope_v2_576w",
554
  "damo-vilab/text-to-video-ms-1.7b"
555
  ]
 
693
  @spaces.GPU(compute_unit="gpu.t4.micro", timeout=60) # Timeout de 60 segundos para video
694
  def generate_video(prompt, model_name, num_frames=16, num_inference_steps=20):
695
  """Generar video optimizado con ZeroGPU H200"""
696
+ global video_generation_in_progress
697
+
698
+ # Evitar múltiples ejecuciones simultáneas
699
+ if video_generation_in_progress:
700
+ print("⚠️ Ya hay una generación de video en progreso, esperando...")
701
+ return "⏳ Ya hay una generación de video en progreso. Espera a que termine."
702
+
703
+ video_generation_in_progress = True
704
+
705
  try:
706
  print(f"🎬 Iniciando generación de video...")
707
  print(f"📝 Modelo: {model_name}")
 
823
  return temp_path
824
 
825
  elif len(video_frames.shape) == 5: # (batch, frames, height, width, channels)
826
+ # Tomar el primer batch y procesar correctamente
827
+ print("🔄 Procesando video con forma (batch, frames, height, width, channels)")
828
+ frames = video_frames[0] # Tomar el primer batch
829
+
830
+ # Convertir frames a formato de video
831
+ frames_list = []
832
+ for i in range(frames.shape[0]):
833
+ frame = frames[i]
834
+ # Asegurar que el frame esté en el rango correcto (0-255)
835
+ if frame.dtype == np.float32 or frame.dtype == np.float16:
836
+ frame = (frame * 255).astype(np.uint8)
837
+ frames_list.append(frame)
838
+
839
+ # Crear video a partir de frames
840
+ import imageio
841
+ import tempfile
842
+ import os
843
+
844
+ # Crear archivo temporal
845
+ with tempfile.NamedTemporaryFile(suffix='.mp4', delete=False) as tmp_file:
846
+ temp_path = tmp_file.name
847
+
848
+ # Guardar frames como video con FPS optimizado
849
+ fps = 8 if is_fast_model else 6
850
+ imageio.mimsave(temp_path, frames_list, fps=fps)
851
+
852
+ print(f"💾 Video guardado en: {temp_path}")
853
+ print(f"🎬 FPS del video: {fps}")
854
+ return temp_path
855
  else:
856
  print(f"❌ Forma no reconocida: {video_frames.shape}")
857
  return None
 
882
  import traceback
883
  traceback.print_exc()
884
  raise Exception(f"Error generando video con {model_name}: {error_message}")
885
+
886
+ finally:
887
+ # Siempre liberar la bandera al finalizar
888
+ video_generation_in_progress = False
889
+ print("✅ Generación de video completada, liberando recursos")
890
 
891
  def generate_text(prompt, model_name, max_length=100):
892
  """Generar texto con el modelo seleccionado"""
 
1490
  with gr.Column():
1491
  video_model = gr.Dropdown(
1492
  choices=list(MODELS["video"].keys()),
1493
+ value="ByteDance/AnimateDiff-Lightning-v1.0", # Modelo más rápido por defecto
1494
  label="Modelo de Video",
1495
  info="⚡ Modelos marcados son más rápidos"
1496
  )
 
1526
  with gr.Column():
1527
  # Información del modelo
1528
  video_model_info = gr.Markdown(
1529
+ value="**Modelo:** ByteDance/AnimateDiff-Lightning-v1.0\n\n"
1530
+ "⚡ AnimateDiff Lightning v1.0 • Frames recomendados: 8-16 • "
1531
  "Pasos recomendados: 10-20 • Velocidad: Muy rápida\n\n"
1532
  "**Estado:** ✅ Disponible • **Optimizado para ZeroGPU**"
1533
  )
 
1555
  # Función para actualizar info del modelo de video
1556
  def update_video_model_info(model_name):
1557
  model_descriptions = {
1558
+ "ByteDance/AnimateDiff-Lightning-v1.0": "⚡ AnimateDiff Lightning v1.0 • Frames recomendados: 8-16 • Pasos recomendados: 10-20 • Velocidad: Muy rápida",
1559
  "cerspense/zeroscope_v2_576w": "⚡ Zeroscope v2 576w • Frames recomendados: 8-16 • Pasos recomendados: 10-20 • Velocidad: Rápida",
1560
  "damo-vilab/text-to-video-ms-1.7b": "⚡ Text-to-Video MS 1.7B • Frames recomendados: 8-16 • Pasos recomendados: 10-20 • Velocidad: Rápida",
1561
  "cerspense/zeroscope_v2_XL": "🎬 Zeroscope v2 XL • Frames recomendados: 12-24 • Pasos recomendados: 20-30 • Velocidad: Media",