Anima XY Sampler
The 'XY' is a lie — it's a one-axis LoRA bake-off, and that's the good part
- MODEL
- Positive
- Negative
- Latent
- VAE
- LoRA List
- IMAGE
Let's get the name out of the way: there is no Y axis. "XY Sampler" sounds like a full grid of prompt-versus-LoRA combinations, and what it actually does is iterate a LoRA list and generate one image per LoRA. That's one axis. It's still exactly what you want, because Anima LoRA comparison is the pack's whole job - the classic workflow is "same prompt, same seed, five LoRAs, pick a winner" - and this node is that workflow in a box.
How it works
The mechanism is the reassuring kind: it doesn't reimplement sampling, it drives ComfyUI's own sampler. For each entry in the connected LORA_LIST, the node loads that LoRA's weights at the list's strength with comfy.sd.load_lora_for_models, then runs comfy.sample.sample - the same code path the built-in KSampler uses - decodes with the VAE, and stacks every result into one IMAGE batch. It prints a running tally in the console ([AnimaXY] 2/5 your_lora.safetensors strength=1.0) so you know which slot is cooking. Wire nothing into LoRA List and it falls back to a single ordinary sample, so the node doubles as a plain KSampler with extra steps.
The inputs
The inputs mirror a KSampler almost exactly:
- MODEL, Positive, Negative, Latent, VAE - standard wiring; the
MODEL/VAEhere come from the pack's AnimaModelLoader (or any loader). - LoRA List (optional) - the
LORA_LISTout of AnimaLoraList. The whole comparison loop hangs off this one wire. - Seed - one seed for the entire batch, which is the point: every LoRA faces the same prompt and same noise, so differences are the LoRA, not luck. There's a
control_after_generatecontrol on it, and the same "seed shows what runs next" trap applies as everywhere in ComfyUI. - Steps, CFG, Sampler, Scheduler, Denoise - Sampler pulls ComfyUI's full list (44 names), Scheduler its 9. For Anima itself, the model card's neighborhood is 30–50 steps, CFG 4–5, and
euler,euler_ancestral, or thedpmpp_2m_sdefamily -euler_ancestral/simpleis the sensible starting point, and anything past CFG 5 tends to overcook it.
What comes out
The output is a single IMAGE whose batch dimension holds one image per LoRA, in list order. That batch is not a grid yet - feed it to the pack's AnimaImageGrid, or extract frames with a batch-split if you want them loose.
Three gotchas
Three things bite people. First, the whole batch is decoded and held in memory at once (torch.cat at the end), so a 20-LoRA run on Anima - already a slow 2B model that takes over a minute a frame on a 4060 - is a genuine queue, not a peek. Plan the list size accordingly. Second, the seed is shared and fixed for all iterations, so you can't randomize per-LoRA; if you wanted that, this isn't the node. Third, an empty or all-(none) list fails at the list node with a ValueError ("at least one valid LoRA must be selected") before the sampler ever runs - friendlier than the silent blank batch you might expect.
Install
Install via ComfyUI Manager (search "Anima LoRA XY") or:
cd ComfyUI/custom_nodes
git clone https://github.com/yunqiankuangyu/comfyui-anima-lora-comparison.git
Restart ComfyUI. Under Anima/LoRA Comparison you'll find this sampler sitting between the list and the grid - the whole point of the pack in one line.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| MODEL | MODEL | — | |
| Positive | CONDITIONING | — | |
| Negative | CONDITIONING | — | |
| Latent | LATENT | — | |
| VAE | VAE | — | |
| Seed | INT | 00–18446744073709550000 | — |
| Steps | INT | 301–10000 | — |
| CFG | FLOAT | 5.00–100 | — |
| Sampler | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| Scheduler | COMBO | simple | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| Denoise | FLOAT | 1.000–1 | — |
| LoRA Listopt | LORA_LIST | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |