invoke-ai/InvokeAI · error · ValueError

Only Transformer submodels are currently supported. Received

Error message

Only Transformer submodels are currently supported. Received: {submodel_type.value if submodel_type else 'None'}

What it means

The Qwen Image checkpoint loader's _load_model only implements a SubModelType.Transformer case; any other submodel type (vae, text_encoder, tokenizer, or None) falls through the match statement and raises this ValueError. The error message includes the actual submodel type received.

Source

Thrown at invokeai/backend/model_manager/load/model_loaders/qwen_image.py:198


@ModelLoaderRegistry.register(base=BaseModelType.QwenImage, type=ModelType.Main, format=ModelFormat.GGUFQuantized)
class QwenImageGGUFCheckpointModel(ModelLoader):
    """Class to load GGUF-quantized Qwen Image Edit transformer models."""

    def _load_model(
        self,
        config: AnyModelConfig,
        submodel_type: Optional[SubModelType] = None,
    ) -> AnyModel:
        if not isinstance(config, Checkpoint_Config_Base):
            raise ValueError("Only CheckpointConfigBase models are currently supported here.")

        match submodel_type:
            case SubModelType.Transformer:
                return self._load_from_singlefile(config)

        raise ValueError(
            f"Only Transformer submodels are currently supported. Received: {submodel_type.value if submodel_type else 'None'}"
        )

    def _load_from_singlefile(self, config: AnyModelConfig) -> AnyModel:
        from diffusers import QwenImageTransformer2DModel

        if not isinstance(config, Main_GGUF_QwenImage_Config):
            raise TypeError(f"Expected Main_GGUF_QwenImage_Config, got {type(config).__name__}.")
        model_path = Path(config.path)

        target_device = TorchDevice.choose_torch_device()
        compute_dtype = TorchDevice.choose_bfloat16_safe_dtype(target_device)

        sd = gguf_sd_loader(model_path, compute_dtype=compute_dtype)
        sd = _strip_comfyui_prefix(sd)

        is_edit = getattr(config, "variant", None) == QwenImageVariantType.Edit
        model_config = _build_qwen_image_transformer_config(sd, is_edit=is_edit)

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Load only the transformer from single-file checkpoints; load VAE/text-encoder/tokenizer components from separate models.
  2. If you need full pipeline loading from one checkpoint, use a different loader or extract components into separate model entries.
  3. Ensure the model is registered with ModelType.Main / the right base so the manager does not request unsupported submodels.

Example fix

// before
vae = loader._load_model(config, SubModelType.VAE)  # unsupported
// after
transformer = loader._load_model(config, SubModelType.Transformer)  # only supported case
vae = vae_loader._load_model(vae_config, SubModelType.VAE)
Defensive patterns

Strategy: validation

Validate before calling

SUPPORTED = {SubModelType.Transformer}
if submodel_type not in SUPPORTED:
    raise ValueError(f"Qwen Image single-file loader supports only Transformer, got {submodel_type}")

Type guard

def is_transformer_submodel(sub: SubModelType | None) -> bool:
    return sub == SubModelType.Transformer

Try / catch

try:
    model = loader._load_model(config, submodel_type)
except ValueError as e:
    if "Only Transformer submodels" in str(e):
        logger.warning("Use dedicated loaders for VAE/text-encoder components")
    else:
        raise

Prevention

When it happens

Trigger: Calling the single-file checkpoint loader's _load_model with submodel_type set to anything other than SubModelType.Transformer (e.g. SubModelType.VAE or None).

Common situations: A main-checkpoint model registered with a base model type that makes the manager request VAE/text-encoder submodels from this loader; custom code iterating all submodels of a checkpoint pipeline.

Related errors


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