invoke-ai/InvokeAI · error · NotImplementedError

No subclass of LoadedModel is registered for base={config.ba

Error message

No subclass of LoadedModel is registered for base={config.base}, type={config.type}, format={config.format}

What it means

The model loader registry maps (base, type, format) triples to loader classes. get_implementation looks up the exact key and then a wildcard-Any-base key, and raises NotImplementedError when neither is registered — i.e., no loader supports that combination of model base, type, and format.

Source

Thrown at invokeai/backend/model_manager/load/model_loader_registry.py:92

                raise Exception(
                    f"{subclass.__name__} is trying to register as a loader for {base}/{type}/{format}, but this type of model has already been registered by {cls._registry[key].__name__}"
                )
            cls._registry[key] = subclass
            return subclass

        return decorator

    @classmethod
    def get_implementation(
        cls, config: AnyModelConfig, submodel_type: Optional[SubModelType]
    ) -> Tuple[Type[ModelLoaderBase], Config_Base, Optional[SubModelType]]:
        """Get subclass of ModelLoaderBase registered to handle base and type."""

        key1 = cls._to_registry_key(config.base, config.type, config.format)  # for a specific base type
        key2 = cls._to_registry_key(BaseModelType.Any, config.type, config.format)  # with wildcard Any
        implementation = cls._registry.get(key1) or cls._registry.get(key2)
        if not implementation:
            raise NotImplementedError(
                f"No subclass of LoadedModel is registered for base={config.base}, type={config.type}, format={config.format}"
            )
        return implementation, config, submodel_type

    @staticmethod
    def _to_registry_key(base: BaseModelType, type: ModelType, format: ModelFormat) -> str:
        return "-".join([base.value, type.value, format.value])

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Upgrade InvokeAI to a version whose loader registry includes the required (base, type, format) combination.
  2. Check that the model was identified with the intended format; re-convert/re-import it in a supported format (e.g. diffusers instead of a custom single-file format).
  3. If you are a developer, register a ModelLoaderBase subclass for the key via ModelLoaderRegistry.register.

Example fix

// before: loading an unsupported format directly
impl, cfg, sub = ModelLoaderRegistry.get_implementation(config, None)
// after: guard the combination first
from invokeai.backend.model_manager.load.model_loader_registry import ModelLoaderRegistry
if not (ModelLoaderRegistry._registry.get(ModelLoaderRegistry._to_registry_key(config.base, config.type, config.format)) or ModelLoaderRegistry._registry.get(ModelLoaderRegistry._to_registry_key(BaseModelType.Any, config.type, config.format))):
    raise RuntimeError(f"No loader for {config.base}/{config.type}/{config.format}; upgrade InvokeAI or convert the model")
impl, cfg, sub = ModelLoaderRegistry.get_implementation(config, None)
Defensive patterns

Strategy: type-guard

Validate before calling

from invokeai.backend.model_manager.load.model_loader_registry import ModelLoaderRegistry
key1 = ModelLoaderRegistry._to_registry_key(config.base, config.type, config.format)
key2 = ModelLoaderRegistry._to_registry_key(BaseModelType.Any, config.type, config.format)
if not (ModelLoaderRegistry._registry.get(key1) or ModelLoaderRegistry._registry.get(key2)):
    raise RuntimeError(f"No loader registered for {config.base}/{config.type}/{config.format}")

Type guard

def loader_exists(config) -> bool:
    return (ModelLoaderRegistry._registry.get(ModelLoaderRegistry._to_registry_key(config.base, config.type, config.format))
            or ModelLoaderRegistry._registry.get(ModelLoaderRegistry._to_registry_key(BaseModelType.Any, config.type, config.format))) is not None

Try / catch

try:
    impl, cfg, sub = ModelLoaderRegistry.get_implementation(config, submodel_type)
except NotImplementedError as e:
    raise RuntimeError(f"This InvokeAI build cannot load {config.type}/{config.format}; upgrade or convert the model") from e

Prevention

When it happens

Trigger: Calling ModelLoaderRegistry.get_implementation(config, submodel_type) with a config whose (base, type, format) tuple has no registered loader, e.g. a newly added ModelType/ModelFormat or a custom config.

Common situations: Running a new InvokeAI version's model database with an older/patched install lacking the loader; custom or experimental model formats (e.g. new quantized formats) before a loader was implemented.

Related errors


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