Nodes/comfyui_custom_pipe/Dynamic Pipe Pack
ComfyUI Node

Dynamic Pipe Pack

Bundle a pile of wires into one pipe

By julienpmorand·Created 3 months ago·Updated 3 months ago· 1
Dynamic Pipe Pack
  • input_1
  • input_2
  • input_3
  • input_4
  • input_5
  • input_6
  • input_7
  • input_8
  • input_9
  • input_10
  • input_11
  • input_12
  • input_13
  • input_14
  • input_15
  • input_16
  • input_17
  • input_18
  • input_19
  • input_20
  • input_21
  • input_22
  • input_23
  • input_24
  • input_25
  • input_26
  • input_27
  • input_28
  • input_29
  • input_30
  • input_31
  • input_32
  • input_33
  • input_34
  • input_35
  • input_36
  • input_37
  • input_38
  • input_39
  • input_40
  • input_41
  • input_42
  • input_43
  • input_44
  • input_45
  • input_46
  • input_47
  • input_48
  • input_49
  • input_50
  • input_51
  • input_52
  • input_53
  • input_54
  • input_55
  • input_56
  • input_57
  • input_58
  • input_59
  • input_60
  • input_61
  • input_62
  • input_63
  • input_64
  • pipe
slot_count8

Every big ComfyUI workflow hits the same wall: you have an image, a mask, a prompt, a negative prompt, a latent and a model that all need to travel across the graph together, and dragging six colored lines over everything you've built makes it unreadable. Dynamic Pipe Pack is the fix. It grabs a handful of any-typed values, bundles them into one pipe output, and lets you unpack them somewhere far away. Same job as the rgthree Context nodes you already know - just more blunt and more generic.

The "generic" part is the whole point. Impact Pack's pipes are designed around SD workflow objects: model, CLIP, VAE, conditioning. This one doesn't care what you stuff in it. Images, masks, latents, strings, numbers, tensors - anything. If it can pass through a wire, it can ride in the pipe.

How it works

The backend is a tiny dict. pack() clamps your slot_count to 1–64, grabs whatever is connected to input_1 through input_slot_count, and returns {"slot_count": n, "values": [...]} as a single pipe output of type DYNAMIC_PIPE_BUNDLE. Nothing clever, no serialization, just a reference to values already in the graph. That's also why it doesn't save VRAM or make anything faster - it's purely organizational.

The clever bit is on the frontend. ComfyUI needs to know a node's full I/O shape before it runs, so the backend declares all 64 input_N slots even though you'll never see most of them. JavaScript then shows or hides them based on the slot_count widget, and adds a Refresh slots button in case the UI gets lazy. It's a fixed-maximum approach to a "dynamic" node, and it's a reasonable trade.

The inputs that matter

  • slot_count - how many inputs the node shows, 1 to 64, default 8. This is the one you set.
  • input_1 … input_N - the values to bundle. All * type (wildcard), all optional, positional.

The output is one pipe, which you wire into a Dynamic Pipe Unpack. That's the only thing that speaks DYNAMIC_PIPE_BUNDLE.

Install

It's a ComfyUI Manager job: search comfyui_custom_pipe and hit install, then restart. Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/julienpmorand/comfyui_custom_pipe

Restart ComfyUI. That's it - there are no Python dependencies, no model downloads, no requirements.txt. The whole pack is one __init__.py and a JS file. Worth knowing this is a new, small project with no community track record yet; the README even ships with YOUR_USERNAME placeholders in it.

Common gotchas

Slot order is everything. The node is positional and doesn't name anything: whatever you plug into input_1 comes out of output_1. Pick a convention (1 = image, 2 = mask, 3 = positive, 4 = negative…) and stick to it, ideally with a note node next to it. Future-you will not remember slot 6.

Wildcards mean no type checking. Because every socket is *, ComfyUI will happily let you connect a string where an IMAGE belongs. You won't find out until execution blows up. That's on you, not the node.

Lowering slot_count deletes sockets - and the links attached to them. Raise it again and reconnect. And if the inputs don't appear after changing the count, hit Refresh slots, then hard-refresh your browser (Ctrl+Shift+R) if it's still stuck.

Worth it? If your graph has a value group crossing half the canvas, yes. If you're only bundling two wires, a reroute is overkill and so is this - reach for the pipe when the bundle is real.

Categoryutils/dynamic_pipe

Inputs (65)

NameTypeDefaultDescription
slot_countINT81–64
input_1opt*
input_2opt*
input_3opt*
input_4opt*
input_5opt*
input_6opt*
input_7opt*
input_8opt*
input_9opt*
input_10opt*
input_11opt*
input_12opt*
input_13opt*
input_14opt*
input_15opt*
input_16opt*
input_17opt*
input_18opt*
input_19opt*
input_20opt*
input_21opt*
input_22opt*
input_23opt*
input_24opt*
input_25opt*
input_26opt*
input_27opt*
input_28opt*
input_29opt*
input_30opt*
input_31opt*
input_32opt*
input_33opt*
input_34opt*
input_35opt*
input_36opt*
input_37opt*
input_38opt*
input_39opt*
input_40opt*
input_41opt*
input_42opt*
input_43opt*
input_44opt*
input_45opt*
input_46opt*
input_47opt*
input_48opt*
input_49opt*
input_50opt*
input_51opt*
input_52opt*
input_53opt*
input_54opt*
input_55opt*
input_56opt*
input_57opt*
input_58opt*
input_59opt*
input_60opt*
input_61opt*
input_62opt*
input_63opt*
input_64opt*

Outputs (1)

NameTypeDescription
pipeDYNAMIC_PIPE_BUNDLE