πβπ¨Data Monitor β Generator β Converter
ComfyUI's Swiss Army Knife for Looking At and Changing Data
- passthrough
- aux
- aux2
- aux3
- aux4
- aux5
- output
ComfyUI gives you terrible visibility into what's actually flowing through your wires. Data Monitor (ποΈπ¨οΈ Data Monitor / Generator / Converter, from ControlFlowUtils) is the node that fixes it - and then keeps going, because it's also a type converter, a mini scripting engine, and a window into the pack's Memory Storage variables. The README calls it "your one stop shop for all things Data," which is marketing, but honestly not far off.
The core: visualize + convert
You have a big text box and one dropdown, output_type, with ten options: ANY, STRING, INT, FLOAT, BOOLEAN, LIST, TUPLE, DICT, JSON, and FORMULA.
- Feed anything into passthrough and the node shows you its string representation on screen, then forwards it - optionally converted to the output_type you picked. It's a debug pane and a converter in one.
- Leave passthrough empty and the text box itself becomes a source: type a value, pick an output type, and the node converts and outputs it.
"42"β INT gives you the number 42;{"a":1}β JSON loads a dict.
That passthrough β output flow is the part to internalize first. Whatever comes in one side comes out the other, so you can drop Data Monitor inline in a wire to inspect without breaking the flow. That alone earns it a place in every debugging session.
The power: FORMULA mode
Set output_type to FORMULA and the text box becomes a restricted Python evaluator. It's safe_eval under the hood - an AST-based sandbox, so no arbitrary file access or imports - but you get real expressions: arithmetic, conditionals, list comprehensions, lambdas, %aux%, %aux2%β¦%aux5% variable substitution from the aux inputs, and %VariableName% to pull any value out of a Memory Storage. Want to compute "the current iteration's filename is batch_%index%.png"? That's a FORMULA expression with a Memory Storage variable and string math.
There are a few special directives hidden in there too, worth knowing if you use Memory Storage heavily:
__MEM__STORAGE__GET__- dumps all storages as a dict you can inspect or manipulate.__MEM__STORAGE__SET__- replaces the whole storage dictionary from an aux input (bulk overwrite).__MEM__STORAGE__CLEAR__- deletes all storages. This is the README's recommended fix for the pack's "storages persist too long" known issue.
The honest caveats
This node has a steep feature cliff. The 90% use case is "wire something in, see what it is, convert it" - dead easy. The FORMULA and memory directives are the other 10%, and they're genuinely powerful but poorly documented beyond the tooltips and the Helpers.py source. Expect to experiment. Conversions that fail raise errors rather than returning a graceful fallback, so a wrong output_type is a hard stop until you fix it. And the DICT format is the finicky one: "Key1:Value1,Key2:Value2" with no extra spaces, or it misparses.
If you're building dynamic workflows with this pack - loops, cycles, memory storage - Data Monitor is effectively your REPL and your debugger in one node.
Install
Data Monitor ships in VykosX/ControlFlowUtils:
# ComfyUI Manager β Install Custom Nodes β search "ControlFlowUtils"
# or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/VykosX/ControlFlowUtils
Restart, find it under πΊ VykosX-ControlFlowUtils. No dependencies, and the repo's "Processing Data with Data Monitor" sample workflow is the best quick tour of FORMULA mode that exists.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | β | |
| output_type | COMBO | The type the Passthrough or Text should be converted to | |
| passthroughopt | * | Any value or data to be visualized and forwarded by this node | |
| auxopt | * | Any optional Auxiliary data to be processed by this node | |
| aux2opt | * | Any optional Auxiliary data to be processed by this node | |
| aux3opt | * | Any optional Auxiliary data to be processed by this node | |
| aux4opt | * | Any optional Auxiliary data to be processed by this node | |
| aux5opt | * | Any optional Auxiliary data to be processed by this node |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output | * | Either Passthrough or Text Data processed by this node |