Nodes/ComfyUI_Eclipse/Concat Pipe Multi
ComfyUI Node

Concat Pipe Multi

Merge several pipes into one, with rules for the collisions

By r-vage·Created 10 months ago·Updated a day ago· 31
Concat Pipe Multi
  • pipe_1
  • pipe_2
  • pipe
inputcount2
merge_strategymerge
tensor_size_mismatchletterbox

Concat Pipe Multi merges multiple pipe inputs into one unified pipe - the Eclipse-specific version of the context-bus pattern that runs through the whole plumbing layer. A pipe is a Python dict with canonical keys: model, clip, vae, latent, conditioning, settings, prompts. This node takes two or more of those bundles and folds them into a single dict that downstream nodes can pull from. It's how you combine, say, a context pipe carrying the model stack with a settings pipe carrying sampler parameters, and hand the result to one consumer.

The two decisions that make or break a merge

Because a merge is only interesting when the pipes disagree, the node hands you two explicit policy dials - and these are where you should actually think.

merge_strategy decides who wins on conflicting keys:

  • overwrite - later pipes replace earlier values.
  • preserve - the first valid value wins; later conflicts are ignored.
  • merge (default) - combines lists where possible and uses later values for scalar conflicts.

tensor_size_mismatch decides what to do when image/mask tensors don't share dimensions (real when you merge a context holding 512² images into one holding 1024²):

  • match - stretch-resize to the first image's dimensions.
  • crop - center-crop to the first image's dimensions.
  • letterbox (default) - scale to fit while preserving aspect ratio, padding with black.
  • ignore - keep the mismatched tensors as a list (only if your downstream can handle lists).

The defaults (merge + letterbox) are the sensible "just combine it" choices; you'll touch these dials the first time a merge produces a stretched image or a dropped value.

How it works under the hood

The node is typed-aware rather than blindly copying dicts: tensor-valued keys (images, masks) are concatenated with torch.cat across the incoming pipes, known list keys (audio, LoRA names, embeddings, positive/negative lists) get list-combined, and everything else follows the merge strategy. That distinction is why merging two pipes holding image batches produces one bigger batch instead of a nested mess.

Inputs and output

  • inputcount - how many pipe sockets to expose (2–64, default 2); sockets update as you change it.
  • pipe_1pipe_N - the pipes to merge.
  • merge_strategy, tensor_size_mismatch - the two policy dials.
  • Output - a single pipe (a PIPE-typed dict).

When it's the right tool

Reach for it when you're assembling a context from parts - the modular pattern where you define settings once in a settings pipe and reuse it across workflows, or where a video context needs to absorb audio and frame parameters from a second source. It's also the concrete answer to the context-bus caveat from the plumbing docs: merging is where stale values sneak in, so merge after each pipe is updated, not before.

Installing it

Part of ComfyUI_Eclipse, installed once:

cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI_Eclipse

Restart ComfyUI (or ComfyUI Manager → search "ComfyUI Eclipse"). Requires torch (present) and nothing else special.

Gotchas

Pack-wide: ComfyUI_Eclipse was formerly RvTools, and v4.0.0 removed all legacy nodes - old workflows need the Workflow Migration Tool node (or python tools/migrate_workflow.py <workflow.json>) to rewrite old IDs with a backup. And one honest warning about the pipe pattern in general: the merged pipe is only as current as its inputs. If a pipe in the stack carries stale values, the merge happily propagates them - check what's inside the pipes when output looks wrong, not just the merge settings.

Category🌒 Eclipse/ Conversion

Inputs (5)

NameTypeDefaultDescription
inputcountINT22–64
pipe_1optPIPE
pipe_2optPIPE
merge_strategyoptCOMBOmergeHow to handle conflicting keys: 'overwrite' replaces earlier values, 'preserve' keeps first valid values, 'merge' combines lists and uses later values for conflicts
tensor_size_mismatchoptCOMBOletterboxWhen merging image/mask tensors with different sizes: 'match' resizes (stretch) to the first image's dimensions, 'crop' center-crops to the first image's dimensions, 'letterbox' scales to fit preserving aspect ratio and pads with black, 'ignore' stores them as a list (requires downstream support)

Outputs (1)

NameTypeDescription
pipePIPE