invoke-ai/InvokeAI · error · ValueError

The high-noise and low-noise models must use the same Wan va

Error message

The high-noise and low-noise models must use the same Wan variant, but '{main_config.name}' is {main_variant.value} and '{low_config.name}' is {getattr(low_variant, 'value', low_variant)}.

What it means

WanModelLoaderInvocation requires that both expert models share the same Wan variant. When the low-noise model's config 'variant' attribute differs from the main (high-noise) model's variant, invoke raises this ValueError naming both models and their variants. Mixing e.g. a 14B high-noise expert with a 5B low-noise model would produce incompatible transformers.

Source

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

                        "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
                # genuine conflict, both files claiming the *same* expert, is an error.
                if primary_expert == low_expert != "none":
                    raise ValueError(
                        f"Both selected models are tagged as the {primary_expert}-noise expert "
                        f"('{main_config.name}' and '{low_config.name}'). A Wan A14B expert pair "
                        "must contain one high and one low expert."
                    )
                if primary_expert == "none" and low_expert == "none":
                    context.logger.warning(

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Pick a low-noise expert whose variant matches the main model's variant exactly (same A14B/5B variant).
  2. Fix the mis-detected variant: rescan/reinstall the model so its recorded variant metadata is correct.
  3. If the main model is really TI2V-5B, remember it is single-expert — don't wire a low-noise model at all.

Example fix

// before
main_config.variant   # WanVariantType.T2V_A14B
low_config.variant    # WanVariantType.T2V_5B -> ValueError
// after: both experts from the same variant
transformer = wan22_t2v_a14b_high
transformer_low_noise_model = wan22_t2v_a14b_low  # same variant
Defensive patterns

Strategy: validation

Validate before calling

main_config = context.models.get_config(model)
low_config = context.models.get_config(transformer_low_noise_model)
if getattr(low_config, "variant", None) != getattr(main_config, "variant", None):
    raise ValueError("High- and low-noise experts must share the same Wan variant")

Type guard

def variants_match(main_config, low_config) -> bool:
    return getattr(low_config, "variant", None) == getattr(main_config, "variant", None)

Try / catch

try:
    out = wan_model_loader.invoke(context)
except ValueError as e:
    if "same Wan variant" in str(e):
        select_matching_variant_low_noise_model()
    else:
        raise

Prevention

When it happens

Trigger: Wiring 'Transformer' and 'Transformer (Low Noise)' with models whose variant metadata differs (e.g., wan2.2-t2v-a14b vs wan2.2-t2v-5b, or fp16 vs other variant tags mismatching); a model scanned/detected with the wrong variant in the model manager.

Common situations: Mixing Wan 2.2 5B and 14B files in one dual-expert setup; installing community finetunes whose variant metadata was mis-detected; combining models from Wan 2.1 and 2.2 releases.

Related errors


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