update
Browse files
app.py
CHANGED
|
@@ -294,6 +294,49 @@ def load_image_model(model_name):
|
|
| 294 |
safety_checker=None
|
| 295 |
)
|
| 296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 297 |
# Configuración especial para LDM
|
| 298 |
elif "ldm-text2im" in model_name:
|
| 299 |
try:
|
|
@@ -684,24 +727,44 @@ def generate_image(prompt, model_name, negative_prompt="", seed=0, width=1024, h
|
|
| 684 |
# Cargar el modelo
|
| 685 |
pipe = load_image_model(model_name)
|
| 686 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 687 |
# Ajustar parámetros según el tipo de modelo
|
| 688 |
-
if "turbo" in model_name.lower():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 689 |
guidance_scale = min(guidance_scale, 1.0)
|
| 690 |
-
num_inference_steps = min(num_inference_steps, 4
|
|
|
|
|
|
|
|
|
|
|
|
|
| 691 |
print(f"⚡ Modelo turbo - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 692 |
elif "lightning" in model_name.lower():
|
| 693 |
guidance_scale = min(guidance_scale, 1.0)
|
| 694 |
-
num_inference_steps = max(num_inference_steps, 4
|
| 695 |
print(f"⚡ Modelo lightning - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 696 |
elif "flux" in model_name.lower():
|
| 697 |
guidance_scale = max(3.5, min(guidance_scale, 7.5))
|
| 698 |
-
num_inference_steps = max(
|
| 699 |
print(f"🔐 Modelo FLUX - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 700 |
elif "stable-diffusion-3.5-large" in model_name:
|
| 701 |
# SD 3.5 Large funciona mejor con guidance_scale entre 3.5-4.5 y 28 steps
|
| 702 |
guidance_scale = max(3.5, min(guidance_scale, 4.5))
|
| 703 |
-
num_inference_steps = max(
|
| 704 |
print(f"🌟 SD 3.5 Large - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 705 |
|
| 706 |
generator = torch.Generator(device=device).manual_seed(seed)
|
| 707 |
|
|
@@ -715,9 +778,6 @@ def generate_image(prompt, model_name, negative_prompt="", seed=0, width=1024, h
|
|
| 715 |
# Limpiar cache de GPU antes de la inferencia
|
| 716 |
torch.cuda.empty_cache()
|
| 717 |
|
| 718 |
-
# Generar la imagen
|
| 719 |
-
print("⚡ Generando imagen con H200...")
|
| 720 |
-
|
| 721 |
# Configurar parámetros de generación
|
| 722 |
generation_kwargs = {
|
| 723 |
"prompt": prompt,
|
|
@@ -728,9 +788,33 @@ def generate_image(prompt, model_name, negative_prompt="", seed=0, width=1024, h
|
|
| 728 |
"generator": generator
|
| 729 |
}
|
| 730 |
|
| 731 |
-
#
|
| 732 |
-
if
|
| 733 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 734 |
|
| 735 |
# Generar la imagen
|
| 736 |
result = pipe(**generation_kwargs)
|
|
|
|
| 294 |
safety_checker=None
|
| 295 |
)
|
| 296 |
|
| 297 |
+
# Configuración especial para SDXL Turbo (requiere parámetros específicos)
|
| 298 |
+
elif "sdxl-turbo" in model_name:
|
| 299 |
+
try:
|
| 300 |
+
print("⚡ Cargando SDXL Turbo con configuración específica...")
|
| 301 |
+
from diffusers import AutoPipelineForText2Image
|
| 302 |
+
pipe = AutoPipelineForText2Image.from_pretrained(
|
| 303 |
+
model_name,
|
| 304 |
+
torch_dtype=torch_dtype,
|
| 305 |
+
variant="fp16" if use_fp16_variant else None
|
| 306 |
+
)
|
| 307 |
+
print("✅ SDXL Turbo cargado exitosamente")
|
| 308 |
+
except Exception as e:
|
| 309 |
+
print(f"❌ Error cargando SDXL Turbo: {e}")
|
| 310 |
+
print(f"🔍 Tipo de error: {type(e).__name__}")
|
| 311 |
+
# Fallback a SD Turbo
|
| 312 |
+
print("🔄 Fallback a SD Turbo...")
|
| 313 |
+
pipe = StableDiffusionPipeline.from_pretrained(
|
| 314 |
+
"stabilityai/sd-turbo",
|
| 315 |
+
torch_dtype=torch_dtype,
|
| 316 |
+
safety_checker=None
|
| 317 |
+
)
|
| 318 |
+
|
| 319 |
+
# Configuración especial para SD Turbo
|
| 320 |
+
elif "sd-turbo" in model_name:
|
| 321 |
+
try:
|
| 322 |
+
print("⚡ Cargando SD Turbo...")
|
| 323 |
+
pipe = StableDiffusionPipeline.from_pretrained(
|
| 324 |
+
model_name,
|
| 325 |
+
torch_dtype=torch_dtype,
|
| 326 |
+
safety_checker=None,
|
| 327 |
+
requires_safety_checker=False,
|
| 328 |
+
variant="fp16" if use_fp16_variant else None
|
| 329 |
+
)
|
| 330 |
+
print("✅ SD Turbo cargado exitosamente")
|
| 331 |
+
except Exception as e:
|
| 332 |
+
print(f"❌ Error cargando SD Turbo: {e}")
|
| 333 |
+
# Fallback a SD 1.4
|
| 334 |
+
pipe = StableDiffusionPipeline.from_pretrained(
|
| 335 |
+
"CompVis/stable-diffusion-v1-4",
|
| 336 |
+
torch_dtype=torch_dtype,
|
| 337 |
+
safety_checker=None
|
| 338 |
+
)
|
| 339 |
+
|
| 340 |
# Configuración especial para LDM
|
| 341 |
elif "ldm-text2im" in model_name:
|
| 342 |
try:
|
|
|
|
| 727 |
# Cargar el modelo
|
| 728 |
pipe = load_image_model(model_name)
|
| 729 |
|
| 730 |
+
# Verificar que el modelo se cargó correctamente
|
| 731 |
+
if pipe is None:
|
| 732 |
+
print("❌ Error: El modelo no se pudo cargar")
|
| 733 |
+
raise Exception("Modelo no disponible")
|
| 734 |
+
|
| 735 |
+
print(f"✅ Modelo cargado correctamente: {type(pipe).__name__}")
|
| 736 |
+
|
| 737 |
# Ajustar parámetros según el tipo de modelo
|
| 738 |
+
if "sdxl-turbo" in model_name.lower():
|
| 739 |
+
# SDXL Turbo requiere parámetros específicos
|
| 740 |
+
guidance_scale = 0.0 # SDXL Turbo funciona mejor sin guidance
|
| 741 |
+
num_inference_steps = 1 # SDXL Turbo es muy rápido
|
| 742 |
+
print(f"⚡ SDXL Turbo - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 743 |
+
elif "sd-turbo" in model_name.lower():
|
| 744 |
guidance_scale = min(guidance_scale, 1.0)
|
| 745 |
+
num_inference_steps = min(num_inference_steps, 2) # Reducir de 4 a 2 para ahorrar cuota
|
| 746 |
+
print(f"⚡ SD Turbo - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 747 |
+
elif "turbo" in model_name.lower():
|
| 748 |
+
guidance_scale = min(guidance_scale, 1.0)
|
| 749 |
+
num_inference_steps = min(num_inference_steps, 2) # Reducir de 4 a 2 para ahorrar cuota
|
| 750 |
print(f"⚡ Modelo turbo - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 751 |
elif "lightning" in model_name.lower():
|
| 752 |
guidance_scale = min(guidance_scale, 1.0)
|
| 753 |
+
num_inference_steps = max(num_inference_steps, 2) # Reducir de 4 a 2
|
| 754 |
print(f"⚡ Modelo lightning - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 755 |
elif "flux" in model_name.lower():
|
| 756 |
guidance_scale = max(3.5, min(guidance_scale, 7.5))
|
| 757 |
+
num_inference_steps = max(10, num_inference_steps) # Reducir de 15 a 10
|
| 758 |
print(f"🔐 Modelo FLUX - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 759 |
elif "stable-diffusion-3.5-large" in model_name:
|
| 760 |
# SD 3.5 Large funciona mejor con guidance_scale entre 3.5-4.5 y 28 steps
|
| 761 |
guidance_scale = max(3.5, min(guidance_scale, 4.5))
|
| 762 |
+
num_inference_steps = max(20, num_inference_steps) # Reducir de 28 a 20
|
| 763 |
print(f"🌟 SD 3.5 Large - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 764 |
+
else:
|
| 765 |
+
# Para otros modelos, usar menos pasos por defecto
|
| 766 |
+
num_inference_steps = min(num_inference_steps, 15) # Reducir de 20 a 15
|
| 767 |
+
print(f"🎨 Modelo estándar - Ajustando parámetros: guidance={guidance_scale}, steps={num_inference_steps}")
|
| 768 |
|
| 769 |
generator = torch.Generator(device=device).manual_seed(seed)
|
| 770 |
|
|
|
|
| 778 |
# Limpiar cache de GPU antes de la inferencia
|
| 779 |
torch.cuda.empty_cache()
|
| 780 |
|
|
|
|
|
|
|
|
|
|
| 781 |
# Configurar parámetros de generación
|
| 782 |
generation_kwargs = {
|
| 783 |
"prompt": prompt,
|
|
|
|
| 788 |
"generator": generator
|
| 789 |
}
|
| 790 |
|
| 791 |
+
# Configuración específica para SDXL Turbo
|
| 792 |
+
if "sdxl-turbo" in model_name.lower():
|
| 793 |
+
# SDXL Turbo requiere configuración especial según documentación oficial
|
| 794 |
+
generation_kwargs = {
|
| 795 |
+
"prompt": prompt,
|
| 796 |
+
"height": height,
|
| 797 |
+
"width": width,
|
| 798 |
+
"guidance_scale": 0.0, # SDXL Turbo NO usa guidance
|
| 799 |
+
"num_inference_steps": 1, # SDXL Turbo es muy rápido
|
| 800 |
+
"generator": generator
|
| 801 |
+
}
|
| 802 |
+
# SDXL Turbo NO usa negative_prompt
|
| 803 |
+
print("⚡ Usando configuración específica para SDXL Turbo (sin negative_prompt)")
|
| 804 |
+
else:
|
| 805 |
+
# Configuración estándar para otros modelos
|
| 806 |
+
generation_kwargs = {
|
| 807 |
+
"prompt": prompt,
|
| 808 |
+
"height": height,
|
| 809 |
+
"width": width,
|
| 810 |
+
"guidance_scale": guidance_scale,
|
| 811 |
+
"num_inference_steps": num_inference_steps,
|
| 812 |
+
"generator": generator
|
| 813 |
+
}
|
| 814 |
+
|
| 815 |
+
# Agregar parámetros opcionales
|
| 816 |
+
if negative_prompt and negative_prompt.strip():
|
| 817 |
+
generation_kwargs["negative_prompt"] = negative_prompt.strip()
|
| 818 |
|
| 819 |
# Generar la imagen
|
| 820 |
result = pipe(**generation_kwargs)
|