Nodes/FizzNodes/Prompt Schedule NodeFlow End πŸ“…πŸ…•πŸ…
ComfyUI Node Runs on cloud

Prompt Schedule NodeFlow End πŸ“…πŸ…•πŸ…

The End node that turns your NodeFlow chain into real conditioning

By FizzleDorfΒ·Created 3 years agoΒ·Updated 2 years agoΒ· 479
Prompt Schedule NodeFlow End πŸ“…πŸ…•πŸ…
  • clip
  • POS
  • NEG
β—„textβ€”β–Ί
β—„max_frames0β–Ί
β—„print_outputfalseβ–Ί
β—„current_frame0β–Ί
β—„pre_textβ€”β–Ί
β—„app_textβ€”β–Ί
β—„pw_a0.0β–Ί
β—„pw_b0.0β–Ί
β—„pw_c0.0β–Ί
β—„pw_d0.0β–Ί

Prompt Schedule NodeFlow End is where the NodeFlow chain pays off. Its siblings build a schedule string node by node; this one takes that finished string, encodes it with your clip, and returns actual POS/NEG CONDITIONING you can wire into a sampler. If Prompt Schedule NodeFlow is the writer, this is the editor-in-chief - the last node in the chain, the one that actually does the work.

What it does

Feed it the accumulated schedule text from the last NodeFlow node, the same clip you'd use in a normal CLIP Text Encode, the max_frames running total, and the current frame - and it evaluates the whole schedule exactly like the flagship Prompt Schedule node: parses the keyframes, splits positives from negatives on --neg, interpolates the blend weight between prompts, encodes current and next prompt, and blends via composable diffusion. Out come POS and NEG conditioning for whatever current_frame is right now.

Because it shares that engine, the familiar tricks all apply: pre_text and app_text wrap every frame (prepend your stable style prefix here instead of in each prompt), pw_a–pw_d floats are injectable into math expressions, and current_frame rolls over modulo max_frames so your loop stays seamless. print_output dumps the evaluated prompts and blend strength to the console when you're debugging.

Wiring the pair

The two-node handshake matters. From the last NodeFlow node, route its STRING output into this node's text (which is a forced input, so it expects to be wired) and its INT output into max_frames. If you skip that second wire, the schedule parses but the frame bookkeeping is off, and your keyframes land in the wrong places. Then feed current_frame from your per-frame counter, same as every other node in the pack, and send POS/NEG to your sampler.

The payoff versus typing the JSON yourself: the whole schedule stays as discrete, reorderable, bypassable nodes right up until the moment it becomes conditioning. You can keep a NodeFlow chain and swap this End node for the batch variant (same concept, returns a batch of conditionings for every frame) without touching the schedule. That's the real reason this pair exists - the build is visual, the encode is deferred.

Install and gotchas

One pack, one install: ComfyUI Manager, search FizzNodes, install, restart. Manual path:

cd ComfyUI/custom_nodes
git clone https://github.com/FizzleDorf/ComfyUI_FizzNodes
cd ComfyUI_FizzNodes && pip install -r requirements.txt

Only numpy, pandas, numexpr - no models, no heavy deps. It lives under FizzNodes πŸ“…πŸ…•πŸ… β†’ ScheduleNodes.

The classic failure is the missing max_frames wire (keyframes land wrong) or a trailing comma left in the accumulated string - the End node tries to clean up a stray trailing comma for you, but a malformed middle segment will still error on parse. If you get a JSON error here, trace back to the NodeFlow node where the schedule got built. And remember: static current_frame means the same frame every time. Chain it right, though, and this is the cleanest way to animate prompts in a graph without ever hand-writing the schedule.

CategoryFizzNodes πŸ“…πŸ…•πŸ…/ScheduleNodes

Inputs (11)

NameTypeDefaultDescription
textSTRINGβ€”
clipCLIPβ€”
max_framesINT00–999999β€”
print_outputBOOLEANfalseβ€”
current_frameINT00–999999β€”
pre_textoptSTRINGβ€”
app_textoptSTRINGβ€”
pw_aoptFLOAT0.0-9999–9999β€”
pw_boptFLOAT0.0-9999–9999β€”
pw_coptFLOAT0.0-9999–9999β€”
pw_doptFLOAT0.0-9999–9999β€”

Outputs (2)

NameTypeDescription
POSCONDITIONINGβ€”
NEGCONDITIONINGβ€”