File size: 2,025 Bytes
ae3c086
1a527b6
 
 
 
 
80f1cf3
1a527b6
 
 
 
 
 
 
80f1cf3
1a527b6
 
 
80f1cf3
1a527b6
80f1cf3
1a527b6
 
80f1cf3
 
1a527b6
 
80f1cf3
1a527b6
 
80f1cf3
 
1a527b6
80f1cf3
1a527b6
 
 
80f1cf3
 
 
ae3c086
1a527b6
 
 
80f1cf3
1a527b6
 
 
 
80f1cf3
 
 
1a527b6
 
80f1cf3
 
1a527b6
ae3c086
 
74aaf6b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import torch
import spaces
import gradio as gr
from diffusers import FluxImg2ImgPipeline
from PIL import Image

# 1. Carga del modelo optimizado en memoria
model_id = "black-forest-labs/FLUX.1-schnell"
print("Cargando pipeline en GPU...")
pipe = FluxImg2ImgPipeline.from_pretrained(
    model_id, 
    torch_dtype=torch.bfloat16
).to("cuda")

# 2. Carga del LoRA de Cosplay
print("Inyectando LoRA...")
pipe.load_lora_weights("joyfox/Kontext-Cosplay-Lora", weight_name="kontext_cosplay_lora_20000.safetensors")

# 3. Funci贸n de generaci贸n corregida
@spaces.GPU
def generate_cosplay(image, prompt, strength, steps):
    if image is None:
        return None
        
    # Redimensionamos para mantener estabilidad en FLUX
    image = image.convert("RGB").resize((1024, 1024))
    
    # Trigger indispensable del LoRA
    full_prompt = f"{prompt}, r2cos"
    
    # Eliminamos la semilla fija estricta para permitir variedad por intento,
    # pero puedes volver a usar un generador si deseas replicabilidad exacta.
    
    # Ejecuci贸n con los nuevos par谩metros din谩micos
    result = pipe(
        prompt=full_prompt,
        image=image,
        strength=strength,          # Control din谩mico desde la UI
        num_inference_steps=steps,  # Elevado para dar tiempo al LoRA
        guidance_scale=0.0
    ).images[0]
    
    return result

# 4. Interfaz de Gradio interactiva
demo = gr.Interface(
    fn=generate_cosplay, 
    inputs=[
        gr.Image(type="pil", label="Foto de Referencia"), 
        gr.Textbox(label="Descripci贸n del personaje (Ej: Naruto, Cyberpunk, Samurai)"),
        gr.Slider(minimum=0.1, maximum=1.0, value=0.7, step=0.05, label="Fuerza de Transformaci贸n (Strength)"),
        gr.Slider(minimum=10, maximum=30, value=16, step=1, label="Pasos de Inferencia Totales (Steps)")
    ], 
    outputs=gr.Image(label="Resultado Cosplay"),
    title="Kontext-Cosplay AI Pro",
    description="Ajusta los deslizadores si la imagen cambia muy poco."
)

if __name__ == "__main__":
    demo.launch()