invoke-ai/InvokeAI · error · ValueError
Unsupported submodel type: {submodel_type}
Error message
Unsupported submodel type: {submodel_type} What it means
The SDNQ diffusers FLUX loader's component dispatch handles a fixed set of submodel types (Transformer, Tokenizer, Tokenizer2, TextEncoder, TextEncoder2, VAE) via match/case; any other SubModelType hits the wildcard case and raises ValueError, since that component cannot come from this model.
Source
Thrown at invokeai/backend/model_manager/load/model_loaders/flux.py:1623
# These branches build their modules by hand (`init_empty_weights` + `load_state_dict`)
# rather than through `from_pretrained`, so they arrive in training mode — `put_in_eval_mode`
# in `load_default._load_and_cache` is what puts every loaded model into inference mode.
match submodel_type:
case SubModelType.Transformer:
return self._load_sdnq_transformer(submodel_path, config)
case SubModelType.TextEncoder:
return self._load_text_encoder(submodel_path)
case SubModelType.TextEncoder2:
return self._load_text_encoder_2(submodel_path)
case SubModelType.Tokenizer:
return CLIPTokenizer.from_pretrained(submodel_path, local_files_only=True)
case SubModelType.Tokenizer2:
return T5Tokenizer.from_pretrained(submodel_path, max_length=512, local_files_only=True)
case SubModelType.VAE:
return self._load_vae(submodel_path)
case _:
raise ValueError(f"Unsupported submodel type: {submodel_type}")
def _load_sdnq_transformer_checkpoint(self, config: Main_SDNQ_FLUX_Config) -> AnyModel:
"""Load SDNQ transformer from single-file checkpoint."""
model_path = Path(config.path)
with accelerate.init_empty_weights():
model = Flux(get_flux_transformers_params(config.variant))
sd = sdnq_sd_loader(model_path, compute_dtype=torch.bfloat16)
# Handle ComfyUI bundle format
if "model.diffusion_model.double_blocks.0.img_attn.norm.key_norm.scale" in sd:
sd = convert_bundle_to_flux_transformer_checkpoint(sd)
model.load_state_dict(sd, assign=True)
return model
def _load_sdnq_transformer(self, transformer_path: Path, config: Main_SDNQ_Diffusers_FLUX_Config) -> AnyModel:View on GitHub (pinned to 0b6a024f2f)
Solutions
- Only request Transformer, Tokenizer(2), TextEncoder(2), or VAE submodels from an SDNQ FLUX diffusers model.
- Load other components (controlnets, schedulers, etc.) from their separately registered models.
- Filter your submodel list against the supported set before calling the loader.
Example fix
// before
for sub in SubModelType:
loader.load_model(sdnq_config, sub) # raises on unsupported types
// after
supported = {SubModelType.Transformer, SubModelType.Tokenizer, SubModelType.Tokenizer2, SubModelType.TextEncoder, SubModelType.TextEncoder2, SubModelType.VAE}
for sub in supported:
loader.load_model(sdnq_config, sub) Defensive patterns
Strategy: validation
Validate before calling
supported = {SubModelType.Transformer, SubModelType.Tokenizer, SubModelType.Tokenizer2, SubModelType.TextEncoder, SubModelType.TextEncoder2, SubModelType.VAE}
if submodel_type not in supported:
raise ValueError(f"{submodel_type} is not a component of an SDNQ FLUX diffusers model") Type guard
def is_sdnq_component(submodel_type: SubModelType) -> bool:
return submodel_type in {SubModelType.Transformer, SubModelType.Tokenizer, SubModelType.Tokenizer2, SubModelType.TextEncoder, SubModelType.TextEncoder2, SubModelType.VAE} Try / catch
try:
model = loader.load_model(config, submodel_type)
except ValueError as e:
if "Unsupported submodel type" in str(e):
raise RuntimeError(f"Load {submodel_type} from its separately registered model") from e
raise Prevention
- Only iterate over component submodels when loading pipeline pieces
- Load controlnets/schedulers/other models from their own records
- Consult the loader's match/case for the exact supported set
When it happens
Trigger: Requesting a submodel type outside the handled set (e.g. SubModelType.ControlNet, Scheduler, or another non-component type) while loading a Main_SDNQ_Diffusers_FLUX_Config.
Common situations: Generic pipeline-loading loops that try every SubModelType against every model; passing the wrong enum value from custom orchestration code.
Related errors
- Only Transformer submodels are supported for checkpoint form
- The selected FLUX model does not ship its own {', '.join(mis
- transformer is SDNQ-quantized; use Main_SDNQ_Diffusers_FLUX_
- Expected Main_SDNQ_Diffusers_FLUX_Config, got {type(config).
- A submodel type must be provided when loading main pipelines
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/2a67994ca474e0dc.
Report an issue: GitHub.