☁️BizyAir Controlnet Union SDXL 1.0
One node, six control types, no local weights
- openpose_image
- depth_image
- hed_pidi_scribble_ted_image
- canny_lineart_anime_lineart_mlsd_image
- normal_image
- segment_image
- IMAGE
xinsir's SDXL ControlNet Union is, by a real margin, the most capable single ControlNet artifact in the ecosystem - one Apache 2.0 checkpoint that replaced what used to be a dozen separate ~1.5GB models, released back in July 2024 and still the SDXL ceiling nobody's matched since. This node is BizyAir's all-in-one wrapper around it: instead of loading a checkpoint, a union ControlNet, a type selector, and a KSampler separately, you get one node that takes a prompt and up to six condition images and hands back a finished image. No local weights, no VRAM math - it runs on BizyAir's cloud and bills your account per call.
How it's different from a normal ControlNet workflow
This isn't the modular ComfyUI pattern of load-checkpoint → apply-controlnet → sample. It's a packaged pipeline node - the SDXL checkpoint, the union ControlNet, and the sampler are all baked in behind the scenes. What you get exposed is seed, num_inference_steps (1–50, default 20), num_images_per_prompt (1–4), and guidance_scale (0–100, default 5 - note this sits well below the classic SD 1.5-era "CFG 7" instinct, which tracks what the 2025-era union models actually publish as their recommended range). What you don't get is a choice of base checkpoint, LoRA slots, or a custom sampler/scheduler - you're trading fine control for a one-node setup.
The inputs that matter
Six optional image slots, each one a condition family the union model understands: openpose_image, depth_image, hed_pidi_scribble_ted_image (soft-edge family), canny_lineart_anime_lineart_mlsd_image (hard-edge family), normal_image, and segment_image. You don't have to fill all six - wire in whichever condition images you have, leave the rest empty. prompt (default is literally "a car", the model's own demo string) and negative_prompt (default "watermark, text") round out the text side. control_guidance_start/control_guidance_end (0–1 each) let you limit the ControlNet's influence to a portion of the denoising steps, same as the standard start/end pattern on any ControlNet node.
Output is a single IMAGE - no intermediate latent, no conditioning to inspect. What goes in is what comes out.
Installing it
ComfyUI Manager: search BizyAir, install, restart. Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/siliconflow/BizyAir.git
Restart after. No models to download - this node doesn't touch your disk at all, which is arguably the whole pitch of running xinsir's union through BizyAir instead of loading the real checkpoint locally. You do need a BizyAir account and API key configured before this or any other node in the pack will run.
Where people get burned
Expecting per-condition strength control. The real xinsir union checkpoint supports per-condition scaling and stacking multiple conditions with individual weights; this pipeline node collapses that down to one guidance_scale and one start/end window for everything you've plugged in. If you need that granularity, you want the modular BizyAir controlnet nodes (loader + BizyAir SetUnionControlNetType), not this pipeline.
Not knowing which image goes where. The six inputs group multiple related preprocessor outputs under one slot - canny, lineart, anime lineart, and MLSD all share canny_lineart_anime_lineart_mlsd_image, for instance. Feed it the matching preprocessor output, not a raw photo.
Treating guidance_scale like classic CFG. Starting it at the old SD 1.5 default of 7 tends to overcook a union model tuned for a lower default - the node's own default of 5 is closer to what's actually recommended.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–18446744073709550000 | — |
| num_inference_steps | INT | 201–50 | — |
| num_images_per_prompt | INT | 11–4 | — |
| guidance_scale | FLOAT | 5.00–100 | — |
| openpose_imageopt | IMAGE | — | |
| depth_imageopt | IMAGE | — | |
| hed_pidi_scribble_ted_imageopt | IMAGE | — | |
| canny_lineart_anime_lineart_mlsd_imageopt | IMAGE | — | |
| normal_imageopt | IMAGE | — | |
| segment_imageopt | IMAGE | — | |
| promptopt | STRING | a car | — |
| negative_promptopt | STRING | watermark, text | — |
| control_guidance_startopt | FLOAT | 0.000–1 | — |
| control_guidance_endopt | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |