invoke-ai/InvokeAI · error · ValueError

Unsupported control_lllite type: {type(control_lllite)}

Error message

Unsupported control_lllite type: {type(control_lllite)}

What it means

_normalize_control_lllite accepts control_lllite as None, a single AnimaLLLiteField, or a list of them; anything else (e.g. a dict, string, or wrong field type) raises ValueError with the offending Python type. It is an internal input-shape contract in the Anima denoise invocation.

Source

Thrown at invokeai/app/invocations/anima_denoise.py:292

        The model cache returns ONE shared AnimaControlNetLLLite instance per
        model key, so two adapters using the same model in one run would share
        cond/multiplier state and clobber each other's bindings.

        The list is sorted by model key: the frontend fans adapters into a
        `collect` node whose output order follows graph node ids (random
        UUIDs), not user intent, and composition is weakly order-sensitive
        (each adapter's delta sees the perturbations of adapters applied after
        it). Sorting makes the cascade deterministic and reproducible.
        """
        if control_lllite is None:
            lllite_fields: list[AnimaLLLiteField] = []
        elif isinstance(control_lllite, AnimaLLLiteField):
            lllite_fields = [control_lllite]
        elif isinstance(control_lllite, list):
            lllite_fields = control_lllite
        else:
            raise ValueError(f"Unsupported control_lllite type: {type(control_lllite)}")

        seen_keys: set[str] = set()
        for lllite_field in lllite_fields:
            key = lllite_field.control_model.key
            if key in seen_keys:
                raise ValueError(
                    f"The Anima ControlNet-LLLite model '{lllite_field.control_model.name}' is used by more than "
                    "one control input. Each LLLite model can only be applied once per generation — remove the "
                    "duplicate, or select a different model for it."
                )
            seen_keys.add(key)
        return sorted(lllite_fields, key=lambda f: f.control_model.key)

    def _build_lllite_cond_image(
        self,
        context: InvocationContext,
        lllite_field: AnimaLLLiteField,
        lllite_model: AnimaControlNetLLLite,

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Ensure the control_lllite input is an AnimaLLLiteField (or a list of them) from the LLLite loader node
  2. Fix the graph wiring so the ControlNet-LLLite node output feeds the denoise control input
  3. Update custom node packs to versions emitting AnimaLLLiteField

Example fix

// before
lllite = "my_lllite_model_key"  # wrong type
// after
lllite = AnimaLLLiteField(control_model=model_field, image_name="img", mask_name=None)
Defensive patterns

Strategy: type-guard

Validate before calling

if not isinstance(control_lllite, (AnimaLLLiteField, list, type(None))):
    raise TypeError('control_lllite must be AnimaLLLiteField or list[AnimaLLLiteField]')

Type guard

def is_lllite_field(x) -> bool:
    return isinstance(x, AnimaLLLiteField)

def normalize(x):
    if x is None: return []
    if is_lllite_field(x): return [x]
    if isinstance(x, list) and all(is_lllite_field(i) for i in x): return x
    raise TypeError('unsupported control_lllite type')

Try / catch

try:
    fields = _normalize_control_lllite(control_lllite)
except ValueError as e:
    raise NodeInputError(f'Invalid control_lllite input: {e}') from e

Prevention

When it happens

Trigger: Calling _normalize_control_lllite (via _run_diffusion) with a control_lllite value that is not None, not an AnimaLLLiteField, and not a list — typically a malformed graph field or wrong node output wired into the control_lllite input.

Common situations: Custom node code passing a raw model identifier instead of an AnimaLLLiteField; graph JSON hand-edited so the field has an unexpected shape; API version mismatch between node pack and core.

Related errors


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