Nodes/ComfyUI LC123 Nodes/LC LoRA Loader ๐ŸŽš๏ธ
ComfyUI Node

LC LoRA Loader ๐ŸŽš๏ธ

The Power Lora Loader, rebuilt for the frontend that broke it

By lonecatone23ยทCreated 2 months agoยทUpdated about 7 hours agoยท 22
LC LoRA Loader ๐ŸŽš๏ธ
  • model
  • clip
  • model
  • clip
โ—„lora_rows[]โ–บ

If you've used ComfyUI for more than a week you've stacked three LoraLoader nodes in a row and hated it. rgthree's Power Lora Loader is the fix everyone installs - one node, as many rows as you want, per-row enable and strength. LC LoRA Loader is that same idea, rebuilt by lonecatone23 for three specific reasons the original stopped working properly: it doesn't render in Nodes 2.0, it jumps position when you copy/paste across tabs, and its Info menu never showed anything.

That's not a random complaint list. rgthree's own maintainer confirmed in November 2025 that Nodes 2.0 broke rendering on Power Lora Loader and Fast Groups Bypasser, warned users at startup, and said he wasn't going to invest the time to overhaul the pack. As of mid-2026 the issue is still open. So if your LoRA rows are rendering as stacked text fields, this is the drop-in answer.

How it works

The row UI is real HTML/JS (web/lc_lora_loader.js), not LiteGraph widgets, which is why it behaves identically in Nodes classic and Nodes 2.0 and never touches the node's position. The rows themselves are serialized into a hidden lora_rows string widget as JSON, and Python walks that list on execution.

Applying them is deliberately boring: for each enabled row it loads the file with comfy.utils.load_torch_file(..., safe_load=True) and calls comfy.sd.load_lora_for_models - exactly what a chain of stock LoraLoader nodes does, in row order. Files are cached per run, so the same LoRA in two rows isn't read twice.

Two behaviours matter here:

  • Rows that are off, at strength 0, or pointing at a file you renamed get skipped, not fatal. Your graph keeps running. Which also means a deleted LoRA fails silently - one good reason to notice when an image suddenly loses the thing you trained.
  • The โ„น Info button is a local file read. It hits a localhost route, struct-unpacks the safetensors header, and pulls trigger words from Kohya's ss_tag_frequency table (top 25 by count, or a single modelspec.trigger_phrase if that's all there is), plus the base-model string from ss_base_model_version / modelspec.architecture. No API, no key, nothing leaves your machine. Handy for the classic "cross-architecture LoRA that loads fine and does nothing" trap.

Inputs and outputs

model and clip are both optional. Wire the model only and it's a model-only chain; same for clip. lora_rows is internal - don't type in it.

It outputs model and clip, straight into your sampler and text encoder.

One tradeoff worth stating: there's a single strength per row applied to both model and clip, where rgthree lets you set them separately. If you routinely run model 1.0 / clip 0.5 per LoRA, that's the one thing you'll miss. Strength control itself is rgthree's โ—€ number โ–ถ layout - click an arrow for 0.05 steps, drag the number to scrub, click it to type.

Install

ComfyUI Manager โ†’ search the pack title ComfyUI LC123 Nodes, or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes.git

Then restart ComfyUI. There is no requirements.txt to run - the pack only uses what ComfyUI ships with, so there's no pip step to get wrong. Two things to check: __init__.py must sit directly in ComfyUI/custom_nodes/ComfyUI_LC123_nodes/, and after any pack update you should hard-refresh the browser or the JS face won't reload.

Common issues

A row does nothing. Ten to one the file moved or was renamed - skipped by design. Re-pick it from the dropdown. Next candidate: architecture mismatch (a Pony LoRA on a plain SDXL base is the classic). The Info button shows the base the file was trained on; believe it. One more thing: this pack has almost no community footprint - an exact-phrase search of the Reddit corpus returns nothing - so you're early to it. Readable, dependency-free code; nobody's blog post to fall back on.

The weights changed but nothing looked different. LoRAs are architecture-bound, and the old 0.5โ€“0.8 strength rule of thumb is SDXL-era advice - on newer architectures people run 1.0 and up. Also check you're not fighting a missing trigger word, and that you didn't leave the row enabled at a strength that rounds to zero in the UI.

Dropdown is empty or the picker won't open. Rows read ComfyUI/models/loras/; if you keep LoRAs on a second path, that path needs to be declared to ComfyUI (extra_model_paths.yaml), not just to your file manager.

Info button says it couldn't read the header. That usually means the file isn't safetensors. Convert it or accept the manual lookup. If you'd rather not have the button at all, turn it off for every node at once under Settings โ†’ LC123 โ†’ Performance โ†’ LoRA loader info button.

CategoryLC123/loaders

Inputs (3)

NameTypeDefaultDescription
modeloptMODELDiffusion model to apply the enabled LoRAs to. Optional: leave unconnected for a clip-only chain.
clipoptCLIPCLIP to apply the enabled LoRAs to. Optional: leave unconnected for a model-only chain.
lora_rowsoptSTRING[]Internal: the row list (on/lora/strength), maintained by the node's own face. Not meant to be typed by hand.

Outputs (2)

NameTypeDescription
modelMODELโ€”
clipCLIPโ€”