Ultimate Lora Loader
A LoRA stack loader that shows you your folders instead of a 500-item dropdown
- model
- clip
- MODEL
- CLIP
The honest one-line description of the Ultimate Lora Loader is "rgthree's Power Lora Loader, but with a folder browser." If you've ever stacked LoRAs in the Power Lora Loader, you already know the pain it fixes: every lora on disk lands in one giant flat dropdown of subfolder/name.safetensors strings, and if your models/loras folder has any organization at all, you spend half your time scrolling. This node keeps the row-based stack - per-lora strength, toggles, reordering - and replaces the picker with a real folder browser that mirrors your actual models/loras tree. Click Add Lora, and you get clickable folders with breadcrumbs to climb back out, and files sitting exactly where they live on disk.
One caveat up front: this pack is new and essentially unknown - no community footprint yet - so treat it as a well-made quality-of-life experiment rather than the battle-tested default. The two things it does differently from the established loader are genuinely good, though, and one fixes a failure mode stock ComfyUI just silently ignores.
Why you'd reach for it
Stacking multiple LoRAs is table stakes by now - style + character + concept in one generation. This node makes that stack pleasant to build and keep: drag-to-reorder by handle (or a priority field if you'd rather type a number), a per-row toggle for A/B testing, toggle-all/delete-all in the header, and quick-edit dialogs for every strength value that match the interaction rgthree popularized.
The differentiator is the folder browser, and it's a real one if you run a folder-per-character or folder-per-style setup. No more parsing characters/sci-fi/armor_heavy.safetensors out of an alphabetical list - you click into characters → sci-fi and there it is.
The other genuinely useful feature is missing-file detection. When a row's lora was moved, renamed, or deleted since the workflow was saved, that row flags red with a ⚠ instead of failing at generation time. That matters because ComfyUI's stock loaders don't warn you at all - they just ignore an un-appliable lora and quietly hand you a result that looks like your LoRA "isn't working." Here you click the flagged name and re-pick a replacement without rebuilding the row.
How it works
Under the hood the whole stack is one JSON string in a widget called loras_data. The JS frontend draws the rows and keeps that JSON in sync; the Python side just reads it and applies each enabled entry in order via comfy.sd.load_lora_for_models - the same call core's LoraLoader makes. Order matters because each lora patches on top of whatever the previous one changed, which is why you can drag rows around. The folder tree comes from a backend route (GET /ultimate_lora_loader/tree) that walks folder_paths.get_filename_list("loras") and re-nests the flat strings into a real tree - so it automatically respects any extra search paths in extra_model_paths.yaml. The frontend caches that tree for 15 seconds, so a lora you just dropped into a folder shows up within about fifteen seconds without a restart.
The inputs and outputs that matter
You only really touch three things:
model(required) - the checkpoint coming in. Wire this or nothing happens.loras_data- the hidden JSON widget that carries your stack. You'll rarely edit it by hand; the row UI does that for you.clip(optional) - this is the clever bit. Leave it unconnected and every lora applies model-only, mirroring core'sLoraLoaderModelOnly, which is perfect for video/upscale/ControlNet pipelines that never touch CLIP. Connect it and each row gains an independent Clip strength column, separate from Model strength.
Outputs are MODEL and CLIP, which feed straight into your sampler or conditioning chain like any other loader.
Installing it
No extra Python dependencies - it only uses folder_paths, comfy.sd, comfy.utils, and aiohttp, all of which ship with ComfyUI. Clone it in, then restart ComfyUI completely (a fresh process, not a browser refresh - that's the classic "why isn't my new node showing up" mistake):
cd ComfyUI/custom_nodes
git clone https://github.com/WaitWut/comfyui-ultimate-lora-loader.git
ComfyUI Manager may find it if you search the pack title, but the README's recommended path is the clone above. ComfyUI Desktop users: check Settings → System Paths, because the real custom_nodes folder isn't always where you'd expect on Desktop installs.
Common gotchas
- Missing-file rows aren't a bug - the ⚠ is the feature. Click the red name to swap in a working file.
- LoRA order really does matter, more the more LoRAs overlap at higher strengths. Drag to reorder rather than assuming it doesn't.
- Architecture binding still applies. This is a loader, not a converter - an Illustrious or Flux LoRA won't work on the wrong base, and it won't warn you either.
- No search box yet in the Add Lora popup (the README lists it as planned). Great for organized folders, less great if you've dumped 500 loras into one flat directory.
- Anime LoRAs (Illustrious/Pony/NoobAI) still usually want CLIP skip 2 downstream, exactly as with any other loader.
If you live in one workflow and stack LoRAs constantly, the folder browser and the missing-file flag make this worth a try. If you need a loader with years of battle-testing behind it, rgthree's Power Lora Loader is still the safe call - but you'll be back here when you're sick of the dropdown.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| loras_data | STRING | [] | — |
| clipopt | CLIP | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |