Nodes/ComfyUI-AppBuilder/AppBuilder Lora Stack
ComfyUI Node

AppBuilder Lora Stack

A LoRA stack your app users can actually drive

By lihaoyun6·Created 2 months ago·Updated 24 days ago· 15
AppBuilder Lora Stack
  • model
  • clip
  • MODEL
  • CLIP
lora_stack[{"lora_name":"None","strength":1.0,"enabled":true}]

If you've used rgthree's Power Lora Loader, you already know the shape of this node - a single entry point that stacks multiple LoRAs so you don't chain a dozen Lora Loaders down the graph. AppBuilderLoraStack is the app-UI sibling of that idea. The difference is where the list of LoRAs comes from: instead of you clicking through combo boxes, it's a JSON string the app's web form generates. The app's users pick LoRAs in a friendly picker; this node turns that pick into real MODEL and CLIP patches.

How it works

The single required input is lora_stack, a STRING holding JSON like this:

[
  {"lora_name": "None", "strength": 1.0, "enabled": true}
]

At execution the node parses the array and applies each entry through ComfyUI's own LoraLoader - no reinvented fusion logic. The good behavior is all in the filtering, and it's exactly what you want for an app where an end user's machine might not have every LoRA you listed:

  • Entries with enabled: false are skipped.
  • Names of "None" are skipped.
  • A missing LoRA file logs a warning and skips instead of crashing the run - the app doesn't hard-fail because someone else's disk lacks a file.
  • Each entry supports decoupled strength_model and strength_clip (falling back to the single strength value), the same split rgthree popularized. If both strengths are 0 it skips the fusion entirely to save a pass.

Wiring it up

Feed it a base model and clip from a checkpoint loader, then pass the outputs on:

Load Checkpoint (model, clip) → AppBuilderLoraStack → KSampler

The optional model and clip inputs are MODELS/CLIPs like any other; leave them empty and the node returns nothing useful, so wire them. In a real app setup the LoRA picker in the AppBuilder config panel writes the JSON into lora_stack, and the user's selections flow straight through. When the config panel auto-detects that a target node's lora_stack slot is connected, it presents it as a 📚 LORA STACK control - the same JSON, nicer face.

Install

It ships in the PowerPanel pack (also labelled "ComfyUI-AppBuilder" in older docs - lihaoyun6 renamed the repo):

cd ComfyUI/custom_nodes
git clone https://github.com/lihaoyun6/ComfyUI-PowerPanel

Restart ComfyUI, or install via Manager. Only pynvml and psutil in requirements.txt, both auto-installed; no models to fetch. LoRAs come from your normal models/loras folder.

Gotchas

The one that bites: because the node's name list only comes from lora_stack, a LoRA won't appear until it's on disk - and if a user's machine is missing one, the node warns and continues with the rest. That's a feature for apps, but it means a silently-thinner stack if you don't read the log. Prefer enabled: false over deleting entries when you want to keep a picker option around without applying it.

CategoryAppBuilder

Inputs (3)

NameTypeDefaultDescription
lora_stackSTRING[{"lora_name":"None","strength":1.0,"enabled":true}]
modeloptMODEL
clipoptCLIP

Outputs (2)

NameTypeDescription
MODELMODEL
CLIPCLIP