Nodes/ComfyUI-LZNodes/LZ Pipe Pack XL
ComfyUI Node

LZ Pipe Pack XL

The pipe that carries your XY plot config too

By liz-ils·Created 7 months ago·Updated 12 days ago· 1
LZ Pipe Pack XL
  • model
  • clip
  • vae
  • positive
  • negative
  • latent
  • lz_pipe
positive_text
negative_text
width
height
ckpt_name
ckpt_hash
lora_name
lora_strength
lora_model
lora_weight
x_typenone
x_values
y_typenone
y_values
x_type_str
y_type_str
x_replace_key
y_replace_key
replace_escapetrue

Here's a naming trap before anything else: the "XL" in LZ Pipe Pack XL is not about SDXL checkpoints. It means extended. This node is LZ Pipe Pack with the XY plot machinery bolted on, so the one lz_pipe you send downstream carries not just your model, prompts, and geometry - it also carries the axis definitions for a grid comparison. It's the bridge between the pack's pipe system and its XY plot system.

Everything the plain LZPipePack accepts is here: model, clip, vae, positive, negative, latent, positive_text, negative_text, width, height, ckpt_name, ckpt_hash, lora_name, lora_strength. Then it adds the plot fields.

The plot inputs it bundles

  • x_type / y_type - each is a dropdown: none, checkpoint, lora, sampler, scheduler, positive, negative. This is what the axis varies.
  • x_values / y_values - multiline, one value per line. For checkpoint that's checkpoint filenames; for lora it's name:model_weight:clip_weight; for sampler/scheduler it's the sampler or scheduler names; for positive/negative it's the replacement text.
  • x_replace_key / y_replace_key - for prompt axes, the exact placeholder in your base prompt that gets swapped out.
  • replace_escape - on by default. When it's on, underscores become spaces and parentheses get escaped before replacement. That matters for booru-style prompts where tags are written with spaces anyway; if you're seeing literal backslashes or mangled underscores in your replacements, this toggle is the first thing to flip.

There are also x_type_str / y_type_str string inputs, which let you drive the axis type from another node rather than the dropdown - useful once a workflow gets automated.

How the pipe carries it

When you run the pack, it parses your x_values/y_values lines into lists and stores them in the pipe under underscore-prefixed keys (_x_type, _x_values, _y_values, _x_replace_key, _replace_escape, and so on). Downstream, LZXYPlot and LZXYSampler read those exact keys back out, which is why the XY system and the pipe system compose: pack the config once, sample later. The regular LZPipePack doesn't write those keys, so if you feed a plain pack into an XY sampler and it has no plot config, the sampler just runs a single image at whatever the pipe's current values are.

When to reach for it

If you're doing a systematic sweep - compare three checkpoints × two samplers, or test LoRA strengths against a prompt variation - this is the node that makes the comparison a property of the pipe rather than a tangle of extra wires. Pack the base state plus the axes, then let an XY sampler do the looping.

If you're not doing a plot, use the plain LZPipePack. The extra fields are dead weight otherwise and just give you more places to misconfigure.

Installing it

Same pack, same install as every LZNodes node:

cd ComfyUI/custom_nodes
git clone https://github.com/liz-ils/ComfyUI-LZNodes

Restart, or grab it from ComfyUI Manager by searching "ComfyUI-LZNodes". No dependencies beyond stock ComfyUI, no model files.

The trap

Because the pipe hides its contents, it's easy to forget the plot config is even in there. You'll pack axes into a pipe, later run a sampler that consumes it, and wonder why your "simple" generation is actually producing a grid - that's the XL pack's leftover config doing its thing. When you're not sweeping, keep the XL pack out of the graph or wire a plain pack in its place. And remember the stale-context rule: the pipe is a snapshot at pack time, so if you change the model after packing, re-pack.

CategoryMyCustomNodes/Pipe

Inputs (25)

NameTypeDefaultDescription
modeloptMODEL
clipoptCLIP
vaeoptVAE
positiveoptCONDITIONING
negativeoptCONDITIONING
latentoptLATENT
positive_textoptSTRING
negative_textoptSTRING
widthoptINT
heightoptINT
ckpt_nameoptSTRING
ckpt_hashoptSTRING
lora_nameoptSTRING
lora_strengthoptSTRING
lora_modeloptSTRING
lora_weightoptSTRING
x_typeoptCOMBOnone8 options: none, checkpoint, diffusion_model, lora, sampler, scheduler, +2
x_valuesoptSTRING
y_typeoptCOMBOnone8 options: none, checkpoint, diffusion_model, lora, sampler, scheduler, +2
y_valuesoptSTRING
x_type_stroptSTRING
y_type_stroptSTRING
x_replace_keyoptSTRING
y_replace_keyoptSTRING
replace_escapeoptBOOLEANtrue

Outputs (1)

NameTypeDescription
lz_pipeLZ_PIPE