Qwen-Image 2.1 Fun ControlNet Union: 8 controles en un solo archivo

ComfyUI Wikinews

El ControlNet Union de Alibaba PAI para Qwen-Image 2.1 reúne ocho controles estructurales y relleno inteligente en una sola rama de 7,5 GB, con el soporte de ComfyUI en camino.

Qwen-Image-2.1-Fun-Controlnet-Union (Hugging Face | VideoX-Fun | ComfyUI PR #16519) es la rama ControlNet-Union de Alibaba PAI para Qwen-Image 2.1. Un único checkpoint de 7,5 GB controla ocho condiciones de control estructural más el relleno inteligente, y se carga sobre el transformer base congelado en lugar de reemplazarlo.

Qwen-Image 2.1 llegó el 20 de septiembre de 2026 como un DiT de flujo único de 7B que genera y edita con los mismos pesos y escribe alfa RGBA real. La rama ControlNet-Union sigue el mismo camino que Alibaba PAI tomó para MiniMax H3: un único checkpoint de control que cubre todas las condiciones, por lo que no hace falta cambiar de pesos según la condición.

Una rama, ocho condiciones

El archivo publicado contiene solo la rama de control (control_img_in más 16 control_blocks, alrededor de 7,0 GB según la model card, 7,55 GB en disco). Se carga con strict=False sobre el transformer base de Qwen-Image 2.1, que permanece congelado, por lo que los pesos base se reutilizan exactamente tal cual.

Condiciones de controlCanny, Profundidad, Escala de grises, HED, Arte lineal, MLSD, Pose, Garabato
Profundidad de la rama de control16 bloques, un skip cada dos de los 32 bloques del transformer (control_layers = [0, 2, 4, ..., 30])
Ancho de entrada de controlcontrol_in_dim = 129: latents de control (64) + máscara (1) + latents de imagen enmascarada (64)
Inyecciónbefore_proj / after_proj con compuerta cero en cada bloque de control, añadidos de vuelta a la rama principal
MuestreoDestilado con CFG, los scripts de ejemplo se ejecutan con guidance_scale = 1.0 (una pasada hacia adelante por paso)
Codificador de texto / VAEProcesador Qwen3-VL para el prompt y la imagen de condición, el VAE decodifica RGBA, por lo que las previsualizaciones se guardan como PNG

control_context_scale escala cada skip de control antes de añadirse a la rama principal: 1.0 es el ajuste más fuerte usado en todos los resultados publicados, los valores más bajos debilitan la orientación y 0.0 desactiva la rama de control.

Condiciones de control

CondiciónSeñal de control
CannyMapa de bordes Canny
ProfundidadMapa de profundidad monocular
Escala de grisesImagen de escala de grises (luminancia)
HEDMapa de detección de bordes HED
Arte linealExtracción de arte lineal
MLSDMapa de detección de segmentos de línea
PoseEsqueleto DWPose
GarabatoLíneas a mano alzada o bocetos

Sirve cualquier imagen de control RGB normal en el lienzo objetivo: la model card señala que tolera diferentes grosores de línea, umbrales y recortes. Todas las muestras a continuación provienen de la model card con 40 pasos de inferencia, control_context_scale = 1.0 y semilla 43, con la señal de control a la izquierda y la generación a la derecha.

Canny controlCanny result
Mapa de bordes CannySalida generada
Depth controlDepth result
Mapa de profundidadSalida generada
Grayscale controlGrayscale result
Imagen de escala de grisesSalida generada
Scribble controlScribble result
Boceto a mano alzadaSalida generada

Las condiciones restantes (HED, Arte lineal, MLSD, Pose) siguen el mismo patrón en la página del modelo.

El relleno inteligente comparte la misma rama

La entrada de control se amplía a 129 canales precisamente para que una sola rama pueda hacer ambos trabajos: los latents de control, una máscara de conservación y los latents de imagen enmascarada se concatenan antes de entrar en la rama. Para control puro, los canales de máscara e imagen enmascarada se rellenan con ceros, por lo que el mismo checkpoint sigue ejecutando Canny o Profundidad simples. Para el relleno inteligente, la región enmascarada se redibuja a partir del prompt mientras el resto del fotograma se conserva, y ambos pueden combinarse: proporciona una imagen de control junto con una máscara y la región redibujada sigue tanto el prompt como la estructura dada.

La máscara es blanca donde el contenido debe regenerarse y negra donde debe conservarse. Los píxeles regenerados se codifican en gris medio, el cero del rango de entrada [-1, 1] del VAE, de modo que las áreas intactas sobreviven al ciclo de ida y vuelta.

Inpaint sourceInpaint maskPose controlInpaint output
Imagen fuenteMáscaraControl de poseSalida del relleno inteligente

Soporte de ComfyUI

El soporte de ComfyUI está en revisión, no publicado. Kijai abrió el PR #16519 ("Support Qwen-Image 2.1 union fun controlnet") el 24 de septiembre de 2026, y cambia cuatro archivos:

  • comfy/ldm/qwen_image21/model.py añade QwenImage21FunControl y QwenImage21FunControlBlock, una rama al estilo VACE que inserta los latents de control en las filas objetivo y devuelve el skip after_proj de cada bloque tras un bloque base.
  • comfy_extras/nodes_model_patch.py enseña a ModelPatchLoader el diseño: detecta el checkpoint mediante control_img_in más control_blocks.0.img_mlp.out.weight y deriva el número de bloques, control_in_dim, la dimensión de cabeza y el ratio MLP del state dict, por lo que un solo loader sirve para esta familia de checkpoints. Los archivos cuantizados se cargan con operaciones de precisión mixta, manteniendo las capas cuantizadas con cómputo en bf16.
  • comfy_extras/nodes_qwen.py añade QwenImage21FunControlNetApply ("Apply Qwen Image 2.1 Fun ControlNet"): las entradas son model más model_patch, strength (predeterminado 1.0), start_percent / end_percent, y opcionalmente control_image, inpaint_image y mask ("1 marca la región que se debe regenerar").
  • comfy/controlnet.py ajusta la detección del loader de Qwen Fun para que el nuevo checkpoint no se confunda con un diseño de ControlNet anterior.

Kijai ya ha publicado los parches convertidos para ComfyUI mientras el PR está en revisión:

Todavía no hay una plantilla de flujo de trabajo oficial para él en Comfy-Org/workflow_templates, por lo que las plantillas anteriores de Qwen-Image (image_qwen_image_controlnet_patch, image_qwen_image_instantx_inpainting_controlnet) son para modelos anteriores y no aplican aquí.

Disponibilidad

Fuera de ComfyUI, el checkpoint se ejecuta a través de VideoX-Fun: clona VideoX-Fun, coloca el modelo base Qwen-Image 2.1 y el checkpoint de control en models/Diffusion_Transformer/, y ejecuta examples/qwenimage21_fun/predict_t2i_control.py (o predict_i2i_inpaint.py para el relleno inteligente). La rama se añadió allí en el commit "Update Qwen Image 2.1 Control and Flex Forcing".

Cuatro notas de la model card merecen tenerse en cuenta:

  • config_path debe ser config/qwenimage21/qwenimage21_control.yaml. Construye la rama de control exactamente como el checkpoint espera (control_layers: [0, 2, 4, ..., 30], control_in_dim: 129), y cualquier otra configuración descarta o coloca mal los pesos de control de forma silenciosa y produce una salida incorrecta.
  • sample_size establece el lienzo de salida. Mantén ambos lados como múltiplos de 16 para que el mapa de control no se distorsione.
  • use_kv_cache = True almacena en caché las claves del texto y de la imagen de condición tras el primer paso de denoising, lo que acelera la generación a una resolución fija.
  • Memoria: el transformer más el codificador de texto Qwen3-VL no caben completamente cargados en una única GPU de consumo. La model card recomienda model_group_offload como la opción más rápida, o model_cpu_offload_and_qfloat8 en una única GPU de alta memoria.

Comentarios

Inicia sesión con GitHub para unirte a la conversación.

Cargando comentarios…
Qwen-Image 2.1 Fun ControlNet Union: 8 controles en un solo archivo | ComfyUI Wiki