Nodes/DemonAlone-nodes-ComfyUI/ControlNet Model Selector
ComfyUI Node

ControlNet Model Selector

A ControlNet dropdown that just hands you a filename — and that's the point

By DemonAlone·Created 7 months ago·Updated a day ago· 4
ControlNet Model Selector
    • control_net_name
    • control_net_name_str
    control_net_name

    The name is a small lie, and it's the thing to understand first: ControlNet Model Selector doesn't load a ControlNet. It doesn't touch your GPU, it doesn't read a single weight, it moves zero bytes. It reads the list of ControlNet files ComfyUI already knows about, shows you a dropdown, and hands back the filename you picked - twice, in two shapes. That sounds useless until you've tried to make "which ControlNet" a dynamic choice instead of a fixed one.

    In a normal workflow you'd never bother. The stock ControlNetLoader node has its own dropdown, you pick canny_v2.safetensors, you move on. This node exists for the workflows where that dropdown is the wrong tool: XYZ plots, string-based routing, logging, or anything where the model name needs to travel through a text port instead of a model port.

    What it actually does

    Read the code and it's almost embarrassingly simple. The node builds its choices with folder_paths.get_filename_list("controlnet") - the same registry ComfyUI uses for every ControlNet dropdown, backed by your models/controlnet folder plus any extra controlnet paths you've configured. Then its one function returns literally (control_net_name, control_net_name): the same string, wrapped two ways.

    That's the whole trick, and it's why the two outputs exist:

    • control_net_name - the first output carries ComfyUI's combo type, meaning it plugs straight into the control_net_name port of a ControlNetLoader. It's the "I want to keep this a proper model selection" output.
    • control_net_name_str - a plain STRING, the same text. This is the one for XYZ plot axes, for feeding a text field, for shoving through an Any/String adapter, or for sticking into a workflow's saved metadata.

    So if you're wiring an XYZ plot, you'd use the string output as the varying axis and let your XYZ machinery swap it per row. If you just want a ControlNet picker that lives in one corner of your graph and feeds a loader elsewhere, use the combo output.

    The one input that matters

    control_net_name - a combo dropdown populated from your controlnet folder at load time. Pick one, done. There's nothing else to set, which is the appeal: this is a "set it and forget it" utility, not a tuning node.

    Install

    No heavy dependencies, no model downloads, nothing exotic. The pack is pure Python over ComfyUI's own folder_paths, and there's no requirements.txt to fight with.

    • ComfyUI Manager: search for DemonAlone-nodes-ComfyUI and install, then restart.
    • Manual: cd ComfyUI/custom_nodes && git clone https://github.com/DemonAlone/DemonAlone-nodes-ComfyUI, then restart ComfyUI.

    The pack ships a whole family of sibling selectors - checkpoints, LoRAs, VAEs, samplers, schedulers - all built around the same dropdown-plus-string pattern, originally to drive XYZ-plot pipelines. If you're using one, this node follows the same rhythm.

    Where people get burned

    • Your new ControlNet doesn't show up. The dropdown is built when the node loads, not live. Drop a fresh .safetensors in models/controlnet and reload the workflow (or restart) before you go hunting for it.
    • You expected a model, got a filename. If you plug this node's output straight into a KSampler expecting a ControlNet to materialize, nothing happens - you still need a ControlNetLoader. This node picks which file; the loader actually loads it.
    • Empty dropdown. That just means your controlnet folder is empty (or the file's in a path ComfyUI isn't watching).

    For a single ControlNet in a static workflow, skip it and use the loader's own dropdown. Reach for this when the selection has to be dynamic - that's the entire job, and it does that one job cleanly.

    Categoryutils

    Inputs (1)

    NameTypeDefaultDescription
    control_net_nameCOMBO0 options:

    Outputs (2)

    NameTypeDescription
    control_net_name
    control_net_name_strSTRING