invoke-ai/InvokeAI · error · ValueError

Both selected models are tagged as the {primary_expert}-nois

Error message

Both selected models are tagged as the {primary_expert}-noise expert ('{main_config.name}' and '{low_config.name}'). A Wan A14B expert pair must contain one high and one low expert.

What it means

WanModelLoaderInvocation infers each expert's role from an 'expert' filename tag ('high'/'low'). If both the main and low-noise models are tagged as the same expert (primary_expert == low_expert != 'none'), the pair cannot contain one high and one low expert, so invoke raises this ValueError. Untagged files ('none') are tolerated with a warning, since the wiring itself declares intent.

Source

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

                    )
                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(
                        "Neither Wan A14B filename identifies its expert, so 'Transformer' is assumed to "
                        "be the high-noise expert and 'Transformer (Low Noise)' the low-noise expert. If the "
                        "output looks wrong, swap the two models."
                    )

                # Make sure 'transformer' is the high-noise expert and
                # 'transformer_low_noise' is the low-noise expert. If the user
                # accidentally swapped them, swap back.
                if primary_expert == "low" or low_expert == "high":
                    transformer = low_id
                    transformer_low_noise = primary_id
                    # The swap overrides the wiring on the strength of a

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Download and select the complementary low-noise expert file (its filename should carry the 'low' expert tag).
  2. Rename one file so its filename encodes the correct expert tag (e.g., include 'low_noise'), then rescan in the model manager.
  3. Verify the two selected files are genuinely the high and low experts of the same A14B release.

Example fix

// before
primary_expert = "high"  # from main model filename
low_expert = "high"      # same tag on both files -> ValueError
// after: pair high with low
transformer = wan22_a14b_high_noise.safetensors
transformer_low_noise_model = wan22_a14b_low_noise.safetensors
Defensive patterns

Strategy: validation

Validate before calling

def expert_tag(config): return getattr(config, "expert", "none")
if expert_tag(main_config) == expert_tag(low_config) != "none":
    raise ValueError("Both files tagged as the same expert; pair one high with one low")

Type guard

def is_valid_expert_pair(main_config, low_config) -> bool:
    tags = {getattr(main_config, "expert", "none"), getattr(low_config, "expert", "none")}
    return "none" in tags or tags == {"high", "low"}

Try / catch

try:
    out = wan_model_loader.invoke(context)
except ValueError as e:
    if "tagged as the" in str(e) and "expert" in str(e):
        select_complementary_low_expert_file()
    else:
        raise

Prevention

When it happens

Trigger: Selecting two files that both carry e.g. 'high_noise' in their filenames as the main and low-noise models (e.g., wan2.2_i2v_high_noise_bf16.safetensors in both slots); misnamed community files whose expert tags collide.

Common situations: Users downloading only the high-noise expert and wiring it twice under different filenames; community finetunes shipped with duplicated/incorrect expert naming; picking two files from the same expert directory.

Related errors


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