Multi-ControlNet Converter
The One Real Node in This Pack, For a World You Might Not Be In
- controlnets
- multicontrolnet
This is the node that justifies the pack. MultiControlNetConverter takes a set of ControlNet models and fuses them into a single combined model - and if you've done any InstantID work, you'll recognize the move instantly, because it's the exact pattern the InstantID reference pipeline uses to run its identity adapter and its spatial control module side by side.
But here's the honest version of the pitch: it only works inside the diffusers-based world this pack was built for. In a normal ComfyUI graph you don't need it, and using it there will confuse you.
What it actually does
The entire node is three lines:
from diffusers.pipelines.controlnet.multicontrolnet import MultiControlNetModel
def execute(self, controlnets):
model = MultiControlNetModel(controlnets)
return [model]
It wraps a Python list of diffusers ControlNet models in a MultiControlNetModel, which routes a conditioning signal to each member model in turn so they can all steer one diffusion pass. This is how you stack multiple spatial conditions - think InstantID for identity plus a Canny ControlNet for edges, the pairing the InstantID docs practically recommend. IdentityNet, InstantID's landmark-conditioning module, is itself ControlNet-shaped (the KB covers this), and in diffusers-land the whole InstantID pipeline is built by bundling its image adapter and IdentityNet through exactly this MultiControlNetModel call.
That's also why the node lives in a "ControlNetUtils" category while being about InstantID. It's the bridge that lets multiple diffusers controlnets coexist.
The input/output reality check
- input
controlnets- typed*(any). This is the first gotcha: it's a list of raw diffusers ControlNet models, not theCONTROL_NETpatches ComfyUI's ownControlNetLoaderproduces. The only natural source is the author's own diffusers-style nodes. - output
multicontrolnet- typedMODEL. And here's the second gotcha, bigger: this is not a ComfyUIMODEL. It won't plug into aKSampler. The type label is a courtesy; the real contract is "diffusersMultiControlNetModel", consumable only by nodes that know what to do with one.
Neither type is a lie so much as a shrug. In stock ComfyUI, a MODEL socket will happily accept a wire from this node, then fail mysteriously at queue time when the sampler discovers it's not a sampler model.
Do you even need it?
Probably not. ComfyUI has handled multiple ControlNets natively since forever - you just stack ControlNetApply / ControlNetApplyAdvanced nodes, each with its own weight and start/end steps, and they all contribute during denoising. That's the standard way, and it's simpler than anything diffusers-land offers. The MultiControlNetConverter exists for one scenario: you're inside a diffusers-style InstantID graph (the ecosystem this pack was scaffolding for in early 2024) and you need several raw controlnet models fused into one before they hit the pipeline.
Install
The repo has no README - this article is, depressingly, the documentation. Install:
cd ComfyUI/custom_nodes
git clone https://github.com/BXYMartin/ComfyUI-InstantIDUtils
Restart ComfyUI, or use ComfyUI Manager and search ComfyUI-InstantIDUtils. This is the only node in the pack that genuinely needs diffusers - it's the sole import in requirements.txt, and Manager will install it for you. No model files, no insightface, nothing to download beyond the library.
Troubleshooting
- Queue-time crash on a
MODELsocket: you wired it into something native likeKSampler. It's a diffusers object; it doesn't belong there. - "
controlnetsis not a list": the input expects a Python list of diffusers controlnet models from the pack's pipeline nodes. You can't feed itControlNetLoaderoutput - different species entirely. - Pack is abandoned: last commit May 2024, three stars, and the diffusers-InstantID approach it serves is SDXL-era. On Flux the identity job moved to PuLID, so if you're starting fresh, this is history - useful history that explains a lot of 2024 workflow JSONs, but history.
If you found this node in a workflow you downloaded and it's wired into normal ComfyUI nodes, the answer is "delete it and stack ControlNet applies instead." If you're genuinely running a diffusers-based InstantID graph, this is exactly the piece that makes multiple conditions work together - the one node in the pack doing real, non-no-op work.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| controlnets | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| multicontrolnet | MODEL | — |