{"record":{"id":"3d4d52a59341790f","repo":"AUTOMATIC1111/stable-diffusion-webui","slug":"model-not-found","errorCode":null,"errorMessage":"Model not found","messagePattern":"Model not found","errorType":"http","errorClass":"HTTPException","httpStatus":404,"severity":"error","filePath":"modules/api/api.py","lineNumber":645,"sourceCode":"\n        return models.ProgressResponse(progress=progress, eta_relative=eta_relative, state=shared.state.dict(), current_image=current_image, textinfo=shared.state.textinfo, current_task=current_task)\n\n    def interrogateapi(self, interrogatereq: models.InterrogateRequest):\n        image_b64 = interrogatereq.image\n        if image_b64 is None:\n            raise HTTPException(status_code=404, detail=\"Image not found\")\n\n        img = decode_base64_to_image(image_b64)\n        img = img.convert('RGB')\n\n        # Override object param\n        with self.queue_lock:\n            if interrogatereq.model == \"clip\":\n                processed = shared.interrogator.interrogate(img)\n            elif interrogatereq.model == \"deepdanbooru\":\n                processed = deepbooru.model.tag(img)\n            else:\n                raise HTTPException(status_code=404, detail=\"Model not found\")\n\n        return models.InterrogateResponse(caption=processed)\n\n    def interruptapi(self):\n        shared.state.interrupt()\n\n        return {}\n\n    def unloadapi(self):\n        sd_models.unload_model_weights()\n\n        return {}\n\n    def reloadapi(self):\n        sd_models.send_model_to_device(shared.sd_model)\n\n        return {}\n","sourceCodeStart":627,"sourceCodeEnd":663,"githubUrl":"https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/82a973c04367123ae98bd9abdf80d9eda9b910e2/modules/api/api.py#L627-L663","documentation":"HTTP 404 raised by interrogateapi when interrogatereq.model is neither 'clip' nor 'deepdanbooru'. Only those two literal strings are accepted; anything else (including case variants, 'DeepBooru', 'wd14', or empty) falls to the else branch. Note deepdanbooru additionally requires that subsystem to be available/installed.","triggerScenarios":"POST /sdapi/v1/interrogate with model='DeepDanbooru' (wrong case), 'CLIP', 'wd14-vit', or omitted model; clients assuming newer tagger names are supported.","commonSituations":"Case-sensitive string mismatches; ported clients from tagger extensions; users expecting anime taggers that live in third-party extensions, not this endpoint.","solutions":["Use exactly \"clip\" or \"deepdanbooru\" (lowercase) for the model field","For anime-style tagging use a dedicated tagger extension's own API route rather than /sdapi/v1/interrogate","Check GET /sdapi/v1/doc (OpenAPI) for the InterrogateRequest enum to confirm accepted values in your version"],"exampleFix":"# before\njson={'image':b64,'model':'DeepDanbooru'}\n\n# after\njson={'image':b64,'model':'deepdanbooru'}","handlingStrategy":"validation","validationCode":"if payload.get('model') not in ('clip', 'deepdanbooru'):\n    payload['model'] = 'clip'  # or raise ValueError('model must be clip|deepdanbooru')","typeGuard":"def is_valid_interrogate_model(m: str | None) -> bool:\n    return m in ('clip', 'deepdanbooru')","tryCatchPattern":null,"preventionTips":["Send lowercase literal values only","Don't assume extension taggers are reachable via /sdapi/v1/interrogate","Check the OpenAPI schema for accepted enums"],"tags":["api","interrogate","http-404","validation","stable-diffusion-webui"],"backgroundTag":null,"analyzedSha":"82a973c04367123ae98bd9abdf80d9eda9b910e2","analyzedAt":"2026-08-14T16:46:43.225Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}