D2 Any Delivery
Carry a whole pipeline's worth of values down one wire
- _package
- _update
- _package
If you've ever rebuilt the same workflow with two different checkpoint loaders and wished you could just bundle "everything generation-related" into one wire and shove it through, this is the node. D2 Any Delivery is a pass-through package that collects a bunch of unrelated values into a single D2_TDelivery package, ferries them along one connection, and lets you pull whichever ones you need out at the other end. It's the D2 pack's answer to the Highway node from ComfyUI-0246 - the author literally built it because Highway stopped working with newer ComfyUI builds. If Trung0246 ever resurrects Highway, use the original; until then, this is the working one.
The honest caveat up front: this is an "anything anywhere" style node, and the community has real opinions about those. A popular r/comfyui thread titled "Please Stop using the Anything Anywhere extension" made the case that routing arbitrary values through wildcard pass-throughs makes workflows a pain to debug. Fair. Where Any Delivery earns its keep is inside the D2 ecosystem's XY Plot and pipe workflows, where a package sliding through a loop is genuinely cleaner than dragging a spiderweb of wires through a queue of repeated runs.
How it works
You configure it with the _label field, then click _update to rebuild the node's sockets. The format is terse but easy once you've seen it:
>nameadds an input socket calledname<nameadds an output socket calledname- separate multiple items with
;
So >prompt; >seed; <width; <height gives you two inputs and two outputs. Everything that arrives on an input gets stuffed into the package, and anything you've marked with < gets pulled out of it and exposed as an output. Chain two Any Delivery nodes together by connecting _package to _package and you can pass a big blob of state across a whole workflow without a dedicated wire per value.
The inputs that matter
_package- the incoming package from another Any Delivery node. Leave it empty to start a fresh package._label- your input/output manifest, written as>name/<nameitems separated by;._update- a button that rebuilds the sockets after you change_label.
Installing it
Grab the whole D2 pack through ComfyUI Manager (search "D2-nodes-ComfyUI") or clone it:
cd ComfyUI/custom_nodes
git clone https://github.com/da2el-ai/D2-nodes-ComfyUI
Restart ComfyUI. No model downloads, no heavy deps. One thing worth knowing: since v32.0.0 the pack targets ComfyUI's V3 schema, so on an older ComfyUI build you'll need a pre-32.0.0 version of the pack.
Where people get burned
Two things, both predictable. First, after editing _label you have to press _update - the sockets don't appear by themselves, and I've watched people stare at a node with zero inputs wondering where the config went. Second, the package is opaque: whatever's inside only surfaces if you explicitly pull it out with <name, so if a value isn't appearing downstream, check that you actually declared it as an output. That opacity is the price of the convenience, and it's exactly the property the "Anything Anywhere" critics warn about. Use it to keep a loop tidy, not to hide a workflow's data flow from yourself.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| _packageopt | D2_TDelivery | — | |
| _labelopt | STRING | — | |
| _updateopt | D2_BUTTON | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| _package | D2_TDelivery | — |