AIStudioI2I / app.py
Mobil-DataLab's picture
Update app.py
991f305 verified
raw
history blame
2.75 kB
import torch
from controlnet_aux import CannyDetector
from diffusers import FluxControlPipeline
from diffusers.utils import load_image
import gradio as gr
import random
import os
# Instalar dependencias en Hugging Face Spaces
os.system("pip install -U diffusers controlnet_aux mediapipe")
# M谩ximo valor para seeds y tama帽o de imagen
MAX_SEED = 2**32 - 1
MAX_IMAGE_SIZE = 1024
# Inicializaci贸n del pipeline Flux Canny Dev
pipe = FluxControlPipeline.from_pretrained(
"black-forest-labs/FLUX.1-Canny-dev", torch_dtype=torch.float16
).to("cuda" if torch.cuda.is_available() else "cpu")
# Procesador Canny
processor = CannyDetector()
@spaces.GPU
def generate_image(image, prompt, seed, random_seed, low_thresh, high_thresh, guidance_scale, num_inference_steps):
# Controlar el seed para reproducibilidad
if random_seed:
seed = random.randint(0, MAX_SEED)
generator = torch.manual_seed(seed)
# Aplicar CannyDetector a la imagen de control
control_image = processor(
image, low_threshold=low_thresh, high_threshold=high_thresh,
detect_resolution=MAX_IMAGE_SIZE, image_resolution=MAX_IMAGE_SIZE
)
# Generar imagen con el modelo Flux
result = pipe(
prompt=prompt,
control_image=control_image,
guidance_scale=guidance_scale,
generator=generator
).images[0]
return result, seed
# Interfaz Gradio
with gr.Blocks() as demo:
gr.Markdown("# Generador de Im谩genes con FLUX.1 Canny 馃殌")
with gr.Row():
image_input = gr.Image(type="pil", label="Sube tu imagen de control")
result_image = gr.Image(label="Imagen Generada")
with gr.Row():
prompt = gr.Textbox(label="Prompt", placeholder="Describe la imagen que deseas generar...")
generate_button = gr.Button("Generar Imagen")
with gr.Accordion("Configuraci贸n Avanzada", open=False):
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
random_seed = gr.Checkbox(label="Randomizar Seed", value=True)
low_thresh = gr.Slider(label="Umbral Bajo Canny", minimum=0, maximum=255, step=1, value=50)
high_thresh = gr.Slider(label="Umbral Alto Canny", minimum=0, maximum=255, step=1, value=200)
guidance_scale = gr.Slider(label="Guidance Scale", minimum=1.0, maximum=30.0, step=0.1, value=7.5)
num_inference_steps = gr.Slider(label="Pasos de Inferencia", minimum=1, maximum=50, step=1, value=20)
generate_button.click(
generate_image,
inputs=[image_input, prompt, seed, random_seed, low_thresh, high_thresh, guidance_scale, num_inference_steps],
outputs=[result_image, seed]
)
if __name__ == "__main__":
demo.launch()