Nodes/qwen-image-controlnets-comfyui/Qwen Image Blockwise ControlNet Apply
ComfyUI Node

Qwen Image Blockwise ControlNet Apply

Wiring Qwen's blockwise ControlNet in — if you can find the pipe

By krigeta·Created about a year ago·Updated about a year ago· 2
Qwen Image Blockwise ControlNet Apply
  • pipe
  • controlnet
  • image
  • QwenImageDiffSynthiPipe
strength1.00

This is the node that's supposed to take a Qwen Image blockwise ControlNet - DiffSynth-Studio's early, per-block design - and plug it into your generation pipeline. It's also the node where this pack's ambition runs into a wall, because the thing it wires into isn't in the pack.

The interface

  • pipe - type QwenImageDiffSynthiPipe. Here's the catch: that type is not defined anywhere in this pack. The source comments call it "From existing custom node," and that's the whole story - you need a separate DiffSynth-based Qwen Image ComfyUI wrapper that emits this pipe type. Manager won't fetch it for you. If your graph doesn't already produce that pipe, this node literally cannot connect.
  • controlnet - a QWEN_BLOCKWISE_CONTROLNET from the Loader node.
  • image - the control image (the edge map, depth map, or reference that's doing the steering).
  • strength - FLOAT, default 1.0, range 0–10. This is the dial you'll actually touch. Start at 1.0 and back it off if the condition overpowers the prompt; modern Qwen controlnets (the InstantX union) recommend 0.8–1.0, so 1.0 is a sane floor for testing.
  • Output - the same QwenImageDiffSynthiPipe it was handed, so you chain it inline with the rest of the DiffSynth pipe flow.

How it "applies"

Mechanically it's a shim, not a ControlNet application. The node converts your ComfyUI image to a PIL image, wraps the pipe in a lightweight proxy that copies its attributes, and then - on every call the pipe makes - injects blockwise_controlnet_inputs=[{'image': ..., 'strength': ...}] into the call's kwargs. Whether any blockwise conditioning actually happens is entirely up to the underlying DiffSynth pipeline knowing what to do with that kwarg.

And here's the honest, source-level caveat: the controlnet module you load from the Loader node is stored by the wrapper but never referenced in the sampling call. Only image + strength get forwarded. So as written, the Apply node trusts the DiffSynth pipe to do the blockwise magic on its own, and the Loader's output is mostly decorative. It's a proof-of-concept, not a finished integration - the pack's own README says it exists "to test how to use Blocknet controlnets."

The bigger picture

This whole approach was a flash in the pan. The blockwise controlnets landed in mid-August 2025, this pack followed days later, and by September 2025 ComfyUI shipped native Qwen Image ControlNet support - the Comfy blog walked through the DiffSynth model_patches route, and the InstantX union (canny, depth, pose, Apache 2.0) arrived sixteen days after Qwen's launch. For a beginner today, that native path is where you want to be: no DiffSynth pipe, no companion custom node, no VRAM-eating 20B stack. Come back to this pack if you're specifically recreating the DiffSynth experiment or you already run the QwenImageDiffSynthiPipe stack for other reasons.

Installing

If you do go this route: search "qwen-image-controlnets-comfyui" in ComfyUI Manager or

cd ComfyUI/custom_nodes
git clone https://github.com/krigeta/qwen-image-controlnets-comfyui
cd qwen-image-controlnets-comfyui
pip install -r requirements.txt

then restart. Just remember the missing piece: without the custom node that provides QwenImageDiffSynthiPipe, the Apply node is a ghost in your graph.

CategoryQwen Image/ControlNet

Inputs (4)

NameTypeDefaultDescription
pipeQwenImageDiffSynthiPipe
controlnetQWEN_BLOCKWISE_CONTROLNET
imageIMAGE
strengthFLOAT1.000–10

Outputs (1)

NameTypeDescription
QwenImageDiffSynthiPipeQwenImageDiffSynthiPipe