Nodes/ComfyUI_LC123_nodes/LC LoRA Loader (single) 🎚️
ComfyUI Node

LC LoRA Loader (single) 🎚️

One LoRA, one row, no CLIP to argue with

By lonecatone23·Created 3 months ago·Updated a day ago· 46
LC LoRA Loader (single) 🎚️
  • model
  • model
◄lora_rows[]►

Every ComfyUI graph ends up with a turbo LoRA, a style LoRA, or a "this model needs a nudge" LoRA sitting on its own somewhere. The stock LoraLoader works for that, but gives you two strength fields to keep in sync and a dropdown you scroll through blind. LCLoraLoaderSingle is one row - file browser, scrubbable strength, on/off toggle - and exactly one output: model.

What it is, and the hole it fills

The pack's multi-row LC LoRA Loader is a rebuild of rgthree's Power Lora Loader, and the author names three things he was fixing: it didn't render in Nodes 2.0, it re-centred itself on a cross-page paste, and its Info menu item never showed anything. That's less a swipe than a description of the ecosystem - rgthree's own startup warning says he was "not able to invest the time to investigate and overhaul rgthree-comfy" for Nodes 2.0, and Power Lora Loader rendering with stacked text fields is one of the documented casualties.

This node is one row of that loader with add/remove and the CLIP side stripped out. Reach for it when the LoRA is a fixed part of the recipe - a distilled adapter, a style you never turn off, a MOSS Image LoRA that only touches the diffusion model - rather than something you're stacking three of.

How it actually works

The row isn't a widget. It's HTML/JS, and its state serializes into a hidden STRING widget called lora_rows as JSON: {"on": bool, "lora": filename, "strength": float}. The node's own tooltip says as much and warns you not to type in it. That design is why the same face works on the classic canvas and under Nodes 2.0, and why a paste across pages doesn't reset it - the JS is the UI, the widget is only what gets saved and sent to Python.

Python slices that array to [:1], then calls comfy.sd.load_lora_for_models with the same strength for model and clip - with clip=None. No clip wired means an adapter's text-encoder half simply isn't applied. Loaded files are cached by path and mtime, so scrubbing the strength doesn't re-read the file from disk, and an overwritten file is still picked up.

Inputs and outputs

Two inputs, one of which isn't for you.

  • model (required) - the diffusion model to patch, straight from your checkpoint or optimizer.
  • lora_rows (optional STRING) - internal. The row lives here once saved. Don't hand-edit; if it looks wrong, drop a fresh node.
  • model out - the patched model, into your sampler.

The row itself gives you the on/off toggle, the file picker (browses your loras folder as deep as it goes, with fuzzy search across the whole library), and the strength - click an arrow to step 0.05, drag to scrub, click to type. The ℹ button reads the LoRA's own header and shows trigger words, pulling the top tags out of Kohya's ss_tag_frequency table or a single modelspec.trigger_phrase. Local file read, no network call. No ℹ? Settings > LC Settings ⚙️ > Performance has a LoRA loader info button toggle.

Install

Manager: search ComfyUI_LC123_nodes. Manually:

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

Restart ComfyUI. There's no requirements.txt and no pip step - the pack leans on the torch/numpy ComfyUI already ships. Two things people trip on: __init__.py has to sit directly in ComfyUI/custom_nodes/ComfyUI_LC123_nodes/, not one folder deeper, and the console prints an [LC123] + line per module as it loads. No lines means the folder structure is off. After updating, restart and Ctrl+F5 or the old JS stays cached in the browser.

Where people get burned

A strength of 0 is a no-op, not an error. Rows that are off, at 0, or pointing at a file that's gone are skipped so one missing LoRA can't kill the graph. Friendly, right up until you're wondering why nothing changed. Check the toggle and the number, and watch the console - it prints a line when it skips a row or finds a moved LoRA by filename.

Model-only costs you the text-encoder half. Fine for most 2026-era adapters, which leave the TE alone. If the LoRA is meant to reshape prompts, use the multi-row LC LoRA Loader, which has a clip output.

The base model has to match. A Flux LoRA on an SDXL checkpoint doesn't error, it quietly does nothing - the single most common "my LoRA isn't working" report there is. Same for a missing trigger word in the prompt, which is exactly what the ℹ button exists for.

Shared workflows will complain. Missing node? Install the pack, then Manager > Install Missing Custom Nodes for whatever else the graph needs.

CategoryLC123/loaders

Inputs (2)

NameTypeDefaultDescription
modelMODEL—
lora_rowsoptSTRING[]Internal: the one row (on/lora/strength), maintained by the node's own face.

Outputs (1)

NameTypeDescription
modelMODEL—