ComfyUI Node

Select ControlNet

Select ControlNet – ComfyUI Node Guide

By Shadetail·Created 2 years ago·Updated about a year ago· 6
Select ControlNet
    • CONTROL_NET
    • control_net_name
    control_net_name1
    control_net_name2
    control_net_name3
    control_net_name4
    control_net_name5
    select_controlnet1

    What it is

    If you've ever built a workflow that needs to A/B test a few different ControlNets - or just wanted to preload your five most-used ones and flip between them without disconnecting and reconnecting wires every time - you've hit the problem this node solves. It's the author's modification of ComfyRoll's well-known "CR Select Model" pattern, retargeted to load ControlNets instead of checkpoints: preload up to five ControlNet files into named slots, then pick which one actually feeds your graph with a single integer.

    Reach for it in any workflow where you're switching ControlNets frequently - comparing canny vs. depth vs. lineart on the same generation, or organizing a big workflow so swapping conditioning types is a one-widget change instead of a rewiring job.

    How it works

    Five enum dropdowns, each populated from your ComfyUI ControlNet models folder, let you preload up to five specific files. A separate integer widget, select_controlnet, picks which of the five slots actually gets loaded and passed downstream that run. Nothing about the ControlNet itself changes - this node only handles which file gets loaded, not applying it. You'll still need the standard ControlNet Apply / Apply Advanced node downstream to actually condition your generation, and the appropriate preprocessor (canny, depth, OpenPose, whatever matches the ControlNet you picked) upstream feeding it a conditioning image.

    Inputs that matter

    • control_net_name1 through control_net_name5 – five enum pickers, each showing the ControlNet files available in your setup. Preload your regulars here.
    • select_controlnet (INT, 1–5, default 1) – which of the five slots is actually active this run. This is the one widget you touch to switch conditioning types.

    Outputs

    • CONTROL_NET – the loaded ControlNet, ready for a ControlNet Apply node.
    • control_net_name – a STRING echoing back which file got selected. Handy for stamping into a filename or label so your saved outputs record which ControlNet produced them - this pack's own Round Float to String or Save Image to Folder nodes are natural places to use it.

    Installing it

    Comes with the rest of the pack:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Shadetail/ComfyUI_Eagleshadow
    

    Or search "Eagleshadow Custom Nodes" in ComfyUI Manager. No extra dependencies to worry about - this node just loads files you already have.

    Common issues

    It only loads a file - it doesn't apply it. People new to this style of "select" node sometimes wire the CONTROL_NET output straight into their sampler expecting it to just work. It needs a ControlNet Apply node (with a strength, a conditioning image from a preprocessor, and start/end step range) between this node and your KSampler.

    Slots show "None" until you have ControlNets installed. The dropdowns populate from whatever's actually in your ControlNet models folder - if you see nothing to pick, the fix is downloading a ControlNet, not this node.

    Match the ControlNet to your base model's architecture. SD 1.5-era ControlNet files don't load on SDXL, Flux, or other newer architectures - every base model generation needs its own ControlNet trained for it. If a load fails or produces nonsense, check that the file you picked was actually built for the checkpoint you're running, not just that it's a valid ControlNet file in general. Also worth knowing: the modern union ControlNets for newer architectures typically cover fewer conditioning types than the old SDXL unions did, so if a type you relied on (segmentation, normal maps, reference) seems to be missing for your architecture, that's often the ecosystem, not a setup mistake on your end.

    Categorysd

    Inputs (6)

    NameTypeDefaultDescription
    control_net_name1COMBO1 options: None
    control_net_name2COMBO1 options: None
    control_net_name3COMBO1 options: None
    control_net_name4COMBO1 options: None
    control_net_name5COMBO1 options: None
    select_controlnetINT11–5

    Outputs (2)

    NameTypeDescription
    CONTROL_NETCONTROL_NET
    control_net_nameSTRING