Nodes/ComfyUI-Satori/why did it break?
ComfyUI Node

why did it break?

The debugging node that shows you everything and tells you nothing — in a good way

By AgencyMind·Created about a year ago·Updated about a year ago· 1
why did it break?
  • image
  • image
investigation_idinvestigation_1
analysis_modestensor,temporal,patterns
frame_memory10

Every ComfyUI user has hit the same wall: a workflow that "used to work" suddenly spits out blown-out highlights, or an ImageBlend is shifting brightness and you can't tell if it's the node or you. Most diagnostic tools presume the answer - "brightness too high, lower it." This one doesn't. It's called why did it break? and its whole deal is to show you what the data is actually doing at that exact point in the graph, then get out of your way. Drop it in, run, read the phosphor-green terminal readout, take it out.

It's the core node of the ComfyUI-Satori pack by AgencyMind. The author's philosophy - "investigate, don't prescribe" - is the whole product. The node computes a pile of statistics, displays all of them, and interprets exactly none. You decide what the numbers mean, which honestly makes it more useful than a node that confidently tells you the wrong thing.

How it actually works

The node is an output node with a single IMAGE output that's a pure pass-through - your tensor comes out identical. The investigation happens on the node itself: the Python side flattens the tensor and computes shape/dtype/device, landscape stats (min, max, mean, median, std), distribution facts (unique value count, fraction of zeros and ones - i.e. how much is clipping at 0 or 1), percentiles from p1 to p99, and per-channel R/G/B mean, std, and "active" fraction plus pairwise R-G, G-B, R-B correlations. If it's run before in the same workflow it also reports temporal deltas at 1, 5, and 10 frames back - the relative % change of mean/std/min/max against a rolling history. That history lives in a per-workflow context (capped at 100 entries, with a hard limit of 10 contexts so abandoned workflows don't leak memory). Everything gets shipped back to the browser in the node's ui message, where an addDOMWidget() custom widget renders it as ASCII bars, channel meters, and a stats readout in CRT-green phosphor style.

The inputs that matter

  • image (IMAGE, required) - the tensor you want to look at.
  • investigation_id (STRING, default investigation_1) - a name for the readout. Handy when you have several of these in one graph (it's scrubbed against HTML injection).
  • analysis_modes (STRING, default tensor,temporal,patterns) - comma-separated list of what to run.
  • frame_memory (INT, default 10, 1–100) - how much history the temporal mode keeps.

The only output is image, identical to the input. Because it's an output node, ComfyUI runs it even with nothing connected downstream - which is what you want for a probe.

The honest caveats

  • "patterns" mode is a stub. It's on by default, but the code leaves it as a placeholder - "This is where pattern detection would happen." Drop it from analysis_modes if you want, though it's cheap.
  • The bundled docs lie a little. web/docs/WhyDidItBreak.md describes inputs called show_overlay and analysis_depth and outputs called report and stats. None of those exist in the shipped code. Don't go hunting for them - the schema above is what you actually get.
  • The "histogram" is really a single-bar brightness meter centered on the mean, not a full distribution plot. The percentiles line does the real distribution work.

Install

Same drill as any custom node: ComfyUI Manager → search "ComfyUI-Satori", or clone it. Watch out - the README's own clone command contains a placeholder URL (yourusername); copy the real one instead:

cd ComfyUI/custom_nodes
git clone https://github.com/AgencyMind/ComfyUI-Satori

Then restart ComfyUI. There's no requirements.txt beyond numpy/torch (which ComfyUI already ships), no model downloads, no API key. It's about as clean an install as this ecosystem gets.

When to reach for it

After a transform you don't trust (ImageBlend, upscalers, ControlNet preprocessors), before and after a VAE encode, or at any pipeline stage you don't understand. The tells: a mean hugging 0 or 1, a large fraction of zeros or ones (clipping), or channel means that drift apart (your color balance is being mangled). It won't fix anything for you - it just tells you where to look, which is usually the part that actually takes the time.

CategoryComfyUI-Satori

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
investigation_idSTRINGinvestigation_1
analysis_modesoptSTRINGtensor,temporal,patterns
frame_memoryoptINT101–100

Outputs (1)

NameTypeDescription
imageIMAGE