LoRADownloader
A LoRA loader that downloads its own weights
- model
- clip
- MODEL
- CLIP
You know the drill: someone shares a workflow, you're missing three models, and the LoRA they used isn't in your folder either. LoRADownloader skips that detour. You paste a direct URL to a .safetensors file into it, run the graph, and it fetches the LoRA, saves it to disk, and applies it to your base model exactly like ComfyUI's built-in LoraLoader. Same strength sliders, same MODEL/CLIP outputs - the only difference is a URL field where the dropdown normally lives.
It's one half of the tiny pack holchan/ComfyUI-ModelDownloader, whose sibling ModelDownloader node does the same trick for full checkpoints. LoRADownloader is the loaders-category piece you'd actually wire into a normal generation graph.
How it works
At execution time the node does three things, in order:
- Fetches
lora_linkwithrequests.get(..., stream=True). Redirects are followed, so Civitai-style download links that bounce you to a CDN generally just work. - Saves the bytes into the
outputdirectory. The filename comes from the server'sContent-Dispositionheader, and if the server doesn't send one, you get the fallback nameexample.safetensor. - Loads the file with
load_torch_file(safe_load=True)and applies it via ComfyUI'sload_lora_for_models- the exact code path the stock LoraLoader uses under the hood.
If both strengths are 0, it short-circuits and passes your model and clip through untouched, just like the built-in node.
The inputs that matter
lora_link- the direct file URL. This is the whole point of the node.output- a directory path you type in. It's not a folder picker, it's a raw string, and it's created for you if it doesn't exist. This is where the LoRA lands.strength_model/strength_clip- default 1.0, range −20 to 20. The community's standard advice applies: 1.0 is often too strong for a fresh LoRA; 0.7–0.9 is a saner start.
Wire MODEL and CLIP from your checkpoint loader into the left side, then send the outputs wherever you'd send a normal LoraLoader's - a CLIP Text Encode, a KSampler, whatever.
Installing it
There are no model downloads and no heavy dependencies - the only import it needs beyond ComfyUI core is requests, which ships in ComfyUI's own environment. Either use ComfyUI Manager (search "ComfyUI-ModelDownloader") or:
cd ComfyUI/custom_nodes
git clone https://github.com/holchan/ComfyUI-ModelDownloader
then restart ComfyUI. One honest caveat: as of this writing the upstream repo 404s on GitHub and isn't in the current Manager registry, so the original appears to have been pulled or renamed. If Manager can't find it, a fork of the repo is the way in - the node itself is a single small Python file, so a fork is just as functional.
Where people get burned
- The
example.safetensortrap. Many servers serve files inline without aContent-Dispositionheader, so the fallback name gets used. You end up with a mystery file in your output folder. - The stale-file trap. The node skips re-downloading if a file with that name already exists in
output. Drop a second, different LoRA into the same folder and it silently "loads" the first one. Different filenames per download, or empty the folder, or you'll chase weird output that isn't what you downloaded. - No progress bar. It streams in 1 KB chunks and prints nothing while it works, so a big LoRA looks like a frozen graph. It isn't - just wait.
- Auth-gated links. Gated Hugging Face files or anything needing a token will 401/403, print an error to the console, and return
None, which breaks everything downstream. Use a direct public URL.
Honestly? For daily use the built-in LoraLoader plus a download habit is simpler. Where this earns its keep is portability - a workflow you can hand someone that pulls its own LoRA - or an API pipeline that needs weights on demand. It's a niche utility with real sharp edges, but when you want the self-contained workflow, this is the idea done in the least code possible.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| lora_link | STRING | — | |
| strength_model | FLOAT | 1.00-20–20 | — |
| strength_clip | FLOAT | 1.00-20–20 | — |
| output | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |