Qwen-Image 2.1 Fun ControlNet Union: 8 видов контроля в одном файле
ControlNet Union от Alibaba PAI для Qwen-Image 2.1 объединяет восемь структурных контролей и инпейтинг в одну ветку на 7.5 ГБ, а поддержка ComfyUI уже на подходе.
Qwen-Image 2.1 вышел 20 сентября 2026 года как 7B single-stream DiT, который генерирует и редактирует одними и теми же весами и записывает настоящую RGBA-альфу. Ветка ControlNet-Union идёт тем же путём, который Alibaba PAI выбрала для MiniMax H3: единственный контрольный checkpoint, покрывающий все условия, поэтому переключение весов под каждое условие не требуется.
Одна ветка, восемь условий
Выпущенный файл содержит только контрольную ветку (control_img_in плюс 16 control_blocks, около 7.0 ГБ согласно карточке модели, 7.55 ГБ на диске). Она загружается с strict=False поверх базового transformer Qwen-Image 2.1, который остаётся замороженным, поэтому базовые веса переиспользуются ровно в том виде, в каком они есть.
| Условия контроля | Canny, Depth, Grayscale, HED, Lineart, MLSD, Pose, Scribble |
| Глубина контрольной ветки | 16 блоков, один skip на каждом 2-м из 32 блоков transformer (control_layers = [0, 2, 4, ..., 30]) |
| Ширина входа контроля | control_in_dim = 129: control latents (64) + маска (1) + latents маскированного изображения (64) |
| Инъекция | zero-gated before_proj / after_proj на каждом контрольном блоке, добавляются обратно в основную ветку |
| Выборка | CFG-distilled, примеры скриптов запускаются при guidance_scale = 1.0 (один forward pass на шаг) |
| Текстовый энкодер / VAE | processor Qwen3-VL для промпта и изображения-условия, VAE декодирует RGBA, поэтому превью сохраняются как PNG |
control_context_scale масштабирует каждый control skip перед добавлением в основную ветку: 1.0 это самое сильное значение, использованное во всех опубликованных результатах, меньшие значения ослабляют направление, а 0.0 полностью отключает контрольную ветку.
Условия контроля
| Условие | Сигнал контроля |
|---|---|
| Canny | Карта краёв Canny |
| Depth | Монокулярная карта глубины |
| Grayscale | Изображение в градациях серого (яркость) |
| HED | Карта детекции краёв HED |
| Lineart | Извлечение линейного арта |
| MLSD | Карта детекции линейных сегментов |
| Pose | Скелет DWPose |
| Scribble | Свободные линии или линии наброска |
Подойдёт любое обычное RGB-изображение контроля под целевой холст: в карточке модели отмечено, что модель терпима к разной толщине линий, порогам и кадрированию. Все примеры ниже взяты из карточки модели при 40 шагах вывода, control_context_scale = 1.0 и seed 43, где сигнал контроля слева, а генерация справа.
![]() | ![]() |
|---|---|
| Карта краёв Canny | Сгенерированный результат |
![]() | ![]() |
|---|---|
| Карта глубины | Сгенерированный результат |
![]() | ![]() |
|---|---|
| Изображение в градациях серого | Сгенерированный результат |
![]() | ![]() |
|---|---|
| Набросок каракулями | Сгенерированный результат |
Остальные условия (HED, Lineart, MLSD, Pose) следуют тому же шаблону на странице модели.
Инпейтинг использует ту же ветку
Вход контроля расширен до 129 каналов именно для того, чтобы одна ветка выполняла обе задачи: control latents, маска сохранения и latents маскированного изображения конкатенируются перед входом в ветку. Для чистого контроля каналы маски и маскированного изображения дополняются нулями, поэтому тот же checkpoint по-прежнему выполняет обычные Canny или Depth. При инпейтинге маскированная область перерисовывается по промпту, а остальная часть кадра сохраняется, и эти режимы можно комбинировать: подайте изображение контроля вместе с маской, и перерисованная область будет следовать и промпту, и заданной структуре.
Маска белая там, где содержимое должно быть перегенерировано, и чёрная там, где его нужно сохранить. Перегенерированные пиксели кодируются средне-серым, нулём входного диапазона VAE [-1, 1], поэтому нетронутые области переживают цикл кодирования и декодирования.
![]() | ![]() | ![]() | ![]() |
|---|---|---|---|
| Исходное изображение | Маска | Контроль позы | Результат инпейтинга |
Поддержка ComfyUI
Поддержка ComfyUI находится на рассмотрении, а не в релизе. Kijai открыл PR #16519 («Support Qwen-Image 2.1 union fun controlnet») 24 сентября 2026 года, и он изменяет четыре файла:
comfy/ldm/qwen_image21/model.pyдобавляетQwenImage21FunControlиQwenImage21FunControlBlock, ветку в стиле VACE, которая внедряет control latents в целевые строки и добавляет skipafter_projкаждого блока обратно после одного базового блока.comfy_extras/nodes_model_patch.pyучит ModelPatchLoader этой структуре: он определяет checkpoint поcontrol_img_inплюсcontrol_blocks.0.img_mlp.out.weightи выводит число блоков,control_in_dim, размерность головы и соотношение MLP из state dict, поэтому один загрузчик подходит для всего этого семейства 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, чтобы новый checkpoint не был принят за старую структуру ControlNet.
Сконвертированные патчи для ComfyUI уже опубликованы Kijai, пока PR находится на рассмотрении:
- qwen_image_2.1_fun_controlnet_union_bf16.safetensors
- qwen_image_2.1_fun_controlnet_union_int8_convrot.safetensors
Официального шаблона рабочего процесса для него в 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кеширует ключи текста и изображения-условия после первого шага denoise, что ускоряет генерацию при фиксированном разрешении.- Память: transformer плюс текстовый энкодер Qwen3-VL не помещаются полностью загруженными на одну потребительскую GPU. Карточка модели рекомендует
model_group_offloadкак самый быстрый вариант илиmodel_cpu_offload_and_qfloat8на одной GPU с большим объёмом памяти.












Комментарии
Войдите через GitHub, чтобы участвовать в обсуждении.