Nodes/ComfyUI_SeedVR2_Tiler/SeedVR2 Tile Splitter
ComfyUI Node

SeedVR2 Tile Splitter

Make SeedVR2 eat a 12K image on an 8GB card

By BacoHubo·Created 6 months ago·Updated 6 months ago· 45
SeedVR2 Tile Splitter
  • image
  • tiles
  • tile_metadata
  • resolution
tile_size_mp1.0
tile_upscale_mp2.0
overlap_percent10
feather_blend1.00

SeedVR2 is the best generative upscaler most of us will run this year - the ByteDance one-step model that took over the "add detail" rung from SUPIR, Apache-2.0, gloriously fast on a 3060. And then you feed it a big image and it dies. Not because the model is bad, but because the node people use (numz/ComfyUI-SeedVR2_VideoUpscaler) only tiles the VAE encode and decode. The image stays one full latent during the upscale itself, so past roughly 3500×3500 you're OOM-ing regardless of what you set those tile boxes to - the pack author's own 8GB experience, and probably yours too.

SeedVR2TileSplitter is the fix. It's the front half of BacoHubo's SeedVR2 Tiler pack: it carves your image into a batch of overlapping tiles small enough for SeedVR2 to chew on one at a time, so "any size" becomes "your VRAM's size." No API, no key, no model files - the heavy lifting still happens in the SeedVR2 node; this just stops you from asking it to hold the whole image at once.

How it works

The node does a bit more thinking than most splitters, and it's the good kind of thinking. You give it tile_size_mp, and it computes the smallest N×M grid where every tile fits under that megapixel budget - picking the most square grid it can so tiles match the image's aspect ratio instead of getting stretched. It then pads the image to an exact canvas using edge replication rather than resizing, which is the v1.2.0 change and worth knowing: your original pixels stay pixel-identical, nothing gets re-scaled or blurred before SeedVR2 sees it. Adjacent tiles overlap by overlap_percent on each edge, which is what lets the stitcher blend seams away.

If the image fits in a single tile, it passes straight through untouched - output is identical to running SeedVR2 directly. That's a real behavior, not a bug.

The inputs that matter

  • tile_size_mp - max tile size in megapixels. 0.5–1.0 is the sweet spot for 8GB. Lower it when you OOM, raise it when you're on a 24GB card and want fewer passes.
  • tile_upscale_mp - the resolution each tile should reach after SeedVR2. Roughly 2× your tile_size_mp is the default and it's a sane start. This feeds the resolution hint.
  • overlap_percent - 10% default. If you see seams, the tooltip's own advice is 15–20%.
  • feather_blend - 1.0 = smooth feather blend, 0.0 = hard cut. Leave it at 1.0 unless you're chasing a specific look.

Everything else is optional or plumbing. Three outputs: tiles (the IMAGE batch), tile_metadata (the internal recipe the stitcher needs), and resolution (an INT hint).

Wiring it

Load Image → SeedVR2TileSplitter → tiles ──────────→ SeedVR2 (image input)
                                 → tile_metadata ───→ SeedVR2TileStitcher
                                 → resolution ──────→ SeedVR2 (resolution input)

One gotcha straight from the author: on the SeedVR2 node, set max_resolution to 0 to disable its longest-edge cap. The original workflow shipped with it misconfigured and the README calls it out.

Install

ComfyUI Manager: search SeedVR2 Tiler. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/BacoHubo/ComfyUI_SeedVR2_Tiler

That's it - no requirements beyond what ComfyUI already ships (pure PyTorch, torch.nn.functional for resizing). You do need the numz SeedVR2 node installed separately, and SeedVR2's own weights. Run FP16 if it fits; FP8 adds tiling grids and GGUF does unpleasant things to skin, and the community has tested both so you don't have to.

If something looks off

  • Output is resized when you expected passthrough - update to v1.2.0, that's the single-tile fix.
  • Seams - bump overlap_percent, then check you're running FP16.
  • Still OOM - drop tile_size_mp to 0.5. For really big targets, run the pipeline again feeding its own output back in; the pack explicitly supports multi-pass.
  • Don't want it blurrier than the input - the stitcher crops the replicated padding, so nothing extra should survive. If a weird border shows up, that's the giveaway your pack version predates the padding fix.
Categoryimage/upscaling

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
tile_size_mpFLOAT1.00.1–16Maximum size of each tile in megapixels. The grid is chosen so every tile is AT MOST this size. Lower = less VRAM per SeedVR2 pass.
tile_upscale_mpFLOAT2.00.1–64Desired output size of each upscaled tile in megapixels. Used to compute the resolution hint for SeedVR2. Typically 2x your tile_size_mp.
overlap_percentFLOAT100–40Overlap between adjacent tiles as a % of tile size. 10% is a safe default. Increase to 15-20% if seams appear.
feather_blendFLOAT1.000–1Fraction of the overlap zone used for blending during stitch. 1.0 = smooth linear feather. 0.0 = hard cut.

Outputs (3)

NameTypeDescription
tilesIMAGE
tile_metadataTILE_METADATA
resolutionINT