Value Schedule π π π
Animate any number in your graph, from CFG to camera position
- FLOAT
- INT
The scheduled-prompt nodes get the glory, but Value Schedule is the workhorse. Where the prompt nodes animate text, this one animates a number: you give it a set of keyframes and it interpolates smoothly between them, returning a FLOAT (and an INT twin) for the current frame. Wire that float into anything that takes a number - CFG, denoise strength, an IPAdapter weight, a composite node's x-position - and suddenly that parameter is a moving part in your animation.
The README's own example does exactly this: it schedules a latent composite's x position with Value Schedule, so the subject slides across the frame while a batch of prompts plays. It's the node that turns "animate prompts" into "animate everything."
How it works
The text input is a keyframe list in Deforum's value format:
0:(0.5),
30:(0.2),
60:(0.9),
120:(0.5)
Each entry is frame:(value). The node parses those points, builds a pandas series across all max_frames, and interpolates between keyframes (linear by default; the engine also supports quadratic/cubic when more than a couple of keyframes exist). The values themselves go through numexpr, so 0:(1 + t % 5) or 30:(sin(t/10)) are fair game - t is the frame. current_frame rolls over modulo max_frames for seamless loops. The INT output is just the float truncated, which is handy when the downstream input wants whole numbers.
The inputs you'll set: text, max_frames, current_frame. That's genuinely it. print_output shows the value at the current frame in the console.
Wiring it in
current_frame is a forced input in the source, which is a hint: in a batch animation you drive it from the same per-frame counter that feeds your prompt scheduler. The float output plugs into any numeric input port; if the target wants an INT, use the second output instead of rounding yourself.
Two practical notes. First, this node is why the framesync.xyz audio-reactivity tool exists - it exports keyframe strings that drop straight into the text field, so you can sync a value to the beat of a track. Second, if you only ever set one keyframe, you get a constant - a schedule needs at least two points to do anything.
Install and gotchas
Same pack as the rest - ComfyUI Manager, search FizzNodes, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/FizzleDorf/ComfyUI_FizzNodes
cd ComfyUI_FizzNodes && pip install -r requirements.txt
Requirements are numpy, pandas, numexpr; no model files. Under FizzNodes π
π
π
β ScheduleNodes.
Where people trip: a trailing comma after the last keyframe (0:(0.5),) produces an empty entry that breaks parsing, so keep the list clean; and remember the value is computed at one frame - leave current_frame unwired in a non-batch graph and the float never changes, which confuses people into thinking interpolation is broken. It's not. It's doing exactly what you asked, at a frame you never advanced.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | 0:(0), 11:(0), 23:(0), 35:(0), 47:(0), 59:(0), 71:(0), 83:(0), 95:(0), 107:(0), 119:(0) | β |
| max_frames | INT | 1201β999999 | β |
| current_frame | INT | 00β999999 | β |
| print_output | BOOLEAN | false | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| FLOAT | FLOAT | β |
| INT | INT | β |