MF Graph Plotter
Plot a number over time right inside your workflow — no spreadsheet detour
Every serious parameter sweep eventually hits the same question: what actually changed as I moved the slider? MF Graph Plotter (MF_GraphPlotter) is the node that answers it without you exporting to a spreadsheet - it plots a running line graph on the canvas, one point per execution, and keeps the history even across ComfyUI restarts.
It's from MF PipoNodes (pierreb-mf / Moment Factory), and it's the most frontend-heavy node in the pack. The Python side is tiny: it records one integer per run. Everything you see - the chart, the reset button, the save button - lives in the JavaScript frontend.
How it works
Here's the part where the README and the shipped code disagree, and the code wins: there is no X input. The README talks about feeding both X and Y coordinates, but the actual INPUT_TYPES define only Y (an INT). The frontend auto-increments X for you - X is simply the count of data points plus one. You feed it one number per execution and get a time series. That's it.
The mechanism:
- Each execution appends your
Yvalue to a per-node series stored ingraph_plotter_state.jsoninside the pack's folder. That's real persistence - restart ComfyUI and the curve is still there. - The chart itself is Chart.js, loaded from a CDN on startup. No bundled library, so the first load needs internet.
- The Reset Graph button posts to the pack's
/graph_plotter/resetAPI endpoint and clears that node's data only (state is keyed by node ID, so two plotters stay independent). - Save Graph exports the canvas as a JPEG at 0.95 quality. The README says PNG; the code says JPEG. Trust the code.
- The node is an output node with no STRING/INT outputs - you can't wire the chart further, which is fine; it's a visual instrument, not a data pass-through.
What it's actually good for
The pack's own examples are the right ones: CFG value on one axis and a quality score on the other to find a sweet spot, or loss/step for training runs. In practice, keep it simple - track one scalar per workflow, like a CFG sweep where Y is your manual quality rating:
CFG scale → KSampler ──▶ Save Image
└────────────▶ MF Graph Plotter (Y)
Queue ten configs, rate each, and the shape of the curve tells you where quality peaked.
Install
cd ComfyUI/custom_nodes/
git clone https://github.com/pierreb-mf/ComfyUI-MF-PipoNodes
cd ComfyUI-MF-PipoNodes
pip install -r requirements.txt
Restart, or use ComfyUI Manager → "MF PipoNodes". Only aiohttp and pyyaml are required - no models, and Chart.js comes from the CDN at runtime.
Gotchas
- No internet on first launch = no chart. Watch the browser console for
Failed to load Chart.js. Offline ComfyUI boxes get a graph that never draws. - The node always executes (its change-detection returns NaN), so every queue adds a point - accidentally re-queueing a finished workflow appends junk points you then have to reset.
- Reset is per-node and via the API. If the pack's server routes failed to register (you'd see a warning in the console at startup), the Reset button does nothing.
- State file lives in the pack folder - if you wipe
custom_nodes/ComfyUI-MF-PipoNodesto reinstall, your plotted history goes with it.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| Y | INT | 0-999999–999999 | — |
Outputs (0)
No outputs