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

Batch Prompt Schedule SDXL πŸ“…πŸ…•πŸ…

The SDXL build of FizzNodes' prompt scheduler, with the G and L clips scheduled separately

By FizzleDorfΒ·Created 3 years agoΒ·Updated 2 years agoΒ· 479
Batch Prompt Schedule SDXL πŸ“…πŸ…•πŸ…
  • clip
  • POS
  • NEG
β—„width1024β–Ί
β—„height1024β–Ί
β—„crop_w0β–Ί
β—„crop_h0β–Ί
β—„target_width1024β–Ί
β—„target_height1024β–Ί
β—„text_gβ€”β–Ί
β—„text_lβ€”β–Ί
β—„max_frames120β–Ί
β—„print_outputfalseβ–Ί
β—„pre_text_Gβ€”β–Ί
β—„app_text_Gβ€”β–Ί
β—„pre_text_Lβ€”β–Ί
β—„app_text_Lβ€”β–Ί
β—„pw_a0.0β–Ί
β—„pw_b0.0β–Ί
β—„pw_c0.0β–Ί
β—„pw_d0.0β–Ί
β—„start_frame0β–Ί
β—„end_frame120β–Ί

Batch Prompt Schedule SDXL is the SDXL version of FizzNodes' flagship scheduler, and it exists for a real reason: SDXL doesn't have one prompt, it has two. The text encoder is split into the open-clip "G" model and the smaller "L" model, and a good SDXL prompt pairs a detailed text_g with a shorter, style-ish text_l. FizzNodes lets you schedule both of them, independently, across your animation.

If you're on SDXL and you've been wondering why the plain Batch Prompt Schedule produces mediocre results on it, this is why - the plain node only encodes through the single CLIP you feed it. This one does the two-encoder dance properly.

The schedule format

You get two text fields, text_g and text_l, each holding its own keyframe schedule in the usual FizzNodes format:

"0" :"a cat in a kitchen, cinematic lighting, 35mm",
"30" :"a cat in a spaceship, neon lights, cinematic lighting",

Both are parsed and interpolated the same way - quotes on frame numbers, commas between entries, --neg splits positive from negative, and backtick math with t, max_f, and pw_a–pw_d works in either field. The optional pre_text_G/app_text_G and pre_text_L/app_text_L let you wrap the G and L schedules with different prefix/suffix text, which you'll often want since the two prompts serve different roles.

The extra sizing inputs

SDXL conditioning carries size metadata, so this node also takes width, height, crop_w, crop_h, target_width, and target_height - the same set the built-in SDXL CLIPTextEncode accepts. Keep them matching what your sampler produces and you won't get the classic SDXL "conditioning size mismatch" errors. The defaults are 1024x1024 with zero crop, which is right for most workflows.

Outputs are POS and NEG conditioning batches, one per frame of max_frames - same contract as the plain scheduler: feed them to a sampler alongside a latent batch of the same length. start_frame and end_frame are print-only, and print_output dumps each frame's evaluated G/L prompts to the console when you're debugging a morph.

Install

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

Or install "FizzNodes" via ComfyUI Manager and restart. Dependencies are numpy, pandas, and numexpr - no model files, since SDXL's dual encoder comes from your checkpoint. One habit worth building: since the two prompts interpolate independently, you can keep text_g morphing the subject while text_l stays a constant style tag - that's the trick that makes SDXL prompt animation look intentional rather than chaotic.

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

Inputs (21)

NameTypeDefaultDescription
widthINT10240–8192β€”
heightINT10240–8192β€”
crop_wINT00–8192β€”
crop_hINT00–8192β€”
target_widthINT10240–8192β€”
target_heightINT10240–8192β€”
text_gSTRINGβ€”
clipCLIPβ€”
text_lSTRINGβ€”
max_framesINT1201–999999β€”
print_outputBOOLEANfalseβ€”
pre_text_GoptSTRINGβ€”
app_text_GoptSTRINGβ€”
pre_text_LoptSTRINGβ€”
app_text_LoptSTRINGβ€”
pw_aoptFLOAT0.0-9999–9999β€”
pw_boptFLOAT0.0-9999–9999β€”
pw_coptFLOAT0.0-9999–9999β€”
pw_doptFLOAT0.0-9999–9999β€”
start_frameoptINT00–9999β€”
end_frameoptINT1200–9999β€”

Outputs (2)

NameTypeDescription
POSCONDITIONINGβ€”
NEGCONDITIONINGβ€”