Nodes/WorkflowX Configurator/WorkflowX_DetailerXCapture
ComfyUI Node

WorkflowX_DetailerXCapture

The node you never place by hand

By haroonaslam·Created 5 months ago·Updated 4 days ago· 11
WorkflowX_DetailerXCapture
  • value
  • *
◄token—►
◄key—►

If you found this by searching the node list: there is no reason to add it. WorkflowX_DetailerXCapture is injected by DetailerX when you queue a workflow, and it exists purely so the node's Rerun button can work without re-running your generator.

What it is

DetailerX can re-execute itself against retained inputs - that's the Rerun button, and it's genuinely useful: tweak the face denoise, queue only the detailer plus its downstream branch, and skip the 40-second base generation. To do that, the detailer needs a copy of everything it consumed from outside its own subgraph: model, clip, vae, image and both conditionings.

That's Capture's job. At queue time, the pack walks the prompt, finds every place where a node inside the DetailerX subgraph reads a link from a node outside it, and inserts one of these between the two. It's a tap, not a branch - the value passes through unchanged, so nothing downstream notices.

How it works

Three required inputs, one wildcard output:

  • value (*) - the boundary value being tapped. Anything: a MODEL, a CONDITIONING, an IMAGE batch.
  • token (STRING) - which retained DetailerX session this tap belongs to.
  • key (STRING) - an identifier for the specific link that was tapped, so the same value can be resolved again later.

The node declares INPUT_IS_LIST and outputs a list, which is the hint that this is machinery rather than a user node: it's built to run in the list-mapped execution context the rest of the entry layer assumes. On execution it clones the value into the session's boundary dictionary - tensors are detached and moved to CPU, while model/CLIP/VAE patchers are kept as references, never copied weights. Then it returns the value untouched.

You'll see it in History and in the API prompt, not on your canvas. The pack rewrites the queued prompt, not your saved workflow, which is why your .json stays clean.

Why it matters to you

Three practical consequences:

  1. Your UI workflow is untouched. Capture nodes are not saved, so nothing breaks when you share or reload the graph. The retained state is process-local and evaporates on restart.
  2. Memory is real. Boundary snapshots share the same 2 GiB process-wide budget as DetailerX's own retained inputs, with up to 32 idle sessions and oldest-idle eviction. Several paused runs plus big batches is how you hit "retained inputs exceed the shared 2 GiB limit" from the session layer's perspective.
  3. The tap is point-in-time. It captures the value at the moment of the run. Change an upstream node afterwards and Rerun still uses the old value - that's the design, and it's the source of the most common complaint about reruns ("my new prompt didn't apply").

Installing and troubleshooting

Capture ships with the pack - there is no separate install. Get WorkflowX in place and restart:

cd ComfyUI/custom_nodes
git clone https://github.com/haroonaslam/WorkflowX-Configurator
python -m pip install -r WorkflowX-Configurator/detailer_x/requirements.txt

Then restart ComfyUI and hard-refresh the browser. If the node is missing entirely, confirm the pack registered and that detailer_x imported cleanly - the pack logs a load failure rather than taking the whole UI down.

What actually goes wrong with it:

  • "No retained input for <node>.<input>. Queue the ordinary workflow to capture this connection." You edited the graph after the run - a new connection crosses into the DetailerX subgraph that the last queue never tapped. Queue normally once and Rerun works again.
  • "Retained inputs unavailable. Run the ordinary workflow again." The session is gone: server restart, idle eviction, or a different browser/workflow owner. Nothing to fix; just re-queue.
  • "Boundary source ... changed type." You swapped an upstream node for a different class after the run. The saved boundary no longer matches, so Rerun refuses rather than feeding a MODEL where an IMAGE used to be. Queue normally.

Don't try to delete, rewire or reuse these by hand, and don't expect them to appear in the UI workflow. They're a queue-time detail, and the reader side of the mechanism - WorkflowX_DetailerXSnapshot - is where the values get injected back into the rerun graph.

CategoryWorkflowX/Internal

Inputs (3)

NameTypeDefaultDescription
value*—
tokenSTRING—
keySTRING—

Outputs (1)

NameTypeDescription
**—