{"record":{"id":"a01752bb6216d3a8","repo":"invoke-ai/InvokeAI","slug":"transformer-low-noise-must-be-a-single-file-wa","errorCode":null,"errorMessage":"'Transformer (Low Noise)' must be a single-file Wan model (GGUF or checkpoint). '{low_config.name}' is in {low_config.format.value} format.","messagePattern":"'Transformer \\(Low Noise\\)' must be a single-file Wan model \\(GGUF or checkpoint\\)\\. '(.+?)' is in (.+?) format\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/app/invocations/wan_model_loader.py","lineNumber":176,"sourceCode":"\n            if self.transformer_low_noise_model is not None and main_variant == WanVariantType.TI2V_5B:\n                # The field's own docs promise this input is ignored for the\n                # single-expert TI2V-5B — e.g. a leftover wire from an A14B session.\n                context.logger.warning(\"'Transformer (Low Noise)' is ignored for the single-expert TI2V-5B variant.\")\n\n            if self.transformer_low_noise_model is not None and main_variant != WanVariantType.TI2V_5B:\n                if self.transformer_low_noise_model.key == self.model.key:\n                    raise ValueError(\n                        \"The same model is wired to both 'Transformer' and 'Transformer (Low Noise)'. \"\n                        \"A Wan A14B expert pair needs two different single-file models.\"\n                    )\n                low_config = context.models.get_config(self.transformer_low_noise_model)\n                self._validate_main_config(low_config, \"Transformer (Low Noise)\")\n                # The two experts don't have to share a format — both single-file\n                # loaders produce a plain WanTransformer3DModel, so a GGUF high-noise\n                # expert pairs fine with a safetensors low-noise one.\n                if low_config.format not in _SINGLE_FILE_FORMATS:\n                    raise ValueError(\n                        f\"'Transformer (Low Noise)' must be a single-file Wan model (GGUF or checkpoint). \"\n                        f\"'{low_config.name}' is in {low_config.format.value} format.\"\n                    )\n                low_id = self.transformer_low_noise_model.model_copy(update={\"submodel_type\": SubModelType.Transformer})\n                low_expert = getattr(low_config, \"expert\", \"none\")\n\n                if getattr(low_config, \"variant\", None) != main_variant:\n                    low_variant = getattr(low_config, \"variant\", None)\n                    raise ValueError(\n                        \"The high-noise and low-noise models must use the same Wan variant, but \"\n                        f\"'{main_config.name}' is {main_variant.value} and '{low_config.name}' is \"\n                        f\"{getattr(low_variant, 'value', low_variant)}.\"\n                    )\n\n                # The expert tag is a filename heuristic, so 'none' (untagged) is common on\n                # community finetunes. The wiring itself is explicit user intent — main slot\n                # = high, low-noise slot = low — so an untagged file is taken at its wired\n                # position (or inferred as the complement of its tagged partner). Only a","sourceCodeStart":158,"sourceCodeEnd":194,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/invocations/wan_model_loader.py#L158-L194","documentation":"WanModelLoaderInvocation validates that the 'Transformer (Low Noise)' input is a single-file Wan model (GGUF or checkpoint format, membership in _SINGLE_FILE_FORMATS). If the low-noise model's config format is anything else (e.g., a diffusers folder-style model), invoke raises this ValueError naming the model and its format. Dual-expert loading is only implemented through the single-file loaders, which both produce a plain WanTransformer3DModel.","triggerScenarios":"Wiring a diffusers-format (directory) Wan model into 'Transformer (Low Noise)' on an A14B setup; any non-single-file format value for low_config.format when the field is populated and main variant is not TI2V-5B.","commonSituations":"Users who downloaded Wan A14B experts as diffusers repositories and installed them via the diffusers model path; mixed installs where the high-noise expert is a GGUF single file but the low-noise one is a diffusers folder.","solutions":["Install the low-noise expert as a single file (safetensors checkpoint or GGUF) and re-select it in 'Transformer (Low Noise)'.","Convert/download a single-file checkpoint of the low-noise expert (e.g., from the official Wan 2.2 release safetensors or a GGUF quant).","Confirm the model's detected format in the model manager before wiring it."],"exampleFix":"// before\nlow_config.format  # ModelFormat.Diffusers -> ValueError\n// after: use a single-file low-noise expert\nlow_config.format in _SINGLE_FILE_FORMATS  # e.g. GGUF or Checkpoint/Safetensors single file","handlingStrategy":"validation","validationCode":"low_config = context.models.get_config(transformer_low_noise_model)\nSINGLE_FILE = {ModelFormat.GGUF, ModelFormat.Checkpoint}  # per _SINGLE_FILE_FORMATS\nif low_config.format not in SINGLE_FILE:\n    raise ValueError(f\"{low_config.name} must be GGUF or single-file checkpoint, got {low_config.format.value}\")","typeGuard":"def is_single_file_wan(config) -> bool:\n    return config.format in {ModelFormat.GGUF, ModelFormat.Checkpoint}","tryCatchPattern":"try:\n    out = wan_model_loader.invoke(context)\nexcept ValueError as e:\n    if \"must be a single-file Wan model\" in str(e):\n        install_single_file_low_noise_expert()\n    else:\n        raise","preventionTips":["Install A14B experts as safetensors checkpoints or GGUF files, not diffusers folders.","Check the model manager's detected format before wiring the low-noise slot.","Convert diffusers-format experts to single-file if dual-expert loading is required."],"tags":["invokeai","wan","model-loader","model-format","a14b"],"backgroundTag":"unsupported-model-format","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}