{"record":{"id":"ea8ad40774cb9254","repo":"invoke-ai/InvokeAI","slug":"unsupported-control-lllite-type-type-control-lll","errorCode":null,"errorMessage":"Unsupported control_lllite type: {type(control_lllite)}","messagePattern":"Unsupported control_lllite type: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/app/invocations/anima_denoise.py","lineNumber":292,"sourceCode":"\n        The model cache returns ONE shared AnimaControlNetLLLite instance per\n        model key, so two adapters using the same model in one run would share\n        cond/multiplier state and clobber each other's bindings.\n\n        The list is sorted by model key: the frontend fans adapters into a\n        `collect` node whose output order follows graph node ids (random\n        UUIDs), not user intent, and composition is weakly order-sensitive\n        (each adapter's delta sees the perturbations of adapters applied after\n        it). Sorting makes the cascade deterministic and reproducible.\n        \"\"\"\n        if control_lllite is None:\n            lllite_fields: list[AnimaLLLiteField] = []\n        elif isinstance(control_lllite, AnimaLLLiteField):\n            lllite_fields = [control_lllite]\n        elif isinstance(control_lllite, list):\n            lllite_fields = control_lllite\n        else:\n            raise ValueError(f\"Unsupported control_lllite type: {type(control_lllite)}\")\n\n        seen_keys: set[str] = set()\n        for lllite_field in lllite_fields:\n            key = lllite_field.control_model.key\n            if key in seen_keys:\n                raise ValueError(\n                    f\"The Anima ControlNet-LLLite model '{lllite_field.control_model.name}' is used by more than \"\n                    \"one control input. Each LLLite model can only be applied once per generation — remove the \"\n                    \"duplicate, or select a different model for it.\"\n                )\n            seen_keys.add(key)\n        return sorted(lllite_fields, key=lambda f: f.control_model.key)\n\n    def _build_lllite_cond_image(\n        self,\n        context: InvocationContext,\n        lllite_field: AnimaLLLiteField,\n        lllite_model: AnimaControlNetLLLite,","sourceCodeStart":274,"sourceCodeEnd":310,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/invocations/anima_denoise.py#L274-L310","documentation":"_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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Ensure the control_lllite input is an AnimaLLLiteField (or a list of them) from the LLLite loader node","Fix the graph wiring so the ControlNet-LLLite node output feeds the denoise control input","Update custom node packs to versions emitting AnimaLLLiteField"],"exampleFix":"// before\nlllite = \"my_lllite_model_key\"  # wrong type\n// after\nlllite = AnimaLLLiteField(control_model=model_field, image_name=\"img\", mask_name=None)","handlingStrategy":"type-guard","validationCode":"if not isinstance(control_lllite, (AnimaLLLiteField, list, type(None))):\n    raise TypeError('control_lllite must be AnimaLLLiteField or list[AnimaLLLiteField]')","typeGuard":"def is_lllite_field(x) -> bool:\n    return isinstance(x, AnimaLLLiteField)\n\ndef normalize(x):\n    if x is None: return []\n    if is_lllite_field(x): return [x]\n    if isinstance(x, list) and all(is_lllite_field(i) for i in x): return x\n    raise TypeError('unsupported control_lllite type')","tryCatchPattern":"try:\n    fields = _normalize_control_lllite(control_lllite)\nexcept ValueError as e:\n    raise NodeInputError(f'Invalid control_lllite input: {e}') from e","preventionTips":["Always wire the LLLite loader node's typed output into control_lllite","Validate graph field types before invoking diffusion","Keep custom node packs updated to emit AnimaLLLiteField"],"tags":["python","type-error","controlnet","anima","internal-validation"],"backgroundTag":"unsupported-argument-type","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}