rockerBOO/ltx-2.5-nvfp4-convrot
LTX-2.5 — NVFP4 + ConvRot INT8 quant for ComfyUI
Quantized version of Lightricks' LTX-2.5 (22B audio-video diffusion transformer) for ComfyUI, using NVFP4 for most weights and INT8+ConvRot for attention — smaller and faster than the bf16 original with minimal quality loss. Unlike Lightricks' own official quants, blocks 0, 1, 46 and 47 are kept full bf16 precision here.
[!NOTE] dev variant is planned but not started yet.Files
Only the transformer is requantized here. Grab the VAEs and text encoders straight from Lightricks/LTX-2.5 and Comfy-Org/gemma-4 — those are used as-published, not touched by us.
Requirements
Blackwell GPU (SM >= 10.0/12.0) required for inference — RTX 50-series, B100/B200. Same as our other NVFP4 releases.
License
LTX-2 Community License Agreement (included in this repo), inherited from Lightricks/LTX-2.5.
Quantization method
No quantization was run ourselves for this file — it's spliced together from tensors in Lightricks' own two official pre-quantized releases, since both already quantize the same tensor set we wanted (verified against the real safetensors headers, not assumed):
- Base:
ltx-2.5-22b-distilled-transformer-comfy-int8-convrot.safetensors— keeps its attention tensors (INT8+ConvRot) and everything Lightricks itself never quantizes (norms, gate-logits, adaln, patchify/proj_out, scale-shift tables). - Feed-forward layers (
ff.net.0.proj/ff.net.2,audio_ff.net.0.proj/audio_ff.net.2, incl.embeddings_connector) swapped in fromltx-2.5-22b-distilled-transformer-nvfp4.safetensors. - Blocks 0, 1, 46, 47 overridden back to full bf16 (attention, feed-forward, everything) from the bf16 source, superseding both official files for just those 4 blocks — Lightricks quantizes all 48 blocks uniformly; we chose not to for the first/last two.
Two things surfaced during verification that are worth recording:
- Lightricks' own NVFP4 file isn't uniform either. 56 of its 224 feed-forward tensors are plain bf16, not NVFP4: blocks 42-47 (both video and audio FF) and all of
embeddings_connector(video+audio, 8 sub-blocks each). This wasn't documented anywhere we could find — only visible by reading the file's own tensor headers. Our output inherits this (blocks 42-45 end up FF-bf16/attention-INT8; blocks 46-47 are already fully bf16 from our own override anyway). - A missing `.comfy_quant` marker silently breaks NVFP4 loading in a mixed-format file. Lightricks' standalone NVFP4 file has no per-tensor
.comfy_quantblob at all — ComfyUI evidently auto-detects a uniformly-NVFP4 checkpoint some other way. Butcomfy/ops.py's generic per-layer loader (if layer_conf is None: load as plain weight, no error) is what actually runs once a checkpoint contains any.comfy_quant-bearing tensors (i.e. as soon as INT8 layers are mixed in) — so NVFP4 tensors without their own marker silently loaded as raw packed weights, producing amat1 and mat2 shapes cannot be multipliederror deep in the first sampler node, not a load-time failure. Fixed by adding a synthetic{"format": "nvfp4"}.comfy_quanttensor to all 160 NVFP4-tagged feed-forward tensors. Confirmed working via a full ComfyUI API workflow run (image-to-video + audio,video_ltx2_5_i2v_api.json) after the fix — first attempt failed with exactly this error, second attempt (post-fix) completed and produced valid output video/audio files.
Final composition (verified against the assembled file's own tensor headers):
Quality (beyond functional load/generate correctness) has not been separately assessed.
