{"record":{"id":"6a8abaa8019da474","repo":"unslothai/unsloth","slug":"repo-id-is-not-a-supported-diffusion-image-m","errorCode":null,"errorMessage":"'{'repo_id'}' is not a supported diffusion image model. Supported families: {', '.join(supported_family_names())}. If this is a variant of one of them, pass family_override with that family name.","messagePattern":"'(.+?)' is not a supported diffusion image model\\. Supported families: (.+?)\\. If this is a variant of one of them, pass family_override with that family name\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"studio/backend/core/inference/sd_cpp_backend.py","lineNumber":1195,"sourceCode":"        # Same fallback the diffusers and video backends take: the route ranks the selection and\n        # passes the winner, but a direct caller (an MCP client, a test, a plugin) hands over\n        # gpu_ids alone, and without this the native engine is the one engine that would drop the\n        # pick silently. Re-ranked only when nobody has, so a route-resolved winner is never\n        # second-guessed against free VRAM that has moved since.\n        if gpu_ordinal is None:\n            gpu_ordinal = (\n                resolve_selected_cuda_ordinal(gpu_ids)\n                if gpu_ids and resolve_diffusion_device_target().device == \"cuda\"\n                else None\n            )\n        if not gguf_filename:\n            raise ValueError(\n                \"gguf_filename is required: the native engine loads single-file GGUF checkpoints only.\"\n            )\n        # Filename-fallback detector (as the route validated) so a local .gguf whose family keyword lives only in the basename still loads.\n        fam = detect_family_for_pick(repo_id, gguf_filename, family_override)\n        if fam is None:\n            raise ValueError(\n                f\"'{repo_id}' is not a supported diffusion image model. Supported families: \"\n                f\"{', '.join(supported_family_names())}. If this is a variant of one of them, \"\n                f\"pass family_override with that family name.\"\n            )\n        if not family_sd_cpp_supported(fam):\n            raise ValueError(f\"Family '{fam.name}' has no native sd.cpp asset mapping.\")\n\n        base = resolve_base_repo(fam, base_repo)\n        # Offline-only here, and deliberately so. begin_load returns at once by contract -- the\n        # route thread answers the UI with a status and the pull happens on the worker -- so it\n        # cannot afford the range request's bound, let alone hold _lock across it and stall\n        # status()/unload() for the same span. Memo or on-disk header or nothing. This value only\n        # seeds the delete-cached guard's repo list below; the worker re-asks WITH the network and\n        # refreshes that list, so the guard converges within one round trip of the load starting.\n        inner_dim = self._flux2_inner_dim(\n            repo_id, gguf_filename, fam, hf_token, allow_network = False\n        )\n        # Same link the diffusers resolver records, so the delete guard protects a native pick's","sourceCodeStart":1177,"sourceCodeEnd":1213,"githubUrl":"https://github.com/unslothai/unsloth/blob/203007d19051dcd2ae33876786d117c99f6b0368/studio/backend/core/inference/sd_cpp_backend.py#L1177-L1213","documentation":"ValueError raised when detect_family_for_pick(repo_id, gguf_filename, family_override) cannot match the pick to any supported diffusion family, even with the filename-fallback detector. The message lists the supported family names and suggests family_override for close variants.","triggerScenarios":"begin_load with a repo_id whose id and GGUF basename contain no supported family keyword; a re-named or forked model repo that is actually a supported family.","commonSituations":"Users pointing at mirrors/forks whose names omit the family keyword; newly published variants not yet in the supported list; typos in repo_id.","solutions":["Pass family_override with the supported family name the model actually is (e.g. 'flux', per the listed names).","Check the repo_id/gguf_filename spelling against supported families in the error message.","If the model is genuinely a new family, request support or use the diffusers engine if it covers it."],"exampleFix":"# before\nbackend.begin_load(repo_id='my-mirror/some-renamed-model', gguf_filename='model-q8.gguf')\n\n# after\nbackend.begin_load(repo_id='my-mirror/some-renamed-model', gguf_filename='model-q8.gguf', family_override='flux')","handlingStrategy":"validation","validationCode":"from core.inference.diffusion_families import supported_family_names, detect_family_for_pick\n\nnames = supported_family_names()\nfam = detect_family_for_pick(repo_id, gguf_filename, family_override)\nassert fam is not None, f'unsupported; pass family_override in {names}'","typeGuard":null,"tryCatchPattern":"try:\n    backend.begin_load(repo_id=r, gguf_filename=f)\nexcept ValueError as e:\n    if 'not a supported diffusion image model' in str(e):\n        backend.begin_load(repo_id=r, gguf_filename=f, family_override='flux')\n    else:\n        raise","preventionTips":["Curate a whitelist of known repo_id -> family mappings in your client.","For mirrors/forks, record the family_override once instead of relying on name detection."],"tags":["validation","model-support","family-detection"],"backgroundTag":null,"analyzedSha":"203007d19051dcd2ae33876786d117c99f6b0368","analyzedAt":"2026-08-15T02:48:39.846Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}