CosplayApp / app.py
appinitdev's picture
Update app.py
74aaf6b verified
Raw History Blame
2.03 kB
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()