invoke-ai/InvokeAI · error · NotAMatchError

state dict does not look like an Anima ControlNet-LLLite mod

Error message

state dict does not look like an Anima ControlNet-LLLite model

What it means

_validate_looks_like_anima_lllite is a guard called from from_model_on_disk that requires the state dict to contain the characteristic Anima ControlNet-LLLite keys (checked via _has_anima_lllite_keys). When the keys are absent entirely, the prober concludes the file is not an Anima LLLite model and raises NotAMatchError so other config types can try.

Source

Thrown at invokeai/backend/model_manager/configs/controlnet.py:342

        return cls(**args)

    @classmethod
    def _get_cond_in_channels(cls, mod: ModelOnDisk) -> int:
        # Mirrors AnimaControlNetLLLite.from_state_dict: prefer the saved `lllite.*` hyperparam, falling back to
        # the conv1 weight shape (ch_half, cond_in_channels, 4, 4).
        meta_value = mod.metadata().get("lllite.cond_in_channels")
        if meta_value is not None:
            return int(meta_value)
        conv1_weight = mod.load_state_dict().get("lllite_conditioning1.conv1.weight")
        if conv1_weight is None:
            raise NotAMatchError("state dict has Anima ControlNet-LLLite keys but no lllite_conditioning1.conv1.weight")
        return int(conv1_weight.shape[1])

    @classmethod
    def _validate_looks_like_anima_lllite(cls, mod: ModelOnDisk) -> None:
        state_dict = mod.load_state_dict()
        if not _has_anima_lllite_keys(state_dict):
            raise NotAMatchError("state dict does not look like an Anima ControlNet-LLLite model")

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Verify the file is genuinely an Anima ControlNet-LLLite checkpoint (check for lllite_conditioning1.* keys)
  2. Use the correct config type / import route for a standard ControlNet model instead
  3. Re-download from the official Anima LLLite release if the file is corrupted or renamed
  4. Exclude the file from the InvokeAI models directory/scan if it belongs to another tool

Example fix

// before
# standard SD controlnet.safetensors registered as anima lllite
invokeai-Web import ./controlnet.safetensors
// after
# import standard controlnets via the controlnet config family
invokeai-web import ./controlnet.safetensors  # matched as ControlNet, not Anima LLLite
Defensive patterns

Strategy: validation

Validate before calling

from safetensors import safe_open

def looks_like_anima_lllite(path) -> bool:
    with safe_open(path, framework="pt") as f:
        return any(k.startswith("lllite_conditioning") for k in f.keys())

Try / catch

try:
    config = probe(mod)
except NotAMatchError as e:
    if "does not look like an Anima ControlNet-LLLite" in str(e):
        config = probe_as_standard_controlnet(mod)  # try other config family
    else:
        raise

Prevention

When it happens

Trigger: from_model_on_disk probing a ControlNet checkpoint that lacks any Anima LLLite key pattern — a standard SD ControlNet, a kohya LLLite with different naming, or an unrelated safetensors file placed in the models directory.

Common situations: Pointing InvokeAI at a generic ControlNet .safetensors expecting LLLite support; downloading a file for a different backend; auto-scan picking up unrelated weight files in a watched folder.

Related errors


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