sch_Prompt
Keyframe Prompt Scheduling Straight to CONDITIONING
- clip
- CONDITIONING
If you've ever tried to make a prompt change over time in ComfyUI - a face aging across a batch, a scene shifting from day to night across a video - you know the usual answer is a pile of CLIPTextEncode nodes and some manual math to blend between them. sch_Prompt is Apt_Preset's shortcut for that: you write a list of prompts tied to frame numbers, tell it which frame you're currently on, and it hands you a single, already-blended CONDITIONING output. No blend node, no math.
This is the same idea the ComfyUI community has been calling "prompt scheduling" or "prompt travel" since the early AnimateDiff days - the classic demo is a prompt list that ages a toddler into an old man across 140 frames, keyed like "0": "a toddler", "60": "a teenager", "120": "an old man". sch_Prompt does the same job but as one native node instead of a third-party FizzNodes-style rig, and it uses @ instead of : to separate the frame number from the text.
Inputs that matter
- clip - your CLIP model, same as you'd plug into any CLIPTextEncode.
- keyframe_list - a multiline string of
frame_number@textpairs, one prompt per keyframe. The default placeholder is literallyframe_number@text, so replace it with real entries like0@a quiet forest at dawnand60@the same forest on fire. - current_frame - which frame you're rendering right now. Drive this from your batch index or video pipeline loop.
- easing_type - how the transition between two neighboring keyframes gets weighted. There are 23 choices here (Linear, Sine_In/Out/InOut, Sin_Squared, Quart_In/Out/InOut, Cubic_In/Out/InOut, Circ_In, and more the node menu truncates). This is Robert Penner's classic animation-easing set - the same curves that power CSS transitions and game tweening - repurposed to control how abruptly one prompt's influence hands off to the next. Linear is a straight blend; the In/Out/InOut variants accelerate or decelerate the handoff instead of doing it at a constant rate.
The only output is CONDITIONING - wire it straight into your sampler's positive (or negative) slot exactly like a normal CLIPTextEncode.
What's actually happening under the hood
sch_Prompt finds the two keyframes bracketing current_frame, encodes both through CLIP, and blends them by a weight derived from where current_frame sits between them, shaped by easing_type. It's the all-in-one version of a rig you'd otherwise build from two CLIPTextEncode nodes plus a ConditioningAverage - which is exactly what its sibling node, sch_text, exposes as raw pieces if you want to build that blend yourself instead. If you just need conditioning at the other end, use sch_Prompt and skip the extra nodes; reach for sch_text when you need to inspect or reroute the raw prompt strings first.
Installing it
Easiest route: open ComfyUI Manager, search "ComfyUI-Apt_Preset", install, restart. By hand: cd ComfyUI/custom_nodes && git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git, then restart ComfyUI. The repo's dependency installer is install.bat - a Windows batch file. If you're on Linux or a cloud box, open it in a text editor and pip-install whatever it references, or just let ComfyUI Manager's "install missing nodes" flow sort it out the first time you load a workflow that uses this node.
Where people get stuck
The @ separator is fixed - it's not a delimiter you get to pick (unlike the sibling node sch_split_text, which lets you choose your own). Type 0: instead of 0@ and you'll either get a parse error or the schedule will silently collapse to one keyframe.
Real users have hit plain import failures with this pack too - a comfyui subreddit thread shows someone's console spitting (IMPORT FAILED): ...ComfyUI-Apt_Preset after downloading a workflow that used it. The fix in both cases people reported was the same: use ComfyUI Manager's "install missing custom nodes," or delete and re-clone the repo manually and restart. If your console shows that error, check the terminal output above it for the actual missing Python package rather than assuming the node itself is broken.
One more thing worth knowing: the README notes that the pack's controlnet schedule control feature specifically wants ComfyUI-Advanced-ControlNet installed first. If you're chaining sch_Prompt's frame-driven output into ControlNet timing elsewhere in your graph, grab that pack too.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| keyframe_list | STRING | frame_number@text | — |
| current_frame | INT | 00–9999 | — |
| easing_type | COMBO | 23 options: Linear, Sine_In, Sine_Out, Sine_InOut, Sin_Squared, Quart_In, +17 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |