ZIT ControlNet (TJ)
Depth, canny, and pose control bundled for Z-Image Turbo
- depth_image
- canny_image
- pose_image
- zit_control
One node, three spatial controls, one clean output
ZIT ControlNet (TJ) is the ControlNet companion node for Z-Image Turbo (TJ). It takes depth, canny, and pose images, runs the built-in preprocessors, applies them to Z-Image's union ControlNet, and bundles everything into a single zit_control output that you plug straight into the Z-Image Turbo node. Three control types, three enable toggles, three strength dials - one wire into your generator.
If you've done ControlNet on older bases, you know the pain it's saving: a separate ControlNet loader, a separate preprocessor for each condition type, per-condition Apply nodes, start/end step fiddling - that's a lot of nodes just to say "keep this pose." This node collapses it into the pack's pattern: one node, one output, controls exposed as clean toggles. The KB calls Z-Image's union one of the fast-follow success stories - the union model shipped about a week after the base - and this node is the ComfyUI ergonomics for it.
How it works
Z-Image Turbo uses a union ControlNet (patch_name, default ZIT/qwen_image_controlnet_union.safetensors) where one checkpoint handles multiple conditions. Each condition - depth_image, canny_image, pose_image - has its own _enable toggle and _strength (0–5), plus a _preprocess toggle. With preprocess on (default), the node runs the map extraction for you:
- Depth - depth estimation from the source image.
- Canny - edge detection, with
canny_low/canny_highthresholds. - Pose - pose skeleton extraction.
preprocessor_resolution (default 1024) sets how big the preprocessors work. Already-preprocessed maps? Just flip _preprocess off and feed the map directly. The node builds the ZIT_CONTROL bundle and hands it to Z-Image Turbo's zit_control input - that's the entire data flow, and it's the same union approach the KB notes is now the ecosystem standard.
The inputs that matter
depth_enable/canny_enable/pose_enable- which conditions actually apply. Empty bundle = no-op, so this is the first thing to check.depth_strength/canny_strength/pose_strength- how hard each condition pulls (1.0 default).patch_name- the union checkpoint; make sure the file is in the expected model folder.
Output: zit_control → Z-Image Turbo (TJ)'s zit_control input.
Install it and get the model
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/designloves2/ComfyUI-TJ_NODE.git
Or ComfyUI Manager → search TJ_NODE, restart. Then make sure the union ControlNet file is where the dropdown expects it - models/controlnet/ZIT/qwen_image_controlnet_union.safetensors (the README's Z-Image Turbo section lists the same ZIT/ layout). Restart after adding the file so the node sees it.
Where people get burned
The number one failure is "I connected ZIT ControlNet and nothing changed" - that's an enable toggle off, a patch_name that doesn't match a real file, or feeding a condition image that preprocess turned into something useless. Check the toggles first. Second: preprocessor quirks - a bad source image (too dark, too compressed) produces a garbage map, and garbage in is garbage out even with a good union model; raise preprocessor_resolution for detail-heavy sources. Third, strength is not the same as on SD-era ControlNet: 1.0 is already strong here, so nudge rather than slam. And if you only need one condition, you don't have to feed all three - leave the others unwired and they're simply not applied.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| patch_name | COMBO | ZIT/qwen_image_controlnet_union.safetensors | 1 options: ZIT/qwen_image_controlnet_union.safetensors |
| depth_enable | BOOLEAN | false | — |
| depth_strength | FLOAT | 1.000–5 | — |
| canny_enable | BOOLEAN | false | — |
| canny_strength | FLOAT | 1.000–5 | — |
| pose_enable | BOOLEAN | false | — |
| pose_strength | FLOAT | 1.000–5 | — |
| depth_preprocess | BOOLEAN | true | — |
| canny_preprocess | BOOLEAN | true | — |
| pose_preprocess | BOOLEAN | true | — |
| preprocessor_resolution | INT | 102464–4096 | — |
| canny_low | INT | 1000–255 | — |
| canny_high | INT | 2000–255 | — |
| depth_imageopt | IMAGE | Depth source image or prepared depth map. | |
| canny_imageopt | IMAGE | Canny source image or prepared canny map. | |
| pose_imageopt | IMAGE | Pose source image or prepared pose map. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| zit_control | ZIT_CONTROL | — |