Nodes/ComfyUI-JakeUpgrade/Control Net Loader JK๐Ÿ‰
ComfyUI Node

Control Net Loader JK๐Ÿ‰

The ControlNet loader that knows about union models โ€” no more 'None' guessing

By jakechaiยทCreated 2 years agoยทUpdated 3 months agoยท 146
Control Net Loader JK๐Ÿ‰
    • CONTROL_NET
    โ—„control_net_nameโ–พโ–บ
    โ—„union_typeโ–พโ–บ

    If you've ever loaded an SDXL union ControlNet and wondered which of its twelve baked-in conditions you're actually getting, this node exists for exactly you. Control Net Loader JK๐Ÿ‰ is a drop-in replacement for the stock ControlNet loader that adds a union_type dropdown, so the model knows which condition to use instead of you praying the default matches your preprocessing.

    Why it exists: JakeUpgrade's own workflows run a lot of ControlNet, and the pack's v1.8.0 changelog shows the ControlNet stack getting split into separate loader + param nodes specifically to handle union models cleanly. Union ControlNets (xinsir's SDXL ones, Shakker's Flux ones) pack several conditions into one file - openpose, depth, canny, tile, and so on - and you select the active one at load time via an extra arg. The stock loader won't set that for you. This one will.

    How it works

    Peek at the source and it's a thin wrapper: it takes the filename, calls ComfyUI's own load_controlnet(), then - if the union_type you picked maps to a type number - makes a copy of the loaded model and sets control_type on it. That copy is what comes out the port. "auto" and "None" skip the type setting, which is the right call when the model file doesn't care (or you're loading something like a LoRA-based control method that ignores the union arg entirely).

    The dropdown covers both ecosystems: eight sdxl_xinsir_* types (openpose, depth, hed/pidi/scribble/ted, canny/lineart/anime_lineart/mlsd, normal, segment, tile, repaint) and seven flux_shakker_* types (canny, tile, depth, blur, pose, gray, low quality). If your preprocessor output doesn't match the type you select, the guidance will be subtly wrong - a canny map fed as "depth" gives you mushy edges that follow the wrong structure. That mismatch is the #1 reason union ControlNets feel broken, so treat this dropdown as part of your preprocessing step, not a formality.

    The two inputs that matter

    • control_net_name - picks the .safetensors from your models/controlnet folder. "None" is a valid choice and returns an empty output, which is handy in API workflows where you want a clean "no control" path.
    • union_type - the condition the model should act as. "auto" and "None" leave the file untouched; pick a specific type to set it.

    Output is a single CONTROL_NET that plugs straight into the Apply ControlNet JK node (or Apply ControlNet Advanced / any standard controlnet apply node). Note the union arg only makes sense for union files - for a classic single-condition SD1.5 ControlNet, just leave it on "None" and it behaves exactly like the stock loader.

    Install & gotchas

    Install the pack once and you get this node: ComfyUI Manager โ†’ search ComfyUI-JakeUpgrade, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/jakechai/ComfyUI-JakeUpgrade
    cd ComfyUI-JakeUpgrade
    pip install -r requirements.txt   # or run install.bat on Windows
    

    Requirements are the usual suspects - opencv-python, torch, torchvision, numpy, pillow, plus simpleeval, PyYAML and toml. No model files ship with the pack; the union models themselves you still grab from Civitai/HuggingFace and drop into models/controlnet.

    Two things that trip people up: if ComfyUI Manager shows a "conflict with JakeUpgrade" warning when you install IPAdapter Plus, that's the pack's replacement files talking - JakeUpgrade never loads them, so you can ignore it. And if a JK node you expected is missing from the library, it's probably flagged deprecated; set LOAD_DEPRECATED_NODES = True in the pack's config.ini to bring the old ones back. This loader isn't deprecated, but the family occasionally is.

    Category๐Ÿ‰ JK/๐Ÿ•น๏ธ ControlNet

    Inputs (2)

    NameTypeDefaultDescription
    control_net_nameCOMBOSelect ControlNet model to load
    union_typeCOMBOSelect union type for ControlNet compatibility

    Outputs (1)

    NameTypeDescription
    CONTROL_NETCONTROL_NETโ€”