Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0
Shakker-Labs
Texto a imagen
Modelo ControlNet unificado para FLUX.1-dev, entrenado desde cero por Shakker Labs para generación de imágenes condicionada con múltiples modos de control. Esta versión elimina la incrustación de modo para reducir tamaño, mejora especialmente el control de canny y pose, añade soporte para soft edge y elimina soporte para tile.
Como usar
Carga el modelo como ControlNet para black-forest-labs/FLUX.1-dev usando Diffusers. Ejemplo de inferencia con una sola condición:
import torch
from diffusers.utils import load_image
from diffusers import FluxControlNetPipeline, FluxControlNetModel
base_model = 'black-forest-labs/FLUX.1-dev'
controlnet_model_union = 'Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0'
controlnet = FluxControlNetModel.from_pretrained(controlnet_model_union, torch_dtype=torch.bfloat16)
pipe = FluxControlNetPipeline.from_pretrained(base_model, controlnet=controlnet, torch_dtype=torch.bfloat16)
pipe.to("cuda")
control_image = load_image("./conds/canny.png")
width, height = control_image.size
prompt = "A young girl stands gracefully at the edge of a serene beach..."
image = pipe(
prompt,
control_image=control_image,
width=width,
height=height,
controlnet_conditioning_scale=0.7,
control_guidance_end=0.8,
num_inference_steps=30,
guidance_scale=3.5,
generator=torch.Generator(device="cuda").manual_seed(42),
).images[0]
Ejemplo de inferencia con múltiples condiciones:
import torch
from diffusers.utils import load_image
from pipeline_flux_controlnet import FluxControlNetPipeline
from controlnet_flux import FluxControlNetModel
base_model = 'black-forest-labs/FLUX.1-dev'
controlnet_model_union = 'Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0'
controlnet = FluxControlNetModel.from_pretrained(controlnet_model_union, torch_dtype=torch.bfloat16)
pipe = FluxControlNetPipeline.from_pretrained(base_model, controlnet=[controlnet], torch_dtype=torch.bfloat16)
pipe.to("cuda")
control_image = load_image("./conds/canny.png")
width, height = control_image.size
prompt = "A young girl stands gracefully at the edge of a serene beach..."
image = pipe(
prompt,
control_image=[control_image, control_image],
width=width,
height=height,
controlnet_conditioning_scale=[0.35, 0.35],
control_guidance_end=[0.8, 0.8],
num_inference_steps=30,
guidance_scale=3.5,
generator=torch.Generator(device="cuda").manual_seed(42),
).images[0]
Parámetros recomendados específicos por modo:
- Canny:
controlnet_conditioning_scale=0.7, control_guidance_end=0.8
- Soft Edge:
controlnet_conditioning_scale=0.7, control_guidance_end=0.8
- Depth:
controlnet_conditioning_scale=0.8, control_guidance_end=0.8
- Pose:
controlnet_conditioning_scale=0.9, control_guidance_end=0.65
- Gray:
controlnet_conditioning_scale=0.9, control_guidance_end=0.8
Se recomienda usar prompts detallados para mejorar estabilidad y, en algunos casos, múltiples condiciones para un control más robusto.
Funcionalidades
- Compatible con múltiples modos de control: canny, soft edge, depth, pose y gray
- Puede usarse como un ControlNet normal o en combinación con otros ControlNet
- Arquitectura con 6 double blocks y 0 single block
- Entrenado durante 300k pasos con 20 millones de imágenes generales y humanas de alta calidad
- Entrenamiento a 512x512 en BFloat16 con batch size 128 y learning rate 2e-5
- Mejoras de control y estética frente a la versión Union Pro anterior, especialmente en canny y pose
- Soporta inferencia con una o varias condiciones de control
Casos de uso
- Generación de imágenes a partir de texto con control estructural mediante bordes canny
- Composición de escenas guiadas por mapas de profundidad
- Posado controlado de figuras humanas mediante estimación de pose
- Generación condicionada por soft edges para conservar contornos suaves
- Flujos de trabajo avanzados con varias condiciones simultáneas, como canny + depth o pose + depth