Nodes/WAS Node Suite v3/CLIP Text Encode Sequence (v2)
ComfyUI Node Runs on cloud

CLIP Text Encode Sequence (v2)

Eased prompt schedules for KSampler Sequence v2

By WASasquatch·Created 3 years ago·Updated 4 days ago· 1,844
CLIP Text Encode Sequence (v2)
  • clip
  • conditioning_sequence
  • cond_keyframes
  • frame_count
token_normalization
weight_interpretation
cond_keyframes_type
frame_count100
textA portrait of a rosebud A portrait of a blooming rosebud A portrait of a blooming rose A portrait of a rose

This is the sibling of CLIP Text Encode Sequence (Advanced) (CLIPTextEncodeList), rebuilt around a different scheduling model. Instead of writing frameIndex:prompt on every line, you write a plain ordered list of prompts and let the node figure out when to switch between them using an easing curve. It's the more automated of the two, at the cost of less line-by-line control.

How it works

You give it a list of prompts (one per line, no frame numbers) and a frame_count - the total number of frames the schedule should cover. cond_keyframes_type then decides the transition shape between them: linear steps evenly through the list, while sinus, sinus_inverted, half_sinus, and half_sinus_inverted ease the transitions instead of stepping flatly, so prompts can linger near their keyframe and shift faster in between, or the reverse. This node pairs with KSampler Sequence (v2) (KSamplerSeq2) - its outputs are shaped specifically for that sampler's inputs, not for the v1 KSampler Sequence.

The inputs and outputs that matter

  • clip (CLIP) - your model's CLIP.
  • text (multiline STRING) - a plain list of prompts, one per line, no frame prefixes. Default is the same rosebud → rose progression as the v1 node, just without the N: markers.
  • frame_count (default 100, 1–1024) - total frames the prompt schedule spans.
  • cond_keyframes_type - the easing curve between prompts (linear / sinus / sinus_inverted / half_sinus / half_sinus_inverted).
  • token_normalization / weight_interpretation - same Advanced CLIP Text Encode options as the v1 node; leave on defaults unless you're deliberately writing A1111- or compel-style weighted prompts.

Three outputs, and this is the part to get right when wiring: conditioning_sequence (CONDITIONING, not CONDITIONING_SEQ - note the type difference from v1), cond_keyframes (INT), and frame_count (INT). All three feed KSampler Sequence v2's matching positive_seq/negative_seq, cond_keyframes, and frame_count inputs - you need to wire all three across, not just the conditioning.

How to install it

Via ComfyUI Manager: search "WAS_Extras", install, restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/WAS_Extras
pip install -r WAS_Extras/requirements.txt

Same as its v1 sibling, this node lives in ksampler_sequence.py, which the README specifically flags as needing its own requirements.txt - don't skip it even if you're only grabbing individual files instead of cloning the whole pack.

Common issues & troubleshooting

You wired this into KSamplerSeq (v1) and it won't connect, or connects but does nothing useful. Use KSamplerSeq2 instead. The two "sequence" pairs in this pack (v1 with CONDITIONING_SEQ + inline frame prefixes, v2 with plain CONDITIONING + separate frame_count/cond_keyframes ints) are not interchangeable - match the version numbers across encode and sampler.

Forgot to wire cond_keyframes or frame_count across. Since v2 splits the schedule into three separate outputs instead of bundling it into one CONDITIONING_SEQ, it's easy to connect just conditioning_sequence and miss the other two. KSampler Sequence v2 needs all three to actually know when to switch prompts.

Transitions feel too abrupt or too mushy. That's cond_keyframes_type. Linear is the predictable, evenly-spaced default; if your generation seems to "snap" between prompts, try one of the sinus variants to ease in and out of each keyframe instead.

Prompt count doesn't match your expectations. frame_count is the total span the whole list is stretched across, not a per-prompt duration - more lines in text means each one gets proportionally less of that span (modified by the easing curve), so adding prompts changes the pacing of the ones you already had.

CategoryWAS Suite/Conditioning

Inputs (6)

NameTypeDefaultDescription
clipCLIPThe CLIP model the prompts are encoded with. Use the one belonging to the checkpoint that will sample them.
token_normalizationCOMBOHow 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_interpretationCOMBOWhich 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_typeCOMBOHow 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_countINT1001–1024How 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.
textSTRINGA portrait of a rosebud A portrait of a blooming rosebud A portrait of a blooming rose A portrait of a roseOne 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)

NameTypeDescription
conditioning_sequenceCONDITIONINGEvery prompt, encoded, in the order they were written. Wire it into KSamplerSeq2's positive_seq or negative_seq.
cond_keyframesINTThe frames at which the run steps to the next prompt. Wire it into KSamplerSeq2's cond_keyframes.
frame_countINTThe frame count as it was given, passed straight through so one wire carries it to KSamplerSeq2 rather than the number being typed twice.