Friendly Pipe Edit
Add new slots to a pipe that's already flowing
- pipe
- slot_1
- slot_2
- slot_3
- slot_4
- slot_5
- slot_6
- slot_7
- slot_8
- slot_9
- slot_10
- slot_11
- slot_12
- slot_13
- slot_14
- slot_15
- slot_16
- slot_17
- slot_18
- slot_19
- slot_20
- slot_21
- slot_22
- slot_23
- slot_24
- slot_25
- slot_26
- slot_27
- slot_28
- slot_29
- slot_30
- slot_31
- slot_32
- slot_33
- slot_34
- slot_35
- slot_36
- slot_37
- slot_38
- slot_39
- slot_40
- slot_41
- slot_42
- slot_43
- slot_44
- slot_45
- slot_46
- slot_47
- slot_48
- slot_49
- slot_50
- slot_51
- slot_52
- slot_53
- slot_54
- slot_55
- slot_56
- slot_57
- slot_58
- slot_59
- slot_60
- slot_61
- slot_62
- slot_63
- slot_64
- slot_65
- slot_66
- slot_67
- slot_68
- slot_69
- slot_70
- slot_71
- slot_72
- slot_73
- slot_74
- slot_75
- slot_76
- slot_77
- slot_78
- slot_79
- slot_80
- pipe
The two obvious pipe nodes - In and Out - are great until you realize you need to inject something in the middle. You've bundled a model, a prompt, and an image into a pipe, and now a section further along needs a VAE or a second CLIP that wasn't part of the original bundle. Rewiring everything just to add one value is exactly the busywork you were trying to escape. Friendly Pipe Edit is the node that exists for that moment.
It's a pass-through with an upgrade: it takes an existing FRIENDLY_PIPE in, keeps every slot that was already in it, and lets you append new slots of your own. Wire it between a Friendly Pipe In and a Friendly Pipe Out, add a slot or three, and the Out node downstream suddenly shows the original slots plus the new ones. Chain a couple of these together and you can progressively build up a pipe as it travels through a workflow.
How it works
The node is deliberately boring in the best way. It reads the incoming pipe dictionary, copies the existing slots and names across untouched, then appends whatever you've connected to its own slot_N inputs - and here's the detail that matters: the new slots get indices offset past the incoming count. If the pipe arrives with three slots, your slot_1 becomes index 4, slot_2 becomes index 5, and so on. That's how a downstream Out node shows "original slots first, added ones after" without anything colliding.
Inputs and outputs
pipe(input, required, typeFRIENDLY_PIPE) - an existing pipe from a Friendly Pipe In or another Friendly Pipe Edit.slot_1throughslot_80(inputs, optional, type*) - the values you're adding. All wildcard-typed, so you can append any data type.pipe(output, typeFRIENDLY_PIPE) - the combined pipe: everything that came in, plus what you added.
Like its siblings, the heavy lifting is in the frontend: ➕/➖ buttons to add or remove slots, a label box per slot so the additions show up nicely named on the Out node. The things you actually touch are the button and the label field - that's it.
How to install
It ships in the same pack as Friendly Pipe In and Out, so installing any of the three gets you all of them. No dependencies, no requirements.txt, no model files - standard-library Python and one JS file, that's the whole package.
ComfyUI Manager: Manager → Install Custom Nodes → search "Friendly Pipe" → Install → restart.
Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/logicalor/comfyui_friendly_pipe.git
Restart ComfyUI; all three nodes appear under utils/pipe.
Where people get burned
This is a young pack - one maintainer, no community lore to lean on - so the sharp edges are the mechanism's own:
- Slots are appended positionally, and positions shift. Because your added slots are keyed by "incoming count + N," adding a slot to the source In node upstream renumbers everything this node added relative to the old count. If you restructure the In node, re-check the Edit node's wires - a VAE can quietly end up landing in what used to be the CLIP's slot.
- An added slot you leave unconnected becomes
Nonedownstream, just like on the Out node. It won't error at this node, but whatever the Out feeds may complain at execution time. - It's for adding, not removing. There's no "remove an existing slot from the pipe" mode here. To drop something you have to go back to the In node or rewire around it.
- The wildcard inputs are type-lenient, which is the point (append anything) but also means a wrong-type wire surfaces only when the graph runs. Label your additions; your future self will thank you.
- Dynamic frontend, same caveat as the pack's other nodes: if the ➕ button or label widgets stop responding after a ComfyUI update, the usual suspect is the Nodes 2.0 beta renderer, which has been the breaking point for JS-heavy custom nodes. Fall back to the legacy canvas.
Worth having? If you're already using the pack's In and Out nodes, this is the piece that keeps you from rebuilding your bundle halfway through a workflow. If you're not using pipes at all, start with the In node - this one only earns its keep once the wire already exists.
Inputs (81)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | FRIENDLY_PIPE | — | |
| slot_1opt | * | — | |
| slot_2opt | * | — | |
| slot_3opt | * | — | |
| slot_4opt | * | — | |
| slot_5opt | * | — | |
| slot_6opt | * | — | |
| slot_7opt | * | — | |
| slot_8opt | * | — | |
| slot_9opt | * | — | |
| slot_10opt | * | — | |
| slot_11opt | * | — | |
| slot_12opt | * | — | |
| slot_13opt | * | — | |
| slot_14opt | * | — | |
| slot_15opt | * | — | |
| slot_16opt | * | — | |
| slot_17opt | * | — | |
| slot_18opt | * | — | |
| slot_19opt | * | — | |
| slot_20opt | * | — | |
| slot_21opt | * | — | |
| slot_22opt | * | — | |
| slot_23opt | * | — | |
| slot_24opt | * | — | |
| slot_25opt | * | — | |
| slot_26opt | * | — | |
| slot_27opt | * | — | |
| slot_28opt | * | — | |
| slot_29opt | * | — | |
| slot_30opt | * | — | |
| slot_31opt | * | — | |
| slot_32opt | * | — | |
| slot_33opt | * | — | |
| slot_34opt | * | — | |
| slot_35opt | * | — | |
| slot_36opt | * | — | |
| slot_37opt | * | — | |
| slot_38opt | * | — | |
| slot_39opt | * | — | |
| slot_40opt | * | — | |
| slot_41opt | * | — | |
| slot_42opt | * | — | |
| slot_43opt | * | — | |
| slot_44opt | * | — | |
| slot_45opt | * | — | |
| slot_46opt | * | — | |
| slot_47opt | * | — | |
| slot_48opt | * | — | |
| slot_49opt | * | — | |
| slot_50opt | * | — | |
| slot_51opt | * | — | |
| slot_52opt | * | — | |
| slot_53opt | * | — | |
| slot_54opt | * | — | |
| slot_55opt | * | — | |
| slot_56opt | * | — | |
| slot_57opt | * | — | |
| slot_58opt | * | — | |
| slot_59opt | * | — | |
| slot_60opt | * | — | |
| slot_61opt | * | — | |
| slot_62opt | * | — | |
| slot_63opt | * | — | |
| slot_64opt | * | — | |
| slot_65opt | * | — | |
| slot_66opt | * | — | |
| slot_67opt | * | — | |
| slot_68opt | * | — | |
| slot_69opt | * | — | |
| slot_70opt | * | — | |
| slot_71opt | * | — | |
| slot_72opt | * | — | |
| slot_73opt | * | — | |
| slot_74opt | * | — | |
| slot_75opt | * | — | |
| slot_76opt | * | — | |
| slot_77opt | * | — | |
| slot_78opt | * | — | |
| slot_79opt | * | — | |
| slot_80opt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | FRIENDLY_PIPE | — |