ComfyUI Node

AK XZ Batch Lora

Which LoRA actually wins? Now you'll know

By akawana·Created 9 months ago·Updated 7 months ago· 4
AK XZ Batch Lora
  • model_0
  • con_0
  • model_1
  • con_1
  • model_2
  • con_2
  • model_3
  • con_3
  • model_4
  • con_4
  • model_5
  • con_5
  • model_6
  • con_6
  • model_7
  • con_7
  • model_8
  • con_8
  • model_9
  • con_9
  • model_10
  • con_10
  • models
  • conds
  • xz_config
xz_config

Every LoRA collector hits the same wall: you've got eight variants of "the same style" and no idea which one actually works with your current checkpoint. AK XZ Batch Lora, from the ComfyUI-AK-XZ-Axis pack, turns that into one run and one labeled strip instead of eight manual generations. It's honestly the node in this pack that got recommended in the wild for exactly that job - "rotate between LoRAs with a single prompt" is a recurring r/comfyui question, and this is a clean answer.

What it actually does - and what it doesn't

Here's the part to internalize: this node does not load LoRAs. It's not a LoraLoader. Each slot takes an already-loaded model and an already-encoded positive con conditioning, as a pair. So the per-LoRA setup is:

  1. One LoraLoader per LoRA you want to test, all fed from the same checkpoint.
  2. One CLIP Text Encode (positive) - usually the same prompt for every slot.
  3. Feed each slot's model + con into this node.

The node collects up to eleven of those pairs (model_0/con_0 through model_10/con_10), hands the KSampler a list of models and a list of conditionings, and it runs once per pair. Ten or eleven LoRAs in one queue on the same seed: that's the whole value.

Why no negative input?

Deliberate design choice, straight from the README: the author left negatives out to avoid overcomplicating the node. Your negative conditioning just goes directly to the KSampler as usual - it stays constant across the whole run, which is what you want for a fair LoRA comparison anyway. If the pack's other Batch node handles prompts with negatives, this one is deliberately the "models only" lane.

The inputs and outputs that matter

Slots are dynamic, like the prompts node - model_1/con_1 and up only appear once an earlier pair is filled. Inputs you'll actually touch: model_0, con_0 (both required) and however many more pairs you wire up.

Outputs:

  • models (MODEL list) → KSampler model
  • conds (CONDITIONING list) → KSampler positive
  • xz_config (STRING) → AK XZ Axis Plot for the labeled strip

In X mode each slot becomes one labeled image ("Lora: 0", "Lora: 1", ...). In Z mode (with xz_config connected) the list pads or trims to ride along under an existing X-axis sweep, so "which LoRA at which cfg" is one run, not ten.

Install

ComfyUI Manager → search AK XZ → install, or:

cd ComfyUI/custom_nodes
git clone https://github.com/akawana/ComfyUI-AK-XZ-Axis.git

Restart ComfyUI. No pip packages, no model downloads - the pack is pure Python on ComfyUI's own stack. The repo's xz_workflow_loras.json in /workflows/ shows the whole LoraLoader-per-slot pattern wired up.

Where it stumbles

It's not a folder scanner. If you want "iterate over every .safetensors in a directory," this node isn't it - the author has said so directly, and you'd be better served by a LoRA randomizer or a folder-iteration node. Also, the slot labels are just indices ("Lora: 3"), so if you're comparing ten LoRAs you'll want to keep a mental map or rename your LoraLoaders. And as ever with this young pack (December 2025, small footprint): the README and demo workflows are the whole manual, and there's no big community to lean on if you hit a wall.

CategoryAK/XZ Axis

Inputs (23)

NameTypeDefaultDescription
model_0MODEL
con_0CONDITIONING
xz_configoptSTRING
model_1optMODEL
con_1optCONDITIONING
model_2optMODEL
con_2optCONDITIONING
model_3optMODEL
con_3optCONDITIONING
model_4optMODEL
con_4optCONDITIONING
model_5optMODEL
con_5optCONDITIONING
model_6optMODEL
con_6optCONDITIONING
model_7optMODEL
con_7optCONDITIONING
model_8optMODEL
con_8optCONDITIONING
model_9optMODEL
con_9optCONDITIONING
model_10optMODEL
con_10optCONDITIONING

Outputs (3)

NameTypeDescription
modelsMODEL
condsCONDITIONING
xz_configSTRING