Nodes/ComfyUI/PiD Conditioning
ComfyUI Node Runs on cloud

PiD Conditioning

Attach the latent so the pixel decoder knows what it's decoding

By Comfy-Org·Created 4 years ago·Updated 20 days ago· 121,575
PiD Conditioning
  • positive
  • latent
  • CONDITIONING
latent_formatflux
degrade_sigma0.00

PiD Conditioning is the bridge between your normal diffusion pipeline and PiD - Nvidia's Pixel Diffusion Decoder, the thing that made the community do a double take when "Nvidia solved VAE?" hit Reddit at +778. PiD replaces the VAE decoder with a conditional pixel-diffusion module that decodes and upscales in one step: 512×512 latents to 2048×2048 output in under a second on a 5090. And this node is how you hand PiD the latent it needs to work with.

The key thing to understand - because half the hype articles got it wrong - is that PiD does not remove the latent space. Your model still generates in a latent. PiD just gets you out of it better. Which means the decoder needs three things: the latent itself, the format it's in, and a noise level to work from. This node bundles all three into a conditioning.

How it works

PiD Conditioning attaches a latent and a degrade_sigma scalar to your positive conditioning's metadata. Under the hood it converts the latent into the right latent format (process_in), then writes lq_latent and degrade_sigma fields that the PiD decoder reads.

The inputs:

  • positive - your text conditioning from CLIPTextEncode.
  • latent - from VAEEncode or a KSampler. The node's own tooltip: "latent (from VAEEncode or a KSampler)."
  • latent_format - default "flux". Flux1 (16-ch) and Flux2 (128-ch) latents are auto-detected from the channel count under "flux"; for SD3 (16-ch), SDXL (4-ch), or QwenImage (16-ch) you pick manually. Getting this wrong produces garbage, so trust the tooltip.
  • degrade_sigma - 0 to 1, default 0. 0 means "clean latent"; raise it to denoise corrupted or early-terminated latents.

One output, CONDITIONING, which then feeds the PiD decode node with the model.

Where people get burned

  • Wrong latent_format. The auto-detect only covers Flux's two channel counts. Drop an SDXL latent in with "flux" selected and the decoder misreads it. The channel numbers are in the tooltip for a reason.
  • Over-trusting the output. PiD can hallucinate detail that was never in the latent - the community's canonical tell: "It's sharp but Balenciaga becomes HfgFgdfgdifhg." Text and fine detail get reinterpreted. The consensus is to treat PiD as a fast, faithful-ish upscaler for already-well-resolved input, not a VAE replacement for precision work. If the input latent is noisy or blurry, raise degrade_sigma; if it's already clean, leave it at 0.
  • Early-termination interplay. PiD accepts partially-denoised latents from an early-stopped sampler, which is where degrade_sigma earns its keep - that's the documented "denoise corrupted latent outputs" path. But it's also where hallucination risk is highest.

ComfyUI shipped PiD nodes within days of the announcement, and this one lives in core (comfy_extras/nodes_pid.py). The PiD model weights go wherever your other diffusion models live. For the "decode everything at 4× without a separate upscaler" crowd, it's a genuinely new thing; just keep the text-fidelity caveat in your head.

Categorymodel/conditioning

Inputs (4)

NameTypeDefaultDescription
positiveCONDITIONING
latentLATENTlatent (from VAEEncode or a KSampler).
latent_formatCOMBOfluxFlux1 (16-ch) and Flux2 (128-ch) latents are auto-detected from channel dim under 'flux'. For SD3 (16-ch), SDXL (4-ch), or QwenImage (16-ch), select manually.
degrade_sigmaFLOAT0.000–10 = clean latent. Increase to denoise corrupted latent outputs.

Outputs (1)

NameTypeDescription
CONDITIONINGCONDITIONING