Nodes/zsq_prompt/Checkpoint & Sampler for DualCLIP
ComfyUI Node

Checkpoint & Sampler for DualCLIP

One Node for Models Whose Text Encoder Lives in a Separate File

By windfancy·Created 2 years ago·Updated 5 months ago· 2
Checkpoint & Sampler for DualCLIP
  • optional_lora_stack
  • optional_controlnet_stack
  • image
ckpt_name
clip_name1
clip_name2
types
resolution
positive_text
negative_textbad proportions, low resolution,worst quality, low quality, normal quality,lowres, inaccurate limb, bad, ugly, terrible, extra fingers, fewer fingers, missing fingers, extra arms, extra legs, inaccurate eyes, bad composition, bad anatomy, error, extra digit,fewer digits, cropped, low res, jpeg artifacts, trademark,artist's name, username, watermarksignature, watermark,text, words
batch_size1
steps20
cfg7.5
seed0
sampler_name
scheduler
denoise1.00

Some of the most interesting models won't run in the standard loader, because their text encoder isn't bundled in the checkpoint - it lives as a separate file you have to point ComfyUI at explicitly. Checkpoint & Sampler for DualCLIP is the whole pipeline in one node, tuned for exactly that situation: it loads the checkpoint, builds a CLIP from two text-encoder files, encodes your prompt, samples, and hands you an image.

What "DualCLIP" means

The standard checkpoint loader assumes one bundled text encoder. DualCLIP models split the job across two - SDXL uses clip_l plus clip_g, while SD3 and Flux pair clip_l with a large t5xxl encoder. This node's clip_name1 and clip_name2 dropdowns read from your text_encoders folder, and the types dropdown (sdxl/sd3/flux) tells it how to combine them. It's the setup that trips up people switching from SDXL to Flux: the unet/transformer comes with the checkpoint, but the T5 encoder is a several-gigabyte file that has to be downloaded and selected separately.

How it works

Same skeleton as the pack's main checkpoint_sampler: cached model, optional lora/controlnet stacks, resolution presets, full sampler controls, VAE decode at the end, single IMAGE output. The difference is the CLIP construction - it picks the right CLIP type based on your types choice and sanity-checks the filenames (SDXL wants one file with clip_l and one with clip_g; sd3/flux want clip_l plus a t5 file). Get the pairing wrong and the encoding path won't match, so the dropdown values aren't just decoration - they have to line up.

The inputs that matter

  • ckpt_name - the model itself.
  • clip_name1 / clip_name2 - your two text encoders.
  • types - sdxl, sd3, or flux. Set it to match the model family.
  • resolution, positive_text, negative_text, steps, cfg, seed, sampler_name, scheduler, denoise, batch_size - the standard sampler suite from the main node.
  • optional_lora_stack / optional_controlnet_stack - the pack's stack nodes plug in here.

The negative text ships prefilled with a solid generic negative, and the resolution presets include the SDXL aspect ratios.

The honest take

This node's reason to exist is that SD3/Flux-family setups involve more files and more decisions than the one-dropdown world of SD 1.5. Folding the whole thing into one node hides a lot of that - genuinely helpful when you're juggling text encoders, but it's also an opaque box when the CLIP pairing is wrong and you get nonsense instead of an image. If you're on plain SDXL with a normal checkpoint, you don't need this node; if you're wrestling with separately-stored encoders, this is a real time-saver.

Installing it

From windfancy/zsq_prompt - ComfyUI Manager, search "zsq_prompt", install, restart; or:

cd ComfyUI/custom_nodes
git clone https://github.com/windfancy/zsq_prompt

then restart. Heavy requirements install alongside (transformers, onnx, ultralytics) but the sampler path runs on ComfyUI's own stack. And the familiar caveat: Manager may flag zsq_prompt as "conflicting" due to generic class names - the community's advice is to ignore it unless you're genuinely running the other pack.

Verdict

Niche but purposeful. If you only run single-file checkpoints you'll never open it; if you run SD3 or Flux with separate text encoders, it's the fastest way to a working prompt-to-image graph in one box.

CategoryZSQ/Loaders

Inputs (16)

NameTypeDefaultDescription
ckpt_nameCOMBO0 options:
clip_name1COMBO0 options:
clip_name2COMBO0 options:
typesCOMBO3 options: sdxl, sd3, flux
resolutionCOMBO33 options: width x height, 128 x 128, 256 x 256, 512 x 512, 512 x 768, 576 x 1024, +27
positive_textSTRING
negative_textSTRINGbad proportions, low resolution,worst quality, low quality, normal quality,lowres, inaccurate limb, bad, ugly, terrible, extra fingers, fewer fingers, missing fingers, extra arms, extra legs, inaccurate eyes, bad composition, bad anatomy, error, extra digit,fewer digits, cropped, low res, jpeg artifacts, trademark,artist's name, username, watermarksignature, watermark,text, words
batch_sizeINT11–20
stepsINT201–100
cfgFLOAT7.50–30
seedINT00–18446744073709550000The random seed used for creating the noise.
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT1.000–1
optional_lora_stackoptZSQ_LORA_STACK
optional_controlnet_stackoptZSQ_CONTROL_NET_STACK

Outputs (1)

NameTypeDescription
imageIMAGE