TBG ETUR tiled Nvidia PID Image Upscale
NVIDIA's PixelDiT, tiled so it fits your VRAM
- PID_Model
- image
- latent
- Sampler
- PID_CLIP
- PID_Source_VAE
- PID Rebuilt
- PID Tiles
PiD - PixelDiT, NVIDIA's Pixel Difference Transformer - is a 1K→4K super-resolution model, and it's the star of ETUR 1.2's standalone nodes. But a 4K-capable diffusion model on a big image is a VRAM wall unless you tile it. This node is the tiling: it takes an input image or latent, chops the job into PiD tiles, runs each one, drift-corrects and color-matches them against the source, and rebuilds the full image. The display name says it all - tiled Nvidia PID Image Upscale - and the two outputs are PID Rebuilt (the finished image) and PID Tiles (a list of the per-tile results, so you can inspect or re-fuse).
It's the standalone PiD path, separate from the refiner. If you've loaded a PiD model with TBG ETUR Download PiD Model, this is what you feed it into.
The inputs that matter
- PID_Model (MODEL) - from the Download PiD node. Required.
- PID_VAE_Compatible_Model (default FLUX1) - tells the pipeline which model family's VAE/latent space the PiD model matches. Get this wrong and the upscale silently degrades.
- upscale_by (default 4, range 0.1–16) - the target factor. 4 is the PiD sweet spot.
- steps (default 4) - PiD is a fast few-step model; 4 is normal, not a typo. Don't crank it to 30 expecting more quality; you'll get more of the same.
- cfg (default 1) - near 1 for PiD. Its conditioning is a light prompt hint, not a full prompt.
- denoise (1.0) / degrade_sigma (0.1) - how much of the input each tile reimagines.
degrade_sigmais the knob that says "how noisy/damaged should the model treat this tile as" - the reference upscaler trick for giving the model room to add real detail. - sampler_name (pid_sde) / scheduler (simple) - the PiD-native sampler; the pack registers it. Leave them unless you have a reason.
- prompt - an optional style hint. PiD's CLIP is small; don't write a novel here.
The two source inputs are exclusive-ish: image alone does a normal PiD upscale with per-tile SIFT drift correction; latent alone makes PiD sample from the latent (VAE-decoding it first for the reference); both connected means PiD samples the latent while the image is used only as the drift/color reference. That last combo is the "clean reference, generative upscale" power move.
Why you'd reach for it
Straight answer: it's the cheapest way to get a genuine 4K generative upscale on consumer VRAM. The upscaling world splits "more pixels" from "more detail" - PiD is squarely in the detail-synthesis camp, and it's NVIDIA-backed, which on an RTX card means the whole pipeline has been tuned with that hardware in mind. The tiling is the part that makes it usable, because an untiled 1K→4K run on a 6–12GB card is asking for the OOM error of shame.
Installing it
Part of the TBG ETUR pack. ComfyUI Manager → search "TBG" → TBG_Enhanced Tiled Upscaler & Refiner FLUX PRO, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Ltamann/ComfyUI-TBG-ETUR
cd ComfyUI-TBG-ETUR
pip install -r requirements.txt
You'll also need the PiD model itself - run the Download PiD node once, and make peace with a multi-gigabyte first fetch from HuggingFace.
Notes and gotchas
Where people get burned: forgetting that the PiD model family must match your pipeline's model (Flux1 PiD on a Flux2 image = wrong), and pushing upscale_by to 8 or 16 on a 4K-trained model (it can, but quality falls off fast past ~4x per pass - do two passes instead). Also: the PID Tiles output is a list, so if you route it into something expecting a single image, you'll get an error that looks like the node is broken. It's not; you just need a list-aware consumer or to skip that output. And the fixed-seed-while-debugging rule applies double here - PiD is deterministic enough that changing the seed and the settings at once will make you chase ghosts.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| PID_Model | MODEL | — | |
| PID_VAE_Compatible_Model | COMBO | FLUX1 | 7 options: FLUX1, FLUX2, Qwen Image, Qwen Image Edit, SDXL, SD3, +1 |
| seed | INT | 30–18446744073709550000 | — |
| upscale_by | FLOAT | 4.00.1–16 | — |
| steps | INT | 41–100 | — |
| cfg | FLOAT | 1.00–100 | — |
| sampler_name | COMBO | pid_sde | 47 options: euler, TBG Flux2 Sampler, pid_sde, pid_creative_sde, euler_cfg_pp, euler_ancestral, +41 |
| scheduler | COMBO | simple | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| denoise | FLOAT | 1.000.01–1 | — |
| degrade_sigma | FLOAT | 0.100–1 | — |
| Color_Match | COMBO | TBG Detail-Preserving Color Stabilizer | 15 options: none, TBG Detail-Preserving Color Stabilizer, lab color match+detail preservation, lab full color match, wavelet, wavelet_adaptive, +9 |
| Geometry_Drift_Correction | BOOLEAN | true | When On, applies SIFT drift correction to each PiD tile against its cropped reference image before color correction. |
| Color_Match_Str | FLOAT | 1.000–2 | — |
| prompt | STRING | — | |
| imageopt | IMAGE | Optional reference image. Use image alone for normal PiD upscaling with per-tile SIFT drift correction before color correction, or connect image together with Source Latent so PiD samples from the latent while this image is used only as the per-tile reference for SIFT drift correction and color correction. If no image is connected, TBG decodes the Source Latent first and uses that decode as the reference image. | |
| latentopt | LATENT | Optional PiD source latent. Use latent alone to sample directly from the latent; TBG will VAE-decode it first and use that decode as the per-tile reference for SIFT drift correction and color correction. Or connect latent together with the image input to use the latent for PiD and the image as the reference for color correction and geometry drift correction. | |
| Sampleropt | SAMPLER | — | |
| PID_CLIPopt | CLIP | — | |
| PID_Source_VAEopt | VAE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| PID Rebuilt | IMAGE | — |
| PID Tiles | IMAGE | — |