invoke-ai/InvokeAI · error · NotImplementedError

CheckpointConfigBase is not implemented for the Krea-2 diffu

Error message

CheckpointConfigBase is not implemented for the Krea-2 diffusers loader.

What it means

The Krea-2 loader only supports diffusers-format directories, not legacy single-file checkpoint configs (Checkpoint_Config_Base subclasses, i.e. .safetensors/.ckpt singles). If handed such a config, it raises NotImplementedError because there is no single-file weight-conversion path implemented for this loader.

Source

Thrown at invokeai/backend/model_manager/load/model_loaders/krea2.py:264


@ModelLoaderRegistry.register(base=BaseModelType.Krea2, type=ModelType.Main, format=ModelFormat.Diffusers)
class Krea2DiffusersModel(GenericDiffusersLoader):
    """Class to load Krea-2 main models (Krea-2-Turbo) in diffusers format.

    Loads every submodel (transformer, vae, text_encoder, tokenizer, scheduler) from the diffusers
    pipeline folder via the class names declared in model_index.json. The transformer resolves to
    diffusers' ``Krea2Transformer2DModel`` (only available in diffusers main / >=0.39); the VAE to
    ``AutoencoderKLQwenImage`` and the text encoder to ``Qwen3VLModel``.
    """

    def _load_model(
        self,
        config: AnyModelConfig,
        submodel_type: Optional[SubModelType] = None,
    ) -> AnyModel:
        if isinstance(config, Checkpoint_Config_Base):
            raise NotImplementedError("CheckpointConfigBase is not implemented for the Krea-2 diffusers loader.")

        if submodel_type is None:
            raise Exception("A submodel type must be provided when loading main pipelines.")

        model_path = Path(config.path)

        # model_index.json declares the tokenizer as the slow `Qwen2Tokenizer`, which requires
        # vocab.json/merges.txt. Krea-2 ships only a fast tokenizer.json, so load via AutoTokenizer
        # (which resolves to Qwen2TokenizerFast from tokenizer.json).
        #
        # Krea-2's tokenizer_config.json stores `extra_special_tokens` as a list (the special tokens
        # are already baked into tokenizer.json as added tokens). Newer transformers expects a dict and
        # crashes on the list, so override it with an empty dict — the special tokens are still
        # recognized from tokenizer.json.
        if submodel_type is SubModelType.Tokenizer:
            return AutoTokenizer.from_pretrained(
                model_path / submodel_type.value, local_files_only=True, extra_special_tokens={}
            )

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Convert the single-file checkpoint to a diffusers directory layout and re-register the model with the diffusers config type.
  2. Download the official diffusers-format repository instead of the single-file checkpoint.
  3. Use a different loader/legacy path that supports Checkpoint configs for this model family.
  4. Implement a single-file conversion path in the loader if supporting checkpoint configs is required.

Example fix

// before
loader._load_model(Checkpoint_Config_File(path="krea2.safetensors"), SubModelType.Transformer)
// after
cfg = Main_Diffusers_Krea2_Config(path="krea2_diffusers/")
loader._load_model(cfg, SubModelType.Transformer)
Defensive patterns

Strategy: type-guard

Validate before calling

from invokeai.backend.model_manager.configs.base import Checkpoint_Config_Base
if isinstance(config, Checkpoint_Config_Base):
    raise TypeError("use a diffusers-format config for the Krea-2 loader")

Type guard

def is_diffusers_config(config) -> bool:
    from invokeai.backend.model_manager.configs.base import Checkpoint_Config_Base
    return not isinstance(config, Checkpoint_Config_Base)

Try / catch

try:
    model = loader._load_model(config, submodel_type)
except NotImplementedError as e:
    if "Krea-2 diffusers loader" in str(e):
        config = convert_checkpoint_to_diffusers_config(config)
        model = loader._load_model(config, submodel_type)
    else:
        raise

Prevention

When it happens

Trigger: Calling _load_model (or registering/loading a model through the manager) with a config whose type is a Checkpoint_Config_Base subclass while it dispatches to the Krea-2 loader.

Common situations: Users downloading a single-file Krea-2 checkpoint (.safetensors) instead of the diffusers repo; legacy model records stored as checkpoint format then routed to the new diffusers loader.

Related errors


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