Nodes/SeedVR2 Tiling Upscaler/SeedVR2 Tiling Upscaler
ComfyUI Node

SeedVR2 Tiling Upscaler

SeedVR2 for images too big for your VRAM — tile it, don't OOM

By moonwhaler·Created about a year ago·Updated 14 days ago· 210
SeedVR2 Tiling Upscaler
  • image
  • dit
  • vae
  • IMAGE
seed100
new_resolution1072
tile_width512
tile_height512
mask_blur0
tile_padding32
tile_upscale_resolution1024
tiling_strategy
anti_aliasing_strength0.00
blending_methodauto
color_correctionlab
resolution_targetlongest
tile_batch_size1

By now you've probably heard the SeedVR2 story: ByteDance built it as a video restoration model and the community turned it into the best single-image upscaler in the ecosystem - detail added without the subject being reinterpreted, Apache 2.0, runnable on a 6GB 3060. The catch is that the stock node upscales the whole image in one go, and SeedVR2 has a well-earned reputation for OOMing when you push resolution. This node is the fix for exactly that: it chops your image into overlapping tiles, upscales each one with SeedVR2, then stitches them back together with actual blending algorithms instead of visible seams.

The author is upfront about one thing: it's not magic. "It will alter details and it might even change things you don't like," reads the README. But for refining Flux output, boosting skin and fabric detail for training datasets, or prepping for print, it beats every other detailer/upscaler pipeline the author tested. Nothing here calls an API and there's no key involved - it's a wrapper that drives the same SeedVR2 models you already know.

How it works

The mechanism is straightforward under the hood. The node reads your target new_resolution, computes an upscale factor against the longest side of the input, slices the image into overlapping tiles, and upscales each tile to tile_upscale_resolution using SeedVR2. Every tile then gets resized to its final target dimensions and stitched back. The interesting part is the stitching: a Laplacian-pyramid "multiband" method that blends frequency bands independently (best detail), a bilateral-filter option that preserves edges while killing artifacts, a structure-tensor "content aware" mode for complex images, plain linear alpha blending, and simple averaging. Chess tiling order spreads tiles so seams blend better; Linear is faster.

The inputs that matter

Most of the defaults are sane, so you mainly touch three groups:

  • dit and vae - the non-obvious part. These come from the SeedVR2 (Down)Load DiT Model and SeedVR2 (Down)Load VAE Model loader nodes in numz's ComfyUI-SeedVR2_VideoUpscaler pack, which this node requires. No loader, no node - you can't just wire in an image.
  • new_resolution (default 1072) - target length of the longest side; aspect ratio is preserved. This is your "how big" dial.
  • tile_width / tile_height / tile_padding / tile_upscale_resolution - the VRAM knobs. Smaller tiles and lower tile_upscale_resolution mean less memory but more stitching work; the README's sweet spot is 1024 tiles, 32–64 padding, 1024–2048 upscale resolution.

Then there's blending_method (default auto), mask_blur, color_correction (default lab, which perceptually matches the upscaled output back to your input's colors - leave it), anti_aliasing_strength, and seed for reproducible runs. One IMAGE comes out the other end; wire it to Save Image.

Installing it

Install the numz SeedVR2 pack first - that's the hard dependency. Then grab this one via ComfyUI Manager (search "SeedVR2 Tiling Upscaler") or:

cd ComfyUI/custom_nodes/
git clone https://github.com/moonwhaler/comfyui-seedvr2-tilingupscaler.git

Then install its requirements into the same Python environment ComfyUI uses - the README hammers this because venv/conda mismatch is the classic "node loads but doesn't run" failure:

cd ComfyUI/custom_nodes/comfyui-seedvr2-tilingupscaler
pip install -r requirements.txt   # in your ComfyUI venv

The requirements are light - torch, numpy, Pillow, scipy, opencv-python - and the models themselves download through the numz loader nodes. One trap: the README's install snippet tells you to cd UltimateResupscaler, which is a copy-paste artifact from another pack. The directory is whatever you cloned into.

Common issues

  • SeedVR2VideoUpscaler node not found - the numz pack isn't installed, or it's older than v2.5. The adapter looks that class up in ComfyUI's node registry at runtime, so it must be present.
  • OOMs - drop tile_upscale_resolution to 1024 or below, shrink the tiles, raise tile_padding... or jump to the nightly branch (git clone -b nightly ...). This is where the README's advanced memory features actually live: the stable branch ships without the extra_args and block_swap_config inputs that hook up preserve_vram, tiled_vae, and SeedVR2 BlockSwap Config. People hit this constantly.
  • Visible seams - switch blending_method to multiband or bilateral, push tile_padding to 64+, use Chess.
  • Progress bar shows "???" - known nuisance, not an error. It just doesn't report progress well.

Last thing: run FP16 if it fits. The community's hard-won finding is that GGUF damages skin texture and FP8 can leave tiling grids - the same quantization advice that applies to every SeedVR2 node applies here. You came here to avoid OOMs, not to trade them for lizard skin.

Categoryimage/upscaling

Inputs (16)

NameTypeDefaultDescription
imageIMAGE
ditSEEDVR2_DITDiT model configuration from 'SeedVR2 (Down)Load DiT Model' node.
vaeSEEDVR2_VAEVAE model configuration from 'SeedVR2 (Down)Load VAE Model' node.
seedINT1000–4294967295Random seed for reproducible results. Same seed produces same output.
new_resolutionINT107216–16384Target resolution in pixels for the side selected by 'resolution_target' (longest or shortest). Aspect ratio is maintained.
tile_widthINT51264–8192Width of each tile in pixels. Smaller tiles use less VRAM but may show more seams.
tile_heightINT51264–8192Height of each tile in pixels. Smaller tiles use less VRAM but may show more seams.
mask_blurINT00–64Tile edge blending. 0=multi-band frequency separation (best detail), 1-3=minimal blur, 4+=traditional blur.
tile_paddingINT320–8192Overlap between tiles in pixels. Higher values reduce seams but increase processing time. Recommended: 32-64.
tile_upscale_resolutionINT102464–8192Ceiling on the resolution used to AI-upscale each tile. Each tile is scaled by the same overall factor as the full image; this only kicks in to cap tiles that would otherwise exceed it. Higher=better quality but more VRAM. Try 1024-2048.
tiling_strategyCOMBOTile processing order. Chess=checkerboard pattern for better blending, Linear=row-by-row (faster).
anti_aliasing_strengthFLOAT0.000–1Edge-aware smoothing strength. 0=disabled, 0.1-0.3=subtle smoothing. May soften details.
blending_methodCOMBOautoBlending algorithm: auto (mask_blur based), multiband (Laplacian pyramid/frequency separation), bilateral (edge-preserving filter), content_aware (structure-adaptive), linear (alpha blend), simple (pixel averaging).
color_correctionCOMBOlabColor correction method to match upscaled output to original input colors. lab=perceptual matching (recommended), wavelet=frequency-based, wavelet_adaptive=with saturation correction, hsv=hue-conditional, adain=style transfer, none=disabled.
resolution_targetCOMBOlongestWhich side 'new_resolution' applies to. 'longest'=fit longest side (original behavior), 'shortest'=fit shortest side (larger output for the same value). Aspect ratio is maintained either way.
tile_batch_sizeINT11–21Tiles sent to SeedVR2 per call. 1 = lowest VRAM (recommended). Higher is faster but VRAM scales with it. Values are snapped down to SeedVR2's required 4n+1 pattern (1, 5, 9, 13, 17, 21).

Outputs (1)

NameTypeDescription
IMAGEIMAGE