ComfyUI Node

LoRADownloader

A LoRA loader that downloads its own weights

By holchan·Created 2 years ago·Updated 2 years ago· 4
LoRADownloader
  • model
  • clip
  • MODEL
  • CLIP
lora_link
strength_model1.00
strength_clip1.00
output

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:

  1. Fetches lora_link with requests.get(..., stream=True). Redirects are followed, so Civitai-style download links that bounce you to a CDN generally just work.
  2. Saves the bytes into the output directory. The filename comes from the server's Content-Disposition header, and if the server doesn't send one, you get the fallback name example.safetensor.
  3. Loads the file with load_torch_file(safe_load=True) and applies it via ComfyUI's load_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.safetensor trap. Many servers serve files inline without a Content-Disposition header, 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.

Categoryloaders

Inputs (6)

NameTypeDefaultDescription
modelMODEL
clipCLIP
lora_linkSTRING
strength_modelFLOAT1.00-20–20
strength_clipFLOAT1.00-20–20
outputSTRING

Outputs (2)

NameTypeDescription
MODELMODEL
CLIPCLIP