Arreglado formato de salida de video para Gradio
Browse files
app.py
CHANGED
|
@@ -397,7 +397,7 @@ def load_image_model(model_name):
|
|
| 397 |
|
| 398 |
# Habilitar optimizaciones de memoria (más conservadoras)
|
| 399 |
if hasattr(pipe, 'enable_attention_slicing'):
|
| 400 |
-
|
| 401 |
print("✅ Attention slicing habilitado")
|
| 402 |
|
| 403 |
# Deshabilitar CPU offload temporalmente (causa problemas con ZeroGPU)
|
|
@@ -418,7 +418,7 @@ def load_image_model(model_name):
|
|
| 418 |
try:
|
| 419 |
pipe.enable_xformers_memory_efficient_attention()
|
| 420 |
print("✅ XFormers memory efficient attention habilitado")
|
| 421 |
-
|
| 422 |
print(f"⚠️ XFormers no disponible: {e}")
|
| 423 |
print("🔄 Usando atención estándar")
|
| 424 |
|
|
@@ -438,7 +438,7 @@ def load_image_model(model_name):
|
|
| 438 |
|
| 439 |
# Guardar en cache
|
| 440 |
model_cache[model_name] = pipe
|
| 441 |
-
|
| 442 |
except Exception as e:
|
| 443 |
print(f"❌ Error cargando modelo {model_name}: {e}")
|
| 444 |
print(f"🔍 Tipo de error: {type(e).__name__}")
|
|
@@ -446,8 +446,8 @@ def load_image_model(model_name):
|
|
| 446 |
# Intentar cargar sin variant fp16 si falló
|
| 447 |
if "variant" in str(e) and "fp16" in str(e):
|
| 448 |
print("🔄 Reintentando sin variant fp16...")
|
| 449 |
-
|
| 450 |
-
|
| 451 |
model_name,
|
| 452 |
torch_dtype=torch_dtype,
|
| 453 |
use_auth_token=HF_TOKEN if HF_TOKEN and ("flux" in model_name.lower() or "black-forest" in model_name.lower()) else None
|
|
@@ -777,7 +777,7 @@ def generate_image(
|
|
| 777 |
|
| 778 |
result = pipe(**generation_kwargs)
|
| 779 |
image = result.images[0]
|
| 780 |
-
|
| 781 |
print("✅ Imagen generada correctamente")
|
| 782 |
else:
|
| 783 |
print("❌ Error: Imagen vacía")
|
|
@@ -931,7 +931,7 @@ def generate_video(prompt, model_name, num_frames=16, num_inference_steps=20):
|
|
| 931 |
print(f"Forma no reconocida: {video_frames.shape}")
|
| 932 |
return None
|
| 933 |
else:
|
| 934 |
-
|
| 935 |
|
| 936 |
except Exception as e:
|
| 937 |
print(f"Error generando video: {str(e)}")
|
|
@@ -1369,7 +1369,7 @@ with gr.Blocks(title="Modelos Libres de IA", theme=gr.themes.Soft()) as demo:
|
|
| 1369 |
update_model_info,
|
| 1370 |
inputs=[image_model],
|
| 1371 |
outputs=[model_info]
|
| 1372 |
-
|
| 1373 |
|
| 1374 |
image_btn.click(
|
| 1375 |
generate_image,
|
|
@@ -1434,17 +1434,17 @@ with gr.Blocks(title="Modelos Libres de IA", theme=gr.themes.Soft()) as demo:
|
|
| 1434 |
)
|
| 1435 |
|
| 1436 |
# Agregar endpoint para generate_video_with_info dentro del contexto de Gradio
|
| 1437 |
-
|
| 1438 |
-
|
| 1439 |
-
|
| 1440 |
-
|
| 1441 |
-
|
| 1442 |
-
|
| 1443 |
-
|
| 1444 |
-
|
| 1445 |
-
|
| 1446 |
-
|
| 1447 |
-
|
| 1448 |
|
| 1449 |
# Configuración para Hugging Face Spaces
|
| 1450 |
if __name__ == "__main__":
|
|
|
|
| 397 |
|
| 398 |
# Habilitar optimizaciones de memoria (más conservadoras)
|
| 399 |
if hasattr(pipe, 'enable_attention_slicing'):
|
| 400 |
+
pipe.enable_attention_slicing()
|
| 401 |
print("✅ Attention slicing habilitado")
|
| 402 |
|
| 403 |
# Deshabilitar CPU offload temporalmente (causa problemas con ZeroGPU)
|
|
|
|
| 418 |
try:
|
| 419 |
pipe.enable_xformers_memory_efficient_attention()
|
| 420 |
print("✅ XFormers memory efficient attention habilitado")
|
| 421 |
+
except Exception as e:
|
| 422 |
print(f"⚠️ XFormers no disponible: {e}")
|
| 423 |
print("🔄 Usando atención estándar")
|
| 424 |
|
|
|
|
| 438 |
|
| 439 |
# Guardar en cache
|
| 440 |
model_cache[model_name] = pipe
|
| 441 |
+
|
| 442 |
except Exception as e:
|
| 443 |
print(f"❌ Error cargando modelo {model_name}: {e}")
|
| 444 |
print(f"🔍 Tipo de error: {type(e).__name__}")
|
|
|
|
| 446 |
# Intentar cargar sin variant fp16 si falló
|
| 447 |
if "variant" in str(e) and "fp16" in str(e):
|
| 448 |
print("🔄 Reintentando sin variant fp16...")
|
| 449 |
+
try:
|
| 450 |
+
pipe = StableDiffusionPipeline.from_pretrained(
|
| 451 |
model_name,
|
| 452 |
torch_dtype=torch_dtype,
|
| 453 |
use_auth_token=HF_TOKEN if HF_TOKEN and ("flux" in model_name.lower() or "black-forest" in model_name.lower()) else None
|
|
|
|
| 777 |
|
| 778 |
result = pipe(**generation_kwargs)
|
| 779 |
image = result.images[0]
|
| 780 |
+
else:
|
| 781 |
print("✅ Imagen generada correctamente")
|
| 782 |
else:
|
| 783 |
print("❌ Error: Imagen vacía")
|
|
|
|
| 931 |
print(f"Forma no reconocida: {video_frames.shape}")
|
| 932 |
return None
|
| 933 |
else:
|
| 934 |
+
return video_frames
|
| 935 |
|
| 936 |
except Exception as e:
|
| 937 |
print(f"Error generando video: {str(e)}")
|
|
|
|
| 1369 |
update_model_info,
|
| 1370 |
inputs=[image_model],
|
| 1371 |
outputs=[model_info]
|
| 1372 |
+
)
|
| 1373 |
|
| 1374 |
image_btn.click(
|
| 1375 |
generate_image,
|
|
|
|
| 1434 |
)
|
| 1435 |
|
| 1436 |
# Agregar endpoint para generate_video_with_info dentro del contexto de Gradio
|
| 1437 |
+
demo.load(
|
| 1438 |
+
generate_video_with_info,
|
| 1439 |
+
inputs=[
|
| 1440 |
+
gr.Textbox(label="Prompt", placeholder="Describe el video..."),
|
| 1441 |
+
gr.Dropdown(choices=list(MODELS["video"].keys()), label="Modelo"),
|
| 1442 |
+
gr.Dropdown(choices=["speed", "balanced", "quality"], value="balanced", label="Optimización"),
|
| 1443 |
+
gr.Image(label="Imagen de entrada (opcional)", type="pil")
|
| 1444 |
+
],
|
| 1445 |
+
outputs=gr.Video(label="Video Generado", format="mp4"),
|
| 1446 |
+
api_name="generate_video_with_info"
|
| 1447 |
+
)
|
| 1448 |
|
| 1449 |
# Configuración para Hugging Face Spaces
|
| 1450 |
if __name__ == "__main__":
|