⭐ Star Tiled PiD Upscaler
Star Tiled PiD Upscaler — 4x detail upscales that don't need a datacenter
- image
- IMAGE
PiD - short for the PixelDiT / "pixel-diffusion" upscalers Nvidia shipped - is one of the most exciting upscaling ideas in a while: it re-renders your image directly in pixel space using a distilled diffusion model, in about four steps, producing genuine 4x detail without the usual VAE round-trip. The catch is that the reference workflow is fiddly and eats VRAM fast. Star Tiled PiD Upscaler is that whole workflow wrapped in one node, with the image chopped into overlapping tiles so a 4x upscale to 4096px actually fits on a consumer card.
How it works
PiD is a latent-conditioned, pixel-space diffusion upscaler: your low-res image gets VAE-encoded and injected into the model as a "lq_latent" condition, then the model re-renders the image directly at the output resolution in pixel space. That's why it needs no VAE decode at the end - a virtual pixel-space VAE is used. This node replicates the manual reference graph (UNETLoader + CLIPLoader + VAEEncode + PiDConditioning + manual sigmas + LCM sampling + color transfer) but processes the image in rows × cols overlapping tiles, runs each tile through the 4-step LCM pipeline, color-matches each tile back to the source (wavelet + LAB histogram transfer, which replaces the separate ColorTransfer node), and feathers the tiles back together so you don't see seams.
Inputs that matter
The first three are dropdowns that list whatever's in your models folders:
model_name- the PiD/PixelDiT diffusion model (e.g.pid_qwenimage_1024_to_4096_4step_bf16.safetensors). You must download this yourself - the repo doesn't ship models.clip_name- the Gemma 2 2B text encoder (gemma_2_2b_it_elm). PiD uses an empty prompt, but the model still needs the encoder loaded, so this is required.vae_name- the VAE matching the PiD backbone (qwen_image_vaefor the qwenimage flavor,ae.safetensorsfor flux).
Then latent_format (qwenimage / flux / sd3 / sdxl - flux auto-detects 16-ch vs 128-ch), scale (default 4, the factor PiD was trained for), and the VRAM controls: rows, cols, and tile_overlap. More rows/cols = smaller tiles = less VRAM but more passes; raise tile_overlap (0.3–0.4) if you see seams.
Installing
The node ships with StarNodes, but the models don't:
cd ComfyUI/custom_nodes
git clone https://github.com/Starnodes2024/ComfyUI_StarNodes
cd ComfyUI_StarNodes
pip install -r requirements.txt
Restart, search star under ⭐StarNodes/Image And Latent. Then grab the PiD model, the Gemma 2 2B text encoder, and a matching VAE from their sources and drop them into models/diffusion_models, models/text_encoders/models/clip, and models/vae. This also needs a recent ComfyUI with native PixelDiT support - if the node errors on import, update ComfyUI first.
Gotchas
The big one: this isn't "install and click." The model downloads are multi-gigabyte and the node fails at load if ComfyUI lacks PiD support. If the dropdowns come up empty, you haven't placed the files in the right models folders. On quality: PiD is a generative upscaler, so it will re-render detail and can slightly change your subject - that's the point of it, but it's not a drop-in for plain 4x ESRGAN when you just want more pixels. And for very wide images, the docs' advice is to add cols more than rows so tiles stay roughly square.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | The image to upscale. | |
| model_name | COMBO | The PiD / PixelDiT diffusion model, e.g. pid_qwenimage_1024_to_4096_4step_bf16.safetensors. | |
| clip_name | COMBO | Gemma 2 2B text encoder for PixelDiT (gemma_2_2b_it_elm). PiD uses an empty prompt, but the model still needs the text encoder loaded. | |
| vae_name | COMBO | VAE matching the PiD backbone, used to encode the input image (e.g. qwen_image_vae for qwenimage, ae.safetensors for flux). | |
| latent_format | COMBO | qwenimage | Latent format of the PiD backbone. Flux1 (16-ch) and Flux2 (128-ch) are auto-detected under 'flux'. |
| scale | FLOAT | 4.001–8 | Upscale factor for the output image. PiD models are trained for 4x. |
| rows | INT | 21–16 | Number of tile rows. More rows = smaller tiles = less VRAM. |
| cols | INT | 21–16 | Number of tile columns. More columns = smaller tiles = less VRAM. |
| tile_overlap | FLOAT | 0.250.05–0.5 | Overlap ratio between tiles. Higher values reduce seam artifacts but increase VRAM/time. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |