ComfyUI Node

Pipe From Any

Unpack a context wire into six values and three lists

By tom-m-2020·Created about a month ago·Updated 7 days ago· 1
Pipe From Any
  • pipe
  • pipe
  • any_1
  • any_2
  • any_3
  • any_4
  • any_5
  • any_6
  • list_1
  • list_2
  • list_3

This is the "explode" half of the pack's context-bus pattern. You've collected values into a UTILITY_ANY_PIPE with Pipe Set Any or Pipe To/Edit Any, dragged that one wire across your graph, and now you need the individual pieces back. Pipe From Any hands you six scalar fields and three list fields in one go, plus the pipe itself so you can keep going.

If the context-bus idea is new: it's the pattern several packs invented independently - bundle a dozen values into one object, run one wire instead of twelve, pull off what you need per node. comfyui-node-plumbing.md covers why it exists (spaghetti reduction, full stop) and its failure mode, which is stale context: it's easy to unpack a value from a pipe assembled before the node that replaced it, and then you're silently running the base model instead of the one with your LoRA. This node is where that mistake happens, so read the field names out loud before you trust them.

Inputs and outputs

Input: pipe, a UTILITY_ANY_PIPE. Required - you need something upstream that builds one.

Outputs, in order: pipe (passed through untouched, so you can chain other pipe nodes off the same bus), any_1 through any_6 (scalars), and list_1 through list_3 (genuine Comfy lists). All nine fields are any-type, so they connect to whatever you want them to be.

The key names are fixed. The six scalars live under the keys any_1…any_6 and the three lists under list_1…list_3, and that's what this node reads. If upstream you used Pipe Set Any with a custom key like "seed", this node will not show it - you need Pipe Get Any with the key for that. The two access styles are different tools: From/To Edit Any is a fixed nine-slot tuple you pass around wholesale, Get/Set Any is a key-value lookup for anything else.

Missing fields behave differently here than in the Get nodes, and it's worth internalising. Pipe From Any is forgiving: a scalar you never set comes out as None, a list you never set comes out as an empty list, no error. Pipe Get Any is strict: ask for a key that isn't there and it raises. So use From Any when you want a round-trip that always runs, and Get Any when a missing field is a bug you want to hear about.

There is one strict check: if you ask a scalar output for a key that was stored as a list (or vice versa), it raises a type error rather than guessing. any_3 set as a list will not come out of the any_3 socket - it'll complain and tell you to use the list accessor.

Where it fits

The canonical shape is a headers-and-body graph: one region assembles the pipe (model, clip, vae, conditioning, latent, steps, plus a couple of lists - masks, images, prompts) and one wire carries it down the canvas. Every working node taps the pipe twice: Pipe From Any to get what it needs, Pipe To/Edit Any to put back what it changed.

Two guardrails from experience rather than from the code. First, treat the nine slots as a small schema and write it down somewhere in a note node - the failure mode of a fixed-tuple bus is that slot 4 means something different six months later. Second, don't use this where explicit wires would do. The pipe is a legibility win on a large graph and a debugging tax on a small one, because the connection is always present and the contents can still be wrong.

Install

Manager: search ComfyUI Utility Suite (publisher tom-m) → install → restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/tom-m-2020/ComfyUI-Utility-Suite

No model downloads; the pack's only requirement is opencv-python-headless. Note it's written against ComfyUI's V3 node API - the whole pack, including the custom UTILITY_ANY_PIPE socket type, depends on that - so an outdated ComfyUI will show none of these nodes in the menu.

Troubleshooting

Nothing comes out of any_4. Either it was never set (you get None, no error), or you set it under a different key than the slot name. Slots are named, not positional - any_1 really is the key "any_1".

"field 'list_2' is scalar; use Pipe Get Any." You stored a scalar where this node expected a list. The scalar and list namespaces are separate fields even when the name matches.

I picked up the wrong model. Stale-context bug, not a node bug: you're unpacking from a pipe that was assembled before the loader/LoRA you meant to use. Rebuild the pipe after that node, or wire the fresh value explicitly.

Wire count went up, not down. You're unpacking to feed many consumers. That's what the pass-through pipe output is for - chain rather than re-explode.

CategoryUtility Suite/Pipe

Inputs (1)

NameTypeDefaultDescription
pipeUTILITY_ANY_PIPE—

Outputs (10)

NameTypeDescription
pipeUTILITY_ANY_PIPE—
any_1*—
any_2*—
any_3*—
any_4*—
any_5*—
any_6*—
list_1*—
list_2*—
list_3*—