Qwen-Image 2.1 Fun ControlNet Union:一个文件集成 8 种控制

ComfyUI Wikinews

阿里巴巴 PAI 为 Qwen-Image 2.1 打造的 ControlNet Union 将八种结构控制与图像修复打包进一个 7.5 GB 分支,ComfyUI 支持即将落地。

Qwen-Image-2.1-Fun-Controlnet-Union(Hugging Face | VideoX-Fun | ComfyUI PR #16519)是阿里巴巴 PAI 为 Qwen-Image 2.1 推出的 ControlNet-Union 分支。单个 7.5 GB checkpoint 即可驱动 八种 结构控制条件以及图像修复,且它加载在冻结的基础 transformer 之上,而不是替换它。

Qwen-Image 2.1 于 2026 年 9 月 20 日发布,是一个 7B 单流 DiT,用同一套权重完成生成与编辑,并输出真正的 RGBA 透明度。这个 ControlNet-Union 分支沿用了阿里巴巴 PAI 为 MiniMax H3 采取的思路:用一个控制 checkpoint 覆盖所有条件,无需按条件切换权重。

一个分支,八种条件

发布的文件只包含控制分支(control_img_in 加 16 个 control_blocks,模型卡标注约 7.0 GB,磁盘占用 7.55 GB)。它以 strict=False 加载到基础 Qwen-Image 2.1 transformer 之上,基础部分保持冻结,因此基础权重被原样复用。

控制条件Canny、Depth、Grayscale、HED、Lineart、MLSD、Pose、Scribble
控制分支深度16 个 block,在 32 个 transformer block 的每第 2 个上做一次 skip(control_layers = [0, 2, 4, ..., 30])
控制输入宽度control_in_dim = 129:控制 latent(64)+ mask(1)+ 掩蔽图像 latent(64)
注入方式每个控制 block 上零门控的 before_proj / after_proj,加回主分支
采样CFG 蒸馏,示例脚本以 guidance_scale = 1.0 运行(每步一次前向传播)
文本编码器 / VAE用于 prompt 与条件图像的 Qwen3-VL 处理器,VAE 解码 RGBA,预览可直接保存为 PNG

control_context_scale 会在每个控制 skip 加回主分支之前对其缩放:1.0 是所有公开结果使用的最强设置,数值越低引导越弱,0.0 则关闭控制分支。

控制条件

条件控制信号
CannyCanny 边缘图
Depth单目深度图
Grayscale灰度(亮度)图像
HEDHED 边缘检测图
Lineart线稿提取
MLSD线段检测图
PoseDWPose 骨骼
Scribble手绘或草图线条

任何目标画布尺寸下的普通 RGB 控制图像都可以使用:模型卡指出它能容忍不同的线条粗细、阈值和裁剪。以下所有样例均来自模型卡,采用 40 步推理、control_context_scale = 1.0 和种子 43,左侧为控制信号,右侧为生成结果。

Canny controlCanny result
Canny 边缘图已生成输出
Depth controlDepth result
深度图已生成输出
Grayscale controlGrayscale result
灰度图像已生成输出
Scribble controlScribble result
涂鸦草图已生成输出

其余条件(HED、Lineart、MLSD、Pose)遵循同样的模式,可在模型页面查看。

图像修复共用同一分支

控制输入之所以被拓宽到 129 个通道,正是为了让一个分支同时完成两项任务:控制 latent、保留 mask 和掩蔽图像 latent 在进入分支前被拼接在一起。纯控制时,mask 与掩蔽图像通道会被零填充,因此同一个 checkpoint 依然可以运行普通的 Canny 或 Depth。图像修复时,掩蔽区域会根据 prompt 重新绘制,而画面其余部分保持不变,两者也能结合使用:同时提供控制图像和 mask,重绘区域就会同时遵循 prompt 和给定结构。

mask 中白色表示应重新生成内容的区域,黑色表示应保留的区域。重新生成的像素会以中灰色编码,即 VAE [-1, 1] 输入范围的零点,因此未改动的区域能够完整无损地通过本轮往返。

Inpaint sourceInpaint maskPose controlInpaint output
来源图像MaskPose 控制图像修复输出

ComfyUI 支持

ComfyUI 支持目前仍在审核中,尚未发布。Kijai 于 2026 年 9 月 24 日提交了 PR #16519(“Support Qwen-Image 2.1 union fun controlnet”),它改动了四个文件:

  • comfy/ldm/qwen_image21/model.py 新增 QwenImage21FunControl 和 QwenImage21FunControlBlock,这是一个 VACE 风格的分支,将控制 latent 注入目标行,并在一个基础 block 之后把每个 block 的 after_proj skip 加回去。
  • comfy_extras/nodes_model_patch.py 让 ModelPatchLoader 认识这种布局:它通过 control_img_in 加 control_blocks.0.img_mlp.out.weight 识别该 checkpoint,并从 state dict 推导 block 数量、control_in_dim、head dim 和 MLP 比例,因此一个 loader 就能适配这一 checkpoint 家族。量化文件以混合精度算子加载,使各层保持量化并使用 bf16 计算。
  • comfy_extras/nodes_qwen.py 新增 QwenImage21FunControlNetApply(“Apply Qwen Image 2.1 Fun ControlNet”):输入为 model 加 model_patch、strength(默认 1.0)、start_percent / end_percent,以及可选的 control_image、inpaint_image 和 mask(“1 表示需要重新生成的区域”)。
  • comfy/controlnet.py 收紧 Qwen Fun loader 的检测逻辑,避免新 checkpoint 被误判为旧版 ControlNet 布局。

在 PR 审核期间,Kijai 已经发布了转换好的 ComfyUI 模型补丁:

Comfy-Org/workflow_templates 中目前还没有它的官方工作流模板,因此上一个 Qwen-Image 模板(image_qwen_image_controlnet_patch、image_qwen_image_instantx_inpainting_controlnet)都是面向更早模型的,在这里并不适用。

可用性

在 ComfyUI 之外,该 checkpoint 可通过 VideoX-Fun 运行:克隆 VideoX-Fun,将基础 Qwen-Image 2.1 模型和控制 checkpoint 放到 models/Diffusion_Transformer/ 下,然后运行 examples/qwenimage21_fun/predict_t2i_control.py(图像修复则运行 predict_i2i_inpaint.py)。该分支是在提交 “Update Qwen Image 2.1 Control and Flex Forcing” 中加入的。

模型卡中有四点值得留意:

  • config_path 必须为 config/qwenimage21/qwenimage21_control.yaml。它会完全按照 checkpoint 的预期构建控制分支(control_layers: [0, 2, 4, ..., 30]、control_in_dim: 129),使用任何其他配置都会静默丢弃或错置控制权重,导致输出错误。
  • sample_size 决定输出画布。请让两边都保持为 16 的倍数,以免控制图被扭曲。
  • use_kv_cache = True 会在第一个去噪步之后缓存文本与条件图像的 key,从而在固定分辨率下加速生成。
  • 内存:transformer 加上 Qwen3-VL 文本编码器无法在单张消费级 GPU 上完整加载。模型卡推荐 model_group_offload 作为最快方案,或在单张高显存 GPU 上使用 model_cpu_offload_and_qfloat8。

评论

使用 GitHub 登录后即可参与讨论。

评论加载中…
Qwen-Image 2.1 Fun ControlNet Union:一个文件集成 8 种控制 | ComfyUI Wiki