Nodes/Akatz Custom Nodes/Keyframe Scheduler | Akatz
ComfyUI Node

Keyframe Scheduler | Akatz

Write a schedule in keyframes and get eased values for every frame

By akatz-ai·Created 2 years ago·Updated 9 months ago· 32
Keyframe Scheduler | Akatz
  • a
  • b
  • schedule_list
keyframe_schedule
easing_mode
end_frame
ndigits5

Keyframe Scheduler is the general-purpose scheduling node in the pack: you type a few keyframes - "at frame 0 the value is 0, at frame 50 it's 1, at the end it's 0.2" - and it returns a full list of values with easing applied between them, one entry per frame. It's the interpolation engine that powers most of the pack's data-driven animations.

Think of it as the hand-authored alternative to the audio-driven nodes. Schedule Audio Framesync derives values from a track; this one derives them from your head. You get to say exactly when a parameter moves, how far, and with which curve, without touching audio. That makes it the right tool for designed motion - a camera drift, a dilation that eases in and out, a weight ramp - where "whatever the music says" isn't good enough.

The scheduler itself is a well-tested design (credit in the source goes to SaltAI's AudioViz keyframe scheduler), so the syntax will feel familiar if you've used that family. It accepts math in the value expressions, including t (current frame), z (end frame), and a/b wildcard inputs for wiring values in from elsewhere.

How it works

Keyframes are written as [index]: value pairs separated by commas - e.g. [0]: 0, [25]: 1, z: 0. Indices can be bare numbers, bracket expressions like [t*2], or z/end_frame for the last frame. Values can be plain numbers or expressions using t, z, sin, cos, and the a/b inputs. Between keyframes, easing_mode interpolates - the same 19-curve menu as the audio nodes (linear, ease-in/out, bounce, sinusoidal, exponential, and more). end_frame sets the schedule length explicitly; if unset it runs to the last keyframe. ndigits controls rounding (default 5).

Inputs

  • keyframe_schedule - the [index]: value string. Your main input.
  • easing_mode - the interpolation curve, None for linear steps.
  • Optional end_frame - total length; a, b - wildcard values you can reference in expressions; ndigits - rounding.

Output is schedule_list, a LIST of one value per frame.

Installing it

Part of akatz-ai/ComfyUI-AKatz-Nodes. Install via ComfyUI Manager (search "AKatz") or:

cd ComfyUI/custom_nodes
git clone https://github.com/akatz-ai/ComfyUI-AKatz-Nodes
cd ComfyUI-AKatz-Nodes
pip install -r requirements.txt

Restart ComfyUI. No model downloads; requirements are numpy, torch, opencv-python and pydub.

Common issues

Formatting bites hardest here: each keyframe needs its [index]: value shape, and using z without setting end_frame throws an error on purpose. If the output list is shorter than your frame count, set end_frame explicitly instead of relying on the last keyframe. And remember this pack's list nodes are your friends downstream - if the schedule length doesn't match your batch, Adjust List Size is right there. For most users the sweet spot is combining this with a dilation or IPAdapter weights node: authored keyframes, eased, straight into the animation.

Category💜Akatz Nodes/Utils

Inputs (6)

NameTypeDefaultDescription
keyframe_scheduleSTRING
easing_modeCOMBO19 options: None, linear, ease-in, ease-out, ease-in-out, bounce-in, +13
end_frameoptINT
ndigitsoptINT51–12
aopt*
bopt*

Outputs (1)

NameTypeDescription
schedule_listLIST