invoke-ai/InvokeAI · error · ValueError

No source for Wan T5 encoder. Either set 'Wan T5 Encoder' to

Error message

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.

What it means

The loader resolves the Wan tokenizer and text encoder from, in order: the standalone 'Wan T5 Encoder' override, the main model if Diffusers, or the 'Component Source'. If all three are unavailable (non-Diffusers main model, no T5 override, no component source), invoke() raises this ValueError because text encoding is impossible.

Source

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

                "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(
                transformer=transformer,
                transformer_low_noise=transformer_low_noise,
                boundary_ratio=boundary_ratio,
            ),
            wan_t5_encoder=WanT5EncoderField(tokenizer=tokenizer, text_encoder=text_encoder),
            vae=VAEField(vae=vae),
        )

    @staticmethod
    def _validate_main_config(config: object, label: str) -> None:
        if getattr(config, "base", None) != BaseModelType.Wan or getattr(config, "type", None) != ModelType.Main:

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Set 'Wan T5 Encoder' to a standalone UMT5-XXL encoder model
  2. Set 'Component Source' to a Diffusers Wan main model to source tokenizer and text encoder
  3. Switch the main model to a Diffusers folder containing the text-encoder components
  4. Install/scan the UMT5-XXL encoder into the Model Manager if it is missing

Example fix

// before
WanModelLoaderInvocation(model=gguf_model)
// after
WanModelLoaderInvocation(model=gguf_model, wan_t5_encoder_model=ModelIdentifierField(key='umt5-xxl', submodel_type=SubModelType.TextEncoder))
Defensive patterns

Strategy: validation

Validate before calling

cfg = context.models.get_config(invocation.model)
non_diffusers = cfg.format != ModelFormat.Diffusers
if non_diffusers and invocation.wan_t5_encoder_model is None and invocation.component_source is None:
    raise ValueError('Need a Wan T5 Encoder or Diffusers Component Source for tokenizer/text-encoder')

Type guard

def has_text_encoder_source(inv) -> bool:
    cfg = get_config(inv.model)
    return cfg.format == ModelFormat.Diffusers or inv.wan_t5_encoder_model is not None or inv.component_source is not None

Try / catch

try:
    output = invocation.invoke(context)
except ValueError as e:
    if 'No source for Wan T5 encoder' in str(e):
        invocation.wan_t5_encoder_model = install_or_pick_umt5_xxl()

Prevention

When it happens

Trigger: invoke() with a GGUF or single-file checkpoint main model, wan_t5_encoder_model unset, and component_source unset.

Common situations: Using a GGUF Wan transformer with no standalone UMT5-XXL encoder installed; a workflow copied from someone else missing the T5 encoder field; forgetting that single-file checkpoints don't include tokenizer/text-encoder components.

Related errors


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