blakeblackshear/frigate · error · FileNotFoundError

Model file not found at: {self.model_path}

Error message

Model file not found at: {self.model_path}

What it means

The hailo8l detector was configured with a local model.path, but no file exists at that path inside the container. check_and_prepare raises FileNotFoundError during __init__, meaning the model was never downloaded (path config bypasses download) and the mount/volume is missing or wrong.

Source

Thrown at frigate/detectors/plugins/hailo8l.py:331

        if not self.model_path and not self.url:
            if os.path.exists(cached_model_path):
                logger.debug(f"Model found in cache: {cached_model_path}")
                return cached_model_path
            else:
                logger.debug(f"Downloading default model: {model_name}")
                if ARCH == "hailo8":
                    self.download_model(H8_DEFAULT_URL, cached_model_path)
                else:
                    self.download_model(H8L_DEFAULT_URL, cached_model_path)
        elif self.url:
            logger.debug(f"Downloading model from URL: {self.url}")
            self.download_model(self.url, cached_model_path)
        elif self.model_path:
            if os.path.exists(self.model_path):
                logger.debug(f"Using existing model at: {self.model_path}")
                return self.model_path
            else:
                raise FileNotFoundError(f"Model file not found at: {self.model_path}")
        return cached_model_path

    def detect_raw(self, tensor_input):
        tensor_input = self.preprocess(tensor_input)

        if isinstance(tensor_input, np.ndarray) and len(tensor_input.shape) == 3:
            tensor_input = np.expand_dims(tensor_input, axis=0)

        request_id = self.input_store.put(tensor_input)

        try:
            _, infer_results = self.response_store.get(request_id, timeout=1.0)
        except TimeoutError:
            logger.error(
                f"Timeout waiting for inference results for request {request_id}"
            )

            if not self.inference_thread.is_alive():

View on GitHub (pinned to ca18b8dc13)

Solutions

  1. Verify with docker exec that the file exists at the exact configured path inside the container
  2. Fix the volume mount so the host directory with the .hef is available at the configured path
  3. Correct typos in path/filename; prefer copying the .hef into a mounted /config or /models dir

Example fix

# docker-compose
# before
volumes:
  - /mnt/models:/opt/frigate/models  # but config says /models/yolo.hef
# after
volumes:
  - /mnt/models:/models
# config: path: /models/yolo.hef
Defensive patterns

Strategy: validation

Validate before calling

import os

def model_file_ready(path: str) -> bool:
    return bool(path) and os.path.isfile(path) and os.access(path, os.R_OK)

Try / catch

try:
    detector = HailoDetector(config)
except FileNotFoundError as e:
    if 'Model file not found' in str(e):
        raise SystemExit(f'Mount the volume containing {config.model.path}') from None
    raise

Prevention

When it happens

Trigger: Setting model.path for the hailo8l detector to a path that does not exist in the container (not mounted, typo, or file on host not inside container).

Common situations: Forgetting to mount the models volume into the Frigate container; absolute host path used instead of container path; filename typo; model on a USB drive not attached at boot.

Related errors


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