invoke-ai/InvokeAI · error · ValueError

'Transformer (Low Noise)' must be a single-file Wan model (G

Error message

'Transformer (Low Noise)' must be a single-file Wan model (GGUF or checkpoint). '{low_config.name}' is in {low_config.format.value} format.

What it means

WanModelLoaderInvocation validates that the 'Transformer (Low Noise)' input is a single-file Wan model (GGUF or checkpoint format, membership in _SINGLE_FILE_FORMATS). If the low-noise model's config format is anything else (e.g., a diffusers folder-style model), invoke raises this ValueError naming the model and its format. Dual-expert loading is only implemented through the single-file loaders, which both produce a plain WanTransformer3DModel.

Source

Thrown at invokeai/app/invocations/wan_model_loader.py:176

            if self.transformer_low_noise_model is not None and main_variant == WanVariantType.TI2V_5B:
                # The field's own docs promise this input is ignored for the
                # single-expert TI2V-5B — e.g. a leftover wire from an A14B session.
                context.logger.warning("'Transformer (Low Noise)' is ignored for the single-expert TI2V-5B variant.")

            if self.transformer_low_noise_model is not None and main_variant != WanVariantType.TI2V_5B:
                if self.transformer_low_noise_model.key == self.model.key:
                    raise ValueError(
                        "The same model is wired to both 'Transformer' and 'Transformer (Low Noise)'. "
                        "A Wan A14B expert pair needs two different single-file models."
                    )
                low_config = context.models.get_config(self.transformer_low_noise_model)
                self._validate_main_config(low_config, "Transformer (Low Noise)")
                # The two experts don't have to share a format — both single-file
                # loaders produce a plain WanTransformer3DModel, so a GGUF high-noise
                # expert pairs fine with a safetensors low-noise one.
                if low_config.format not in _SINGLE_FILE_FORMATS:
                    raise ValueError(
                        f"'Transformer (Low Noise)' must be a single-file Wan model (GGUF or checkpoint). "
                        f"'{low_config.name}' is in {low_config.format.value} format."
                    )
                low_id = self.transformer_low_noise_model.model_copy(update={"submodel_type": SubModelType.Transformer})
                low_expert = getattr(low_config, "expert", "none")

                if getattr(low_config, "variant", None) != main_variant:
                    low_variant = getattr(low_config, "variant", None)
                    raise ValueError(
                        "The high-noise and low-noise models must use the same Wan variant, but "
                        f"'{main_config.name}' is {main_variant.value} and '{low_config.name}' is "
                        f"{getattr(low_variant, 'value', low_variant)}."
                    )

                # The expert tag is a filename heuristic, so 'none' (untagged) is common on
                # community finetunes. The wiring itself is explicit user intent — main slot
                # = high, low-noise slot = low — so an untagged file is taken at its wired
                # position (or inferred as the complement of its tagged partner). Only a

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Install the low-noise expert as a single file (safetensors checkpoint or GGUF) and re-select it in 'Transformer (Low Noise)'.
  2. Convert/download a single-file checkpoint of the low-noise expert (e.g., from the official Wan 2.2 release safetensors or a GGUF quant).
  3. Confirm the model's detected format in the model manager before wiring it.

Example fix

// before
low_config.format  # ModelFormat.Diffusers -> ValueError
// after: use a single-file low-noise expert
low_config.format in _SINGLE_FILE_FORMATS  # e.g. GGUF or Checkpoint/Safetensors single file
Defensive patterns

Strategy: validation

Validate before calling

low_config = context.models.get_config(transformer_low_noise_model)
SINGLE_FILE = {ModelFormat.GGUF, ModelFormat.Checkpoint}  # per _SINGLE_FILE_FORMATS
if low_config.format not in SINGLE_FILE:
    raise ValueError(f"{low_config.name} must be GGUF or single-file checkpoint, got {low_config.format.value}")

Type guard

def is_single_file_wan(config) -> bool:
    return config.format in {ModelFormat.GGUF, ModelFormat.Checkpoint}

Try / catch

try:
    out = wan_model_loader.invoke(context)
except ValueError as e:
    if "must be a single-file Wan model" in str(e):
        install_single_file_low_noise_expert()
    else:
        raise

Prevention

When it happens

Trigger: Wiring a diffusers-format (directory) Wan model into 'Transformer (Low Noise)' on an A14B setup; any non-single-file format value for low_config.format when the field is populated and main variant is not TI2V-5B.

Common situations: Users who downloaded Wan A14B experts as diffusers repositories and installed them via the diffusers model path; mixed installs where the high-noise expert is a GGUF single file but the low-noise one is a diffusers folder.

Related errors


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/a01752bb6216d3a8. Report an issue: GitHub.