Nodes/ComfyUI-ClybsChromaNodes/ClybAdaptiveLoraLoader
ComfyUI Node

ClybAdaptiveLoraLoader

Stack 20 LoRAs in one node, without the chain

By Clybius·Created about a year ago·Updated 3 months ago· 14
ClybAdaptiveLoraLoader
  • model
  • clip
  • MODEL
  • CLIP
◄lora_name_1▾►
◄strength_model_11.00►
◄strength_clip_11.00►
◄lora_name_2none►
◄strength_model_21.00►
◄strength_clip_21.00►
◄lora_name_3none►
◄strength_model_31.00►
◄strength_clip_31.00►
◄lora_name_4none►
◄strength_model_41.00►
◄strength_clip_41.00►
◄lora_name_5none►
◄strength_model_51.00►
◄strength_clip_51.00►
◄lora_name_6none►
◄strength_model_61.00►
◄strength_clip_61.00►
◄lora_name_7none►
◄strength_model_71.00►
◄strength_clip_71.00►
◄lora_name_8none►
◄strength_model_81.00►
◄strength_clip_81.00►
◄lora_name_9none►
◄strength_model_91.00►
◄strength_clip_91.00►
◄lora_name_10none►
◄strength_model_101.00►
◄strength_clip_101.00►
◄lora_name_11none►
◄strength_model_111.00►
◄strength_clip_111.00►
◄lora_name_12none►
◄strength_model_121.00►
◄strength_clip_121.00►
◄lora_name_13none►
◄strength_model_131.00►
◄strength_clip_131.00►
◄lora_name_14none►
◄strength_model_141.00►
◄strength_clip_141.00►
◄lora_name_15none►
◄strength_model_151.00►
◄strength_clip_151.00►
◄lora_name_16none►
◄strength_model_161.00►
◄strength_clip_161.00►
◄lora_name_17none►
◄strength_model_171.00►
◄strength_clip_171.00►
◄lora_name_18none►
◄strength_model_181.00►
◄strength_clip_181.00►
◄lora_name_19none►
◄strength_model_191.00►
◄strength_clip_191.00►
◄lora_name_20none►
◄strength_model_201.00►
◄strength_clip_201.00►

If you've ever chained five LoraLoader nodes in a row because you wanted a style, a character, and a detail LoRA all at once, this is the node that asks why you're doing it in the slow way. ClybAdaptiveLoraLoader stacks up to 20 LoRAs in a single node, with an independent strength_model and strength_clip per slot, negative strengths allowed. It's built for the Chroma habit of running several Flux LoRAs on one base - Chroma famously eats Flux LoRAs extremely well - but it works on any model you throw at it.

How it works

The mechanical trick is in how it applies them. ComfyUI's built-in chain loader clones the model once per LoRA; this node clones the model exactly once and merges every slot's patches into that single clone. If you're stacking six adapters, that's six clones saved per queue. It also caches each LoRA file's parsed weights per slot (keyed by file path), so re-running the same workflow skips re-reading files from disk. Swap a LoRA in a slot and the cache for that slot is dropped automatically - no stale weights.

The UI does the "adaptive" part: a small JS frontend reveals lora_name_2 only after you set slot 1 to a real LoRA, then lora_name_3, and so on, up to the cap of 20. Set a slot back to "none" and the trailing widgets tuck away. Hidden widget values survive workflow save/load, so sharing a packed workflow doesn't silently drop slots.

The inputs that matter

  • model / clip - the MODEL and CLIP pair you're patching. Both come back out modified.
  • lora_name_1..20 - pick the LoRA, or "none" to skip a slot.
  • strength_model_N - how hard the patch hits the diffusion model. This is the one that decides how visible the LoRA is. Goes negative if you want to subtract a LoRA's effect (a real technique for style subtraction).
  • strength_clip_N - how hard it hits the CLIP text encoder. Often you want this lower than strength_model (Flux-style LoRAs often ship with a clip strength well below 1.0).

Two behaviors worth knowing: a slot with both strengths at 0 is skipped entirely, and slots are applied in order (lowest number first), so LoRA stacking order matters exactly as much as it does in the chain loader.

Outputs and wiring

Outputs are the patched MODEL and CLIP - wire them straight into your KSampler and CLIP Text Encode as you would any loaded model. In a Chroma workflow, this is the natural place to combine a base style LoRA with one or two subject LoRAs before the sampler.

Installing

