GRAPH (JOV) π
Plot your data as an image inside ComfyUI
- πΌπ
- πΌοΈ
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.txtinComfyUI/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.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| RESETopt | BOOLEAN | false | Clear the graph history |
| VALopt | INT | 60 | Number of values to graph and display |
| πΌπopt | VEC2INT | 512,512 | Width and Height of the graph output |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| πΌοΈ | IMAGE | T |