invoke-ai/InvokeAI · error · ValueError

Unsupported submodel type for WanT5Encoder: {submodel_type.v

Error message

Unsupported submodel type for WanT5Encoder: {submodel_type.value if submodel_type else 'None'}

What it means

When loading the Wan T5 text encoder's submodels, _load_model only handles SubModelType.Tokenizer and SubModelType.TextEncoder; anything else falls through to this ValueError. The message interpolates the unsupported SubModelType value so you can see which type was requested. It is a guard against asking a T5-encoder loader for a component it never contains (e.g. a VAE or transformer).

Source

Thrown at invokeai/backend/model_manager/load/model_loaders/wan.py:592

            target = nested_text_encoder if nested_text_encoder.exists() else root
            return UMT5EncoderModel.from_pretrained(
                str(target),
                torch_dtype=torch.bfloat16,
                local_files_only=True,
            )
        if submodel_type == SubModelType.Tokenizer:
            from transformers import AutoTokenizer

            # Prefer a sibling tokenizer/ directory; fall back to the encoder dir
            # itself, which is normal for "flat" downloads.
            target = (
                nested_tokenizer
                if nested_tokenizer.exists()
                else (nested_text_encoder if nested_text_encoder.exists() else root)
            )
            return AutoTokenizer.from_pretrained(str(target), local_files_only=True)

        raise ValueError(
            f"Unsupported submodel type for WanT5Encoder: {submodel_type.value if submodel_type else 'None'}"
        )

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Request only SubModelType.Tokenizer or SubModelType.TextEncoder for the Wan T5 encoder entry.
  2. Check your model-config records: the submodel listing for the T5 encoder should not include VAE/transformer entries; fix the config or re-convert the model.
  3. If you iterate submodels generically, filter by the model's supported submodel types before calling the loader.

Example fix

// before
enc = loader._load_model(t5_config, SubModelType.Vae)

// after
enc = loader._load_model(t5_config, SubModelType.TextEncoder)
tok = loader._load_model(t5_config, SubModelType.Tokenizer)
Defensive patterns

Strategy: type-guard

Validate before calling

SUPPORTED = {SubModelType.Tokenizer, SubModelType.TextEncoder}
if submodel_type not in SUPPORTED:
    raise ValueError(f"WanT5Encoder supports only {SUPPORTED}, got {submodel_type}")

Type guard

def is_t5_submodel(st: SubModelType | None) -> bool:
    return st in (SubModelType.Tokenizer, SubModelType.TextEncoder)

Try / catch

try:
    model = loader._load_model(t5_config, submodel_type)
except ValueError as e:
    if "Unsupported submodel type for WanT5Encoder" in str(e):
        logging.warning("skipping unsupported submodel request: %s", submodel_type)
    else:
        raise

Prevention

When it happens

Trigger: Calling _load_model(config, SubModelType.Vae) (or Transformer/Scheduler/etc.) on a Wan model whose submodel dispatch resolves to the WanT5Encoder branch.

Common situations: Misconfigured model record where the wrong SubModelType was attached to a Wan T5 encoder entry; iterate-all-submodels scripts that blindly request every SubModelType for each config; copy-pasted loader code from the main-transformer branch.

Related errors


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