ComfyUI Node

Axis Pack

Change three things at once per grid cell — that's what packing is for

By kenjiqq·Created 3 years ago·Updated about a year ago· 76
Axis Pack
  • input_a
  • input_b
  • input_c
  • input_d
  • input_e
  • input_f
  • input_g
  • PACK
label

Axis Pack is how you cheat the XY grid's one-value-per-axis limit. The grid can sweep a row value against a column value - but what if you want a single row to swap the checkpoint and the LoRA and the prompt all at once? That's packing: bundle up to seven values into one PACK, drop that pack into a list, and the grid sweeps the whole bundle as if it were a single value.

It comes from kenjiqq/qq-nodes-comfyui, and the README's own "Axis Packing Grid" workflow example uses it to pass a unet, clip, and vae through one axis. The neat part: the pack carries its own label, so you can also use it with just one input purely to control what the final grid image calls that row.

How it works

  • input_a (required) - the first value, any type.
  • input_b through input_g (optional) - six more, any types, seven values total.
  • label - a STRING. Type it directly (it's a widget, not a forced input). This becomes the grid annotation for that row/column, replacing the default str(value) label.
  • PACK - the output.

Internally it builds a PackedAxisItem(label, [values]). When XY Grid Helper encounters a packed item in a list, it uses the item's label for the grid text and hands the values out as one AXIS_VALUE. On the output side you split it back apart with Axis Unpack - which sits in the same pack but wasn't in your search results - to get the individual values for your sampler.

The flow, end to end

  1. Build two or three Axis Pack nodes for the combinations you care about (checkpoint A + prompt 1, checkpoint A + prompt 2, …).
  2. Feed their PACK outputs into Any List to make the row or column list.
  3. Feed that list to XY Grid Helper.
  4. On the other side, route the helper's row/column output through Axis Unpack → get your values back → wire them to the model loader, text encoder, etc.

Gotchas

  • The truthiness trap, again. Like Any List, this node only appends optional inputs that are truthy. A 0, empty string, or False in slots b–g silently vanishes. If your bundle feels one value short, that's the culprit.
  • Label only, one input, is a legit use. input_a is required, but you can pack a single real value with a descriptive label - you get grid labels that say "Flux schnell" instead of the raw string. This is the cheapest way to make a grid readable, and people forget the pack offers it.
  • Keep types consistent per slot. Axis Unpack gives you back a fixed set of outputs; if slot b is a string in one pack and a model in another, the unpacked wire type is whatever ComfyUI resolves to - usually a headache.

Installing it

Part of qq-nodes-comfyui, no pip requirements:

cd ComfyUI/custom_nodes
git clone https://github.com/kenjiqq/qq-nodes-comfyui

Restart, or install qq-nodes-comfyui via ComfyUI Manager. It lives under QQNodes/XYGrid Axis, alongside the Axis To X converters.

CategoryQQNodes/XYGrid Axis

Inputs (8)

NameTypeDefaultDescription
input_a*
input_bopt*
input_copt*
input_dopt*
input_eopt*
input_fopt*
input_gopt*
labeloptSTRING

Outputs (1)

NameTypeDescription
PACKPACK