Nodes/ComfyUI InvSR/InvSRSampler
ComfyUI Node

InvSRSampler

The fast detail injector nobody's defaulting to

By yuvraj108c·Created 2 years ago·Updated 3 months ago· 262
InvSRSampler
  • invsr_pipe
  • images
  • image
num_steps1
cfg1.0
batch_size1
chopping_batch_size8
chopping_size128
color_fixnone
seed123

InvSRSampler is the working end of the ComfyUI_InvSR pack - the node that actually turns your soft, small image into a sharp 4x one, and the reason this pack is worth a second look. The hook is the speed: where SUPIR chews through dozens of denoising steps and SeedVR2 takes a couple of minutes per image, InvSR does a full 4x detail upscale in one diffusion step. Not "one step per tile." One step, period. That was its claim to fame when the pack landed in early 2025, and it still holds up as the fastest credible generative upscaler around.

The honest framing, though: this is a niche tool now. The upscaling conversation moved on to SeedVR2 as the "more detail" default, and InvSR barely gets mentioned in the community anymore. It's a 2025-era wrapper of the InvSR paper (arXiv 2412.09013) from NTU, and its unique selling point - speed - is exactly what it still does better than the incumbents. If you want a 4x with genuinely new detail and don't want to wait, this is a fun, self-contained option.

How it actually works

InvSR is a diffusion-inversion super-resolution model, and the name isn't marketing. Instead of generating detail from random noise, it takes your low-res image, encodes it to latent space, and walks it backward through the diffusion trajectory to find the noise it "came from" - the inversion step. Then it denoises forward from that point at the target resolution, and because the backbone is SD-Turbo (a distilled model that only needs a handful of steps), the whole round trip runs in 1–5 steps. Under the hood it's a custom NoisePredictor network that models that inversion, which is why the pack needs its own weights alongside the SD-Turbo pipeline.

The other half of the mechanism is tiling. The sampler chops large images into overlapping patches (50% stride, Gaussian-blended), runs the diffusion on each, and stitches them back - so a 1K→4K job doesn't need a datacenter card. It also pads images to be divisible by 16 automatically (it logs a message when it resizes), so you can't trip on that old gotcha.

The inputs that matter

Most of the knobs you can leave alone; these are the ones you'll actually touch:

  • images - the IMAGE you want 4x'd. Wire in from LoadImage or anywhere upstream.
  • invsr_pipe - the INVSR_PIPE from LoadInvSRModels. One wire, don't think about it.
  • num_steps - 1–5, default 1. More steps = slightly more refinement, much slower. Start at 1.
  • cfg - default 1.0. Crank it above 1 and the sampler switches on classifier-free guidance against hardcoded positive/negative prompts. It's a fine tuning dial; 1.0–1.5 is the safe range.
  • chopping_size - 128/256/512. The README's advice is worth repeating: use 256 for 1K→4K, and if your GPU is tight, drop chopping_batch_size to 1.
  • color_fix - none, wavelet, or ycbcr. Diffusion upscalers love to shift color; if your output looks washed or off, wavelet or ycbcr reuses the source's color as a mask.

One thing there's no dial for: it's always 4x. There's no 2x option - the scale factor is baked into the config. And like every generative upscaler, it invents detail, so it will rewrite faces. Give any face you care about its own pass.

The single output is image, ready to wire into SaveImage or a comparison node.

Installing it

Via ComfyUI Manager, search "ComfyUI InvSR". Or the old-fashioned way:

cd ComfyUI/custom_nodes
git clone https://github.com/yuvraj108c/ComfyUI_InvSR
cd ComfyUI_InvSR
pip install -r requirements.txt

Then restart. First run auto-downloads everything: SD-Turbo to ComfyUI/models/diffusers and the noise-predictor weights to ComfyUI/models/invsr. No manual model hunting.

Where people get burned

The classic failure shows up on the loader, not this node: set_module_tensor_to_device() got an unexpected keyword argument 'non_blocking'. That's a stale diffusers - the pack's requirements were bumped in April 2025 specifically to fix this, so update diffusers if you hit it. Note the pack also pins numpy<2, which is fine but can nudge other nodes. If a big image OOMs, lower chopping_batch_size to 1 before you blame anything else. And one more honest footnote: the weights ship under the NTU S-Lab research license, so this isn't a commercial-workflow tool.

It's not the upscaler the community defaults to anymore - but as a one-step 4x detail machine that sets itself up, it's genuinely fun and still fast. Worth a try when SeedVR2's wait annoys you.

CategoryINVSR

Inputs (9)

NameTypeDefaultDescription
invsr_pipeINVSR_PIPE
imagesIMAGE
num_stepsINT11–5
cfgFLOAT1.0
batch_sizeINT1
chopping_batch_sizeINT8
chopping_sizeCOMBO1283 options: 128, 256, 512
color_fixCOMBOnone3 options: none, wavelet, ycbcr
seedINT1230–4294967295

Outputs (1)

NameTypeDescription
imageIMAGE