π π £π § Get Tiling Sizes
The arithmetic you really don't want to do by hand
- image
- initial_canvas_width
- initial_canvas_height
- tile_width
- tile_height
- output_width
- output_height
- overlap_frac
- tile_frames
- is_8k
- summary
LTX-2.3 is a 22B video model with a fixed trained window, and the moment you want a canvas bigger than that - or a clip longer than one window - you're doing tile arithmetic. Get Tiling Sizes does that arithmetic for you and hands you the numbers as wires.
It's the least glamorous node in the pack and the one I'd wire in first. Its own docstring calls it "a size calculator in the spirit of Comfy's Get Image Size, for tiled fusion," which tells you exactly who it's for: the tiled-fusion path, where a canvas, a tile, and a temporal window all have to agree or the sampler quietly does something you didn't intend.
The rules it's enforcing
LTX doesn't take arbitrary dimensions. Width and height have to be multiples of 32, and frame counts have to be 8n+1 - 97 is the number you'll see everywhere because that's one trained temporal window. Off-grid values don't round politely for you; they just fail or behave oddly.
So the node builds a resolution ladder from your source aspect ratio: qHD at a 960 long edge, HD at 1280, FullHD at 1920. Everything snaps to 32. Then 4K is 2Γ the FullHD step and 8K is 4Γ, which is the "stage 2 upscale" story in the two-stage workflows.
One nice touch: if your source is already within 200px of the target step, it keeps your source instead of rescaling. That's why your "FullHD" canvas might come out as 1904 rather than exactly 1920 - by design, not a bug.
For frames it's smarter than a clamp. 97 or under snaps to the nearest 8n+1. Between 98 and 121 it rounds up to a covering 8n+1, because accepting a slightly longer window is better than chunking a clip that was almost one window long. Past 121 it just gives you 97, and the long clip gets temporal chunks.
Inputs you'll actually touch
The three dimensional ones - width, height, frame_count - or, if you're doing V2V, the optional image input, which is Get-Image-Size style: connect a video/image batch and the three numbers are read from it instead.
Then three dropdowns. tile_size is the spatial tile long edge (qHD/HD/FullHD) and it's clamped to your initial canvas, so a FullHD tile on a smaller canvas doesn't force pointless tiling. initial_canvas_size is stage 1. output_size (FullHD/4K/8K) is the final canvas - in a single-stage graph that is your canvas; in a two-stage graph it's stage 2.
The outputs, in order
Ten of them, and they're meant to be wired, not retyped: initial_canvas_width, initial_canvas_height, tile_width, tile_height, output_width, output_height, overlap_frac, tile_frames, is_8k, summary.
The canvas pair goes into your empty latent (or the guide node). tile_width/tile_height and overlap_frac go into the Tiled Fusion Sampler - the overlap comes out as a hard 0.5, which is right at the community's rule of thumb for avoiding visible tile patterns and above the sampler's own floor. Feed the same tile_frames to both the sampler and the IC-LoRA guide's streaming setting; that pairing has to match or windowing gets disabled. is_8k is there so you can branch a graph before you melt a card, and summary is a human-readable string you can drop into a Show Text node - it also gets printed in the node's own UI, because this is an output node.
Install
It ships with the pack, so you don't install it separately:
cd ComfyUI/custom_nodes
git clone https://github.com/Lightricks/ComfyUI-LTXVideo
pip install -r ComfyUI-LTXVideo/requirements.txt
Or search "LTXVideo" in ComfyUI Manager (Ctrl+M β Install Custom Nodes) and restart. The requirements are real ones - colour-science, diffusers, kornia, ninja, openimageio, transformers[timm]. Budget for the models too: the 22B checkpoint plus the Gemma 3 12B text encoder, into models/checkpoints and models/text_encoders/. The README claims required models download on first use; the 100GB disk-space prerequisite is the honest number.
Where people get burned
- Retyping the numbers instead of wiring them. Everything snaps, so the value you read back is not the value you typed. Wire it.
- Setting
tile_framesand forgetting the guide. If the sampler getstile_frames > 0butLTXAddVideoICLoRAGuidedoesn't haveuse_streamingon with the same value, there's no temporal plan and windowing is silently disabled. - Assuming this node is in the example workflows. It isn't - no shipped workflow uses Get Tiling Sizes yet. The documentation lives in
tiled_fusion_sampler.mdin the pack root, which is also where the sampler's legality rules are written down. - Blaming this node for decode seams. Tiled VAE decode is a different failure mode - a periodic grid on flat, uniform backgrounds - and the fix there is overlap, not tile math. This node's fixed 0.5 overlap is the safe side of that trade.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 19201β16384 | Source width in pixels (from Load Video / Get Image Size). |
| height | INT | 10801β16384 | Source height in pixels. |
| frame_count | INT | 971β10000 | Source frame count. tile_frames is 8n+1, 97 or less, or up to 121 when that avoids temporal chunking. |
| tile_size | COMBO | FullHD | Spatial tile long-edge. qHD=960, HD=1280, FullHD=1920. Clamped to the initial canvas so a FullHD tile on a smaller canvas does not force tiling. |
| initial_canvas_size | COMBO | FullHD | Stage-1 canvas long-edge (same choices as tile size). Source within 200px of FullHD is kept instead of rescaled. |
| output_size | COMBO | FullHD | Final canvas. FullHD is the 1920 long-edge step; 4K is 2Γ that; 8K is 4Γ. Single-stage graphs use this as the canvas. Two-stage graphs use initial canvas for stage 1 and this for stage 2. |
| imageopt | IMAGE | Optional video/image batch. When connected, width, height, and frame_count are taken from it (Get Image Size style). |
Outputs (10)
| Name | Type | Description |
|---|---|---|
| initial_canvas_width | INT | β |
| initial_canvas_height | INT | β |
| tile_width | INT | β |
| tile_height | INT | β |
| output_width | INT | β |
| output_height | INT | β |
| overlap_frac | FLOAT | β |
| tile_frames | INT | β |
| is_8k | BOOLEAN | β |
| summary | STRING | β |