⚗ Alchemica LoRA Stack (6 slots + pass-through)
The tidy-wiring LoRA stack
- model
- clip
- pass_1
- pass_2
- pass_3
- pass_4
- pass_5
- pass_6
- pass_7
- pass_8
- model
- clip
- pass_1
- pass_2
- pass_3
- pass_4
- pass_5
- pass_6
- pass_7
- pass_8
Functionally this is six LoRA loaders chained with a list of what's active. Where it stops being boring is the pass-through sockets, which are the answer to a specific and very real annoyance: on a Krea 2 graph the VAE has to reach the sampler, and if your LoRA stack sits between the loader and everything else, that VAE has to be re-wired from the loader to the far side of the graph, past the stack.
Pass-throughs let it ride along. Plug the VAE into pass_1 and it comes out of pass_1 on the other side unchanged.
Inputs
model- from your loader (or a model patch, if you're using the NAG node).lora_1…lora_6- six slots, each an enum of everything inmodels/loras.(none)means the slot is off.strength_1…strength_6- per-slot model weight, -4 to 4. 0 = that slot does nothing, negative = the opposite effect.clip(optional) - connect your text encoder and the LoRAs also act on the text side. Leave it disconnected if you don't want the prompt encoder touched.strength_clip(optional) - one multiplier for the text part, so you don't have to guess a per-LoRA clip weight for all six slots.pass_1…pass_8- type-agnostic in, same thing out. The interface shows the pairs in use plus one free one, and a new pair appears when you connect the previous one.
Outputs: model, clip, pass_1 … pass_8.
The bit that changed in 1.1
Older builds had a summary output carrying the list of what loaded. It's gone from the new node - the list of active LoRAs, one per line, with missing files flagged as NOT FOUND, is now shown inside the node after a run. Better, honestly: nobody was wiring a text summary anywhere.
The 1.0 node keeps its riepilogo output for old workflows. If you're on a workflow that was saved against the old node and the wires look scrambled, that's the fix-up the pack does on load; nothing to do by hand.
Wire order
Load Krea 2 ──model──► LoRA Stack ──model──► [NAG patch] ──► Alchemica KSampler
──vae───► pass_1 ──────────────pass_1──────────► (sampler vae socket)
Two things worth knowing about the order. The LoRA stack comes before the attention-guidance patch, so the guidance applies on top of the LoRAs. And the sampler's vae socket is optional - filling it just means the sampler decodes and shows the finished image itself, which is one less node.
If you have a two-stage workflow with a refiner_model, put a second LoRA stack on that model instead of sharing one. The pack's whole point about refiner models is that you can compose with one checkpoint and refine with another; a shared LoRA stack quietly defeats that.
Installing
# ComfyUI Manager: search "AlchemicaSampler"
cd ComfyUI/custom_nodes && git clone https://github.com/Nessuno76/ComfyUI-AlchemicaSampler
ComfyUI 0.36+, no pip dependencies, restart the server. LoRA files go in models/loras as usual.
Where people get burned
A slot showing a name that isn't loaded. NOT FOUND in the in-node list means the file vanished (or the path changed) but the workflow still references it. Nothing loads and nothing errors loudly. Read the list.
Expecting strength_clip to work without wiring clip. It's the multiplier for the text side of the LoRAs; with no clip connected there is no text side to multiply.
A strong LoRA plus variety above ~0.3. The pack traced wet-skin/droplet artifacts to ancestral-noise amplitude on strong-LoRA combinations - clean at 0.15, reproducible above 0.3. It's not the LoRA, but the LoRA is what makes it show. Drop variety first.
Re-calibrating nothing after changing the stack. From 1.1 the calibration profile carries a signature of the LoRA stack, and (auto) prefers a profile made with the same LoRAs. If you've changed what's loaded, either re-calibrate or expect the report to tell you the profile was made without them.
Negative strength for "removing" a style. It does work, and it also does strange things to colour coherence. Small numbers, one slot at a time.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| lora_1 | COMBO | (nessuna) = slot off | |
| strength_1 | FLOAT | 1.00-4–4 | Model weight. 0 = off, negative = opposite effect |
| lora_2 | COMBO | (nessuna) = slot off | |
| strength_2 | FLOAT | 1.00-4–4 | Model weight. 0 = off, negative = opposite effect |
| lora_3 | COMBO | (nessuna) = slot off | |
| strength_3 | FLOAT | 1.00-4–4 | Model weight. 0 = off, negative = opposite effect |
| lora_4 | COMBO | (nessuna) = slot off | |
| strength_4 | FLOAT | 1.00-4–4 | Model weight. 0 = off, negative = opposite effect |
| lora_5 | COMBO | (nessuna) = slot off | |
| strength_5 | FLOAT | 1.00-4–4 | Model weight. 0 = off, negative = opposite effect |
| lora_6 | COMBO | (nessuna) = slot off | |
| strength_6 | FLOAT | 1.00-4–4 | Model weight. 0 = off, negative = opposite effect |
| clipopt | CLIP | Optional: connect it and the LoRAs also act on the text encoder | |
| strength_clipopt | FLOAT | 1.00-4–4 | Single multiplier for the text part |
| pass_1opt | * | Pass-through: whatever enters leaves unchanged (e.g. the VAE), only to keep the wires tidy | |
| pass_2opt | * | Pass-through: whatever enters leaves unchanged (e.g. the VAE), only to keep the wires tidy | |
| pass_3opt | * | Pass-through: whatever enters leaves unchanged (e.g. the VAE), only to keep the wires tidy | |
| pass_4opt | * | Pass-through: whatever enters leaves unchanged (e.g. the VAE), only to keep the wires tidy | |
| pass_5opt | * | Pass-through: whatever enters leaves unchanged (e.g. the VAE), only to keep the wires tidy | |
| pass_6opt | * | Pass-through: whatever enters leaves unchanged (e.g. the VAE), only to keep the wires tidy | |
| pass_7opt | * | Pass-through: whatever enters leaves unchanged (e.g. the VAE), only to keep the wires tidy | |
| pass_8opt | * | Pass-through: whatever enters leaves unchanged (e.g. the VAE), only to keep the wires tidy |
Outputs (10)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| pass_1 | * | — |
| pass_2 | * | — |
| pass_3 | * | — |
| pass_4 | * | — |
| pass_5 | * | — |
| pass_6 | * | — |
| pass_7 | * | — |
| pass_8 | * | — |