ꘇ performance probe
Find out what's actually on that wire
- input
Debugging ComfyUI graphs is usually an exercise in inference: you stare at a wire, guess what's flowing down it, and add a preview node that shows you a picture and tells you nothing about the data. performance probe is the opposite of that. It accepts any type on its input, has no outputs at all, and prints what arrived - the type, and for tensors the shape, dtype and byte size. Wire it in, queue once, read the panel.
It's the "printf debugging" node of ꘇ Genereti (languel/genereti, by Liuboto, MIT, super-alpha), the realtime creative-coding pack for ComfyUI. That pack's live paths deliberately run outside Comfy's queue, which means the usual Comfy debugging reflexes - a preview node, a console in the terminal, the progress bar - often don't apply. A node whose entire job is "tell me what this is" is more valuable here than it would be in an image graph.
What it reports
There are no output sockets. All the information appears on the node itself. Depending on what you connect, the probe reports:
- Tensors (IMAGE and friends) -
type,shapeas a list,dtype, and a computedbytesfigure from the element count and element size. That byte count is the honest answer to "why is this chain slow": a batch of 1024×1024 RGBA float32 is not the same animal as a single 512×512 RGB. - Dicts (the pack's CHOP and DAT blocks) - the first 16 keys, plus, if there's a
channelsentry, how many channels and how many samples each of the first 8 has. It also surfacessampleRate/sample_rateandtimewhen they're present. This is how you find out that your "one sample" control is actually a 4096-sample block, or that a channel you were counting on isn't there. - Strings, lists, tuples - a length.
And regardless of type, the Python class name - which is how you discover that something you assumed was an IMAGE is actually a Mask, or that an input you expected to be a dict is a plain list.
Notably, it doesn't copy pixels. That's stated in the node's own description and it matters: you can leave a probe attached through a live chain without paying a conversion cost or forcing a readback.
When to reach for it
The three situations where this node earns its slot:
- You're combining packs. A third-party node emits something into a Genereti socket (or vice versa) and you get a red wire and a shrug. The probe tells you the actual type.
- Your CHOP is doing something weird. Nine times out of ten the answer is a channel naming or sample-count mismatch, and the probe shows both.
- You want to know the shape before you commit to a chain. Attach it to a source and see whether you're working with 512×512 or something that's about to explode into a 2000×2000 intermediate.
It also carries search aliases for fps, performance, probe and monitor, which is why it comes up when you're actually looking for dat.monitor. Different tool: dat.monitor measures the browser, this one inspects a value.
Install
Manager → search "Genereti" → install ꘇ Genereti → restart ComfyUI → refresh the browser page. Manual:
git clone https://github.com/languel/genereti.git custom_nodes/genereti
./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt
Only comfyui-frontend-package>=1.53.6 is pinned; the rest comes from ComfyUI's own environment. Needs ComfyUI 0.38.2+, Python 3.11+.
Gotchas
It's a terminal node by design. With no outputs you can't put it mid-chain - you attach it as a branch and feed whatever you're suspicious of. If you need to keep the chain going, that's what image preview or the conversion operators are for.
It re-executes on every queue. The node is marked non-idempotent, which is intentional: you want fresh metadata each run, not a cached answer from the first queue. The cost is that it participates in every prompt.
Reading it requires the node's own display. There's no output socket to route into a text node, so the probe's report lives on the node in the browser. If you need the metadata somewhere else, that's a different node (inspect or a DAT node) - this one is for looking at.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| input | * | — |
Outputs (0)
No outputs