Nodes/Comfyui-MMH3-UltimateUpscale/MMH3 Spatial Split Params
ComfyUI Node

MMH3 Spatial Split Params

The VRAM dial for H3 upscaling

By bbaudio-2025·Created 3 days ago·Updated 2 days ago· 88
MMH3 Spatial Split Params
    • spatial_split_param
    tile_width512
    tile_height512
    spatial_w_overlap128
    spatial_h_overlap128
    fade_width32
    fade_height32
    min_tile_size256
    overlap_modeearlier
    overlap_blendlinear

    This is the node that decides whether your upscale runs on your GPU or dies in a fireball of "out of memory". MMH3 Spatial SplitParams bundles the tile settings for MMH3 Ultimate Upscale: how each video frame gets chopped into overlapping tiles, how the seams between tiles get stitched, and - the part that matters most to you - how big a single tile is. Because peak VRAM is bounded to one tile, tile size is your VRAM budget. This is tiled diffusion for H3, and this node is the dial.

    The mechanism in plain terms

    Each chunk (from the temporal split) is cut into a grid of overlapping tiles. One tile is sampled at a time. Here's the trick that keeps seams invisible: the overlap strip a tile shares with an already-stitched neighbor is split into two segments. The part nearest the seam is frozen - pre-filled from the accumulated result and locked with a noise mask, so the re-sample literally cannot change it. The part nearest the tile's interior is the fade segment, a smooth mask transition. After sampling, the frozen seam is written back with torch.where, guaranteeing the already-consistent content is never overwritten. That's how you get big upscales without the blocky checkerboard that naive tiling produces.

    The inputs that matter

    Two of them do 90% of the work, and the rest are seam polish:

    • tile_width / tile_height (default 512) - tile size in pixels at the upscaled chunk resolution, multiples of 32. Smaller = less VRAM, more tiles, slower. 512 is a good starting point; drop to 256 or 384 on a small card.
    • spatial_w_overlap / spatial_h_overlap (default 128) - overlap in pixels between neighbors, also multiples of 32 and must be smaller than the tile size. More overlap = better consistency, more wasted work. 128 is the sensible default.

    Then the seam controls: fade_width / fade_height (default 32) set the length of the fade segment; set to 0 to freeze the entire overlap strip. min_tile_size (default 256) pulls the last edge tile back so it never degenerates into a sliver. And overlap_mode (earlier or later - who wins the shared band) plus overlap_blend (linear / smoothstep / overwrite / midpoint) control exactly how adjacent tiles transition. The defaults - linear, earlier - are the safe ones; the others exist for when a seam shows.

    The single output, spatial_split_param, plugs into the spatial_split_param input on MMH3 Ultimate Upscale. Don't connect it and the node samples each chunk whole, which is fine for short clips at native-ish size.

    Install and troubleshooting

    Same pack, same install: Comfyui-MMH3-UltimateUpscale in ComfyUI Manager, or clone the repo into custom_nodes and restart. No dependencies, no models - this node is pure geometry.

    Real failure modes to expect, all with the author's own validation baked in:

    • "must be multiples of 32" - the node checks this and throws a ValueError. Tile dims, overlaps, and fades all have to land on the 32px grid.
    • "overlap must be smaller than tile" - obvious in hindsight, but easy to hit while dialing in a small tile.
    • "Upscale width must be >= tile_width" - if you're tiling and upscaling, the upscale target has to be at least as big as the tile, or the grid makes no sense.

    If tiles are too small you'll get more seams to manage and slower runs for marginal VRAM savings; too big and you've recreated the OOM you were trying to dodge. The overlap/fade defaults are well chosen - tweak tile size first, leave the seam math alone until you can see a problem.

    Categorymodel/latent/minimax

    Inputs (9)

    NameTypeDefaultDescription
    tile_widthINT51232–100000Tile width in PIXELS at the (upscaled) chunk resolution. Must be a multiple of 32.
    tile_heightINT51232–100000Tile height in PIXELS at the (upscaled) chunk resolution. Must be a multiple of 32.
    spatial_w_overlapINT1280–100000Horizontal overlap in PIXELS between neighbouring tiles. Must be a multiple of 32 and smaller than the tile width.
    spatial_h_overlapINT1280–100000Vertical overlap in PIXELS between neighbouring tiles. Must be a multiple of 32 and smaller than the tile height.
    fade_widthINT320–100000Width in PIXELS of the FADE segment (mask 0->1) at the interior edge of the overlap band. The overlap band splits into a FROZEN segment (seam side, mask=0, keeps the neighbour's content) + this FADE segment (interior side). fade_width sets the fade length; the frozen segment takes the rest (overlap - fade). Default 32. Set to 0 to freeze the entire overlap strip.
    fade_heightINT320–100000Height in PIXELS of the FADE segment (mask 0->1) at the interior edge of the overlap band. The overlap band splits into a FROZEN segment (seam side, mask=0, keeps the neighbour's content) + this FADE segment (interior side). fade_height sets the fade length; the frozen segment takes the rest (overlap - fade). Default 32. Set to 0 to freeze the entire overlap strip.
    min_tile_sizeINT2560–100000Minimum PIXEL size of edge tiles. If a leftover edge tile would be smaller, the last tile is pulled back until it reaches at least this size; the seam overlap then grows and is blended over its full width. 256 (default) keeps small leftover tiles as-is. Must not exceed the tile size.
    overlap_modeCOMBOearlierWho wins each shared overlap band when stitching. 'earlier' (default): the already-stitched content wins. 'later': the re-sampled tile wins. Does NOT affect the noise mask.
    overlap_blendCOMBOlinearHow the overlap band transitions when stitching: linear cross-fade (default), smoothstep (eased), overwrite (whole band from the overlap_mode side), midpoint (hard switch at the band's middle).

    Outputs (1)

    NameTypeDescription
    spatial_split_paramH3_SPATIAL_PARAMSpatial split settings consumed by 'MMH3 Ultimate Upscale'.