Nodes/comfyui-timesaver/TS LoRA Loader
ComfyUI Node

TS LoRA Loader

Six LoRAs in one node, reorder by dragging, and it expands into the real thing

By AlexYez·Created 2 years ago·Updated about 22 hours ago· 12
TS LoRA Loader
  • model
  • MODEL
loras_json[]

ComfyUI's native LoRA loader is one LoRA per node, and a chain of six of them eats half your canvas. Worse, reordering means rewiring: unplug this, re-plug that, hope you got the strengths right. TS LoRA Loader collapses the whole stack into one node - add LoRAs with a plus button, drag rows to reorder, set each strength, toggle each on and off - and then does something clever underneath: it doesn't load LoRAs itself at all.

It expands into a chain of the native LoraLoaderModelOnly nodes. That's the detail that makes this worth using rather than merely nice-looking. The behavior is byte-for-byte identical to a hand-built chain, and ComfyUI's caching works per link - so changing the strength of the last LoRA doesn't recompute the ones before it. You get the ergonomics without giving up any of the native behavior.

How it works

The plus button opens a search box over the LoRAs your install actually has; a picked LoRA drops in as a row with its own strength field. Rows reorder by dragging the grip - and order matters, because LoRAs apply one after another, which is exactly how LoRA stacking works: each adapter transforms the model before the next one sees it.

A few things the node does that stock loaders don't:

  • Per-row switches. Turn a LoRA off and it stays in the list with its strength and place; the run skips it, one click brings it back. That's an A/B comparison that costs nothing.
  • Negative strength (down to −10). That's how you damp a LoRA baked into the checkpoint, or run one in reverse.
  • A LoRA missing on this machine costs its own row, not the run. A workflow that arrives from someone else keeps working; the node logs the missing file and continues with the rest.
  • R refreshes the list, the same key that refreshes native loaders - including files you just dropped into models/loras.

Under the hood the stack lives as a single JSON string (loras_json) rather than a pile of widgets, which keeps workflows stable when rows are added or removed.

Inputs and outputs

  • model - the model to apply the stack to.
  • loras_json - internal field the node's own UI writes; you don't type here.

Output: MODEL - the model with the whole stack applied.

It's model-only by design - no CLIP. Modern families keep the text encoder separate, and most LoRAs in circulation are model-side anyway.

Installation

Part of the comfyui-timesaver pack. ComfyUI Manager: search "Timesaver", install, restart. Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/AlexYez/comfyui-timesaver
cd comfyui-timesaver
python -m pip install -r requirements.txt

Restart ComfyUI. It's under TS/utils in the node menu.

The honest verdict

If you use one LoRA at a time, this is pointless - the native loader is right there. The moment you're stacking three or more, or you're forever tweaking which ones are active, the switch toggles and the drag-reorder make it the obvious choice. Two things keep it honest: it's model-only (if your workflow patches CLIP too, keep a native loader around), and because it expands into native nodes, whatever ComfyUI version's LoraLoaderModelOnly does is exactly what you get - no wrapper weirdness, no drift.

CategoryTS/utils

Inputs (2)

NameTypeDefaultDescription
modelMODEL
loras_jsonSTRING[]Internal field: the LoRA stack as JSON. The node's own interface writes it; there is nothing to type here.

Outputs (1)

NameTypeDescription
MODELMODEL