Nodes/FizzNodes/Batch Value Schedule πŸ“…πŸ…•πŸ…
ComfyUI Node Runs on cloud

Batch Value Schedule πŸ“…πŸ…•πŸ…

Schedule any number over your animation β€” zoom, denoise, IPAdapter strength, take your pick

By FizzleDorfΒ·Created 3 years agoΒ·Updated 2 years agoΒ· 479
Batch Value Schedule πŸ“…πŸ…•πŸ…
    • FLOAT
    • INT
    β—„text0:(0), 11:(0), 23:(0), 35:(0), 47:(0), 59:(0), 71:(0), 83:(0), 95:(0), 107:(0), 119:(0) β–Ί
    β—„max_frames120β–Ί
    β—„print_outputfalseβ–Ί

    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.

    CategoryFizzNodes πŸ“…πŸ…•πŸ…/BatchScheduleNodes

    Inputs (3)

    NameTypeDefaultDescription
    textSTRING0:(0), 11:(0), 23:(0), 35:(0), 47:(0), 59:(0), 71:(0), 83:(0), 95:(0), 107:(0), 119:(0) β€”
    max_framesINT1201–999999β€”
    print_outputBOOLEANfalseβ€”

    Outputs (2)

    NameTypeDescription
    FLOATFLOATβ€”
    INTINTβ€”