invoke-ai/InvokeAI · error · ValueError

The Wan T5 Encoder must resolve to a standalone Wan T5 encod

Error message

The Wan T5 Encoder must resolve to a standalone Wan T5 encoder model.

What it means

When the 'Wan T5 Encoder' field is set, the loader validates the referenced model resolves to a config with type ModelType.WanT5Encoder and format ModelFormat.WanT5Encoder. Any other type/format means the field doesn't point at a standalone Wan T5 encoder, so invoke() raises this ValueError before building the output.

Source

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

        if self.vae_model is not None:
            self._validate_standalone_vae(context, self.vae_model, main_variant)
            vae = self.vae_model.model_copy(update={"submodel_type": SubModelType.VAE})
        elif main_is_diffusers:
            vae = self.model.model_copy(update={"submodel_type": SubModelType.VAE})
        elif self.component_source is not None:
            self._validate_component_source_vae(context, self.component_source, main_variant)
            vae = self.component_source.model_copy(update={"submodel_type": SubModelType.VAE})
        else:
            raise ValueError(
                "No source for VAE. Either set 'VAE' to a standalone Wan VAE, "
                "or set 'Component Source' to a Diffusers Wan main model."
            )

        # Tokenizer + text encoder: standalone override > main (if Diffusers) > component source.
        if self.wan_t5_encoder_model is not None:
            t5_config = context.models.get_config(self.wan_t5_encoder_model)
            if t5_config.type != ModelType.WanT5Encoder or t5_config.format != ModelFormat.WanT5Encoder:
                raise ValueError("The Wan T5 Encoder must resolve to a standalone Wan T5 encoder model.")
            tokenizer = self.wan_t5_encoder_model.model_copy(update={"submodel_type": SubModelType.Tokenizer})
            text_encoder = self.wan_t5_encoder_model.model_copy(update={"submodel_type": SubModelType.TextEncoder})
        elif main_is_diffusers:
            tokenizer = self.model.model_copy(update={"submodel_type": SubModelType.Tokenizer})
            text_encoder = self.model.model_copy(update={"submodel_type": SubModelType.TextEncoder})
        elif self.component_source is not None:
            self._validate_component_source_format(context, self.component_source)
            tokenizer = self.component_source.model_copy(update={"submodel_type": SubModelType.Tokenizer})
            text_encoder = self.component_source.model_copy(update={"submodel_type": SubModelType.TextEncoder})
        else:
            raise ValueError(
                "No source for Wan T5 encoder. "
                "Either set 'Wan T5 Encoder' to a standalone UMT5-XXL encoder, "
                "or set 'Component Source' to a Diffusers Wan main model."
            )

        return WanModelLoaderOutput(
            transformer=WanTransformerField(

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Set 'Wan T5 Encoder' to a standalone Wan/UMT5-XXL T5 encoder model registered with type and format WanT5Encoder
  2. Re-import the T5 encoder so it is registered with the correct WanT5Encoder type and format
  3. Leave the field unset and instead supply a Diffusers main model or Component Source so the tokenizer/text-encoder come from there

Example fix

// before
wan_t5_encoder_model=ModelIdentifierField(key='some-main-model', submodel_type=SubModelType.TextEncoder)
// after
wan_t5_encoder_model=ModelIdentifierField(key='wan-umt5-xxl-encoder', submodel_type=SubModelType.TextEncoder)
Defensive patterns

Strategy: validation

Validate before calling

if invocation.wan_t5_encoder_model is not None:
    cfg = context.models.get_config(invocation.wan_t5_encoder_model)
    if cfg.type != ModelType.WanT5Encoder or cfg.format != ModelFormat.WanT5Encoder:
        raise ValueError('wan_t5_encoder_model must be a standalone Wan T5 encoder')

Type guard

def is_wan_t5_encoder(field, ctx) -> bool:
    cfg = ctx.models.get_config(field)
    return cfg.base == BaseModelType.Wan and cfg.type == ModelType.WanT5Encoder and cfg.format == ModelFormat.WanT5Encoder

Try / catch

try:
    output = invocation.invoke(context)
except ValueError as e:
    if 'must resolve to a standalone Wan T5 encoder model' in str(e):
        invocation.wan_t5_encoder_model = pick_umt5_xxl_encoder()

Prevention

When it happens

Trigger: invoke() with wan_t5_encoder_model set to a model whose config type is not WanT5Encoder or whose format is not WanT5Encoder — e.g. pointing it at a Main model, a VAE, or a T5 encoder registered with a generic format.

Common situations: Selecting the wrong model in the T5 encoder dropdown; an older import registered the UMT5-XXL encoder with a legacy type/format; pointing the field at a full Wan main Diffusers folder instead of the standalone encoder model.

Related errors


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