CLIP Text Encode Sequence (Advanced)
Prompt schedules you type by hand
- clip
- conditioning_sequence
Most "animate a prompt" ideas fail at the first step, which is getting a schedule into the sampler. Core ComfyUI gives you one conditioning per encoder and no notion of "switch to this prompt at frame 10". This node is that notion, written out by hand.
You type lines. Each line is frame:prompt, and the number is the loop the prompt takes over on. That's it. Swap it in front of KSampler Sequence and "a rosebud" becomes "a rose" over the course of a run:
0:A portrait of a rosebud
5:A portrait of a blooming rosebud
10:A portrait of a blooming rose
15:A portrait of a rose
What it does under the hood
For each line the node splits once on the first colon, encodes the text after it with the clip you fed in, and appends the pair (frame index, conditioning) to a list. That list is what comes out - not a single conditioning, a frame-tagged schedule.
Two consequences follow. First, every line is encoded, so a twelve-prompt schedule is twelve text-encoder passes; that's cheap but not free. Second, the frame numbers are the loop indices of the sampler, not seconds, and a loop keeps the last prompt it was handed until the next numbered line arrives. So the entries don't have to cover the whole run, and gaps are fine - they just mean "keep going with what I had".
A line with no leading number is silently skipped. Not "warned about", not "used as a continuation" - skipped. If half your schedule vanished on the way in, count your colons.
The inputs that matter
clip is the text encoder. Use the one belonging to the checkpoint that will sample the schedule, same as any text encode.
text is the schedule box. The default is a four-line rosebud-to-rose example, which is a decent place to steal formatting from.
token_normalization and weight_interpretation are the two most misunderstood widgets in the pack. They do nothing unless you have a pack installed that registers BNK_CLIPTextEncodeAdvanced - BlenderNeko's advanced CLIP embedding pack, which is what most people mean when they talk about weighting dialects. Without it, the prompt is read exactly the way core's CLIP Text Encode reads it and these two dropdowns are decorative. Set them and move on; don't debug them.
The single output is conditioning_sequence, typed CONDITIONING_SEQ. That type is the important detail: it is not an ordinary conditioning and will not plug into a normal sampler, a ControlNet apply node, or anything else expecting CONDITIONING. It fits positive_seq or negative_seq on KSampler Sequence only. If ComfyUI refuses a link, this is why, and no amount of re-dragging fixes it.
Installing it
It ships in WAS Node Suite v3 (468 nodes, MIT, by WASasquatch), so you install the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
Or search WAS Node Suite v3 in ComfyUI Manager and install from there - that's the route the README actually recommends. You need ComfyUI 0.14.0+ and Python 3.10+, and that's the end of the requirements list: the pack installs no Python packages at all, downloads nothing, and never runs pip on your behalf. First start after install takes a second longer while it writes config.yaml and its folders under <ComfyUI was-node-suite>/. This node is in the extras group, enabled by default.
Fair warning if you're following an older tutorial: the v2 pack pip-installed about twenty packages and generated the "Cannot import … was-node-suite-comfyui module" errors that still dominate search results. None of that applies to v3, and the old was_suite_config.json inside the pack folder has been replaced by config.yaml in your user directory.
Getting something out of it
Wire the sequence into KSampler Sequence's positive_seq, set sequence_loop_count to however many frames you want, and put the same node (or a plain text encode at frame 0) on negative_seq - a loop with no negative entry at all has no negative prompt, which is a quiet way to get a run that drifts. Then decode the latent batch and save it as frames.
The honest framing: this is the AnimateDiff-era way of making a picture sequence move, and it works best on short, morph-shaped runs - five prompts over twenty loops, that kind of thing. It is not temporal video generation; there's no model that knows about time. If you want a real moving shot, the sequence samplers are still fun for prompt travel, and the video models are where the actual motion lives.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | The CLIP model the prompts are encoded with. Use the one belonging to the checkpoint that will sample them. | |
| token_normalization | COMBO | How token weights are evened out before encoding. Read only when a pack registering BNK_CLIPTextEncodeAdvanced is installed; without one this setting has no effect at all. 'none' leaves the weights alone, 'mean' recentres them, 'length' scales by prompt length, 'length+mean' does both. | |
| weight_interpretation | COMBO | Which prompt weighting dialect the '(word:1.2)' syntax is read in. Read only when a pack registering BNK_CLIPTextEncodeAdvanced is installed; without one this setting has no effect and the prompt is read the way ComfyUI's own CLIP Text Encode reads it. | |
| text | STRING | 0:A portrait of a rosebud 5:A portrait of a blooming rosebud 10:A portrait of a blooming rose 15:A portrait of a rose | One prompt per line, each written as 'frame:prompt', for example '0:a rosebud'. The number is the loop the prompt takes over on, counting from zero, and it stays in force until the next numbered line. A line with no number in front of a colon is ignored. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| conditioning_sequence | CONDITIONING_SEQ | The frame-tagged prompts, for the positive_seq or negative_seq input of KSampler Sequence. It is not an ordinary conditioning and does not fit a plain sampler. |