Files
ha-frigate/CLAUDE.md
tonym d56f021fd8 Initial Frigate config with GPU detection
- Amcrest AD110 doorbell setup with go2rtc restreaming
- ONNX GPU detection using YOLOv9-s model on RTX 3060
- Auto day/night mode for IR switching
- CLAUDE.md with full setup documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 01:11:16 -06:00

5.1 KiB

CLAUDE.md

This file provides guidance to Claude Code when working with this Frigate NVR configuration.

Next Steps / TODO

  • Add more cameras this weekend
  • Explore detection zones and masks
  • Fine-tune object detection thresholds
  • Consider Frigate+ for better models

Overview

Frigate NVR running on Unraid (192.168.0.5) with NVIDIA RTX 3060 GPU detection.

Server Details

  • Unraid Server: 192.168.0.5
  • Frigate URL: http://192.168.0.5:5341
  • Docker Image: ghcr.io/blakeblackshear/frigate:stable-tensorrt
  • Config Path: /mnt/cache/appdata/frigate/config.yaml

Gitea Repository

Camera: Amcrest AD110 Doorbell

  • IP: 192.168.0.118
  • Credentials: admin / tbhXM3131!
  • Main Stream (1080p): rtsp://admin:tbhXM3131!@192.168.0.118:554/cam/realmonitor?channel=1&subtype=0
  • Sub Stream (480p): rtsp://admin:tbhXM3131!@192.168.0.118:554/cam/realmonitor?channel=1&subtype=1

Amcrest API Commands

# Set day/night mode (0=color, 1=auto, 2=B&W)
curl --digest -u admin:tbhXM3131! -g 'http://192.168.0.118/cgi-bin/configManager.cgi?action=setConfig&VideoInOptions[0].DayNightColor=1'

# Set IR LED mode (Auto/On/Off)
curl --digest -u admin:tbhXM3131! -g 'http://192.168.0.118/cgi-bin/configManager.cgi?action=setConfig&Lighting_V2[0][0][0].Mode=Auto'

# Get snapshot
curl --digest -u admin:tbhXM3131! 'http://192.168.0.118/cgi-bin/snapshot.cgi' -o snapshot.jpg

# Get encoding settings
curl --digest -u admin:tbhXM3131! 'http://192.168.0.118/cgi-bin/configManager.cgi?action=getConfig&name=Encode'

GPU Detection Setup (ONNX + YOLOv9)

Why ONNX?

  • TensorRT detector deprecated on amd64 in Frigate 0.16+
  • ONNX with onnxruntime-gpu uses CUDA automatically
  • YOLOv9 more accurate than old TFLite models

Model Conversion Process

Models must be converted locally - no direct downloads available.

# On Unraid, create conversion directory
mkdir -p /mnt/user/appdata/frigate-model-convert
cd /mnt/user/appdata/frigate-model-convert

# Create conversion script
cat > convert.sh << 'EOF'
#!/bin/bash
set -e
cd /work

if [ ! -d "yolov9" ]; then
    git clone https://github.com/WongKinYiu/yolov9.git
fi

cd yolov9
pip install -q opencv-python-headless pandas seaborn onnx onnxsim scipy PyYAML tqdm matplotlib requests psutil

if [ ! -f "yolov9-s-converted.pt" ]; then
    wget -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-s-converted.pt
fi

python export.py --weights yolov9-s-converted.pt --imgsz 640 --simplify --include onnx
cp yolov9-s-converted.onnx /work/yolov9-s-640.onnx
EOF

# Run conversion in PyTorch container
docker run --rm -v /mnt/user/appdata/frigate-model-convert:/work -w /work \
    pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime bash -c \
    'apt-get update -qq && apt-get install -y -qq git wget && bash convert.sh'

# Copy model to Frigate
cp /mnt/user/appdata/frigate-model-convert/yolov9-s-640.onnx /mnt/cache/appdata/frigate/model_cache/

ONNX Config (working)

detectors:
  onnx:
    type: onnx

model:
  path: /config/model_cache/yolov9-s-640.onnx
  input_tensor: nchw
  input_pixel_format: rgb
  width: 640
  height: 640
  model_type: yolo-generic
  input_dtype: float

Performance Results

  • CPU Detection: 12% CPU, 11ms inference
  • GPU Detection: 6.2% CPU, 17ms inference, RTX 3060 @ 6.4% VRAM

Adding New Cameras

  1. Add streams to go2rtc.streams section
  2. Add camera config to cameras section
  3. Restart Frigate: docker restart frigate

Template for new camera:

go2rtc:
  streams:
    newcam:
      - rtsp://user:pass@IP:554/stream/path
    newcam_sub:
      - rtsp://user:pass@IP:554/substream/path

cameras:
  newcam:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/newcam_sub
          input_args: preset-rtsp-restream
          roles: [detect]
        - path: rtsp://127.0.0.1:8554/newcam
          input_args: preset-rtsp-restream
          roles: [record]
    detect:
      enabled: true
      width: 640
      height: 480
      fps: 5

Common Commands

# SSH to Unraid
ssh root@192.168.0.5

# View Frigate logs
docker logs frigate -f

# Restart Frigate
docker restart frigate

# Check stats
curl -s 'http://localhost:5341/api/stats' | python3 -m json.tool

# Edit config
nano /mnt/cache/appdata/frigate/config.yaml

MQTT

  • Broker: 192.168.0.205:1883
  • User: tonym
  • Topic Prefix: frigate

Troubleshooting

Black & White Video

Camera stuck in IR mode. Fix:

curl --digest -u admin:tbhXM3131! -g 'http://192.168.0.118/cgi-bin/configManager.cgi?action=setConfig&VideoInOptions[0].DayNightColor=1'
curl --digest -u admin:tbhXM3131! -g 'http://192.168.0.118/cgi-bin/configManager.cgi?action=setConfig&Lighting_V2[0][0][0].Mode=Auto'

ONNX Model Not Loading

  • Check path exists: docker exec frigate ls /config/model_cache/
  • Use model_type: yolo-generic (not yolov9)
  • Ensure input_dtype: float is set

Config Validation Errors

Check logs: docker logs frigate 2>&1 | grep -A10 'Config Validation'