CLIP Text Encode Sequence (v2)
The prompt list without hand-typed frame numbers
- clip
- conditioning_sequence
- cond_keyframes
- frame_count
The (v2) in the name is doing real work here. Where the older CLIP Text Encode Sequence makes you type 0:, 5:, 10: in front of every prompt line, this one throws the numbers away and works out the changeovers itself. One prompt per line, a total frame count, and a shape for how the prompts are spaced across the run.
It's the node to reach for first, and it's specifically built as the front half of KSampler Sequence (v2).
What it actually builds
Feed it four lines and frame_count 100 and it returns three things that plug straight into the sampler. Every line is encoded with your clip, in order, into one list of conditionings. Then cond_keyframes_type decides when each one takes over:
lineargives every prompt an equal share of the run - four prompts over 100 frames is roughly 25 frames each.sinusandsinus_invertedbunch the changeovers up at one end or the other, so the run lingers on the opening prompts and races through the rest, or the reverse.half_sinusandhalf_sinus_invertedare the half-curve versions of the same idea.
That's the whole conceptual difference from the manual node: you're choosing a distribution, not a frame number. If the first shot needs to be held and the last few are a flourish, the sinus shapes are how you say so.
One thing that catches people: a blank line is encoded as an empty prompt and takes its turn like any other. It doesn't mean "skip".
The inputs and outputs that matter
clip - the text encoder, ideally the one from the checkpoint that will sample this.
frame_count - how long the whole run is. It defaults to 100, and it does double duty: it spaces the keyframes and it goes out the other end as a wire, so the sampler doesn't need the number typed twice.
text - one prompt per line, in the order the run moves through them. No prefixes.
token_normalization and weight_interpretation - same story as everywhere in this pack: no effect at all unless a pack registering BNK_CLIPTextEncodeAdvanced is installed. Without one, the prompt is read the way core's encoder reads it. Don't lose sleep over them.
Three outputs: conditioning_sequence, which is what a plain v2 CONDITIONING socket wants - note it's not the CONDITIONING_SEQ type the older node emits, and KSampler Sequence (v2)'s positive_seq / negative_seq accept either a list like this or one plain conditioning used for every frame. cond_keyframes is an INT socket carrying the list of frames where the run steps to the next prompt. frame_count passes the number through so one wire carries it.
Installing it
It's one of 468 nodes in WAS Node Suite v3 (MIT, by WASasquatch - the pack's been going since 2023 and has a million-plus downloads), so you install the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
ComfyUI Manager's search entry is WAS Node Suite v3 and is the recommended route. Requirements are ComfyUI 0.14.0+ and Python 3.10+; the pack installs no packages, fetches nothing, and never runs pip. Its config, wildcard and LUT folders appear under your ComfyUI user directory on first start, which is why the very first launch after installing is a beat slower. Sequence samplers, LUTs and latent upscalers live in the extras feature group - on by default, but if these nodes are missing from your Add Node menu, that's the switch to check in config.yaml.
Pairing it and what goes wrong
Wire the three outputs into KSampler Sequence (v2): the conditionings into positive_seq, cond_keyframes into cond_keyframes, frame_count into frame_count. Do the same for the negative side with its own instance at the same frame_count, or you'll get a run whose negative prompt silently changes shape halfway through.
The classic disappointment is a keyframe list that lands every changeover on the same frame because frame_count is smaller than the number of prompts you wrote. With six prompts and 12 frames, most of your schedule never happens. Give the run room - and remember the sampler charges you for all of it, steps times frames.
The other one is expecting motion. This is a prompt schedule, not a temporal model. With the sampler's latent interpolation off you get a slideshow of related images; turned down low you get a morph. Neither is video, and anyone who tells you otherwise is selling you a 2023 workflow with a 2026 name.
Inputs (6)
| 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. | |
| cond_keyframes_type | COMBO | How the changeovers are spaced. `linear` gives every prompt an equal share of the run. The sinus shapes bunch them up at one end or the other, so the sequence lingers on the opening prompts and races through the rest, or the reverse, useful when the first shot needs to be held and the last few are only a flourish. | |
| frame_count | INT | 1001–1024 | How long the whole run is, in frames. The changeovers are spread across this many, so at 100 frames and four prompts each one holds for about 25. |
| text | STRING | A portrait of a rosebud A portrait of a blooming rosebud A portrait of a blooming rose A portrait of a rose | One prompt per line, in the order the run works through them. No frame numbers: cond_keyframes_type and frame_count decide when each one takes over. A blank line is encoded as an empty prompt and takes its turn like any other. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| conditioning_sequence | CONDITIONING | Every prompt, encoded, in the order they were written. Wire it into KSampler Sequence (v2)'s positive_seq or negative_seq. |
| cond_keyframes | INT | The frames at which the run steps to the next prompt. Wire it into KSampler Sequence (v2)'s cond_keyframes. |
| frame_count | INT | The frame count as it was given, passed straight through so one wire carries it to KSampler Sequence (v2) rather than the number being typed twice. |