invoke-ai/InvokeAI · error · ValueError

No Qwen3 Encoder source provided. Either set 'Qwen3 Encoder'

Error message

No Qwen3 Encoder source provided. Either set 'Qwen3 Encoder' to a standalone model, or set 'Qwen3 Source' to a Diffusers Z-Image model.

What it means

ZImageModelLoader similarly requires a Qwen3 text encoder source: a standalone 'Qwen3 Encoder' model, a Diffusers Z-Image 'Qwen3 Source' to copy the TextEncoder submodel from, or a self-contained SDNQ model. With all three absent, invoke() raises this ValueError before returning ZImageModelLoaderOutput.

Source

Thrown at invokeai/app/invocations/z_image_model_loader.py:136

                "or set 'Qwen3 Source' to a Diffusers Z-Image model."
            )

        # Determine Qwen3 Encoder source
        if self.qwen3_encoder_model is not None:
            # Use standalone Qwen3 Encoder
            qwen3_tokenizer = self.qwen3_encoder_model.model_copy(update={"submodel_type": SubModelType.Tokenizer})
            qwen3_encoder = self.qwen3_encoder_model.model_copy(update={"submodel_type": SubModelType.TextEncoder})
        elif self.qwen3_source_model is not None:
            # Extract from Diffusers Z-Image model
            self._validate_diffusers_format(context, self.qwen3_source_model, "Qwen3 Source")
            qwen3_tokenizer = self.qwen3_source_model.model_copy(update={"submodel_type": SubModelType.Tokenizer})
            qwen3_encoder = self.qwen3_source_model.model_copy(update={"submodel_type": SubModelType.TextEncoder})
        elif self_contained_source is not None:
            # Extract from the self-contained SDNQ main model
            qwen3_tokenizer = self_contained_source.model_copy(update={"submodel_type": SubModelType.Tokenizer})
            qwen3_encoder = self_contained_source.model_copy(update={"submodel_type": SubModelType.TextEncoder})
        else:
            raise ValueError(
                "No Qwen3 Encoder source provided. Either set 'Qwen3 Encoder' to a standalone model, "
                "or set 'Qwen3 Source' to a Diffusers Z-Image model."
            )

        return ZImageModelLoaderOutput(
            transformer=TransformerField(transformer=transformer, loras=[]),
            qwen3_encoder=Qwen3EncoderField(tokenizer=qwen3_tokenizer, text_encoder=qwen3_encoder),
            vae=VAEField(vae=vae),
        )

    def _get_self_contained_source(self, context: InvocationContext) -> Optional[ModelIdentifierField]:
        """Return the main model as a submodel source when it is a self-contained pipeline that
        ships its own VAE and Qwen3 submodels.

        A truthy ``submodels`` dict is not sufficient: Main_SDNQ_Diffusers_ZImage_Config builds
        whatever submodels it recognizes from model_index.json, so a partial (or partially
        recognized) pipeline can expose e.g. only the transformer. The loader then loads the VAE /
        Qwen3 encoder / tokenizer from fixed ``vae`` / ``text_encoder`` / ``tokenizer`` subfolders, so

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Set 'Qwen3 Encoder' to a standalone Qwen3 text-encoder model.
  2. Or set 'Qwen3 Source' to a Diffusers Z-Image model and let the loader derive the encoder (and tokenizer).
  3. Or supply a self-contained SDNQ main model.
  4. Re-install the missing Qwen3 encoder if it was deleted from the Model Manager.

Example fix

// before
loader = ZImageModelLoaderInvocation(transformer=..., qwen3_encoder_model=None, qwen3_source_model=None)
// after
loader = ZImageModelLoaderInvocation(transformer=..., qwen3_source_model=ModelField(id='diffusers-z-image'))
Defensive patterns

Strategy: validation

Validate before calling

if loader.qwen3_encoder_model is None and loader.qwen3_source_model is None and loader.main_model_is_sdnq is not True:
    raise ValueError("Provide a standalone Qwen3 Encoder, a Diffusers Z-Image Qwen3 Source, or an SDNQ main model")

Try / catch

try:
    out = z_image_model_loader.invoke(context)
except ValueError as e:
    if "No Qwen3 Encoder source" in str(e):
        context.logger.error("Set 'Qwen3 Encoder' or 'Qwen3 Source' before invoking the loader.")
    else:
        raise

Prevention

When it happens

Trigger: invoke() reaches encoder resolution with qwen3_encoder_model None, qwen3_source_model None, and self_contained_source None.

Common situations: Graph built from a transformer-only checkpoint without any text-encoder assets; SDNQ/Diffusers source model removed from the Model Manager after the workflow was authored; user assumed the main Z-Image model bundles the encoder.

Related errors


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