Any Passthrough
The wire that carries anything, in one socket
- any_input
- any_output
Any Passthrough is the wildcard member of the big passthrough family in this pack - twelve typed siblings (Image Passthrough, Latent Passthrough, CLIP Passthrough, Bool Passthrough, and so on) plus this one, which carries anything. One any_input in, the exact same value out on any_output, zero transformation. It exists for one reason: ComfyUI type-checking has an escape hatch, the * wildcard, and this node lives in it.
The input is marked forceInput, which matters more than it looks. In ComfyUI, an input like that is a socket that must be wired - the node won't hold a baked-in widget value. That's exactly what you want from a passthrough: it turns a value that lives in the graph into a named, visible point on it. It's the same idea as right-clicking a widget and choosing "Convert to input", except done as a node.
Where people actually use it:
- Tidying. A long wire across the canvas gets messy; a passthrough lets you break it into readable segments, the same job a Reroute does, but with the ability to accept any type at all.
- Naming. Give an anonymous value a label in the graph - the output name shows what the wire is for.
- Feeding optional inputs. Some nodes only expose an optional socket and skip their work when it's empty. A passthrough wired into that socket with
forceInputforces the connection to exist, so the node behaves as if you'd filled it.
The mechanism is a straight hand-off - the source's doit returns whatever came in, or None if nothing was connected. No state, no caching tricks, nothing to configure.
A word of context if you're new to the wildcard type: the community has a long-running debate about "anything/anywhere" style nodes because type-erasing sockets mean ComfyUI stops checking your work for you - wire a latent into something that wanted an image and the graph won't warn you; it'll just break or behave weirdly at run time. The KB's ecosystem doc records that backlash in detail. Any Passthrough is on the mild end of that trade - it's a pass-through, not a type-erasing router - but the general principle stands: it's for organization, not for dodging real type problems.
Install is pack standard: ComfyUI Manager → search ComfyUI-Practical-Tools → install → restart, or git clone https://github.com/wenchengxiang/ComfyUI-Practical-Tools into ComfyUI/custom_nodes. No dependencies, no models. Troubleshooting is minimal: if the output is None, nothing was wired in - connect the input.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| any_inputopt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| any_output | * | — |