blakeblackshear/frigate · error · ValueError

Model does not support detector type of {detector}

Error message

Model does not support detector type of {detector}

What it means

The model's model_info.json declares a list of supportedDetectors and the configured detector type is not in it. Frigate stores per-model metadata when caching models; this check prevents feeding a model to a detector backend it was not converted for (e.g. an edgetpu .tflite passed to a CPU detector).

Source

Thrown at frigate/detectors/detector_config.py:178

        # download the model if it doesn't exist
        if not os.path.isfile(self.path):
            download_url = plus_api.get_model_download_url(model_id)
            r = requests.get(download_url)
            with open(self.path, "wb") as f:
                f.write(r.content)

        # download the model info if it doesn't exist
        if not os.path.isfile(model_info_path):
            model_info = plus_api.get_model_info(model_id)
            with open(model_info_path, "w") as f:
                json.dump(model_info, f)
        else:
            with open(model_info_path) as f:
                model_info: dict[str, Any] = json.load(f)

        if detector and detector not in model_info["supportedDetectors"]:
            raise ValueError(f"Model does not support detector type of {detector}")

        self.width = model_info["width"]
        self.height = model_info["height"]
        self.input_tensor = InputTensorEnum(model_info["inputShape"])
        self.input_pixel_format = PixelFormatEnum(model_info["pixelFormat"])
        self.model_type = ModelTypeEnum(model_info["type"])

        if model_info.get("inputDataType"):
            self.input_dtype = InputDTypeEnum(model_info["inputDataType"])

        # RKNN always uses NHWC
        if detector == "rknn":
            self.input_tensor = InputTensorEnum.nhwc

        # generate list of attribute labels
        self.attributes_map = {
            **model_info.get("attributes", DEFAULT_ATTRIBUTE_LABEL_MAP),
            **self.attributes_map,

View on GitHub (pinned to ca18b8dc13)

Solutions

  1. Match the detector type to the model: use a model converted for the configured detector (e.g. an ONNX model for onnx detector, TFLite edgetpu model for edgetpu)
  2. Clear the stale model cache directory so model_info.json is regenerated for the correct model
  3. Provide your own model converted/exported for the intended detector backend and point model.path at it

Example fix

# before (edgetpu model with onnx detector)
detectors:
  onnx:
    type: onnx
    model:
      path: /models/yolov9c_edgetpu.tflite
# after
detectors:
  edgetpu:
    type: edgetpu
    model:
      path: /models/yolov9c_edgetpu.tflite
Defensive patterns

Strategy: validation

Validate before calling

import json

def model_supports(model_info_path: str, detector: str) -> bool:
    with open(model_info_path) as f:
        return detector in json.load(f).get('supportedDetectors', [])

Try / catch

try:
    model_config.check_and_load_plus_model(detector='onnx')
except ValueError as e:
    if 'does not support detector type' in str(e):
        # pick a model converted for this backend
        ...

Prevention

When it happens

Trigger: Calling check_and_load_plus_model(detector=...) for a cached or downloaded model whose model_info.json 'supportedDetectors' list does not contain the given detector string (e.g. detector='onnx' but the model only lists 'edgetpu').

Common situations: User sets model path to a model file converted for a different backend; stale cached model_info.json in the model cache dir from a previous different model with the same filename; copy/paste detector config from docs for another detector type.

Related errors


AI-assisted analysis of blakeblackshear/frigate@ca18b8dc13 (2026-08-27). Data as JSON: /api/errors/cc3859f497dfc06a. Report an issue: GitHub.