ControlNet Passer
A one-wire breather for crowded graphs
- control_net
- control_net
ControlNet nodes have a habit of turning the corner of your canvas into a wire spaghetti junction - a preprocessor over here, a union type setter over there, the loader somewhere in between, all feeding the same CONTROL_NET socket. The ControlNet Passer exists so you can break that tangle into something you can read.
What it is
It's a passthrough node with a fixed type. In goes a CONTROL_NET, out comes the exact same object, unchanged. The value-add is organizational: it gives you a labeled spot in the graph where a control signal can be split, routed, or muted without touching the original loader.
Say you load one ControlNet and want to apply it to two different samplers, or you have two alternative control setups (depth for one pass, canny for another) and you switch between them. Wire each into its own passer, then toggle the passers instead of dragging wires around. Because the socket stays typed as CONTROL_NET rather than collapsing to the wildcard *, ComfyUI keeps type-checking your connections - a subtly different failure from "any type" passers, and a nicer one when you're debugging.
How it works
The mechanism is one line of code: execute returns the control_net input untouched. The input is marked "ControlNet input to be passed through" and the output socket is named control_net. No copy is made - the same object keeps flowing downstream, so whatever the node passes still carries everything the loader attached to it (strength settings, the control_type extra arg, and so on).
It's part of the Eclipse suite (the pack formerly known as RvTools, rewritten and renamed in v4.0.0), and it behaves like the rest of the pack's typed passer family: Conditioning, Model, Clip, Vae, DetailerPipe, Float - same idea, different type.
What to wire where
One input, one output, both control_net. There are no widgets to set. If you're looking for a place to change the behavior of the ControlNet - strength, which condition type a union model is running as - that's not this node. Strength lives on the ControlNet Apply node; the union condition type lives on the "ControlNet Set Union Types (Flux)" node in the same pack. The passer just carries the object between them.
Install
ComfyUI Manager β search ComfyUI_Eclipse β install, then restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI_Eclipse
Restart ComfyUI and it appears under Eclipse β Router β Typed. No extra models or downloads for this one - the pack's dependencies (torch, numpy, Pillow, opencv-python) are the standard ComfyUI stack.
Troubleshooting
- ControlNet "doesn't work" through the passer: the passer isn't the problem; it moves the object untouched. Check the loader, the Apply node, and the control weight. One real-world gotcha: a union ControlNet whose type was never set defaults to canny-ish behavior - see the Set Union Types node.
- Node missing after install: restart ComfyUI and watch the console for import errors; a missing package in your Python env is the usual cause.
- Old workflows show red nodes: pre-v4.0.0 RvTools IDs were removed; run the Workflow Migration Tool (
python tools/migrate_workflow.py <file>.json) to fix them.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| control_net | COMFY_MATCHTYPE_V3 | ControlNet input to be passed through. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| control_net | COMFY_MATCHTYPE_V3 | β |