psurmreqmer commited on
Commit
86def46
·
1 Parent(s): 69f9f13
Files changed (2) hide show
  1. README.md +1 -1
  2. app6.py +118 -0
README.md CHANGED
@@ -5,7 +5,7 @@ colorFrom: gray
5
  colorTo: indigo
6
  sdk: gradio
7
  sdk_version: 6.0.2
8
- app_file: app3.py
9
  pinned: false
10
  ---
11
 
 
5
  colorTo: indigo
6
  sdk: gradio
7
  sdk_version: 6.0.2
8
+ app_file: app6.py
9
  pinned: false
10
  ---
11
 
app6.py CHANGED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import torch
3
+ from diffusers import DiffusionPipeline
4
+ from PIL import Image
5
+
6
+ # --- Configuración del Modelo ---
7
+ # Usa la GPU si está disponible, sino la CPU (SDXL será muy lento en CPU)
8
+ device = "cuda" if torch.cuda.is_available() else "cpu"
9
+ dtype_config = torch.bfloat16 if device == "cuda" else torch.float32 # bfloat16 solo para GPU modernas
10
+
11
+ # Modelo Stable Diffusion XL Refiner para transformaciones de alta calidad
12
+ model_id = "stabilityai/stable-diffusion-xl-refiner-1.0"
13
+
14
+ try:
15
+ # Usamos DiffusionPipeline para Image-to-Image (i2i)
16
+ pipe = DiffusionPipeline.from_pretrained(
17
+ model_id,
18
+ torch_dtype=dtype_config,
19
+ use_safetensors=True
20
+ ).to(device)
21
+ print(f"Modelo SDXL Refiner cargado en: {device.upper()}")
22
+ except Exception as e:
23
+ print(f"Error al cargar el modelo SDXL: {e}")
24
+ pipe = None
25
+
26
+
27
+ # --- Función de Procesamiento con Difusión (i2i) ---
28
+ def procesar_con_sdxl(imagen_entrada, prompt_base, estilo_radial, strength_slider):
29
+ """
30
+ Aplica transformación i2i guiada por el prompt y el estilo radial seleccionado.
31
+ """
32
+ if pipe is None or imagen_entrada is None:
33
+ return Image.new('RGB', (512, 512), color = 'red')
34
+
35
+ # 1. Definir el prompt según el estilo radial seleccionado
36
+ estilo_prompts = {
37
+ "Blanco y Negro (Monocromático)": ", en alto contraste, blanco y negro, monocromático, dramático",
38
+ "Alto Contraste y Saturación": ", colores vívidos, alto contraste, HDR, saturación extrema",
39
+ "Original (Poco Ruido)": ", fotografía de alta calidad, realista, colores naturales",
40
+ }
41
+
42
+ # Combinar el prompt base del usuario con el estilo
43
+ full_prompt = prompt_base + estilo_prompts.get(estilo_radial, "")
44
+
45
+ # 2. Preprocesar la imagen (SDXL funciona bien con resoluciones más grandes)
46
+ # Redimensionamos a 1024x1024, que es la resolución nativa de SDXL, para mejores resultados
47
+ init_image = imagen_entrada.convert("RGB").resize((1024, 1024))
48
+
49
+ try:
50
+ # 3. Ejecutar el pipeline de difusión i2i
51
+ image = pipe(
52
+ prompt=full_prompt,
53
+ image=init_image,
54
+ strength=strength_slider, # Fuerza de la modificación
55
+ guidance_scale=7.5 # Qué tan estricto debe ser el modelo con el prompt
56
+ ).images[0]
57
+
58
+ return image
59
+ except Exception as e:
60
+ print(f"Error durante la difusión: {e}")
61
+ return Image.new('RGB', (1024, 1024), color = 'red')
62
+
63
+
64
+ # --- Interfaz Gradio con gr.Blocks() ---
65
+ with gr.Blocks(title="SDXL Refiner con Controles Radiales") as demo:
66
+ gr.Markdown(
67
+ """
68
+ # 🌟 Tarea con SDXL Refiner (Image-to-Image)
69
+ Carga una imagen, define un **Prompt** y selecciona un **Estilo Radial** para que el modelo de difusión la transforme.
70
+ """
71
+ )
72
+ with gr.Row():
73
+ # Lado izquierdo: Inputs y Controles
74
+ with gr.Column(scale=1):
75
+ image_input = gr.Image(
76
+ type="pil",
77
+ label="1. Cargar Imagen Inicial",
78
+ )
79
+
80
+ prompt_input = gr.Textbox(
81
+ label="2. Prompt Base (ej. Un gato mirando por la ventana)",
82
+ value="Una foto de un gato mirando por la ventana"
83
+ )
84
+
85
+ # --- Control Radial (Radio Buttons) ---
86
+ estilo_radial = gr.Radio(
87
+ ["Original (Poco Ruido)", "Blanco y Negro (Monocromático)", "Alto Contraste y Saturación"],
88
+ label="3. Selecciona el Estilo de Transformación",
89
+ value="Original (Poco Ruido)"
90
+ )
91
+ # -----------------------------------
92
+
93
+ strength_slider = gr.Slider(
94
+ minimum=0.1,
95
+ maximum=1.0,
96
+ value=0.6,
97
+ step=0.05,
98
+ label="4. Fuerza de Difusión (Strength): 0.1=sutil, 1.0=cambio total"
99
+ )
100
+
101
+ process_button = gr.Button("✨ Aplicar Difusión SDXL", variant="primary")
102
+
103
+ # Lado derecho: Output
104
+ with gr.Column(scale=1):
105
+ image_output = gr.Image(
106
+ type="pil",
107
+ label="Imagen Transformada por SDXL",
108
+ height=512 # Mostramos a 512, aunque la generación sea a 1024
109
+ )
110
+
111
+ # Conexión de la acción
112
+ process_button.click(
113
+ fn=procesar_con_sdxl,
114
+ inputs=[image_input, prompt_input, estilo_radial, strength_slider],
115
+ outputs=image_output
116
+ )
117
+
118
+ demo.launch(inbrowser=True)