Models Downloader
Models Downloader
- model_name_0
- model_name_1
- model_name_2
- model_name_3
Instead of stopping your run to go download a LoRA or checkpoint by hand, this node does it as part of the graph itself: give it a URL, it fetches the file into the right subdirectory and hands the filename back so you can wire it straight into a loader node in the same workflow. The README keeps it simple: "downloads models or LoRAs to a subdirectory. If the model already exists, it simply returns the model name in the corresponding location." That last part matters - it's idempotent. Run the workflow again and it won't redownload something that's already sitting on disk, it'll just point at what's there.
This is genuinely useful for anyone sharing workflows that depend on a specific LoRA someone else might not have - instead of a README note saying "download X and put it in Y folder," the workflow fetches it itself the first time it runs. It's also handy for automated pipelines that need to pull models on demand rather than requiring everything pre-staged.
Inputs that matter: url_0 through url_3 - up to four URLs in one node, each a multiline string field, so you can queue several downloads at once instead of chaining four separate nodes. subdirectory (default loras) is where inside your ComfyUI models/ folder each file lands - change it to checkpoints, vae, or whatever matches what you're actually downloading, since this node won't infer the right folder from the URL itself. timeout (default 300 seconds, up to 3600) is worth raising for anything large - a full checkpoint file at default timeout on a slow connection will simply fail partway through. proxy is there if your network needs one to reach the download source. civitai_api_key (optional) is specifically for pulling from CivitAI, which gates some downloads - especially anything tagged mature - behind an account and API key rather than serving it anonymously.
Outputs: model_name_0 through model_name_3, matching each URL slot, typed as a wildcard (*) rather than a fixed type - meaning ComfyUI will let you wire each one into whatever loader node expects a model filename, whether that's a LoRA loader, a checkpoint loader, or anything else expecting that string.
Install: search "ComfyUI-utils-nodes" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/zhangp365/ComfyUI-utils-nodes
Restart afterward. No API key required unless you're pulling gated CivitAI content, in which case grab one from your CivitAI account settings.
Where it actually goes wrong:
- Leave
subdirectoryon the defaultloraswhile downloading a checkpoint or VAE and it'll land in the wrong folder - the file downloads fine, but nothing else in ComfyUI will find it there. Match the subdirectory to the model type deliberately, every time. - HuggingFace gated repos (anything requiring you to accept a license on the model page first) won't download anonymously no matter what URL you point at - that gate exists at the HuggingFace account level, and this node has no equivalent of the
civitai_api_keyfield for HF auth, so gated HF models are effectively out of reach here. - A URL that's actually a webpage rather than a direct file link (a CivitAI model page instead of the version's download link, for instance) will typically fail or download the wrong thing - always use the direct file/download URL, not the page you'd browse to in a web browser.
- The "already exists" idempotency check is filename-based. If you change your mind about which version of a model you want but the new file happens to share a filename with the old one, you may need to delete the old file manually rather than relying on this node to detect the difference and re-fetch.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| url_0 | STRING | — | |
| url_1 | STRING | — | |
| url_2 | STRING | — | |
| url_3 | STRING | — | |
| subdirectory | STRING | loras | — |
| proxy | STRING | — | |
| timeout | INT | 3001–3600 | — |
| civitai_api_keyopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| model_name_0 | * | — |
| model_name_1 | * | — |
| model_name_2 | * | — |
| model_name_3 | * | — |