{"record":{"id":"0e9eb79c84610591","repo":"invoke-ai/InvokeAI","slug":"no-vae-source-provided-single-file-gguf-transfo","errorCode":null,"errorMessage":"No VAE source provided. Single-file / GGUF transformers require a separate VAE. Options:\n  1. Set 'VAE' to a standalone FLUX.2 VAE model\n  2. Set 'Mistral Source' to a Diffusers FLUX.2 [dev] model to extract the VAE from","messagePattern":"No VAE source provided\\. Single-file / GGUF transformers require a separate VAE\\. Options:\n  1\\. Set 'VAE' to a standalone FLUX\\.2 VAE model\n  2\\. Set 'Mistral Source' to a Diffusers FLUX\\.2 \\[dev\\] model to extract the VAE from","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/app/invocations/flux2_dev_model_loader.py","lineNumber":139,"sourceCode":"            raise ValueError(\n                f\"FLUX.2 [dev] loader requires a FLUX.2 [dev] transformer, \"\n                f\"but the selected model is variant '{variant.value}'. \"\n                \"Use the FLUX.2 Klein loader for Klein variants.\"\n            )\n\n        transformer = self.model.model_copy(update={\"submodel_type\": SubModelType.Transformer})\n        main_is_diffusers = main_config.format == ModelFormat.Diffusers\n\n        # Resolve VAE.\n        if self.vae_model is not None:\n            vae = self.vae_model.model_copy(update={\"submodel_type\": SubModelType.VAE})\n        elif main_is_diffusers:\n            vae = self.model.model_copy(update={\"submodel_type\": SubModelType.VAE})\n        elif self.mistral_source_model is not None:\n            self._validate_diffusers_format(context, self.mistral_source_model, \"Mistral Source\")\n            vae = self.mistral_source_model.model_copy(update={\"submodel_type\": SubModelType.VAE})\n        else:\n            raise ValueError(\n                \"No VAE source provided. Single-file / GGUF transformers require a separate VAE. \"\n                \"Options:\\n\"\n                \"  1. Set 'VAE' to a standalone FLUX.2 VAE model\\n\"\n                \"  2. Set 'Mistral Source' to a Diffusers FLUX.2 [dev] model to extract the VAE from\"\n            )\n\n        # Resolve Mistral encoder.\n        if self.mistral_encoder_model is not None:\n            tokenizer = self.mistral_encoder_model.model_copy(update={\"submodel_type\": SubModelType.Tokenizer})\n            text_encoder = self.mistral_encoder_model.model_copy(update={\"submodel_type\": SubModelType.TextEncoder})\n        elif main_is_diffusers:\n            tokenizer = self.model.model_copy(update={\"submodel_type\": SubModelType.Tokenizer})\n            text_encoder = self.model.model_copy(update={\"submodel_type\": SubModelType.TextEncoder})\n        elif self.mistral_source_model is not None:\n            self._validate_encoder_source(context, self.mistral_source_model, \"Mistral Source\")\n            tokenizer = self.mistral_source_model.model_copy(update={\"submodel_type\": SubModelType.Tokenizer})\n            text_encoder = self.mistral_source_model.model_copy(update={\"submodel_type\": SubModelType.TextEncoder})\n        else:","sourceCodeStart":121,"sourceCodeEnd":157,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/invocations/flux2_dev_model_loader.py#L121-L157","documentation":"The FLUX.2 [dev] model loader throws this when a single-file or GGUF transformer is selected but no VAE source is configured. Single-file/GGUF checkpoints do not bundle a VAE, so InvokeAI requires either a standalone FLUX.2 VAE model or a Diffusers FLUX.2 [dev] pipeline from which the VAE can be extracted. The invoke() method raises ValueError as an input-validation gate before any model loading.","triggerScenarios":"Invoking the FLUX.2 [dev] model loader where the main model is not a Diffusers pipeline (main_is_diffusers is False), self.vae is unset, and self.mistral_source_model is None.","commonSituations":"User selects a GGUF or single-file FLUX.2 transformer in the loader node but leaves both the 'VAE' input and the 'Mistral Source' input unconnected in the workflow graph.","solutions":["Connect a standalone FLUX.2 VAE model to the loader's 'VAE' input.","Connect a Diffusers FLUX.2 [dev] model to the 'Mistral Source' input so the VAE can be extracted from it."],"exampleFix":"// before (workflow graph)\nloader = Flux2DevModelLoader(model=gguf_transformer)  # VAE, Mistral Source unconnected\n// after\nloader = Flux2DevModelLoader(model=gguf_transformer, vae=flux2_vae_model)","handlingStrategy":"validation","validationCode":"# before invoking the loader\nif not vae_input and not mistral_source_input:\n    raise ValueError(\"Connect a standalone FLUX.2 VAE or a Diffusers FLUX.2 [dev] 'Mistral Source' before running the loader\")","typeGuard":"def has_vae_source(loader) -> bool:\n    return loader.vae is not None or loader.mistral_source_model is not None","tryCatchPattern":"try:\n    output = loader.invoke(context)\nexcept ValueError as e:\n    if \"No VAE source provided\" in str(e):\n        loader.vae = standalone_flux2_vae\n        output = loader.invoke(context)\n    else:\n        raise","preventionTips":["Always wire the VAE input when using GGUF or single-file FLUX.2 transformers.","Use the frontend FLUX.2 template workflows, which pre-wire VAE and encoder inputs.","Check loader inputs in the workflow editor before queueing the graph."],"tags":["invokeai","model-loader","missing-input","flux2"],"backgroundTag":"missing-required-model-input","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}