720p video on two V100s, in five minutes
A 22B native audio-and-video diffusion model, distilled to eight steps, running 720p on two Tesla V100s with more than half the memory still free. On the same hardware it is roughly two orders of magnitude cheaper per clip than the heavyweight alternative.
LTX-2.5 is Lightricks' 22B diffusion transformer with a 12B text encoder and native audio. The question was narrow: does 720p run on two 2018 cards? The answer turned out to be not just yes, but yes with most of the memory unused.
The quantisation path is not a choice
Volta has no BF16, so the official 42 GB BF16 weights are doubly unusable: too large and computed at a tenth of the rate. The route is the vendor's own INT8 weights with fp16 compute, which the previous project on the same cards had already shown to be numerically sound. Placement across the two cards puts the diffusion transformer on one and the text encoder plus both VAEs on the other. Eight-step distilled schedule, classifier-free guidance off, fixed seed throughout.
Single stage
| resolution | frames | clip | wall clock | per step |
|---|---|---|---|---|
| 512×320 | 25 | 1.04 s | 75 s | 9.4 s |
| 960×544 | 121 | 5.04 s | 150 s | 18.8 s |
| 1280×704 (720p class) | 121 | 5.04 s | 285 s | 35.6 s |
All three produce valid H.264 plus stereo AAC, not black frames and not static. Mid-run memory sits at 15.4 GiB on one card and 26.8 on the other, so 720p never comes near an out-of-memory — a single 32 GB card would likely do it if you were willing to swap models between phases; the split across two cards just avoids the swap. Wall clock is roughly linear in pixel count (1.73× the pixels costs 1.90× the time), and the server takes 48 seconds to boot before the first prompt.
"720p" does not exist here. The latent constructor requires width and height divisible by 32, and 720 is not (720/32 = 22.5). The 720p tier is 1280×704. Frame counts must be of the form 1 + 8k.
The quality ladder
Same seed, same 202-word prompt, four configurations:
Data
| configuration | output | Mpx | wall clock | contrast | motion mean/max |
|---|---|---|---|---|---|
| one stage, conv decoder | 1280×704 | 0.9 | 315 s | 53.0 | 5.82 / 7.73 |
| one stage, diffusion decoder | 1280×704 | 0.9 | 390 s | 51.8 | 5.29 / 7.09 |
| two stage, 960×544 base | 1920×1088 | 2.09 | 615 s | 52.4 | 8.03 / 12.09 |
| two stage, 1280×704 base | 2560×1408 | 3.6 | 1395 s | 54.4 | 7.18 / 9.57 |
The two-stage path is the real lever, and the sweet spot is not the top rung. A latent upscale plus a three-step refine gives 2.3× the pixels without losing contrast and with more motion. Starting from 960×544 buys 2.3× the pixels for 2.0× the time; starting from 1280×704 buys 1.7× the pixels for 2.3× the time. The cheaper base wins.
Falling bits-per-pixel up the ladder is the expected signature of upscale-and-refine, and it is the honest caveat: it is not equivalent to generating natively at the higher resolution.
The decoder labelled "best quality" is not an automatic win
Method warning that nearly produced a backwards conclusion. Per-pixel Laplacian sharpness is not scale-invariant. A real edge spreads over more pixels at higher resolution, so the per-pixel gradient falls mechanically (3.24 → 2.62 → 2.28 up the ladder). That is not the upscale making things blurrier. Across resolutions, only contrast, motion and bits-per-pixel are comparable at all, and the final ranking needs a human.
Prompt formats do not transfer between video models
The ground truth is not documentation, it is the inference code: the text node branches on which encoder is loaded and hands this model a system prompt that is the vendor's statement of what their training captions look like. Against the format used by the other video model in these notes, the two conflict head-on:
| the other model | LTX-2.5 | |
|---|---|---|
| structure | three labelled fields | one paragraph, 150–220 words, labels forbidden |
| audio | its own trailing fields | woven chronologically into the prose |
| timing | shot markers and timestamps | no timestamps or cuts unless asked |
| dialogue | speaker IDs and tags | plain quoted speech plus a voice description |
| camera | a parameter table | shot type, motion and viewpoint, as flowing prose only |
| the word "cinematic" | explicitly avoid | explicitly required |
So it is a rewrite, not a subset. Switching to a compliant prompt raised measured contrast from 18.6 to 53.0 at the same resolution — but that comparison also changed the scene, so it is confounded and the credit cannot all go to the prompt.
The comparison that matters
Data
| clip | wall clock | output seconds | compute per output second |
|---|---|---|---|
| MiniMax-H3, 544p | ~3.1 h | 10 s | 1,116× |
| LTX-2.5 two stage, 1920×1088 | 615 s | 5.04 s | 122× |
| LTX-2.5 one stage, 1280×704 | 285 s | 5.04 s | 57× |
An old GPU cluster is not the barrier to running a modern video model; picking the right quantisation path is the whole job. But "can it run" and "can you afford to run it" are two different questions, and on this hardware the answer to the second comes from distillation, not from any kernel-level optimisation.
Left open
- The non-distilled checkpoint is downloaded but not run: the vendor ships no noise schedule for it, and running it would be guessing.
- The old-versus-new prompt comparison is confounded by a scene change; a clean result needs the same scene twice.
- 1280×704 is visibly flatter than 960×544 (texture standard deviation 12.0 against 15.3), which is the pair above. Prompt and seed are held fixed there, but changing the canvas changes the latent shape and therefore the sample, so the two are not a matched pair and the reading stays open: a distilled model preferring its training resolution would look the same. Settling it needs the non-distilled checkpoint or a step sweep.
- Weights came from an ungated mirror whose filenames and byte counts match the official release. The licence should still be accepted on the official page.
Ask about these notes
A small agent with three tools — search, read, outline — over the 44 sections of these notes. It looks things up before answering and links the section it read. It will tell you when the notes do not cover something rather than guess.
Grounded only in these pages, and it cites the section it read. A question costs your browser about a third of a second of arithmetic — that is the spam gate, and it stores nothing.