{"record":{"id":"6f4787898f5bc08c","repo":"invoke-ai/InvokeAI","slug":"the-selected-flux-model-does-not-ship-its-own","errorCode":null,"errorMessage":"The selected FLUX model does not ship its own {', '.join(missing)}, so {'it' if len(missing) == 1 else 'they'} must be selected explicitly. Only a complete SDNQ pipeline install (transformer + CLIP + T5 + VAE) can supply these itself.","messagePattern":"The selected FLUX model does not ship its own (.+?), so (.+?) must be selected explicitly\\. Only a complete SDNQ pipeline install \\(transformer \\+ CLIP \\+ T5 \\+ VAE\\) can supply these itself\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/app/invocations/flux_model_loader.py","lineNumber":112,"sourceCode":"        self_contained = is_self_contained_sdnq_flux1_pipeline(main_config)\n\n        def resolve(selected: ModelIdentifierField | None) -> ModelIdentifierField | None:\n            \"\"\"Explicit selection wins; otherwise the main model supplies the part if it can.\"\"\"\n            if selected is not None:\n                return selected\n            return self.model if self_contained else None\n\n        t5_source = resolve(self.t5_encoder_model)\n        clip_source = resolve(self.clip_embed_model)\n        vae_source = resolve(self.vae_model)\n\n        missing = [\n            title\n            for title, source in ((\"T5 Encoder\", t5_source), (\"CLIP Embed\", clip_source), (\"VAE\", vae_source))\n            if source is None\n        ]\n        if missing:\n            raise ValueError(\n                f\"The selected FLUX model does not ship its own {', '.join(missing)}, so \"\n                f\"{'it' if len(missing) == 1 else 'they'} must be selected explicitly. Only a complete \"\n                \"SDNQ pipeline install (transformer + CLIP + T5 + VAE) can supply these itself.\"\n            )\n\n        transformer = self.model.model_copy(update={\"submodel_type\": SubModelType.Transformer})\n        vae = vae_source.model_copy(update={\"submodel_type\": SubModelType.VAE})\n\n        tokenizer = clip_source.model_copy(update={\"submodel_type\": SubModelType.Tokenizer})\n        clip_encoder = clip_source.model_copy(update={\"submodel_type\": SubModelType.TextEncoder})\n\n        if t5_source is self.model:\n            # The pipeline's own T5 lives in the slots discovery recorded, not behind the standalone\n            # T5 bundle layouts `preprocess_t5_*` exists to normalize.\n            tokenizer2 = t5_source.model_copy(update={\"submodel_type\": SubModelType.Tokenizer2})\n            t5_encoder = t5_source.model_copy(update={\"submodel_type\": SubModelType.TextEncoder2})\n        else:\n            tokenizer2 = preprocess_t5_tokenizer_model_identifier(t5_source)","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/invocations/flux_model_loader.py#L94-L130","documentation":"When loading a FLUX model that is not a complete self-contained SDNQ pipeline, the loader resolves T5 encoder, CLIP embed, and VAE from explicit selections or the main model. If any of the three ends up with no source, it raises ValueError listing the missing components, because FLUX cannot run without them and only a full SDNQ pipeline install can self-supply them.","triggerScenarios":"invoke() with a partial/incomplete FLUX install (transformer-only) and no explicit t5_encoder_model/clip_embed_model/vae_model selections, or selections that failed resolution, so missing != [] after source resolution.","commonSituations":"Installing only the FLUX transformer checkpoint without T5/CLIP/VAE companions; a non-SDNQ FLUX model missing VAE; deleting a companion model while the workflow relied on the main model to supply it.","solutions":["Select explicit T5 encoder, CLIP embed, and VAE models in the FLUX loader node fields","Install a complete SDNQ FLUX pipeline (transformer + CLIP + T5 + VAE)","Install the missing companion models and point the node at them","Check is_self_contained_sdnq_flux1_pipeline applicability or use a complete model folder"],"exampleFix":"// before: transformer-only selection, no companions\nFluxModelLoader(model=flux_key)\n// after\nFluxModelLoader(model=flux_key, t5_encoder_model=t5_key, clip_embed_model=clip_key, vae_model=vae_key)","handlingStrategy":"validation","validationCode":"# ensure explicit selections exist and are set when the main model is not a full SDNQ pipeline\nassert t5_encoder_model and clip_embed_model and vae_model, \"Select T5, CLIP and VAE explicitly\"\nfor m in (t5_encoder_model, clip_embed_model, vae_model):\n    assert context.models.exists(m.key), f\"Missing companion model {m.key}\"","typeGuard":"def has_all_companions(t5, clip, vae) -> bool:\n    return t5 is not None and clip is not None and vae is not None","tryCatchPattern":"try:\n    output = loader.invoke(context)\nexcept ValueError as e:\n    if 'must be selected explicitly' in str(e):\n        # provide t5_encoder_model/clip_embed_model/vae_model or install full SDNQ pipeline\n        pass\n    else:\n        raise","preventionTips":["Always select explicit T5/CLIP/VAE companions unless using a full SDNQ pipeline install","Install complete FLUX pipelines (transformer + CLIP + T5 + VAE)","Never delete companion models a workflow depends on"],"tags":["missing-model","flux","sdnq","model-loader","invokeai"],"backgroundTag":"missing-model-components","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}