Nodes/Jovimetrix/GRAPH (JOV) πŸ“ˆ
ComfyUI Node

GRAPH (JOV) πŸ“ˆ

Plot your data as an image inside ComfyUI

By AmoranoΒ·Created 3 years agoΒ·Updated 12 months agoΒ· 397
GRAPH (JOV) πŸ“ˆ
  • πŸ‡ΌπŸ‡­
  • πŸ–ΌοΈ
β—„RESETfalseβ–Ί
β—„VAL60β–Ί

GRAPH (JOV) πŸ“ˆ turns numbers into a picture - a running matplotlib chart that shows you what a value has been doing across a queue run, instead of making you trust that the CFG/resolution/whatever is behaving. If you've ever animated something with a schedule and squinted at the output frames trying to figure out where the motion went wrong, this is the node that tells you. It's the closest ComfyUI gets to an oscilloscope, and it costs you nothing but a wire.

It lives in Jovimetrix's UTILITY family, and it's one of the few Jovi nodes that's purely a visualization - it renders, it doesn't transform. Its whole job is "give me numbers over time, I'll draw the trend."

How it works

Feed it values (a dynamic input - the node accepts multiple series) and it accumulates them into an internal history, then redraws a matplotlib line chart of each series on every execution. Because it re-renders on each run, what you get in the preview is a live trace of the last N samples, not a snapshot of one step. It's genuinely useful for debugging LERP animations, wave-driven parameters, or any feedback loop where a value should be moving smoothly but isn't.

The three real controls, straight from the schema:

  • RESET - clears the accumulated history. Flip it when you start a new test run and don't want old samples polluting the chart.
  • VAL - how many of the most recent values to keep and display. Default 60. Small number = tight zoom on the recent past; big number = the long game.
  • πŸ‡ΌπŸ‡­ - canvas width/height in pixels, default 512Γ—512. The chart is redrawn to fit, so this is really just resolution.

The output is a single πŸ–ΌοΈ IMAGE you can drop into a preview or even feed onward (watermark your frames with a chart if you're a madman).

Where people get burned: it's stateful. The history lives inside the node instance, so if you leave RESET off and change your test, old data lingers. Also, because it re-renders every execution, it runs even when nothing changed upstream - that's by design (IS_CHANGED returns a new value each pass), and it's the same behavior as EXPORT.

Installing it

Part of the Jovimetrix pack:

# ComfyUI Manager: search "Jovimetrix" and install
cd ComfyUI/custom_nodes
git clone https://github.com/Amorano/Jovimetrix.git
cd Jovimetrix
pip install -r requirements.txt

Restart ComfyUI afterwards. matplotlib (the plotting engine) is one of the pack's declared dependencies, so this node needs it - it comes with the pack install, no extra download.

Troubleshooting

  • Blank chart - no values have arrived yet, or VAL is set to 0. Give it a few queue runs.
  • Chart doesn't reset - toggle RESET to true once; it clears history and you can switch it back.
  • "No module named matplotlib" - the pack's requirements didn't finish installing (the git dependencies are a common culprit). Re-run pip install -r requirements.txt in ComfyUI/custom_nodes/Jovimetrix.

Worth knowing: this is a Jovimetrix 2.x node - it's been there through the big rework and still works. It's a quiet utility, but once you start driving parameters from TICK or WAVE GEN and need to see what they're doing, it becomes the node you didn't know you needed.

CategoryJOVIMETRIX πŸ”ΊπŸŸ©πŸ”΅/UTILITY

Inputs (3)

NameTypeDefaultDescription
RESEToptBOOLEANfalseClear the graph history
VALoptINT60Number of values to graph and display
πŸ‡ΌπŸ‡­optVEC2INT512,512Width and Height of the graph output

Outputs (1)

NameTypeDescription
πŸ–ΌοΈIMAGET