Nodes/ComfyUI-PiD/PiD Upscale
ComfyUI Node

PiD Upscale

NVIDIA's pixel-diffusion decoder as a tiled 2x–8x upscaler

By Merserk·Created 3 months ago·Updated 2 months ago· 122
PiD Upscale
  • image
  • image
pid_ckpt_type2k
versionv1
backboneflux
auto_downloadtrue
model_precisionbf16
upscale_factor4x
strength0.4
caption

If you want to see what all the PiD fuss is about without touching a latent, this is the node. PiD Upscale takes a normal IMAGE, runs NVIDIA's PiD pixel-diffusion decoder over it in tiles, and hands you back a 2x, 4x, 6x or 8x version. It's the "why your regular upscaler feels flat" fix: instead of interpolating or guessing from a thumbnail, it regenerates detail with an actual diffusion model, conditioned on the image itself.

The catch worth knowing up front: PiD is a diffusion decoder, not a lossless VAE. It can add detail that was never in the source - fine texture, sharper edges, occasionally reinterpreted features. The community treats it as a fast generative upscaler, not a faithful reconstruction, and that's the right mental model (the same objection was raised against Stable Cascade's second decoder, which hallucinated things like eye colors).

What it does under the hood

The node is separate from latent PiD decode. It cuts your image into tiles - 512px tiles with 64px overlap for 2k, 1024px tiles with 128px overlap for 2kto4k - encodes each tile with a matching backbone VAE, runs 4-step PiD on each tile, blends them with cosine-weighted masks, then resizes to the final factor. If your source is smaller than a tile, it does a one-shot PiD prepass on the whole image first, then tiles. Your output size is always width × factor by height × factor; a 1024x1024 source at 4x comes out 4096x4096.

Because tiles get encoded, it needs a VAE for your chosen backbone. PiD Upscale only has image-VAE mappings for Flux1/Z-Image (ae.safetensors), Flux2/Flux2-Klein (flux2_ae.safetensors) and SD3 (sd3_vae.safetensors). Those auto-download to ComfyUI/models/vae/nvidia_pid/ when auto_download is on. SDXL and Qwen-Image aren't available here - no VAE mapping, so the node simply doesn't offer them.

The inputs that matter

  • pid_ckpt_type - 2k (512-class, ends ~2048) or 2kto4k (1024-class, ends ~4096). Pick by how big you want to go, not by how fancy you feel.
  • backbone - zimage, zimage-turbo, flux, flux2, flux2-klein-4b/9b, or sd3. Match the model your image came from for best results, though it works fine as a general upscaler.
  • upscale_factor - 2x, 4x, 6x, 8x. The final size is based on the original input.
  • strength - the PiD detail-regeneration sigma, 0.01.0, default 0.4. Lower is closer to a straight decode; higher regenerates more aggressively. Start at the default.
  • caption (optional) - PiD performs better when it knows what it's looking at. Wire PiD Caption Creator or PiD Text Prompt in here.

It also asks for version (v1 / v1.5) and model_precision. Use bf16 for quality; fp8 is only offered where it's actually supported (Flux1-family and Flux2 2k on v1), and v1.5's int8 uses an INT8 diffusion model with an FP8 Gemma text encoder. Unsupported combos throw an error rather than quietly falling back - that's by design.

Setup and a working workflow

Install the pack (see below), then the whole thing is:

Load Image -> PiD Caption Creator -> PiD Upscale -> Save Image

One caveat on cost: a 2kto4k upscale to 4096 is heavy. On a 24GB card it's comfortable; on less, start with 2k and 2x/4x, and know that the node aggressively frees CUDA memory between calls to keep peak usage down.

Installing this pack. In ComfyUI Manager search "ComfyUI-PiD" and install, or:

cd ComfyUI/custom_nodes
git clone https://github.com/Merserk/ComfyUI-PiD.git
cd ComfyUI-PiD
python -m pip install -r requirements.txt

Then restart ComfyUI. You need a recent ComfyUI with native PixelDiT/PiD support (0.28.0+), Python 3.10+, and an NVIDIA GPU. If the node refuses to load, update ComfyUI before touching anything else - this pack leans hard on native Comfy-Org model loading.

Common issues

  • VRAM. Big tiles × big factors add up fast. Watch the log for the planned call count and drop to 2k if it OOMs.
  • Wrong VAE / missing model. Let auto_download do its thing on first run; if downloads are disabled and files are missing, you get a path error pointing at models/vae/nvidia_pid/.
  • Detail you didn't expect. That's PiD working as designed - treat it as creative upscaling, and lower strength if you want it more conservative.
CategoryPiD

Inputs (9)

NameTypeDefaultDescription
imageIMAGE
pid_ckpt_typeCOMBO2k2 options: 2k, 2kto4k
versionCOMBOv12 options: v1, v1.5
backboneCOMBOflux7 options: zimage, zimage-turbo, flux, flux2, flux2-klein-4b, flux2-klein-9b, +1
auto_downloadBOOLEANtrue
model_precisionCOMBObf163 options: bf16, fp8, int8
upscale_factorCOMBO4x4 options: 2x, 4x, 6x, 8x
strengthFLOAT0.40–1
captionoptSTRING

Outputs (1)

NameTypeDescription
imageIMAGE