🅛🅣🅧 Two Stage Resolution
The resolution calculator that keeps LTX's latent steps clean
- width
- height
- info
Every LTX video workflow eventually asks the same boring question: what resolution do I actually generate at? The 13B and LTX-2 era made this a two-stage problem - you generate a low-res base pass, then upscale and re-sample for the final. And because LTX renders in heavily-compressed latent space, your width and height have to land on the VAE's divisibility grid or you get dimension mismatch errors the moment you upscale and re-run the sampler. This node is a tiny calculator that just does that arithmetic for you, so you stop eyeballing multiples of 32.
What it does
Give it your final target width and height plus the spatial_upscaler you plan to use, and it hands back the base resolution to generate at - and, in the multi-step modes, the intermediate resolutions too. It's not a sampler and it doesn't touch pixels; it's three math paths over three modes:
none- just rounds your width and height up to the nearest multiple of 32. Nothing fancy.1.5/2- finds a step that's divisible by both 32 and the upscale factor (via aFraction), soFACT = base × upscaleis valid in latent space. GeneratesBASEandFACT.3KS (2x+2x)- the two-upscale chain: it computes three rungs,BASE → MID → FACT, all multiples of 128 (the LCM of 32, 64, and 128). BASE is your first-pass render at a quarter of the final, MID after one 2x, FACT after the second. This is the one you want for a proper staged upscale pipeline.
Note it rounds up, so 1920×1080 with 3KS doesn't give you a clean 1920×1080 final - you get the next grid-aligned size above it. That's the point: a clean latent grid beats a pixel-perfect target, and the upscaler fills the difference.
The inputs and outputs
Three inputs, all required, and you've probably guessed them: width, height, and the spatial_upscaler dropdown (none, 1.5, 2, 3KS (2x+2x)).
The three outputs are what make it handy:
width/height(INT) - wire these into whatever sets your latent or image size. This is the actual value you'll use.info(STRING) - a human-readable summary in the formBASE: … × …/MID: … × …/FACT: … × …(orFACT: - (no upscale)fornone). Read this once to make sure the chain looks sane before you run; it's the difference between "I trust the node" and "I can see the ladder."
Install
It ships in a three-node pack, so you're installing all of them:
cd ComfyUI/custom_nodes
git clone https://github.com/PsypmP/ComfyUI-LTXVideo-AVSplit
pip install -r ComfyUI-LTXVideo-AVSplit/requirements.txt
# restart ComfyUI
Or search ComfyUI-LTXVideo-AVSplit in ComfyUI Manager. Dependency list is a single line: numpy. No model downloads, no heavy deps - this node is genuinely just math, and it's the lightest thing in the pack.
Gotchas
Honestly, the main trap is expecting it to do more than it does. It computes resolutions; it doesn't insert the upscaler into your graph, so you still wire the actual 2x upscale yourself between the stages. And if you're on an older 0.9.x-era LTX workflow that doesn't do a staged upscale at all, none is your mode and the other two options are for the multiscale-era models. If the numbers it spits out look surprisingly high, remember the round-up - that's the arithmetic working as designed, not a bug.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 192064–8192 | — |
| height | INT | 108064–8192 | — |
| spatial_upscaler | COMBO | 4 options: none, 1.5, 2, 3KS (2x+2x) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| width | INT | — |
| height | INT | — |
| info | STRING | — |