controlnet preprocessor bus
The ControlNet bus
- c1_passthrough
- c2_normal_lineart
- c3_anime_lineart
- c4_manga_lineart
- c5_midas_depthmap
- c6_color_palette
- c7_canny_edge
- c8_openpose_recognizer
- c9_scribble_lines
- c10_yourchoice1
- c11_yourchoice2
- IMAGE
Anyone who's built a real ControlNet stack knows the ritual: preprocess the reference image six different ways, stare at the previews, and feed the one that works into the ControlNet Apply node. The Aegisflow controlnet preprocessor bus turns that trial-and-error into a single dial. It takes up to eleven processed images, and hands exactly one of them onward depending on an integer you set.
What it is
A switch, not a processor. The node's eleven optional inputs are named after the conditions they expect - c1_passthrough, c2_normal_lineart, c3_anime_lineart, c4_manga_lineart, c5_midas_depthmap, c6_color_palette, c7_canny_edge, c8_openpose_recognizer, c9_scribble_lines, plus two generic c10_yourchoice1 and c11_yourchoice2 slots for anything else. Set the required Input int to a number, and the matching image is routed to the single IMAGE output. Nothing gets processed or blended - it's a bus, pure routing.
If those input names look familiar, they should: canny, lineart (normal/anime/manga), MiDaS depth, OpenPose, and scribble are the classic ControlNet conditioning types, the ones the auxiliary preprocessor pack produces (the "ControlNet Auxiliary Preprocessors" pack is effectively required for any serious ControlNet workflow). So the intended wiring is: each preprocessor's output into its named slot, then the bus's single output into the image input of your ControlNet Apply node.
Why you'd reach for it
Two reasons. First, A/B testing: wire up a canny, an openpose, and a lineart pass all at once, flip the dial, and compare generations without rewiring anything. Second, reusability: build one workflow that accepts "whichever condition I feel like today" and switch conditions from a single widget - or drive Input from another INT node if you ever want to switch programmatically.
One quirk worth knowing: the widget caps at 9 in the schema, but the code happily handles inputs 10 and 11 - so if you use the two custom slots, ignore the widget's max and type the number in.
Installing it
Same as the whole AegisFlow Utility pack - you get all of its nodes at once:
cd ComfyUI/custom_nodes
git clone https://github.com/aegis72/aegisflow_utility_nodes
Restart ComfyUI. ComfyUI Manager also has it under "AegisFlow Utility Nodes". No models to download for this node itself - but the preprocessors you're feeding it are a separate install (ComfyUI_ControlNet_Aux / Impact Pack), and that's where the model files live.
Where people get burned
Leave a slot empty and select it, and you'll route None into your ControlNet - an error you'll chase for a while before noticing the dial is set to an unwired input. Also: the input names describe intent, not enforcement - the bus accepts any IMAGE in any slot, so garbage in, garbage out. It's a routing convenience, not a validator.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| Input | INT | 11–9 | — |
| c1_passthroughopt | IMAGE | — | |
| c2_normal_lineartopt | IMAGE | — | |
| c3_anime_lineartopt | IMAGE | — | |
| c4_manga_lineartopt | IMAGE | — | |
| c5_midas_depthmapopt | IMAGE | — | |
| c6_color_paletteopt | IMAGE | — | |
| c7_canny_edgeopt | IMAGE | — | |
| c8_openpose_recognizeropt | IMAGE | — | |
| c9_scribble_linesopt | IMAGE | — | |
| c10_yourchoice1opt | IMAGE | — | |
| c11_yourchoice2opt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |