Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/roadmap_v1.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ issue is not yet placed. Keyed record: update in place, never append.
| [#435](https://github.com/mudler/vllm.cpp/issues/435) | `ROAD-V1-LTX25` | LTX-2.5: port the 21B joint video+audio DiT and generalize the video seam | feature |
| [#560](https://github.com/mudler/vllm.cpp/issues/560) | `ROAD-V1-LTX25` | Stabilizing constants unreachable by any gate: FIVE instances found by sweep, incl. the DiT's own `norm_eps` field default | bug |
| [#567](https://github.com/mudler/vllm.cpp/issues/567) | `ROAD-V1-LTX25` | `OpNameImpl` makes a SECOND file every new `OpId` must edit; collapse the enum and its names into one derived list | bug |
| [#644](https://github.com/mudler/vllm.cpp/issues/644) | `LTX25-TILED-DECODE` | LTX-2.5 full port row 2: the tiled + STREAMING Conv VAE decode (`tiled_decode`, `conv_video_decoder.py:383-484`) was unported; spec [`ltx25-tiled-decode.md`](specs/ltx25-tiled-decode.md). Measured en route: upstream's own AUTO layout is a NO-OP at 448x256/25f, so tiling is not what that size was blocked on | feature |
| [#238](https://github.com/mudler/vllm.cpp/issues/238) | `SAMPLE-LOGPROB-TOKEN-IDS` | `logprobs_mode`: three of four modes are runtime-refused stubs | bug |
| [#264](https://github.com/mudler/vllm.cpp/issues/264) | `SAMPLE-LOGPROB-TOKEN-IDS` | `logprob_token_ids`: generative scoring over an explicit token set is unported | feature |
| [#365](https://github.com/mudler/vllm.cpp/issues/365) | `PERF-27B-DENSE-MARLIN-GATEUP` | 27B gap decomposed vs vLLM's own decode profile; dense W4A16 MLP bypassed the fused gate_up seam (spec `specs/perf-27b-dense-marlin-gateup.md`) | bug |
Expand Down
375 changes: 375 additions & 0 deletions .agents/specs/ltx25-tiled-decode.md

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -792,6 +792,12 @@ add_library(vllm STATIC
# VAE and its vocoder. Additive files mirroring ltx_core's own structure.
src/vllm/model_executor/models/ltx2_audio_vae.cpp
src/vllm/model_executor/models/ltx2_video_vae.cpp
# LTX-2.5 (ROW LTX25-TILED-DECODE, issue #644): the tiling algebra and the
# STREAMING tiled decode. Own translation units so the untiled decode above
# stays the gated reference and the tiled path cannot drift from it by sharing
# an internal helper only one of them exercises.
src/vllm/model_executor/models/ltx2_tiling.cpp
src/vllm/model_executor/models/ltx2_video_vae_tiled.cpp
# LTX-2.5 (ROW MODEL-DIFFUSION-LTX25, phase L3): the Gemma-4 multi-layer feature
# aggregation, the two caption projections and the embedded asset pack. An
# additive file mirroring ltx_core's own structure.
Expand Down
1 change: 1 addition & 0 deletions docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ in `ltx2_text_encoder.cpp` is the call that would have to change.
| Whisper audio encoder | openai/whisper-small; whisper-large-v3 (Voxtral cfg) | encoder tower 77/77; large-v3 tower 203/203 | pending |
| MiniMax-H3 DiT (`MiniMaxH3DiTModel`, vllm-omni lane) | MiniMax-H3 (33.1B video+audio) | portable 79/79; all three modalities COHERENT on Q4_K_M (§8.20); PRUNED ckpts run, Q8_0 seam 0.9941 (§8.21); ref2va grid was NVFP4 quant error, §8.9 REFUTED; GGUF/NVFP4/bf16 shards stream | FP4/Marlin landed; speed pending; no bf16 render yet. Render from the Q4_K_M GGUF, not the NVFP4 arm. Krea 2 text-to-image (roadmap C11) is scoped to reuse these DiT seams |
| LTX-2.5 DiT (`LTX2VideoTransformer3DModel`, Lightricks lane) | LTX-2.5 (21.00B video+audio) | `SPIKE`. DiT, VAEs+ENCODERS, conditioning, pipeline, quant loaders gated at reduced dims. Typed prompt to Gemma-4 to cross-attn, FIXTURE-gated. The 320x192/25f scene was register-conditioned; a prompted render is OWED | Family `ltx-2.5` via `ltx2-gen`. ~29 GB NVFP4/GB10, FP8 ~44 GB, +~24 GB tower. FP8, torchao and first-party NVFP4 all load. DiffVAE, LoRA, image conditioning refused AT THE ENGINE. Speed PENDING |
| LTX-2.5 tiled + streaming Conv VAE decode | LTX-2.5 video VAE | tiling algebra, AUTO layout and `tiled_decode` gated vs executed upstream `ltx_core` @ `fd4ded7f` (`test_ltx2_tiling` 9/9, 830 assertions); one-tile control is BIT-EXACT vs untiled on both causality arms | Streams temporal chunks through upstream's AUTO layout (768/64 px, 80/24 frames), so the full pixel volume is never materialized. That layout is a NO-OP below a 768px long side and 81 frames |
| MTP speculator | Qwen3.6-27B, Qwen3.6-35B-A3B | token-identical to vLLM `mtp` at c1 | ~4% faster c1; +16% output tput (MoE) |
| DFlash block-diffusion | Qwen3 (DFlash draft) | near-tie e2e 27/27 vs vLLM | 2.9x over spec-off, 1.003x vs vLLM DFlash-on |
| DeepSeek-V4 MTP | DeepSeek-V4-Flash (nextn head) | lossless 5/5; real-model weight-blocked | pending |
Expand Down
20 changes: 20 additions & 0 deletions docs/USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,26 @@ because that would hand back a lower quality render as if it were the one you
asked for. Keyframe and reference conditioning is refused for the same reason: it
runs through the video VAE's encoder, and only the decoder is ported.

**The convolutional decode is TILED and STREAMED, on upstream's own defaults, and
there is no knob.** The layout is the one `ltx_pipelines` builds for a Conv VAE
when you pass `AUTO_TILING`: a 768 px tile with a 64 px overlap on the long side,
aspect coupled to the short one, and 80 frame temporal chunks overlapping by 24.
Each temporal chunk is written to its PPM files and dropped, so the full pixel
volume never exists at once. Two consequences worth knowing before you read a
memory number:

- **Below a 768 px long side and 81 frames the layout does not tile at all.** A
single tile comes out, and that path reproduces the untiled decode bit for bit
(`test_ltx2_tiling`'s one tile control, on both causality settings). So
448x256/25f renders byte identically to how it rendered before tiling existed,
and its memory is unchanged. Tiling starts doing something at 896x512, and
temporal chunking at 121 frames.
- **A tiled render is not the same image as an untiled one**, and that is
upstream's behaviour, not a defect here. Each tile decodes a crop of the latent,
the decoder's receptive field is wider than the 64 px overlap, and the seam is
blended rather than eliminated. Do not compare a 1920x1088 render against a
hypothetical untiled one and read the difference as an error.

**The refusal that used to stand here is gone, and what replaced it is an owed
ORACLE rather than an owed feature.** Through L10 this page said a prompt was
refused because the `Embeddings1DConnector` weights, which ship inside the DiT
Expand Down
Loading
Loading