pipeEDIT
PipeEDIT
- pipe
- model
- pos
- neg
- latent
- vae
- clip
- image
- pipe
- model
- pos
- neg
- latent
- vae
- clip
- image
- seed
A ttN PIPE_LINE carries eight things in one wire: model, positive and negative conditioning, latent, vae, clip, image and seed. That's great for keeping a graph tidy, until the moment you want to change one of those eight in the middle of a chain - and you're faced with either rebuilding the pipe from scratch or rewiring a dozen nodes.
pipeEDIT (ttN pipeEDIT) is the escape hatch. You feed it a pipe, connect only the slot you want to change, and it merges your new value in while keeping everything else from the original pipe. Want to swap the model for a LoRA-applied variant mid-graph but keep the same conditioning, VAE and seed? Connect the new model, leave the rest dangling, and the pipe continues with everything else intact.
Inputs and outputs
Every input is optional - that's the whole point. The list:
pipe- the pipe you're editing.model,pos,neg,latent,vae,clip,image,seed- the eight slots, each one an override.
Anything you leave unconnected is passed through unchanged from the incoming pipe. Anything you connect replaces that slot. Note the conditioning slots are named pos and neg here (not positive/negative like some of the other nodes) - it's the same two conditionings, just a shorter label.
Outputs mirror it completely: pipe plus all eight individual slots. That second set is genuinely useful - it means pipeEDIT doubles as a "pipeOUT" if you need the raw values further down, without adding another node.
The mechanism
From the source, the node takes the incoming pipe dict and simply overwrites whichever keys got values:
pipe = {**incoming_pipe, **{k: v for k, v in overrides if v is not None}}
The one subtlety to keep in mind: an empty pipe with only overrides connected works fine, but you almost always want a real pipe in - otherwise the untouched slots come out as None and anything downstream that reads them breaks.
Install and where it fits
Same pack, same one-time install: ComfyUI Manager β search ComfyUI_tinyterraNodes, or git clone https://github.com/TinyTerra/ComfyUI_tinyterraNodes.git into ComfyUI/custom_nodes, then restart. No dependencies, no model downloads.
The classic use: you have a pipeKSampler v2 doing a first pass, and you want a second pass with a different model or a LoRA applied to the same conditioning. Instead of building a second full pipe, route the first sampler's pipe through pipeEDIT, connect your new model, and feed the edited pipe into the next sampler. It's also the answer to "how do I change the seed mid-pipe?" - connect a seed node to the seed input and everything else stays put. It won't do anything clever like partial latent merges or conditioning arithmetic; it's deliberately a dumb, reliable overwrite tool. That's its strength.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| pipeopt | PIPE_LINE | β | |
| modelopt | MODEL | β | |
| posopt | CONDITIONING | β | |
| negopt | CONDITIONING | β | |
| latentopt | LATENT | β | |
| vaeopt | VAE | β | |
| clipopt | CLIP | β | |
| imageopt | IMAGE | β | |
| seedopt | INT | 00β18446744073709550000 | β |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| pipe | PIPE_LINE | β |
| model | MODEL | β |
| pos | CONDITIONING | β |
| neg | CONDITIONING | β |
| latent | LATENT | β |
| vae | VAE | β |
| clip | CLIP | β |
| image | IMAGE | β |
| seed | INT | β |