đź’€Prepack GetPipe
The other half of the pipe — unpack a whole pipeline from one wire
- pipe
- model
- clip
- vae
- lora_path
- lora_text
- positive
- negative
- latent_image
- seed
- steps
- cfg
- denoise
đź’€Prepack GetPipe is the receiving end of the Prepack pipe pattern. Its sibling SetPipe takes a dozen components and folds them into a single pipe object; GetPipe takes that one wire and unfolds it back into the twelve original pieces on the other side of your graph. You use these two as a pair to stop a wall of parallel wires from crossing the canvas - bundle at one end, unbundle at the other, and everything between stays tidy.
It's the same trick the broader ecosystem uses in its efficiency/pipe packs, and it pays off most when you're routing one full "generation configuration" through a section of the graph where you don't care about the individual pieces - say, past a bypass switch or a comparison branch. GetPipe is where that bundled state becomes usable again.
How it works
The mechanism is about as simple as a node gets: it takes the pipe input, reads the twelve keys off the dict that SetPipe produced, and returns them in a fixed order as twelve typed outputs:
model(MODEL),clip(CLIP),vae(VAE)lora_path(STRING),lora_text(STRING) - the LoRA metadata slotspositive(CONDITIONING),negative(CONDITIONING)latent_image(LATENT)seed(INT),steps(INT),cfg(FLOAT),denoise(FLOAT)
Every one of those outputs is explicitly allowed to be None. SetPipe defaults every input to None too, so a pipe with only a model and a seed packed is perfectly valid - GetPipe will hand back a None for all the empty slots. That's a feature when you're building partial pipes, and a footgun when you forget to pack something and don't realize it until a downstream node chokes.
The only input that matters is pipe, and it must come from a Prepack SetPipe (or anything else that emits the same dict shape - but don't count on cross-pack compatibility; pipe shapes are not standardized).
Where it fits in a real workflow
The typical shape: SetPipe collects model, clip, vae, conditioning, and your sampling settings from the loaders; you drag that one wire through whatever organizational nodes you like; GetPipe at the sampler end splits it back out into the inputs of a KSampler (or this pack's own đź’€Prepack Ksampler). Because the pipe carries steps, cfg, seed, and denoise as first-class fields, you can also pack a new pipe with different sampling values and swap it in without rewiring the whole sampler - the "settings presets" use case, done with a single wire change.
One thing to keep straight: GetPipe gives you the raw values. The seed, steps, and cfg outputs are plain numbers; if you want them back inside a packed pipe for another leg of the workflow, you route them into another SetPipe rather than assuming they re-pack themselves.
Installing it
It's in the ComfyUI Prepack pack - install the pack once and you get all eighteen nodes, including SetPipe and GetPipe together:
cd ComfyUI/custom_nodes
git clone https://github.com/S4MUEL-404/ComfyUI-Prepack.git
pip install -r ComfyUI-Prepack/requirements.txt
Or search "Prepack" in ComfyUI Manager. Dependencies are just PyTorch, NumPy, and Pillow - you already have them. Restart, look under đź’€Prepack, no model downloads required.
If GetPipe errors on load with "pipe is None", you've wired it to the wrong node - check that the pipe wire really originates from a Prepack SetPipe and that the workflow isn't feeding it something else. If an output comes back None mid-run, the fix is upstream: the field simply wasn't packed.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | PIPE | The packed pipeline object. |
Outputs (12)
| Name | Type | Description |
|---|---|---|
| model | MODEL | The diffusion model from the pipe object (can be None). |
| clip | CLIP | The CLIP model from the pipe object (can be None). |
| vae | VAE | The VAE from the pipe object (can be None). |
| lora_path | STRING | The LoRA model path from the pipe object (can be None). |
| lora_text | STRING | The formatted LoRA prompt string from the pipe object (can be None). |
| positive | CONDITIONING | The positive conditioning from the pipe object (can be None). |
| negative | CONDITIONING | The negative conditioning from the pipe object (can be None). |
| latent_image | LATENT | The latent image from the pipe object (can be None). |
| seed | INT | The seed value from the pipe object (can be None). |
| steps | INT | The sampling steps from the pipe object (can be None). |
| cfg | FLOAT | The CFG scale from the pipe object (can be None). |
| denoise | FLOAT | The denoise strength from the pipe object (can be None). |