Difforum · Schedule Plot
Look at the curve before you render 400 frames
- schedule
- plot
- info
The most expensive mistake in a schedule-driven workflow is a curve that isn't the shape you think it is. You write 0:(0.45), 60:(0.6), 119:(0.45), hit queue, and find out forty minutes later that the easing made the middle of the shot too hot - or that an audio-reactive formula is pinned at its maximum the whole way through because the band you picked is normalised differently than you assumed.
Schedule Plot is the cheap fix: it renders any schedule as an image.
What it does
It takes a DIFFORUM_SCHEDULE - the exact socket type the Schedule node and Audio Curve emit - and draws the resolved per-frame values as a plot, at the width and height you ask for (512x200 by default). One output is the plot as an IMAGE, so it goes straight into a Preview Image, a Save Image, or an Image Compare node if you want to check two curves against each other. The other output is info, a one-liner: frame count, min, max, first value, last value, and which source the schedule came from.
Those numbers are the actual payload. A min of -0.4 on a denoise curve, or a max of 1.6, tells you there's a section of your clip that is going to be sampled at a strength nothing downstream expects - and you get to know that in a second rather than after the render. The shape tells you the rest: whether your easing is doing what you meant, whether an audio reaction has a flat spot, whether a "smooth sway" is actually oscillating twice as fast as you intended because you wrote the period in seconds instead of frames.
It's also quietly useful for camera work. Feed it the same schedule that's driving a camera axis and you can see the acceleration profile - a move with a spike early and a long tail is going to feel front-loaded no matter how good the render is.
Inputs, on the level
schedule is required and it's a socket, not a text box - you cannot paste 0:(0.5) into it. That's deliberate: the node plots what the pack resolved, including the audio variables and the easing, not what you typed. width and height are just the plot canvas; if you want a legible readout of a 600-frame schedule, go wider than the default.
Install
ComfyUI Manager → search Difforum, or:
cd ComfyUI/custom_nodes
git clone https://github.com/chillithebillis/Difforum.git difforum
Restart. numpy only, and the plot renders with the pack's own drawing code, so no matplotlib, no extra dependency, nothing to install. It shows nothing useful without at least a Schedule or Audio Curve upstream of it, so wire one in before you judge the node.
Where people get burned
The plotting is done in CPU numpy and returned as a single-frame IMAGE, so it costs essentially nothing - no excuse not to check. The trap is the feedback loop of iterating on a schedule: you change the Schedule text, the plot changes, and you queue again, which is fine, but the plot is only regenerated when it's part of the executed graph. If nothing downstream of it is an output node, ComfyUI has no reason to run it and you'll be staring at a stale preview wondering why your edit did nothing. Keep a Preview Image hanging off it, or route it into the same output block you use for the clip.
Second one, and it's a habit worth breaking: people read the plot as the render. It isn't. It's a number over time. A strength curve that looks like a gentle hill can still be the frame where your subject's face melts, and it can't show you that. Plot it to catch units and range errors, then render a short segment to judge the look.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| schedule | DIFFORUM_SCHEDULE | Any schedule or curve to draw. | |
| width | INT | 51264–4096 | Plot width in pixels. |
| height | INT | 20064–4096 | Plot height in pixels. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| plot | IMAGE | — |
| info | STRING | — |