ClybAdaptiveLoraLoader
Stack 20 LoRAs in one node, without the chain
- model
- clip
- MODEL
- CLIP
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 thanstrength_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.
Inputs (62)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The diffusion model the LoRA will be applied to. | |
| clip | CLIP | The CLIP model the LoRA will be applied to. | |
| lora_name_1 | COMBO | The name of the LoRA. | |
| strength_model_1 | FLOAT | 1.00-100–100 | How strongly to modify the diffusion model. This value can be negative. |
| strength_clip_1 | FLOAT | 1.00-100–100 | How strongly to modify the CLIP model. This value can be negative. |
| lora_name_2opt | COMBO | none | 1 options: none |
| strength_model_2opt | FLOAT | 1.00-100–100 | — |
| strength_clip_2opt | FLOAT | 1.00-100–100 | — |
| lora_name_3opt | COMBO | none | 1 options: none |
| strength_model_3opt | FLOAT | 1.00-100–100 | — |
| strength_clip_3opt | FLOAT | 1.00-100–100 | — |
| lora_name_4opt | COMBO | none | 1 options: none |
| strength_model_4opt | FLOAT | 1.00-100–100 | — |
| strength_clip_4opt | FLOAT | 1.00-100–100 | — |
| lora_name_5opt | COMBO | none | 1 options: none |
| strength_model_5opt | FLOAT | 1.00-100–100 | — |
| strength_clip_5opt | FLOAT | 1.00-100–100 | — |
| lora_name_6opt | COMBO | none | 1 options: none |
| strength_model_6opt | FLOAT | 1.00-100–100 | — |
| strength_clip_6opt | FLOAT | 1.00-100–100 | — |
| lora_name_7opt | COMBO | none | 1 options: none |
| strength_model_7opt | FLOAT | 1.00-100–100 | — |
| strength_clip_7opt | FLOAT | 1.00-100–100 | — |
| lora_name_8opt | COMBO | none | 1 options: none |
| strength_model_8opt | FLOAT | 1.00-100–100 | — |
| strength_clip_8opt | FLOAT | 1.00-100–100 | — |
| lora_name_9opt | COMBO | none | 1 options: none |
| strength_model_9opt | FLOAT | 1.00-100–100 | — |
| strength_clip_9opt | FLOAT | 1.00-100–100 | — |
| lora_name_10opt | COMBO | none | 1 options: none |
| strength_model_10opt | FLOAT | 1.00-100–100 | — |
| strength_clip_10opt | FLOAT | 1.00-100–100 | — |
| lora_name_11opt | COMBO | none | 1 options: none |
| strength_model_11opt | FLOAT | 1.00-100–100 | — |
| strength_clip_11opt | FLOAT | 1.00-100–100 | — |
| lora_name_12opt | COMBO | none | 1 options: none |
| strength_model_12opt | FLOAT | 1.00-100–100 | — |
| strength_clip_12opt | FLOAT | 1.00-100–100 | — |
| lora_name_13opt | COMBO | none | 1 options: none |
| strength_model_13opt | FLOAT | 1.00-100–100 | — |
| strength_clip_13opt | FLOAT | 1.00-100–100 | — |
| lora_name_14opt | COMBO | none | 1 options: none |
| strength_model_14opt | FLOAT | 1.00-100–100 | — |
| strength_clip_14opt | FLOAT | 1.00-100–100 | — |
| lora_name_15opt | COMBO | none | 1 options: none |
| strength_model_15opt | FLOAT | 1.00-100–100 | — |
| strength_clip_15opt | FLOAT | 1.00-100–100 | — |
| lora_name_16opt | COMBO | none | 1 options: none |
| strength_model_16opt | FLOAT | 1.00-100–100 | — |
| strength_clip_16opt | FLOAT | 1.00-100–100 | — |
| lora_name_17opt | COMBO | none | 1 options: none |
| strength_model_17opt | FLOAT | 1.00-100–100 | — |
| strength_clip_17opt | FLOAT | 1.00-100–100 | — |
| lora_name_18opt | COMBO | none | 1 options: none |
| strength_model_18opt | FLOAT | 1.00-100–100 | — |
| strength_clip_18opt | FLOAT | 1.00-100–100 | — |
| lora_name_19opt | COMBO | none | 1 options: none |
| strength_model_19opt | FLOAT | 1.00-100–100 | — |
| strength_clip_19opt | FLOAT | 1.00-100–100 | — |
| lora_name_20opt | COMBO | none | 1 options: none |
| strength_model_20opt | FLOAT | 1.00-100–100 | — |
| strength_clip_20opt | FLOAT | 1.00-100–100 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | The modified diffusion model. |
| CLIP | CLIP | The modified CLIP model. |