π² LTX Tiled Sampler
Fix LTX2 upscale-pass color drift by sampling at the size the model was trained on
- noise
- guider
- sampler
- sigmas
- latent_image
- output
- denoised_output
This is the node that actually solves the LTX2 upscale problem, and it's the one I'd reach for first out of the whole pack. When you run a refinement pass on a 2Γ upscaled latent, you're feeding the DiT 4Γ the spatial tokens it was trained with. Every token now gets roughly a quarter of the per-token text-conditioning influence it expects, and the model starts operating outside its trained token-count range. The result is what you've seen a hundred times: broad hue shifts, color drift, and the prompt quietly losing its grip.
LTX Tiled Sampler is a drop-in replacement for SamplerCustomAdvanced that refuses to play that game. It splits the latent spatially along its longer axis with overlap, samples each tile as its own standalone clip at training-distribution token count, then blends the tiles back with a cosine-windowed Hann overlap. Same inputs, same wiring, better behavior.
How it works
Each tile runs the full sampling pipeline independently - noise, guider, sampler, sigmas, all of it - then the results blend. Don't confuse it with MultiDiffusion-style per-step coordination; this is whole-clip tiling, which is why it only works for light refinement. Every tile is a coherent sample on its own, and cosine blending hides the seams between them. It's transparent to your existing wiring: feed it the same noise source, guider, sampler object, and sigmas you'd give a normal sampler.
The inputs, beyond the standard sampler set (noise, guider, sampler, sigmas, latent_image):
tile_axis-autosplits the longer dimension (right call for most portrait/landscape video); override withHorWif you have a reason.n_tiles(default 2) - tiles along the chosen axis. 2 suits most aspect ratios; go 3β4 for 4K+ outputs. 1 effectively disables tiling.tile_overlap(default 8) - overlap in latent tokens. 8 reliably hides seams; shave it only if VRAM is tight, and expect seams if you do.max_size_for_no_tile(default 24) - auto-skip tiling when the axis is at or below 24 latent tokens (β768 pixels at LTX's 32Γ VAE compression). Inputs in the model's comfort zone just sample normally.bypass_tiling- the honest escape hatch: routes to standard single-pass sampling so you can A/B against a non-tiled baseline or debug whether a problem is tile-related at all.audio_pass- LTX2 is a video+audio model, and here's the clever bit.passthrough(default) leaves audio untouched.tile_carryingruns audio sampling alongside one chosen tile - theaudio_carrier_tile(first,middle,last) - so video-audio cross-attention (read: lipsync) happens naturally during that tile's pass, at zero extra sampling steps. For talking-face content,firstis the one: the speaker's usually in the top half.
Outputs are output and denoised_output, both LATENT, matching SamplerCustomAdvanced's contract.
Installing it
Same TenStrip pack:
cd ComfyUI/custom_nodes
git clone https://github.com/TenStrip/10S-Comfy-nodes.git 10S_Nodes
or ComfyUI Manager β "10S". Restart, no extra dependencies.
The one rule
Light denoise, few steps, refinement only. This is not a first-pass-from-noise sampler. The README is blunt: heavy-denoise tiling produces tile divergence that cosine blending can't reconcile. Typical upscale-pass schedule: sigmas starting moderate (around 0.85) with ~3 active steps, low denoise. The tooltip also flags euler_ancestral_cfg_pp as the recommended sampler algorithm for LTX2's distilled CFG=1 setups. Follow that and you get the color-stable upscale pass that base LTX2 refuses to give you for free.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| noise | NOISE | Noise generator from RandomNoise or similar. Wire from your existing noise source. | |
| guider | GUIDER | CFG/STG guider wrapping the model. Wire from BasicGuider, CFGGuider, or LTX's STG guider. | |
| sampler | SAMPLER | Sampling algorithm. euler_ancestral_cfg_pp recommended for LTX2 distilled CFG=1 setups. | |
| sigmas | SIGMAS | Noise schedule. Typical upscale-pass schedule starts moderate (e.g. 0.85) with 3 active steps. | |
| latent_image | LATENT | Input latent. For upscale-pass refinement, this is typically the output of an upsampler. | |
| bypass_tilingopt | BOOLEAN | false | If True, route directly to standard single-pass sampling (video+audio together via wrapper). Equivalent to having no tiling at all. Useful for A/B comparison, small inputs that don't need tiling, or debugging whether issues are tile-related or sampling-related. |
| tile_axisopt | COMBO | auto | Which spatial axis to tile along. 'auto' picks the longer axis (best for typical portrait/landscape aspects). Override to force tiling along H (vertical splits) or W (horizontal splits). |
| n_tilesopt | INT | 21β8 | Number of tiles along the chosen axis. Default 2 (split in halves) suits most aspect ratios. n_tiles=1 effectively disables tiling. Raise to 3-4 for very large outputs (4K+) along one axis. |
| tile_overlapopt | INT | 80β32 | Overlap between adjacent tiles in latent tokens. Default 8 reliably hides seams. Reduce only if memory is constrained; smaller overlaps risk visible seams. |
| max_size_for_no_tileopt | INT | 248β256 | Auto-skip tiling if the chosen-axis latent size is at or below this. 24 β 768 pixels at 32x VAE compression, well within model's comfort zone. Inputs at or below this skip tiling and run a single normal sampling pass. |
| audio_passopt | COMBO | passthrough | How to handle audio when input is video+audio wrapper. 'passthrough' (default): preserve original audio unchanged. 'tile_carrying': audio rides along with one chosen tile's sampling for proper video-audio cross-attention (lipsync). No extra sampling steps. |
| audio_carrier_tileopt | COMBO | first | Which tile carries the audio when audio_pass=tile_carrying. 'first': top tile (ideal for vertical talking-face content where speaker is in upper half). 'middle': center tile (best for large outputs where subject is centered). 'last': bottom tile. |
| debugopt | BOOLEAN | false | Verbose per-tile diagnostic output. Helpful first time using the node to verify it's operating as expected. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| output | LATENT | β |
| denoised_output | LATENT | β |