Nodes/ ComfyUI-Light-N-Color/Flux Sampler For PuLID
ComfyUI Node

Flux Sampler For PuLID

The custom KSampler that gives Flux real negative prompts

By KAVVATARE·Created about a year ago·Updated 10 months ago· 1
Flux Sampler For PuLID
  • model
  • conditioning
  • neg_conditioning
  • latent_image
  • controlnet_condition
  • latent
noise_seed0
steps20
timestep_to_start_cfg20
true_gs3.00
image_to_image_strength0.00
denoise_strength1.00
max_shift1.15
base_shift0.50

First thing to know: this node's name oversells what it does. It doesn't touch faces, doesn't load any identity model, doesn't know what PuLID is. What it actually is turns out to be more useful and more general than that - it's a replacement for the standard KSampler that gives Flux something Flux normally doesn't have: real negative-prompt CFG. It got bundled into a PuLID workflow because that's a common place to want it, but it works in any Flux graph.

Why Flux needs a workaround for this at all

Flux Dev and Schnell are guidance-distilled, which means the usual classifier-free-guidance machinery - positive prompt pulling one way, negative prompt pushing the other - got trained away in favor of a single "guidance scale" knob and no negative prompt at all. That's a real limitation people run into constantly: no clean way to tell Flux "not this." The community's workarounds are things like PerpNegGuider nodes or switching to a de-distilled Flux variant. This node is a third path: it implements what practitioners call "true CFG" - a real negative-conditioning pass, done manually instead of relying on the distilled shortcut. The node's category, XLabsNodes, is the tell: this is essentially XLabs-AI's x-flux-comfyui sampler node, carried into this pack under a new display name. The parameter set matches exactly - same fields, same defaults, same behavior, confirmed against XLabs' own node guide.

So where does PuLID fit? PuLID injects identity through a separate model-patching node (an ApplyPulidFlux-style node from a dedicated PuLID pack) that modifies the Flux model before it reaches a sampler. This node is the sampler stage of that pipeline - it doesn't need an identity input because by the time an image reaches model, the identity's already baked in. Use it with a PuLID-patched model and you're running a PuLID workflow; use it with a plain Flux model and you're just getting true CFG.

Inputs and outputs that matter

The required set: model, conditioning, neg_conditioning, noise_seed, steps (default 20), timestep_to_start_cfg (default 20), true_gs (default 3), image_to_image_strength (default 0), denoise_strength (default 1), max_shift (default 1.15), base_shift (default 0.5). Optional: latent_image (for img2img) and controlnet_condition (an XLabs-style ControlNet conditioning object - this pack's own ControlNetSwitch node produces exactly that type).

The two you actually need to understand:

  • true_gs - the real guidance scale, applied to your negative prompt once it kicks in. Think of it as CFG in the SD1.5/SDXL sense.
  • timestep_to_start_cfg - how many steps run before the negative prompt starts influencing anything. Here's the beginner trap: it defaults to 20, and steps also defaults to 20. Set those two equal and true CFG never actually fires - you'll dial true_gs up and see nothing change. Drop timestep_to_start_cfg well below your step count (a handful of steps in, say) if you want the negative prompt to do something.

max_shift/base_shift control Flux's resolution-dependent noise schedule - same idea as the core ModelSamplingFlux node. Leave them at defaults unless you're deliberately generating far outside 1024×1024 and know why you're touching them. Output is a single latent, straight into a VAE Decode like any sampler.

Installing it

Manager: search ComfyUI-Light-N-Color, install, restart. By hand:

cd ComfyUI/custom_nodes
git clone https://github.com/KAVVATARE/ComfyUI-Light-N-Color.git

No extra model downloads for this node specifically - but if you actually want the PuLID part of the name to mean something, you need a separate PuLID-for-Flux node pack installed too (the identity model, InsightFace weights and all), since this pack ships none of that.

Common issues

  • "I changed true_gs and nothing happened" - check timestep_to_start_cfg against steps first; this is the single most common source of confusion with this exact node, real enough that people have asked about it in public with no answer for months, because the parameter names are undocumented anywhere in this pack's own README (it doesn't mention this node at all).
  • Wrong model type wired in - this only works with a Flux UNET. Wiring an SD1.5 or SDXL model into model will fail; this is Flux-specific sampling machinery, not a general KSampler swap.
  • Expecting face/identity control from this node directly - there isn't one. If your face isn't changing, the problem is upstream: you're missing the PuLID model-patch step before this node, not misusing this one.
CategoryXLabsNodes

Inputs (13)

NameTypeDefaultDescription
modelMODEL
conditioningCONDITIONING
neg_conditioningCONDITIONING
noise_seedINT00–18446744073709550000
stepsINT201–100
timestep_to_start_cfgINT200–100
true_gsFLOAT3.000–100
image_to_image_strengthFLOAT0.000–1
denoise_strengthFLOAT1.000–1
max_shiftFLOAT1.150–2
base_shiftFLOAT0.500–2
latent_imageoptLATENT
controlnet_conditionoptControlNetCondition

Outputs (1)

NameTypeDescription
latentLATENT