Part of the ComfyUI-ClybsChromaNodes pack; nothing extra to install beyond ComfyUI itself:

cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/Clybius/ComfyUI-ClybsChromaNodes.git
# restart ComfyUI

Or ComfyUI Manager → search "ComfyUI-ClybsChromaNodes". The LoRA dropdowns read from your normal models/loras folder - no model files are downloaded by the pack.

Common issues

Two things catch people. First, the node is flagged EXPERIMENTAL in the code, so it can lag behind ComfyUI internals after a big update - if it throws on load, update the pack before blaming your workflow. Second, the dynamic slot UI only reveals the next slot after you pick a LoRA in the previous one; if you're staring at a node with no lora_name_2 widget, that's not a bug, that's the adaptive bit doing its job. And remember the ordering rule: if a LoRA combination looks wrong, try swapping slot order before touching strengths.

Categoryloaders

Inputs (62)

NameTypeDefaultDescription
modelMODELThe diffusion model the LoRA will be applied to.
clipCLIPThe CLIP model the LoRA will be applied to.
lora_name_1COMBOThe name of the LoRA.
strength_model_1FLOAT1.00-100–100How strongly to modify the diffusion model. This value can be negative.
strength_clip_1FLOAT1.00-100–100How strongly to modify the CLIP model. This value can be negative.
lora_name_2optCOMBOnone1 options: none
strength_model_2optFLOAT1.00-100–100—
strength_clip_2optFLOAT1.00-100–100—
lora_name_3optCOMBOnone1 options: none
strength_model_3optFLOAT1.00-100–100—
strength_clip_3optFLOAT1.00-100–100—
lora_name_4optCOMBOnone1 options: none
strength_model_4optFLOAT1.00-100–100—
strength_clip_4optFLOAT1.00-100–100—
lora_name_5optCOMBOnone1 options: none
strength_model_5optFLOAT1.00-100–100—
strength_clip_5optFLOAT1.00-100–100—
lora_name_6optCOMBOnone1 options: none
strength_model_6optFLOAT1.00-100–100—
strength_clip_6optFLOAT1.00-100–100—
lora_name_7optCOMBOnone1 options: none
strength_model_7optFLOAT1.00-100–100—
strength_clip_7optFLOAT1.00-100–100—
lora_name_8optCOMBOnone1 options: none
strength_model_8optFLOAT1.00-100–100—
strength_clip_8optFLOAT1.00-100–100—
lora_name_9optCOMBOnone1 options: none
strength_model_9optFLOAT1.00-100–100—
strength_clip_9optFLOAT1.00-100–100—
lora_name_10optCOMBOnone1 options: none
strength_model_10optFLOAT1.00-100–100—
strength_clip_10optFLOAT1.00-100–100—
lora_name_11optCOMBOnone1 options: none
strength_model_11optFLOAT1.00-100–100—
strength_clip_11optFLOAT1.00-100–100—
lora_name_12optCOMBOnone1 options: none
strength_model_12optFLOAT1.00-100–100—
strength_clip_12optFLOAT1.00-100–100—
lora_name_13optCOMBOnone1 options: none
strength_model_13optFLOAT1.00-100–100—
strength_clip_13optFLOAT1.00-100–100—
lora_name_14optCOMBOnone1 options: none
strength_model_14optFLOAT1.00-100–100—
strength_clip_14optFLOAT1.00-100–100—
lora_name_15optCOMBOnone1 options: none
strength_model_15optFLOAT1.00-100–100—
strength_clip_15optFLOAT1.00-100–100—
lora_name_16optCOMBOnone1 options: none
strength_model_16optFLOAT1.00-100–100—
strength_clip_16optFLOAT1.00-100–100—
lora_name_17optCOMBOnone1 options: none
strength_model_17optFLOAT1.00-100–100—
strength_clip_17optFLOAT1.00-100–100—
lora_name_18optCOMBOnone1 options: none
strength_model_18optFLOAT1.00-100–100—
strength_clip_18optFLOAT1.00-100–100—
lora_name_19optCOMBOnone1 options: none
strength_model_19optFLOAT1.00-100–100—
strength_clip_19optFLOAT1.00-100–100—
lora_name_20optCOMBOnone1 options: none
strength_model_20optFLOAT1.00-100–100—
strength_clip_20optFLOAT1.00-100–100—

Outputs (2)

NameTypeDescription
MODELMODELThe modified diffusion model.
CLIPCLIPThe modified CLIP model.