PiD Upscale
NVIDIA's pixel-diffusion decoder as a tiled 2x–8x upscaler
- image
- image
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) or2kto4k(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, orsd3. 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.0–1.0, default0.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. WirePiD Caption CreatororPiD Text Promptin 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
2kif it OOMs. - Wrong VAE / missing model. Let
auto_downloaddo its thing on first run; if downloads are disabled and files are missing, you get a path error pointing atmodels/vae/nvidia_pid/. - Detail you didn't expect. That's PiD working as designed - treat it as creative upscaling, and lower
strengthif you want it more conservative.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| pid_ckpt_type | COMBO | 2k | 2 options: 2k, 2kto4k |
| version | COMBO | v1 | 2 options: v1, v1.5 |
| backbone | COMBO | flux | 7 options: zimage, zimage-turbo, flux, flux2, flux2-klein-4b, flux2-klein-9b, +1 |
| auto_download | BOOLEAN | true | — |
| model_precision | COMBO | bf16 | 3 options: bf16, fp8, int8 |
| upscale_factor | COMBO | 4x | 4 options: 2x, 4x, 6x, 8x |
| strength | FLOAT | 0.40–1 | — |
| captionopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |