unslothai/unsloth · critical · ValueError

This LTX checkpoint stores scaled fp8 weights, which this lo

Error message

This LTX checkpoint stores scaled fp8 weights, which this loader does not dequantize yet. Use the GGUF quants from unsloth/LTX-2.3-GGUF instead (Q8_0 for the highest fidelity) or the official bf16 checkpoint.

What it means

The LTX-2.3 loader (video_ltx2.py) refuses checkpoints whose transformer weights carry .weight_scale/.input_scale companion tensors — the Lightricks scaled-fp8 single-file format. Casting those weights to bf16 without applying the scales corrupts every quantized layer, so the loader detects the scale keys in the split 'dit' group and raises ValueError pointing at supported alternatives instead of producing garbage output.

Source

Thrown at studio/backend/core/inference/video_ltx2.py:580

    import transformers
    from diffusers import LTX2Pipeline
    from diffusers.loaders.single_file_utils import load_single_file_checkpoint

    variant = checkpoint_variant(checkpoint_path)
    logger.info(
        "video.ltx23_assembly: variant=%s gguf=%s extras=%s",
        variant,
        is_gguf,
        LTX23_EXTRAS_REPO,
    )
    state = load_single_file_checkpoint(str(checkpoint_path))
    groups = _split_checkpoint(state)
    del state

    # The Lightricks fp8 single files store SCALED float8 weights (.weight_scale/.input_scale companions), and casting without
    # the scales corrupts every quantized layer, so refuse loudly and point at the GGUF quants (Q8_0 for highest fidelity).
    if any(k.endswith((".weight_scale", ".input_scale")) for k in groups["dit"]):
        raise ValueError(
            "This LTX checkpoint stores scaled fp8 weights, which this loader does "
            "not dequantize yet. Use the GGUF quants from unsloth/LTX-2.3-GGUF "
            "instead (Q8_0 for the highest fidelity) or the official bf16 checkpoint."
        )

    transformer = load_ltx23_transformer(
        groups["dit"],
        base_repo = base_repo,
        torch_dtype = torch_dtype,
        is_gguf = is_gguf,
        hf_token = hf_token,
    )
    connectors = load_ltx23_connectors(
        groups["connectors"],
        variant = variant,
        torch_dtype = torch_dtype,
        hf_token = hf_token,
    )

View on GitHub (pinned to 203007d190)

Solutions

  1. Download the GGUF quants from unsloth/LTX-2.3-GGUF — Q8_0 for highest fidelity (the loader has is_gguf support).
  2. Or use the official bf16 checkpoint (larger, but loads as-is).
  3. Do not attempt to strip the scale tensors; the loader is refusing because silent corruption would follow.

Example fix

# before
ckpt = "Lightricks/LTX-2.3...fp8...safetensors"  # -> ValueError: scaled fp8

# after
ckpt = hf_hub_download("unsloth/LTX-2.3-GGUF", "LTX-2.3-Q8_0.gguf")
Defensive patterns

Strategy: validation

Validate before calling

from safetensors import safe_open

def is_scaled_fp8(ckpt_path) -> bool:
    with safe_open(ckpt_path, framework="pt") as f:
        return any(k.endswith((".weight_scale", ".input_scale")) for k in f.keys())

if is_scaled_fp8(path):
    raise SystemExit("use unsloth/LTX-2.3-GGUF (Q8_0) or the bf16 checkpoint")

Try / catch

try:
    transformer = load_ltx23(...)
except ValueError as e:
    if "scaled fp8" in str(e):
        ckpt = hf_hub_download("unsloth/LTX-2.3-GGUF", "LTX-2.3-Q8_0.gguf")
        transformer = load_ltx23(..., checkpoint=ckpt)
    else:
        raise

Prevention

When it happens

Trigger: Loading the Lightricks LTX-2.3 fp8 single-file checkpoint through load_single_file_checkpoint + _split_checkpoint; any checkpoint whose DiT state dict ends up with .weight_scale or .input_scale keys.

Common situations: Downloading the official fp8 release for its smaller size; HuggingFace 'safetensors fp8' variants; version changes where a previously-tolerated format is now explicitly refused rather than mis-loaded.

Related errors


AI-assisted analysis of unslothai/unsloth@203007d190 (2026-08-15). Data as JSON: /api/errors/ef85eb9060d6c05b. Report an issue: GitHub.