Skip to content

LTX-2.5: the only shipped DiT declares use_keyframes_abs_pos_embedding=True and carries ZERO keyframe tensors, so #658's trained bias is unexercised by any render we can run #902

Description

@localai-bot

Found while verifying #880 end-to-end on dgx.casa (GB10) against the real NVFP4 weights. This is a measurement, not a code change.

What I measured

The capstone render for #658 ran on main at 98f8e046d — the merge commit of #880without --allow-unported, which is the flag that row exists to retire. It succeeded: 9 frames at 128x128 @ 24 fps plus 48 kHz stereo audio, zero refusals in the log (control: 12 log lines).

Then I compared it to the previous render, which used the pre-#880 binary (3ce5a1dc1, built 2026-08-14) with --allow-unported — that is, with use_keyframes_abs_pos_embedding force-cleared at ltx2_loader.cpp:1035. Same prompt, same seed 20260814, same resolution.

frame 0: 128x128 mean=93.2 sd=69.2 adj=7.25  md5=fb1f4a55a8a1   IDENTICAL
frame 4: 128x128 mean=81.5 sd=68.9 adj=6.42  md5=33a5d75c6964   IDENTICAL
frame 8: 128x128 mean=84.7 sd=72.1 adj=6.08  md5=5ab4e7149823   IDENTICAL
9/9 distinct frame md5s within the render; audio 31678/31680 non-zero

Byte-identical. Bias off and bias on produce the same pixels.

That contradicts the seam comment this row itself landed at src/vllm/multimodal/ltx2_video.cpp:1695-1697, which records the opposite as its motivating evidence: "five LTX-2.5 suites stayed GREEN while the rendered pixels moved — frame 0 went from a flat 127 to a flat 130."

Why: the weights are not in the file

Reading the safetensors header directly:

ltx-2.5-22b-distilled-transformer-nvfp4.safetensors
  tensors: 7876
  keyframe tensors: []          <-- zero
  control: 48 adaln tensors
  __metadata__.config.transformer.use_keyframes_abs_pos_embedding = True

The config declares the flag true. The file carries no keyframe tensor at all. So on this checkpoint the trained term has no weights to apply, keyframes_abs_pos_embedding stays default-constructed (ltx2.h:256-258), and the render is correct to be identical.

What this means for the row

Three separate things, and only the first is proven:

  1. PROVEN — the shipped NVFP4 DiT now loads and renders with allow_unported retired. That is feat(LTX25-KEYFRAMES-ABS-POS): the trained keyframe bias both shipped DiTs were refused over (#658) #880's user-visible claim and it holds end-to-end on real weights.
  2. UNEXERCISED — the trained bias itself. No render we can run on this box touches ltx2_dit.cpp:527 / ltx2_device.cpp:817, because the only DiT on the NAS has no keyframe weights. The guarantee is covered by reduced-dimension fixtures only.
  3. UNVERIFIABLE HEREdocs/FEATURES.md and the feat(LTX25-KEYFRAMES-ABS-POS): the trained keyframe bias both shipped DiTs were refused over (#658) #880 subject say "both shipped DiTs". Only one DiT is on the NAS (ls shows a single 18.7 GB file). The second was not available to me, so I could neither confirm nor refute that half.

The question this leaves open

A checkpoint that declares use_keyframes_abs_pos_embedding = True while carrying no keyframe tensor is a contradiction between the declared config and the shapes, and Ltx2AdoptDeclaredDitParams is exactly the function that reconciles those two. Which way does it resolve, and is that the upstream behaviour?

It matters because the two arms differ sharply:

  • Resolves false from shapes — correct, and the render above is right. Then the seam VT_CHECK at ltx2_video.cpp:1707 never arms on this checkpoint, and neither does ltx2_dit.cpp:520.
  • Resolves true from the declared config — then ltx2_dit.cpp:520 (m.keyframes_mask == nullptr || keyframes_embedding != nullptr) should have refused this render, and it did not. That would be a live hole in the guard the row was written to add.

I did not determine which, so I am not asserting either. Whoever picks this up should answer it against upstream model.py:166-173 (supports_keyframes_abs_pos_embedding) rather than from our own code, and add the smallest test that enters through the loader with a declare-true/carry-nothing checkpoint — a shape our fixtures currently do not have.

Related: #658, #880, #886 (POLICY-NOTHING-LANDS-DEAD — a mechanism whose only driver is its own fixture is exactly the shape that policy names), #655 (the LTX oracle admissibility question).

FOLLOWING_AGENTS_PROTOCOL

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions