appinitdev commited on
Commit
af69f02
verified
1 Parent(s): 25385cb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -31
app.py CHANGED
@@ -1,50 +1,61 @@
1
- import gradio as gr
2
  import torch
 
3
  from PIL import Image
4
- from diffusers import StableDiffusionXLImg2ImgPipeline
5
  import spaces
6
 
7
- # Usaremos un modelo que el sistema ya tiene en cach茅 o que descarga de forma ligera
8
- MODEL_ID = "stabilityai/stable-diffusion-xl-base-1.0"
 
 
9
 
10
- # Esta configuraci贸n es mucho m谩s amigable para el servidor gratuito
11
- pipe = StableDiffusionXLImg2ImgPipeline.from_pretrained(
12
- MODEL_ID,
13
- torch_dtype=torch.float16,
14
  use_safetensors=True
15
  )
16
 
17
- # Cargamos el inyector de estilo (IP-Adapter)
18
- pipe.load_ip_adapter("h94/IP-Adapter", subfolder="sdxl_models", weight_name="ip-adapter_sdxl.safetensors")
 
 
19
 
20
  @spaces.GPU
21
- def generate_cosplay(base_image, reference_image, prompt):
22
- # Movemos el pipeline a la GPU solo cuando se presiona el bot贸n
23
  pipe.to("cuda")
24
- pipe.set_ip_adapter_scale(0.7)
25
 
26
- # Procesamiento
27
- image = pipe(
 
 
 
 
 
 
 
28
  prompt=prompt,
29
- image=base_image.resize((1024, 1024)),
30
- ip_adapter_image=reference_image.resize((1024, 1024)),
31
- strength=0.7,
32
- num_inference_steps=20
33
- ).images[0]
 
34
 
35
- # Liberamos la GPU inmediatamente despu茅s
36
- pipe.to("cpu")
37
- return image
38
 
39
- # Interfaz simplificada para evitar errores de memoria
40
  with gr.Blocks() as demo:
41
  with gr.Row():
42
- base_img = gr.Image(label="Persona (Foto 1)", type="pil")
43
- ref_img = gr.Image(label="Ropa (Foto 2)", type="pil")
44
- prompt = gr.Textbox(value="masterpiece, realistic photo, person wearing the outfit from reference", label="Prompt")
45
- btn = gr.Button("Generar Resultado")
46
- result = gr.Image()
47
 
48
- btn.click(generate_cosplay, inputs=[base_img, ref_img, prompt], outputs=result)
 
 
 
 
49
 
50
- demo.launch()
 
 
1
  import torch
2
+ import gradio as gr
3
  from PIL import Image
4
+ from diffusers import QwenImageEditPlusPipeline, FlowMatchEulerDiscreteScheduler
5
  import spaces
6
 
7
+ # Configuraci贸n
8
+ BASE_MODEL = "prithivMLmods/Qwen-Image-Edit-AIO-FP8"
9
+ LORA_COSPLAY = "joyfox/Qwen-Image-Edit-Cosplay"
10
+ LORA_LIGHTNING = "lightx2v/Qwen-Image-Lightning"
11
 
12
+ # Inicializaci贸n b谩sica del modelo
13
+ pipe = QwenImageEditPlusPipeline.from_pretrained(
14
+ BASE_MODEL,
15
+ torch_dtype=torch.float16, # Usamos float16 para ahorrar VRAM
16
  use_safetensors=True
17
  )
18
 
19
+ # Cargamos los adaptadores de una vez al inicio
20
+ pipe.load_lora_weights(LORA_COSPLAY, adapter_name="cosplay")
21
+ pipe.load_lora_weights(LORA_LIGHTNING, weight_name="Qwen-Image-Lightning-8steps-V1.0.safetensors", adapter_name="lightning")
22
+ pipe.set_adapters(["cosplay", "lightning"], adapter_weights=[0.85, 1.0])
23
 
24
  @spaces.GPU
25
+ def process_cosplay_edit(base_image, reference_image, prompt, steps, cfg, seed):
26
+ # Movemos el modelo a la GPU activamente al iniciar la generaci贸n
27
  pipe.to("cuda")
 
28
 
29
+ # Redimensionamiento (m煤ltiplos de 8)
30
+ width, height = 1024, 1024
31
+ base_resized = base_image.resize((width, height), Image.Resampling.LANCZOS)
32
+ ref_resized = reference_image.resize((width, height), Image.Resampling.LANCZOS)
33
+
34
+ generator = torch.Generator("cuda").manual_seed(int(seed))
35
+
36
+ output = pipe(
37
+ image=[base_resized, ref_resized],
38
  prompt=prompt,
39
+ width=width,
40
+ height=height,
41
+ num_inference_steps=int(steps),
42
+ true_cfg_scale=float(cfg),
43
+ generator=generator
44
+ )
45
 
46
+ # Al finalizar la funci贸n, el modelo se retira de la GPU autom谩ticamente por ZeroGPU
47
+ return output.images[0]
 
48
 
49
+ # Interfaz
50
  with gr.Blocks() as demo:
51
  with gr.Row():
52
+ base_input = gr.Image(label="Persona Real", type="pil")
53
+ ref_input = gr.Image(label="Referencia Anime", type="pil")
 
 
 
54
 
55
+ prompt_input = gr.Textbox(label="Prompt", value="high quality, cosplay style transfer")
56
+ generate_btn = gr.Button("Generar", variant="primary")
57
+ output_display = gr.Image(label="Resultado")
58
+
59
+ generate_btn.click(process_cosplay_edit, inputs=[base_input, ref_input, prompt_input, gr.Slider(4, 12, 8), gr.Slider(1, 5, 1.5), gr.Number(1337)], outputs=output_display)
60
 
61
+ demo.queue().launch()