ControlNet Passthrough
A clean wire for the most dragged-around object in your graph
- control_net
- control_net
The ControlNet passthrough is the answer to a specific kind of annoyance: you loaded a ControlNet, and now that CONTROL_NET wire has to travel from your loader past half the graph before it reaches the Apply node at the sampler. One optional socket in, one socket out, nothing changed in between. That's the whole node, and for a graph with a lot of loose model plumbing it's exactly the wire-taming tool the author built this pack for.
ControlNet, if you haven't met it, is the spatial-conditioning layer - edges, depth, pose, all that - that steers where things go while the prompt decides what they are. In ComfyUI the object you carry around is a loaded CONTROL_NET (from a ControlNet Loader, or the model side of an Apply ControlNet node), and it's one of those values every node in a big workflow seems to want to cross. If you've ever traced a purple wire through three groups trying to find where it actually connects, you get the pitch.
How it works
Mechanically there's nothing to it - and that's the point. The passthrough nodes in this pack are generated from a shared controller, and the entire "run" function for a typed passthrough is return (kwargs.get("control_net"),). It reads the input and hands it back. No model math, no image processing, nothing that can drift out of sync with a model release.
Two behaviors worth knowing, both of which come straight from that one-liner:
- Unconnected means
None. Leave thecontrol_netsocket empty, or mute/bypass the node feeding it, and the output isNonerather than an error. That's the fallback-friendly behavior - a muted branch reads as "missing" downstream. - It's connect-only. The plain passthrough has no widget; you can't type a value into it. If you want a ControlNet value you create with your hands, that's not this node - this is for routing something that already exists.
Inputs and outputs
Just the one pair, and you'll wire both or none:
control_net(CONTROL_NET) in →control_net(CONTROL_NET) out.
That's it. The output plugs straight into Apply ControlNet's control_net socket, or anywhere else that eats a ControlNet. You'll find it under Tojioo Passthrough → Simple Passthrough in the node menu.
Install
ComfyUI Manager → Install Custom Nodes → search "Tojioo Passthrough" → Install → restart. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/Tojioo/tojioo_passthrough.git
Restart and it's there. No model downloads, no pip install - the only dependencies are the ones ComfyUI already ships, and the frontend extension comes prebuilt in web/js/extension.js, so there's no build step. It's a small, single-maintainer pack (GPL-3.0) by a developer who posts progress on r/comfyui and takes feature requests seriously.
Common issues
The main trap is the None behavior biting you somewhere unexpected. If your Apply ControlNet suddenly reports a missing input, check whether you muted the Loader upstream of this passthrough - that's the usual cause, and the node itself will tell you nothing because it considers "nothing" a perfectly valid input. Everything else about this node is hard to break, which is honestly the nicest thing you can say about a utility node.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| control_netopt | CONTROL_NET | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| control_net | CONTROL_NET | — |