Nodes/ComfyUI-LTXVideo/πŸ…›πŸ…£πŸ…§ Tiled Fusion Sampler
ComfyUI Node Runs on cloud

πŸ…›πŸ…£πŸ…§ Tiled Fusion Sampler

Bigger than LTX's trained window, without the seam grid

By LightricksΒ·Created 2 years agoΒ·Updated a day agoΒ· 4,196
πŸ…›πŸ…£πŸ…§ Tiled Fusion Sampler
  • model
  • positive
  • negative
  • latents
  • sigmas
  • sampler
  • vae
  • output
β—„seed42β–Ί
β—„cfg1.0β–Ί
β—„tile_width1024β–Ί
β—„tile_height576β–Ί
β—„overlap_frac0.50β–Ί
β—„blend_var0.05β–Ί
β—„grid_cycle1β–Ί
β—„tile_frames0β–Ί
β—„canvas_deviceautoβ–Ί

Every tiled sampler has the same temptation: split the picture, denoise each piece, glue them back together. It works, sort of, and then you notice a faint grid on flat walls and the sky. Tiled Fusion Sampler doesn't do it that way.

If you're running LTX-2.3 IC-LoRA V2V past the model's trained window - union control, motion track, the pixel spatial upscalers, HDR - this is how you go big without the stitched-together look. Nothing like LTXVTiledSampler, which is the naive one.

The mechanism, and why there are no seams

There is one latent canvas and one noise field, seeded once from seed. At every denoise step the node crops overlapping tiles out of that canvas, runs the model on each crop, then Gaussian-blends the stepped tiles back onto the canvas using the overlap weights.

That "every step" part is the whole trick. Because fusion happens between steps, all the tiles are riding the same trajectory - tile A's denoise at step 7 already saw what tile B did at step 6. Independently sampled tiles each invent their own trajectory, and where they meet you get a visible discontinuity. Fusion doesn't have that problem, which is why overlap_frac here is a quality knob rather than a life raft.

Practically it means peak VRAM tracks your tile size and temporal window, not the canvas. A 4K canvas with a 1024Γ—576 tile costs roughly what a 1024Γ—576 generation costs, times a per-step loop. Slower than one big untiled pass - which never fits anyway.

What has to be wired in

This node is not a drop-in KSampler replacement. positive, negative, and latents all have to come from LTXAddVideoICLoRAGuide. The latent carries appended guide frames and a noise_mask, and the node raises an error without that mask - a bare empty video latent will not work. It crops the extra guide frames itself, so you don't need LTXVCropGuides.

sampler is the same object SamplerCustomAdvanced takes, from KSamplerSelect. Stick to discrete step methods: euler, heun, dpm_2. History methods (DPM++ 2M, LMS) lose their multi-step memory because fusion owns the loop, adaptive samplers can't fuse at all, and ancestral ones inject independent noise per tile and will seam. sigmas must be descending and end at 0. cfg defaults to 1.0, which is right for the distilled models most LTX-2.3 graphs run.

The two settings people get wrong:

  • tile_width / tile_height - set these to the IC-LoRA's trained spatial window, in multiples of 32. Smaller tiles see content at the wrong scale - a subtle, expensive way to get worse output.
  • tile_frames - 0 means the whole extent in one go. 97 is one LTX temporal window. If you set it above 0 you must turn use_streaming on in the guide node and give it the same number; that re-encodes a fresh guide per window and writes the plan this sampler reads. Without the plan, windowing is disabled and you're back to one extent.

Then the fusion knobs: overlap_frac (leave at 0.5 or above), blend_var (0.05, leave it), grid_cycle (1 = fixed grid, cheapest; up to 4 shifts it between steps - spatial only, since cycling the temporal grid would slide content in time). vae is optional and only supplies the downscale factors, and canvas_device decides where the canvas tensors and cached tile latents live (auto, gpu, cpu). Its single output, output, is a LATENT - straight into a tiled VAE decode.

Install

Same pack, same three commands:

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

