π BV Smart Pipe
BV Smart Pipe grows its contract as you go
- pipe
- v_001
- v_002
- v_003
- v_004
- v_005
- v_006
- v_007
- v_008
- v_009
- v_010
- v_011
- v_012
- v_013
- v_014
- v_015
- v_016
- v_017
- v_018
- v_019
- v_020
- v_021
- v_022
- v_023
- v_024
- v_025
- v_026
- v_027
- v_028
- v_029
- v_030
- v_031
- v_032
- v_033
- v_034
- v_035
- v_036
- v_037
- v_038
- v_039
- v_040
- v_041
- v_042
- v_043
- v_044
- v_045
- v_046
- v_047
- v_048
- v_049
- v_050
- v_051
- v_052
- v_053
- v_054
- v_055
- v_056
- v_057
- v_058
- v_059
- v_060
- v_061
- v_062
- v_063
- v_064
- v_065
- v_066
- v_067
- v_068
- v_069
- v_070
- v_071
- v_072
- v_073
- v_074
- v_075
- v_076
- v_077
- v_078
- v_079
- v_080
- v_081
- v_082
- v_083
- v_084
- v_085
- v_086
- v_087
- v_088
- v_089
- v_090
- v_091
- v_092
- v_093
- v_094
- v_095
- v_096
- v_097
- v_098
- v_099
- v_100
- pipe
- out_001
- out_002
- out_003
- out_004
- out_005
- out_006
- out_007
- out_008
- out_009
- out_010
- out_011
- out_012
- out_013
- out_014
- out_015
- out_016
- out_017
- out_018
- out_019
- out_020
- out_021
- out_022
- out_023
- out_024
- out_025
- out_026
- out_027
- out_028
- out_029
- out_030
- out_031
- out_032
- out_033
- out_034
- out_035
- out_036
- out_037
- out_038
- out_039
- out_040
- out_041
- out_042
- out_043
- out_044
- out_045
- out_046
- out_047
- out_048
- out_049
- out_050
- out_051
- out_052
- out_053
- out_054
- out_055
- out_056
- out_057
- out_058
- out_059
- out_060
- out_061
- out_062
- out_063
- out_064
- out_065
- out_066
- out_067
- out_068
- out_069
- out_070
- out_071
- out_072
- out_073
- out_074
- out_075
- out_076
- out_077
- out_078
- out_079
- out_080
- out_081
- out_082
- out_083
- out_084
- out_085
- out_086
- out_087
- out_088
- out_089
- out_090
- out_091
- out_092
- out_093
- out_094
- out_095
- out_096
- out_097
- out_098
- out_099
- out_100
Every ComfyUI power user hits the wall where a workflow needs to carry model, clip, vae, positive, negative, latent, seed, and a handful of misc values down a chain - and the graph turns into a spaghetti of reroutes. Pipe nodes fix that by bundling values onto one wire, but most pipe systems are rigid: every node in the chain exposes the same fixed port list, whether or not it's relevant at that point. BV Smart Pipe is the version that grows.
The idea is incremental slot inheritance. Instead of one global pipe contract stamped on every node, each Smart Pipe node inherits the slots of the node it's connected to and can add its own. A loader pipe carries model, clip, vae. A downstream prompt pipe carries those plus positive and negative. The sampling pipe carries all of that plus latent and seed. You only see the ports that make sense where you are, and every slot keeps a stable logical identity throughout the chain.
How it works
Configure a node through Configure Smart Pipe (right-click / node menu): define its schema - which slots exist and their types - and its route. The node then exposes exactly those slots as its inputs and outputs. Two JSON fields drive it, bv_smart_pipe_schema_json and bv_smart_pipe_route_json, but you should be using the config UI, not editing those by hand.
Three behaviors make it worth learning over a plain pipe:
- Stable slot IDs beat names. Because every slot has a fixed logical identity, downstream connections keep pointing at the right value even if a label changes upstream or a slot is temporarily missing. That's the pack's core philosophy - "stable IDs are authoritative; names are presentation" - applied to pipes.
- Branches inherit independently. Each branch of a wireless or wired tree inherits only its own upstream slots and can grow on its own, then rejoin via BV Smart Pipe Merge in explicit order.
- Failures fail closed. Missing sources and cycles don't silently shift your connections around; they error visibly.
There's also wireless routing - the pack's take on "use everywhere" style broadcasting, no visible wires needed. Here's the honest caveat from the README: wireless routing across Subgraph boundaries depends on prompt materialization because ComfyUI doesn't yet expose an official pre-prompt extension hook. If your workflow is compatibility-critical, keep physical pipe links. The pack says it straight: "Keep physical pipe links in compatibility-critical workflows." That's the one real trap with this system - wireless is convenient until an upstream ComfyUI update changes prompt lifecycle behavior, and then it's a mystery.
What's in the schema
The brief's info_schema shows the mechanics: optional inputs pipe and v_001 through v_100 (any type), outputs pipe plus out_001 through out_100. You don't wire 100 ports - the node presents only the slots your schema declares. The * types mean any value can ride along, so it's less a rigid typed bus and more a "whatever you need" courier.
Install
Search BV Node Pack in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/BlackVortexAI/bv_nodepack.git
Restart, hard-refresh with Ctrl + F5. No pip requirements, no models.
The honest take
Smart Pipe is a real step past the fixed-pipe packs it was inspired by (the README credits motorway-style pipes and Use Everywhere as ancestors), but it's also the most opinionated node in the pack. If your workflow is simple, a pipe is overkill - use one only when you're genuinely fighting reroute spaghetti or want clean Subgraph interfaces. When you do, the incremental inheritance is the feature that sells it. And when the config UI feels fiddly, remember the legacy BV Pipe and BV Pipe Config nodes still exist for old workflows - new work should use Smart Pipe.
Inputs (103)
| Name | Type | Default | Description |
|---|---|---|---|
| bv_smart_pipe_schema_json | STRING | [] | β |
| bv_smart_pipe_route_json | STRING | {} | β |
| pipeopt | BV_SMART_PIPE | β | |
| v_001opt | * | β | |
| v_002opt | * | β | |
| v_003opt | * | β | |
| v_004opt | * | β | |
| v_005opt | * | β | |
| v_006opt | * | β | |
| v_007opt | * | β | |
| v_008opt | * | β | |
| v_009opt | * | β | |
| v_010opt | * | β | |
| v_011opt | * | β | |
| v_012opt | * | β | |
| v_013opt | * | β | |
| v_014opt | * | β | |
| v_015opt | * | β | |
| v_016opt | * | β | |
| v_017opt | * | β | |
| v_018opt | * | β | |
| v_019opt | * | β | |
| v_020opt | * | β | |
| v_021opt | * | β | |
| v_022opt | * | β | |
| v_023opt | * | β | |
| v_024opt | * | β | |
| v_025opt | * | β | |
| v_026opt | * | β | |
| v_027opt | * | β | |
| v_028opt | * | β | |
| v_029opt | * | β | |
| v_030opt | * | β | |
| v_031opt | * | β | |
| v_032opt | * | β | |
| v_033opt | * | β | |
| v_034opt | * | β | |
| v_035opt | * | β | |
| v_036opt | * | β | |
| v_037opt | * | β | |
| v_038opt | * | β | |
| v_039opt | * | β | |
| v_040opt | * | β | |
| v_041opt | * | β | |
| v_042opt | * | β | |
| v_043opt | * | β | |
| v_044opt | * | β | |
| v_045opt | * | β | |
| v_046opt | * | β | |
| v_047opt | * | β | |
| v_048opt | * | β | |
| v_049opt | * | β | |
| v_050opt | * | β | |
| v_051opt | * | β | |
| v_052opt | * | β | |
| v_053opt | * | β | |
| v_054opt | * | β | |
| v_055opt | * | β | |
| v_056opt | * | β | |
| v_057opt | * | β | |
| v_058opt | * | β | |
| v_059opt | * | β | |
| v_060opt | * | β | |
| v_061opt | * | β | |
| v_062opt | * | β | |
| v_063opt | * | β | |
| v_064opt | * | β | |
| v_065opt | * | β | |
| v_066opt | * | β | |
| v_067opt | * | β | |
| v_068opt | * | β | |
| v_069opt | * | β | |
| v_070opt | * | β | |
| v_071opt | * | β | |
| v_072opt | * | β | |
| v_073opt | * | β | |
| v_074opt | * | β | |
| v_075opt | * | β | |
| v_076opt | * | β | |
| v_077opt | * | β | |
| v_078opt | * | β | |
| v_079opt | * | β | |
| v_080opt | * | β | |
| v_081opt | * | β | |
| v_082opt | * | β | |
| v_083opt | * | β | |
| v_084opt | * | β | |
| v_085opt | * | β | |
| v_086opt | * | β | |
| v_087opt | * | β | |
| v_088opt | * | β | |
| v_089opt | * | β | |
| v_090opt | * | β | |
| v_091opt | * | β | |
| v_092opt | * | β | |
| v_093opt | * | β | |
| v_094opt | * | β | |
| v_095opt | * | β | |
| v_096opt | * | β | |
| v_097opt | * | β | |
| v_098opt | * | β | |
| v_099opt | * | β | |
| v_100opt | * | β |
Outputs (101)
| Name | Type | Description |
|---|---|---|
| pipe | BV_SMART_PIPE | β |
| out_001 | * | β |
| out_002 | * | β |
| out_003 | * | β |
| out_004 | * | β |
| out_005 | * | β |
| out_006 | * | β |
| out_007 | * | β |
| out_008 | * | β |
| out_009 | * | β |
| out_010 | * | β |
| out_011 | * | β |
| out_012 | * | β |
| out_013 | * | β |
| out_014 | * | β |
| out_015 | * | β |
| out_016 | * | β |
| out_017 | * | β |
| out_018 | * | β |
| out_019 | * | β |
| out_020 | * | β |
| out_021 | * | β |
| out_022 | * | β |
| out_023 | * | β |
| out_024 | * | β |
| out_025 | * | β |
| out_026 | * | β |
| out_027 | * | β |
| out_028 | * | β |
| out_029 | * | β |
| out_030 | * | β |
| out_031 | * | β |
| out_032 | * | β |
| out_033 | * | β |
| out_034 | * | β |
| out_035 | * | β |
| out_036 | * | β |
| out_037 | * | β |
| out_038 | * | β |
| out_039 | * | β |
| out_040 | * | β |
| out_041 | * | β |
| out_042 | * | β |
| out_043 | * | β |
| out_044 | * | β |
| out_045 | * | β |
| out_046 | * | β |
| out_047 | * | β |
| out_048 | * | β |
| out_049 | * | β |
| out_050 | * | β |
| out_051 | * | β |
| out_052 | * | β |
| out_053 | * | β |
| out_054 | * | β |
| out_055 | * | β |
| out_056 | * | β |
| out_057 | * | β |
| out_058 | * | β |
| out_059 | * | β |
| out_060 | * | β |
| out_061 | * | β |
| out_062 | * | β |
| out_063 | * | β |
| out_064 | * | β |
| out_065 | * | β |
| out_066 | * | β |
| out_067 | * | β |
| out_068 | * | β |
| out_069 | * | β |
| out_070 | * | β |
| out_071 | * | β |
| out_072 | * | β |
| out_073 | * | β |
| out_074 | * | β |
| out_075 | * | β |
| out_076 | * | β |
| out_077 | * | β |
| out_078 | * | β |
| out_079 | * | β |
| out_080 | * | β |
| out_081 | * | β |
| out_082 | * | β |
| out_083 | * | β |
| out_084 | * | β |
| out_085 | * | β |
| out_086 | * | β |
| out_087 | * | β |
| out_088 | * | β |
| out_089 | * | β |
| out_090 | * | β |
| out_091 | * | β |
| out_092 | * | β |
| out_093 | * | β |
| out_094 | * | β |
| out_095 | * | β |
| out_096 | * | β |
| out_097 | * | β |
| out_098 | * | β |
| out_099 | * | β |
| out_100 | * | β |