Nodes/AnimateDiff Evolved/Prompt Scheduling πŸŽ­πŸ…πŸ…“
ComfyUI Node Runs on cloud

Prompt Scheduling πŸŽ­πŸ…πŸ…“

Prompt travel without installing FizzNodes

By KosinkadinkΒ·Created 3 years agoΒ·Updated 8 days agoΒ· 3,519
Prompt Scheduling πŸŽ­πŸ…πŸ…“
  • clip
  • values_replace
  • CONDITIONING
β—„promptsβ–Ί
β—„prepend_textβ–Ί
β—„append_textβ–Ί
β—„print_schedulefalseβ–Ί
β—„max_length0β–Ί
β—„tensor_interpβ–Ύβ–Ί

This is the built-in way to do prompt travel in AnimateDiff-Evolved - write a different prompt for different points in your clip's timeline and let the conditioning interpolate between them frame by frame, instead of one static prompt driving the whole animation. The node's own description says it plainly: "Encode a schedule of prompts with automatic interpolation." The README name-checks the alternative too - FizzNodes' BatchPromptSchedule does a similar job - but this one ships with the pack, so there's nothing extra to install if you're already here.

Reach for this when a single prompt can't carry your whole clip: a scene that needs to shift from "walking down a street" to "running through rain," or a character whose expression should change partway through. Without scheduling, you'd be stuck picking one prompt and hoping the motion module supplies the change on its own - it usually won't.

How it works

You write your prompts in one multiline text field using frame-indexed schedule syntax (a number, then the prompt text for that point), and the node encodes each one through CLIP, then interpolates the resulting conditioning tensors across the frames between schedule points - rather than hard-cutting from one prompt's conditioning to the next. tensor_interp controls how that blend happens.

The inputs and outputs that matter

Required: prompts (multiline STRING - your actual schedule) and clip (the CLIP model to encode against, same as any text-encode node).

Optional, and worth knowing about even if you rarely touch them: prepend_text/append_text (multiline STRING) - text glued onto the front or back of every scheduled prompt, the natural place for quality tags or a consistent style suffix so you're not retyping them at each schedule point; values_replace (type VALUES_REPLACE) for swapping in placeholder values across the schedule; print_schedule (boolean, default false) to dump the parsed schedule to the console for debugging; max_length (default 0) to cap it; and tensor_interp for the interpolation method between conditioning tensors. Output is a single CONDITIONING - wire it straight into your KSampler's positive or negative input, exactly like a normal CLIPTextEncode.

How to install it

Via ComfyUI Manager: search AnimateDiff Evolved, author Kosinkadink, install, restart. Manually:

cd ComfyUI/custom_nodes && git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved

No model download needed for this node specifically - it just needs a CLIP model, which you already have from your checkpoint loader.

Common issues & troubleshooting

Schedule doesn't seem to be doing anything - output looks like one flat prompt. Turn on print_schedule and check the console output actually parsed your text the way you intended. Prompt-schedule syntax is fussy about formatting; a malformed entry can silently collapse back to something closer to a single prompt than a real schedule.

Transitions between prompts feel abrupt rather than smooth. That's tensor_interp - if the default isn't giving you the blend you want, that's the field to change. Also worth checking your schedule points aren't too close together relative to your total frame count; interpolation needs room to actually interpolate.

Quality tags keep getting dropped or forgotten at some schedule points. Move them into prepend_text/append_text instead of retyping them into every prompt in your schedule - that's exactly the problem those two optional fields solve.

Wondering whether to use this or FizzNodes' BatchPromptSchedule. Functionally similar for the core prompt-travel use case; this one has the advantage of shipping with the pack you already installed for AnimateDiff, so there's one less dependency to manage.

CategoryAnimate Diff πŸŽ­πŸ…πŸ…“/scheduling

Inputs (8)

NameTypeDefaultDescription
promptsSTRINGβ€”
clipCLIPβ€”
prepend_textoptSTRINGβ€”
append_textoptSTRINGβ€”
values_replaceoptVALUES_REPLACEβ€”
print_scheduleoptBOOLEANfalseβ€”
max_lengthoptINT00–9007199254740991β€”
tensor_interpoptCOMBO2 options: lerp, slerp

Outputs (1)

NameTypeDescription
CONDITIONINGCONDITIONINGβ€”