Batch Value Schedule π π π
Schedule any number over your animation β zoom, denoise, IPAdapter strength, take your pick
- FLOAT
- INT
Batch Value Schedule is the numeric sibling of FizzNodes' prompt scheduler. Where Batch Prompt Schedule animates text, this one animates numbers: it takes a keyframe schedule and hands you a per-frame value you can feed into anything with a float or int input. If your animation needs the zoom to ease in, the denoise to drop after frame 20, or an IPAdapter weight to fade from 1 to 0 across a run, this is the node.
The keyframe format
Instead of quoted prompts, values use the format frame:(value):
0:(0),
30:(1.0),
60:(0.5),
90:(0)
That schedule eases from 0 up to 1.0, back down to 0.5, then to 0 - linearly interpolated between keyframes. Values don't have to be plain numbers; anything numexpr can evaluate works, including math with t (current frame) and max_f:
0:(0),
60:(sin(t/20))
The two external tools the README points at - framesync.xyz for audio-synced exports and Chigozie's keyframe string generator - both export exactly this format, so you can drop audio-reactive curves straight in.
How it works
The node parses your text into keyframes, then builds a pandas.Series of length max_frames and interpolates between the keyed values, filling the gaps with linear interpolation. It returns that whole series twice: FLOAT and INT (the same values truncated to ints). The README's Noisy Latent Composition example uses it to schedule the latent composite node's X position, proving the classic use: drive a positional or strength parameter frame by frame.
The catch everyone hits first
This is the big one, and it's a real, frequently-hit error: the outputs are the whole per-frame series, not one value. FLOAT and INT each contain max_frames numbers, all at once. If you wire the FLOAT output into a widget that expects a single scalar - an IPAdapter strength slider, a denoise widget, an int input on some other node - you'll get an error like ValueError: The truth value of a Series is ambiguous. People run into exactly this when trying to keyframe IPAdapter strength over an AnimateDiff run. Batch nodes feed other batch-aware inputs, or get indexed by frame somewhere downstream.
If you need one value at the current frame only, driven by a frame counter, use the non-batch Value Schedule node in the same pack - it takes a current_frame input and returns a single float. Same format, different delivery.
Install and the rest
cd ComfyUI/custom_nodes && git clone https://github.com/FizzleDorf/ComfyUI_FizzNodes.git
cd ComfyUI_FizzNodes && pip install -r requirements.txt
Or install "FizzNodes" through ComfyUI Manager and restart. Just numpy, pandas, and numexpr - no models. max_frames must match your latent batch size, same as the prompt scheduler, or the series length won't line up with what you're driving. print_output dumps the whole per-frame series to your console if you want to sanity-check a curve.
Inputs (3)
| 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 | β |
| print_output | BOOLEAN | false | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| FLOAT | FLOAT | β |
| INT | INT | β |