Nodes/Model Utility Toolkit/ControlNet Downloader
ComfyUI Node

ControlNet Downloader

ControlNet Downloader — build a local index of what each ControlNet actually does

By silveroxides·Created about a year ago·Updated 4 days ago· 14
ControlNet Downloader
    • status
    subdirectory/
    recursivetrue
    nsfw_levelAll
    max_examples0
    threads4
    api_key

    ControlNet files are some of the worst-labeled downloads in the whole ecosystem - half of them arrive from HuggingFace as diffusion_pytorch_model.safetensors, and it's on you to rename them sensibly and remember which preprocessor and base model each one targets. This node is how you stop doing that from memory: point it at your ControlNets folder and it scans every file, works out what it can identify online, and pulls down metadata, example images, and workflows for each one, feeding this pack's ControlNetInfoLoader so you can browse the results afterward.

    It's one of four ModelUtils/Downloader nodes in silveroxides' ComfyUI-ModelUtils - the same tool, pointed at checkpoints, VAEs, diffusion models, or ControlNets depending on which one you use. The nsfw_level filter and the requirement for an api_key to reach some content are both distinctly CivitAI's vocabulary, and matching by file hash rather than filename is exactly how a hash-based model lookup works - so this is almost certainly talking to CivitAI's API under the hood, even though the README doesn't name it outright.

    Inputs that matter. subdirectory (default /) is the folder under your ControlNets directory to scan. recursive (default on) decides whether it walks subfolders too - useful if you keep SD 1.5, SDXL, and Flux ControlNets in separate subdirectories, which is a genuinely good habit given how architecture-locked ControlNets are. nsfw_level (default "All") filters by content rating. max_examples (0–100) caps how many example images and workflows get pulled per file - for ControlNets this is worth setting higher than default if you can, since the example image is often the fastest way to tell a canny preprocessor's output from a depth map's. threads (1–32, default 4) sets how many files it works through in parallel. api_key unlocks anything gated behind authentication on the source.

    Output. status (STRING), a plain summary of the run. It's an output node, meaning ComfyUI executes it as a terminal step in the graph even if nothing downstream reads status - the same behavior SaveImage has.

    Installing it. ComfyUI Manager, search "Model Utility Toolkit," or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/silveroxides/ComfyUI-ModelUtils
    

    Restart afterward.

    Troubleshooting. If a ControlNet file comes back empty, it's usually one of two things: it's an obscure or self-trained ControlNet with no listing anywhere online to match against, or the file was re-saved (pruned, converted to a different precision) since it was originally downloaded, which changes its hash and breaks the match even though it's functionally the "same" model. Neither is a bug in this node - it can only find what's out there to find. A recursive scan across a big, mixed ControlNet folder with threads left at the default of 4 is also going to take a while; that's expected, not stuck, especially with max_examples set high.

    CategoryModelUtils/Downloader

    Inputs (6)

    NameTypeDefaultDescription
    subdirectoryCOMBO/1 options: /
    recursiveBOOLEANtrueWhether to scan subdirectories recursively.
    nsfw_levelCOMBOAllFilter models based on NSFW level in metadata.
    max_examplesINT00–100Maximum number of examples to process.
    threadsINT41–32Number of threads to use for processing.
    api_keySTRINGAPI key for accessing the model repository.

    Outputs (1)

    NameTypeDescription
    statusSTRING