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

LTX25 Spatial Split Params

The tile controls that keep LTX2.5 sampling inside your VRAM

By bbaudio-2025·Created 6 days ago·Updated 2 days ago· 116
LTX25 Spatial Split Params
    • spatial_split_param
    • tile_width
    • tile_height
    upscale_width1024
    upscale_height1024
    tile_size_modespecific_size
    tile_width512
    tile_height512
    grid_rows2
    grid_cols2
    spatial_w_overlap128
    spatial_h_overlap128
    fade_width32
    fade_height32
    min_tile_size256
    overlap_modeearlier
    overlap_blendlinear

    This is the inner loop of LTX25 Ultimate Upscale: it decides how each time chunk gets cut into spatial tiles so the sampler never has to hold a whole frame in VRAM at once. Its spatial_split_param output wires into the main node's input of the same name. Don't connect it and each chunk is sampled whole - which is fine for small frames, and pointless for the high-res upscaled output this pack exists to produce.

    The two tile-sizing modes

    specific_size (default) is the direct one: set tile_width/tile_height in pixels. Both must be multiples of 32 - one LTX VAE token. Defaults are 512x512, which is a sane starting point on a mid-range card.

    rows_cols is the smarter one for a known target: give it upscale_width/upscale_height (the upscaled frame size, matching what you set in LTX25 Latent Upscale Params) plus grid_rows x grid_cols (1-9 each), and it solves an equal-size tile grid for you - every tile identical, edge tiles included - with the per-axis overlap auto-solved to a multiple of 32. If the solved tiles would be smaller than min_tile_size, it errors rather than silently giving you slivers. Bonus: the node exposes the resolved tile_width and tile_height as real INT outputs, which is handy if you want to wire the actual tile size into other nodes.

    The seam controls

    • spatial_w_overlap / spatial_h_overlap (default 128px) - overlap between neighbouring tiles, multiples of 32 and smaller than the tile. In rows_cols mode these are desired values; the node solves the real ones.
    • fade_width / fade_height (default 32px) - the width of the fade segment at the interior edge of the overlap band. The band splits into a frozen segment (seam side, mask 0) plus this fade. Set to 0 to freeze the entire overlap strip; it clamps to the solved overlap in rows_cols mode.
    • min_tile_size (default 256) - edge tiles smaller than this get pulled back until they qualify.
    • overlap_mode - who wins a shared band on stitch: earlier (already-stitched content wins, default) or later (the re-sampled tile wins).
    • overlap_blend - how the band transitions: linear cross-fade (default), smoothstep, overwrite, or midpoint.

    The economics, briefly

    Tiling isn't free. Each tile is sampled at its true extent plus overlap, so the redundancy is roughly ((tile + overlap) / tile)² - 512px tiles with 128px overlap is about 1.56x wasted compute. Shrink tiles to 256px with the same 128px overlap and it jumps to ~2.25x. So the sweet spot is the largest tiles that keep peak VRAM just under capacity; the README's guidance to keep tiles at 256px or above applies to LTX2.5's 32px grid too. Watch the VRAM meter during the first tile and adjust one axis at a time.

    A note on what the frozen-overlap machinery buys you: each tile's shared seams are pre-filled from already-stitched neighbours and locked with a noise mask, so the re-sample can only change the free interior. That's what stops tiled upscaling from looking like a patchwork quilt - the seam content is preserved, not re-guessed.

    Installing

    Part of bbaudio-2025/Comfyui-MMH3-UltimateUpscale. ComfyUI Manager (search "Comfyui-MMH3-UltimateUpscale"), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/bbaudio-2025/Comfyui-MMH3-UltimateUpscale
    

    Restart. No pip deps; needs a current ComfyUI.

    Troubleshooting

    • "must be a multiple of 32 pixels" - anything off the LTX grid errors at execution. Keep tiles, overlaps, fades and min_tile_size on multiples of 32.
    • "spatial_w_overlap must be smaller than tile_width" / "fade_width must not exceed spatial_w_overlap" - the validation is explicit; read the error and fix the offending pair.
    • "solved tile size … smaller than min_tile_size" (rows_cols) - reduce grid_rows/grid_cols, or lower min_tile_size.
    • Blocky tile boundaries - raise the overlap, or switch overlap_blend to smoothstep; if tiles are diverging, the freeze-mask logic is doing its job and your problem is per-tile sampling consistency, not the split.
    Categorymodel/latent/ltxv

    Inputs (14)

    NameTypeDefaultDescription
    upscale_widthINT102432–100000[rows_cols mode] Overall upscaled frame WIDTH in PIXELS that gets split into grid_cols equal-size tile columns. Must be a multiple of 32 and must match the width set in 'LTX25 Latent Upscale Params'. Ignored in specific_size mode.
    upscale_heightINT102432–100000[rows_cols mode] Overall upscaled frame HEIGHT in PIXELS that gets split into grid_rows equal-size tile rows. Must be a multiple of 32 and must match the height set in 'LTX25 Latent Upscale Params'. Ignored in specific_size mode.
    tile_size_modeCOMBOspecific_sizeHow the tile size is determined. 'specific_size' (default): use tile_width/tile_height below. 'rows_cols': split the frame given by upscale_width/upscale_height into grid_rows x grid_cols EQUAL-SIZE tiles (edge tiles included) - the per-axis overlap is auto-solved (multiple of 32px, one LTX latent token) so every tile ends up exactly the same size; errors out if the solved tiles would be smaller than min_tile_size.
    tile_widthINT51232–100000[specific_size mode] Tile width in PIXELS at the (upscaled) chunk resolution. Must be a multiple of 32 (LTX VAE 32x).
    tile_heightINT51232–100000[specific_size mode] Tile height in PIXELS at the (upscaled) chunk resolution. Must be a multiple of 32.
    grid_rowsINT21–9[rows_cols mode] Number of tile ROWS along the height axis (1-9).
    grid_colsINT21–9[rows_cols mode] Number of tile COLUMNS along the width axis (1-9).
    spatial_w_overlapINT1280–100000Horizontal overlap in PIXELS between neighbouring tiles. Must be a multiple of 32 and smaller than the tile width. In rows_cols mode this is the DESIRED overlap; the node auto-solves the actual value.
    spatial_h_overlapINT1280–100000Vertical overlap in PIXELS between neighbouring tiles. Must be a multiple of 32 and smaller than the tile height. In rows_cols mode this is the DESIRED overlap; the node auto-solves the actual value.
    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) + this FADE segment (interior side). fade_width sets the fade length; the frozen segment takes the rest. Default 32. Set to 0 to freeze the entire overlap strip. Clamped to the solved overlap in rows_cols mode.
    fade_heightINT320–100000Height in PIXELS of the FADE segment (mask 0->1) at the interior edge of the overlap band. See fade_width. Clamped to the solved overlap in rows_cols mode.
    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. Must not exceed the tile size. In rows_cols mode an error is raised if the solved tile size falls below this.
    overlap_modeCOMBOearlierWho wins each shared overlap band when stitching. 'earlier' (default): the already-stitched content wins. 'later': the re-sampled tile wins.
    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 (3)

    NameTypeDescription
    spatial_split_paramLTX_SPATIAL_PARAMSpatial split settings consumed by 'LTX25 Ultimate Upscale'.
    tile_widthINTResolved tile width in PIXELS: the validated input in specific_size mode, or the equal-tile solution computed from upscale_width/grid_cols in rows_cols mode.
    tile_heightINTResolved tile height in PIXELS: the validated input in specific_size mode, or the equal-tile solution computed from upscale_height/grid_rows in rows_cols mode.