Or ComfyUI Manager β†’ Install Custom Nodes β†’ search "LTXVideo" β†’ restart. Node category is "sampling". You'll also want the spatial and temporal upscalers in models/latent_upscale_models, the distilled LoRA in models/loras (use 1.1, not 1.0), and the Gemma 3 12B text encoder in models/text_encoders/. The README's 32GB VRAM line is the unquantized dev model with no offloading - people run 2.3 quantized on far less, and tiling is how.

Where people get burned

  • Feeding it a plain empty latent, or a 4D one. The noise_mask check fails instantly, and batch 1 with a 5D latent is all it supports.
  • Leaving use_tiled_encode on in the guide node. Spatially tiled guide encodes imprint a grid into the conditioning. Keep it false.
  • A canvas that fits one tile. It logs the fallback to plain sampling: no tiling, no speedup.
  • grid_cycle silently ignored. If no interior shift preserves your overlap, you get a warning and a fixed grid.
  • Confusing fusion seams with decode seams. Tiled VAE decode complaints are usually a periodic texture on uniform backgrounds, and the fix is more overlap - a different node, a different knob.
  • Expecting an example workflow. There isn't one; the shipped graphs don't use this node. The real docs are tiled_fusion_sampler.md in the pack root, and the guide/sampler pairing rules there are unforgiving.

The reward is real: this is currently the honest way to push LTX-2.3 past its trained resolution on a card that can't hold the whole canvas at once.

Categorysampling

Inputs (16)

NameTypeDefaultDescription
modelMODELThe diffusion model to use.
positiveCONDITIONINGPositive conditioning from the IC-LoRA guide node. Must carry keyframe_idxs / guide_attention_entries so each tile can be cropped to the LoRA's trained window.
negativeCONDITIONINGNegative conditioning from the IC-LoRA guide node.
latentsLATENTThe latent RETURNED BY the IC-LoRA guide node (it carries appended guide frames plus the noise mask). A bare empty video latent will not work.
sigmasSIGMASDenoise schedule. Must be descending and end at 0. Fusion walks this list one step at a time.
samplerSAMPLERFrom KSamplerSelect (same type as SamplerCustomAdvanced). Discrete step samplers only: euler, euler_ancestral, heun, dpm_2, … History methods (DPM++ 2M, LMS) lose their multi-step memory because fusion owns the loop. Adaptive samplers cannot fuse. Ancestral methods add independent noise per tile and can seam.
seedINT420–18446744073709550000Seed for the single shared noise field across all tiles.
cfgFLOAT1.00–20Classifier-free guidance scale. Distilled models typically use 1.0.
tile_widthINT1024256–4096Tile width in pixels, multiple of 32. Set this to the IC-LoRA's trained spatial window. Tiles smaller than the trained window make every tile see content at the wrong scale.
tile_heightINT576256–4096Tile height in pixels, multiple of 32. Match tile_width to the IC-LoRA's trained spatial window.
overlap_fracFLOAT0.500.25–0.75Fraction of each tile overlapping its neighbor. Stay at 0.5 or above: below that a periodic grid appears on structured content.
blend_varFLOAT0.050.01–0.2Variance of the Gaussian blend weights in the overlaps. Leave at 0.05 unless you are measuring seams.
grid_cycleINT11–4Cycle shifted tile grids across steps. 1 = fixed grid (cheapest), 4 = thorough. Spatial only: cycling the temporal grid slides content in time.
tile_framesINT00–1000Temporal window in pixel frames (97 for LTX). 0 = one extent. Other values are snapped to 8n+1. >0 needs LTXAddVideoICLoRAGuide with use_streaming on and the SAME tile_frames: that re-encodes a fresh guide per window and writes the plan this sampler reads. A whole-clip guide cannot be sliced, and windowing is disabled if the plan is missing.
vaeoptVAEUsed to read the model's temporal and spatial downscale factors. If omitted, they are taken from the diffusion model (LTX defaults: 8 frames and 32 pixels per latent cell).
canvas_deviceoptCOMBOautoWhere to keep the full-canvas tensors and cached tile latents/noise/masks. auto = GPU if there is enough free memory, otherwise CPU. Processed conds stay on the GPU.

Outputs (1)

NameTypeDescription
outputLATENTβ€”