Nodes/MF-PipoNodes/MF Graph Plotter
ComfyUI Node

MF Graph Plotter

Plot a number over time right inside your workflow — no spreadsheet detour

By MomentFactory·Created 11 months ago·Updated 7 months ago· 1
MF Graph Plotter
      Y0

      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 Y value to a per-node series stored in graph_plotter_state.json inside 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/reset API 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-PipoNodes to reinstall, your plotted history goes with it.
      CategoryMF_PipoNodes/Analysis

      Inputs (1)

      NameTypeDefaultDescription
      YINT0-999999–999999

      Outputs (0)

      No outputs