Nodes/ComfyUI Load From URL/Load LoRAs from JSON
ComfyUI Node

Load LoRAs from JSON

Load LoRAs from JSON

By g0kuvonlange·Created about a year ago·Updated about a year ago· 2
Load LoRAs from JSON
  • model
  • MODEL
loras_json[ { "url": "https://example.com/lora.safetensors", "strength": 1.0 } ]
downloaderauto

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.

Categoryloaders

Inputs (3)

NameTypeDefaultDescription
modelMODEL
loras_jsonSTRING[ { "url": "https://example.com/lora.safetensors", "strength": 1.0 } ]
downloaderoptCOMBOauto3 options: auto, aria2, python

Outputs (1)

NameTypeDescription
MODELMODEL