Load LoRAs from JSON
Load LoRAs from JSON
- model
- MODEL
The normal way to run three LoRAs in ComfyUI is three Load LoRA nodes, each pointing at a file that already lives in your models/loras folder. That's fine until your LoRAs live on a server instead of the local disk - and then every workflow starts with manual downloads. Load LoRAs from JSON takes the other approach: you hand it a JSON list of URLs and strengths, and it downloads, caches, and stacks them all into a single MODEL, one node instead of three.
It's part of the tiny ComfyUI-Load-From-URL pack, which is built around one idea: paste a URL, skip the manual download. This is the multi-LoRA variant, and it's the one you want if you're hosting .safetensors files on a server and reusing the same stack across workflows.
How it works
The node parses your JSON, then for each entry checks a cache (keyed by an MD5 of the URL, stored in ComfyUI/input/url_loras), downloads if it's not there, loads the tensor file, and applies it on top of the model - chaining each LoRA into the next. Entries with no URL or a strength of 0.0 are skipped rather than erroring. The downloader follows the same auto / aria2 / python logic as the rest of the pack: auto does a quick CDN-cache HEAD check, uses aria2's 16-stream parallel download when the file is cold, and falls back to plain Python when aria2 isn't installed.
The JSON shape is simple - each object needs a url, and strength defaults to 1.0 if you leave it out:
[
{ "url": "https://example.com/lora.safetensors", "strength": 1.0 },
{ "url": "https://example.com/another.safetensors", "strength": 0.7 }
]
Inputs and output
Only three inputs, and two of them are the whole node:
- model (MODEL) - your checkpoint's model output. Feed it the MODEL from a checkpoint loader.
- loras_json (STRING, multiline) - the JSON array above. Paste it in the box.
- downloader - leave on
auto.
The single output is a MODEL, wired straight into the sampler's model input. Note what's not there: no CLIP input, and the pack applies LoRAs with a text-encoder strength of zero. For SD1.5/SDXL style LoRAs that include trigger-word conditioning baked into the CLIP path, you may notice prompt-side effects don't fully carry over - if that matters to you, a loader that handles CLIP (like rgthree's Power Lora Loader) is the more thorough tool. For most current architectures this is a non-issue, and the output just plugs into your KSampler like any other loaded model.
Install
ComfyUI Manager, search "ComfyUI Load From URL", or:
cd ComfyUI/custom_nodes
git clone https://github.com/g0kuvonlange/ComfyUI-Load-From-URL
Restart ComfyUI and you're done - no models to download, everything is fetched at runtime. The README's only prerequisite is optional: aria2c for parallel downloads (sudo apt-get install -y aria2 on Debian/Ubuntu).
Gotchas
The JSON must be an array - if the node's console prints "JSON must be an array/list" it silently hands your model back unchanged, so double-check your brackets before debugging anything downstream. The cache is keyed by URL, so if a LoRA at the same link gets updated you'll keep loading the stale copy until you clear input/url_loras. And the usual honesty note: you're pulling tensors off the internet and loading them into your pipeline, so only feed it URLs you trust - the pack has no big community footprint, and like any custom node it's worth a skim before you install. Small tool, specific job, does it well.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| loras_json | STRING | [ { "url": "https://example.com/lora.safetensors", "strength": 1.0 } ] | — |
| downloaderopt | COMBO | auto | 3 options: auto, aria2, python |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |