fix: restore files unintentionally reverted by sync commit
- restore jgpc/ layout (undo accidental revert to thinkstation/), homelab-overview.md (June 13 version), docs/jarvis doc, owncloud scripts, siklos/beszel compose - re-remove jellyfin/node-exporter and siklos/monitoring (replaced by Beszel) - jgpc/frigate/docker-compose.yml: update to newer local version (cpuset pinning, 8G limit) - root frigate-* files are local working copies -> gitignored
This commit is contained in:
@@ -0,0 +1,356 @@
|
||||
database:
|
||||
path: /nvme_db/frigate.db
|
||||
|
||||
# Global Birdseye Settings
|
||||
birdseye:
|
||||
enabled: false
|
||||
restream: true
|
||||
width: 1280
|
||||
height: 720
|
||||
quality: 8
|
||||
mode: objects
|
||||
|
||||
auth:
|
||||
enabled: false
|
||||
trusted_proxies:
|
||||
- 192.168.88.110
|
||||
- 192.168.88.0/24
|
||||
- 172.16.0.0/12
|
||||
- 127.0.0.1
|
||||
|
||||
proxy:
|
||||
default_role: viewer
|
||||
header_map:
|
||||
user: Remote-User
|
||||
role: Remote-Role
|
||||
|
||||
mqtt:
|
||||
enabled: true
|
||||
host: 192.168.88.39
|
||||
user: mqtt-user
|
||||
password: jogiocsi
|
||||
|
||||
go2rtc:
|
||||
webrtc:
|
||||
candidates:
|
||||
- 192.168.88.41:8555
|
||||
- stun:8555
|
||||
ffmpeg:
|
||||
bin: /usr/lib/ffmpeg/7.0/bin/ffmpeg
|
||||
# Uses your GTX 1050 Ti to transcode H.265 to browser/Linux-friendly H.264
|
||||
h264: -c:v h264_nvenc -preset p1 -tune ll -b:v 2M -maxrate 2M -bufsize 4M
|
||||
streams:
|
||||
# --- Native H.265 connections (stable ingest from cameras) ---
|
||||
front_driveway_h265:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.105:554/h264Preview_01_main
|
||||
front_right_h265:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.100:554/h264Preview_01_main
|
||||
deck_h265:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.101:554/h264Preview_01_main
|
||||
back_yard_h265:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.102:554/h264Preview_01_main
|
||||
front_yard_h265:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.104:554/h264Preview_01_main
|
||||
shop_h265:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.103:554/h264Preview_01_main
|
||||
|
||||
# --- H.264 transcoded streams (Live view & Linux browser-compatible playback) ---
|
||||
# --- Fully stabilized pipelines under go2rtc -> streams ---
|
||||
front_driveway:
|
||||
- "exec:/usr/lib/ffmpeg/7.0/bin/ffmpeg -hide_banner -v error -hwaccel cuvid -hwaccel_output_format cuda -c:v hevc_cuvid -resize 3840x1080 -rtsp_transport tcp -i rtsp://127.0.0.1:8554/front_driveway_h265 -c:v h264_nvenc -preset p1 -tune ll -b:v 6M -maxrate 6M -bufsize 12M -g 40 -c:a copy -rtsp_transport tcp -f rtsp {{output}}"
|
||||
- "ffmpeg:front_driveway#audio=opus"
|
||||
- "onvif://admin:Jogiocsi1211@192.168.88.105:8000"
|
||||
|
||||
front_right:
|
||||
- rtsp://127.0.0.1:8554/front_right_h265
|
||||
- "ffmpeg:front_right#audio=opus"
|
||||
- "onvif://admin:Jogiocsi1211@192.168.88.100:8000"
|
||||
deck:
|
||||
- rtsp://127.0.0.1:8554/deck_h265
|
||||
- "ffmpeg:deck#audio=opus"
|
||||
- "onvif://admin:Jogiocsi1211@192.168.88.101:8000"
|
||||
back_yard:
|
||||
- rtsp://127.0.0.1:8554/back_yard_h265
|
||||
- "ffmpeg:back_yard#audio=opus"
|
||||
- "onvif://admin:Jogiocsi1211@192.168.88.102:8000"
|
||||
front_yard:
|
||||
- rtsp://127.0.0.1:8554/front_yard_h265
|
||||
- "ffmpeg:front_yard#audio=opus"
|
||||
- "onvif://admin:Jogiocsi1211@192.168.88.104:8000"
|
||||
shop:
|
||||
- rtsp://127.0.0.1:8554/shop_h265
|
||||
- "ffmpeg:shop#audio=opus"
|
||||
- "onvif://admin:Jogiocsi1211@192.168.88.103:8000"
|
||||
|
||||
# --- Sub streams for object detection ---
|
||||
front_driveway_sub:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.105:554/h264Preview_01_sub
|
||||
front_yard_sub:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.104:554/h264Preview_01_sub
|
||||
front_right_sub:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.100:554/h264Preview_01_sub
|
||||
deck_sub:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.101:554/h264Preview_01_sub
|
||||
back_yard_sub:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.102:554/h264Preview_01_sub
|
||||
shop_sub:
|
||||
- rtsp://admin:Jogiocsi1211@192.168.88.103:554/h264Preview_01_sub
|
||||
|
||||
ffmpeg:
|
||||
hwaccel_args: preset-nvidia
|
||||
global_args:
|
||||
- -threads
|
||||
- '2' # Cap each ffmpeg process to 2 CPU threads — prevents 12+ processes from
|
||||
# competing across both NUMA nodes. GPU handles the heavy lifting anyway.
|
||||
|
||||
record:
|
||||
enabled: true
|
||||
alerts:
|
||||
retain:
|
||||
days: 30
|
||||
detections:
|
||||
retain:
|
||||
days: 30
|
||||
continuous:
|
||||
days: 0
|
||||
motion:
|
||||
days: 30
|
||||
|
||||
snapshots:
|
||||
enabled: true
|
||||
retain:
|
||||
default: 30
|
||||
|
||||
detectors:
|
||||
onnx:
|
||||
type: onnx
|
||||
|
||||
model:
|
||||
model_type: yolo-generic
|
||||
width: 320
|
||||
height: 320
|
||||
input_tensor: nchw
|
||||
input_dtype: float
|
||||
path: /config/model_cache/onnx/yolov9-t-320.onnx
|
||||
labelmap_path: /labelmap/coco-80.txt
|
||||
|
||||
detect:
|
||||
enabled: true
|
||||
|
||||
lpr:
|
||||
enabled: true
|
||||
device: GPU
|
||||
model_size: small
|
||||
known_plates:
|
||||
Joe:
|
||||
- ABC1234
|
||||
Cynthia:
|
||||
- ABC4567
|
||||
Wesley:
|
||||
- XYZ9876
|
||||
replace_rules:
|
||||
- pattern: '-'
|
||||
replacement: ''
|
||||
- pattern: ' '
|
||||
replacement: ''
|
||||
|
||||
cameras:
|
||||
front_driveway:
|
||||
enabled: true
|
||||
ui:
|
||||
order: 1
|
||||
live:
|
||||
streams:
|
||||
High (Transcode): front_driveway
|
||||
Low (Detect): front_driveway_sub
|
||||
ffmpeg:
|
||||
output_args:
|
||||
record: -vf scale_cuda=3840:1080 -f segment -segment_time 10
|
||||
-segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v h264_nvenc
|
||||
-preset p1 -b:v 4M -maxrate 4M -bufsize 8M -c:a aac -b:a 64k -ar 16000
|
||||
inputs:
|
||||
- path: rtsp://127.0.0.1:8554/front_driveway_sub
|
||||
roles: [detect]
|
||||
- path: rtsp://127.0.0.1:8554/front_driveway_h265
|
||||
roles: [record]
|
||||
input_args:
|
||||
- -hwaccel
|
||||
- cuda
|
||||
- -hwaccel_output_format
|
||||
- cuda
|
||||
- -avoid_negative_ts
|
||||
- make_zero
|
||||
- -fflags
|
||||
- +genpts+discardcorrupt
|
||||
- -rtsp_transport
|
||||
- tcp
|
||||
- -timeout
|
||||
- '10000000'
|
||||
- -use_wallclock_as_timestamps
|
||||
- '1'
|
||||
detect:
|
||||
width: 1536
|
||||
height: 432
|
||||
fps: 5
|
||||
objects:
|
||||
track: [person, car, dog, cat]
|
||||
notifications:
|
||||
enabled: true
|
||||
zones:
|
||||
front_driveway_zone:
|
||||
coordinates: 0.515,0.475,0.715,0.484,0.989,0.857,0.97,0.968,0.541,0.982
|
||||
loitering_time: 0
|
||||
friendly_name: Front Driveway Zone
|
||||
review:
|
||||
alerts:
|
||||
required_zones: front_driveway_zone
|
||||
|
||||
front_yard:
|
||||
enabled: true
|
||||
ui:
|
||||
order: 2
|
||||
live:
|
||||
streams:
|
||||
High (4K Native): front_yard
|
||||
Low (Detect): front_yard_sub
|
||||
ffmpeg:
|
||||
output_args:
|
||||
record: preset-record-generic-audio-aac
|
||||
inputs:
|
||||
- path: rtsp://127.0.0.1:8554/front_yard_sub
|
||||
roles: [detect]
|
||||
- path: rtsp://127.0.0.1:8554/front_yard_h265
|
||||
roles: [record]
|
||||
detect:
|
||||
width: 640
|
||||
height: 360
|
||||
fps: 5
|
||||
objects:
|
||||
track: [person, car, dog, cat]
|
||||
notifications:
|
||||
enabled: true
|
||||
|
||||
front_right:
|
||||
enabled: true
|
||||
ui:
|
||||
order: 6
|
||||
live:
|
||||
streams:
|
||||
High (Native): front_right
|
||||
Low (Detect): front_right_sub
|
||||
ffmpeg:
|
||||
output_args:
|
||||
record: preset-record-generic-audio-aac
|
||||
inputs:
|
||||
- path: rtsp://127.0.0.1:8554/front_right_sub
|
||||
roles: [detect]
|
||||
- path: rtsp://127.0.0.1:8554/front_right_h265
|
||||
roles: [record]
|
||||
detect:
|
||||
width: 896
|
||||
height: 512
|
||||
fps: 5
|
||||
objects:
|
||||
track: [person, car, dog, cat]
|
||||
motion:
|
||||
mask: 0.259,0.36,0.605,0.193,0.616,0.264,0.266,0.419
|
||||
notifications:
|
||||
enabled: true
|
||||
|
||||
deck:
|
||||
enabled: true
|
||||
ui:
|
||||
order: 4
|
||||
live:
|
||||
streams:
|
||||
High (4K Native): deck
|
||||
Low (Detect): deck_sub
|
||||
ffmpeg:
|
||||
output_args:
|
||||
record: preset-record-generic-audio-aac
|
||||
inputs:
|
||||
- path: rtsp://127.0.0.1:8554/deck_sub
|
||||
roles: [detect]
|
||||
- path: rtsp://127.0.0.1:8554/deck_h265
|
||||
roles: [record]
|
||||
detect:
|
||||
width: 640
|
||||
height: 360
|
||||
fps: 5
|
||||
objects:
|
||||
track: [person, car, dog, cat]
|
||||
notifications:
|
||||
enabled: true
|
||||
motion:
|
||||
mask:
|
||||
- 0.761,0.201,0.922,0.254,0.915,0.34,0.761,0.272
|
||||
- 0.205,0.528,0.266,0.452,0.314,0.603,0.243,0.643
|
||||
|
||||
back_yard:
|
||||
enabled: true
|
||||
ui:
|
||||
order: 5
|
||||
live:
|
||||
streams:
|
||||
High (4K Native): back_yard
|
||||
Low (Detect): back_yard_sub
|
||||
ffmpeg:
|
||||
output_args:
|
||||
record: preset-record-generic-audio-aac
|
||||
inputs:
|
||||
- path: rtsp://127.0.0.1:8554/back_yard_sub
|
||||
roles: [detect]
|
||||
- path: rtsp://127.0.0.1:8554/back_yard_h265
|
||||
roles: [record]
|
||||
detect:
|
||||
width: 640
|
||||
height: 360
|
||||
fps: 5
|
||||
objects:
|
||||
track: [person, car, dog, cat]
|
||||
motion:
|
||||
mask:
|
||||
- 0.587,0.193,0.578,0.052,1,0.253,1,0.385
|
||||
- 0.25,0.272,0.237,0.373,0.258,0.364
|
||||
notifications:
|
||||
enabled: true
|
||||
|
||||
shop:
|
||||
enabled: true
|
||||
ui:
|
||||
order: 3
|
||||
live:
|
||||
streams:
|
||||
High (4K Native): shop
|
||||
Low (Detect): shop_sub
|
||||
ffmpeg:
|
||||
output_args:
|
||||
record: preset-record-generic-audio-aac
|
||||
inputs:
|
||||
- path: rtsp://127.0.0.1:8554/shop_sub
|
||||
roles: [detect]
|
||||
- path: rtsp://127.0.0.1:8554/shop_h265
|
||||
roles: [record]
|
||||
detect:
|
||||
width: 640
|
||||
height: 360
|
||||
fps: 5
|
||||
objects:
|
||||
track: [person, car, dog, cat]
|
||||
motion:
|
||||
mask:
|
||||
- 0.644,0.053,1,0.216,0.996,0.267,0.64,0.134
|
||||
- 0.427,0.424,0.522,0.418,0.521,0.574,0.452,0.567
|
||||
notifications:
|
||||
enabled: true
|
||||
|
||||
version: 0.17-0
|
||||
semantic_search:
|
||||
enabled: false
|
||||
model_size: small
|
||||
face_recognition:
|
||||
enabled: true
|
||||
model_size: small
|
||||
classification:
|
||||
bird:
|
||||
enabled: true
|
||||
@@ -0,0 +1,40 @@
|
||||
services:
|
||||
frigate:
|
||||
container_name: frigate
|
||||
image: ghcr.io/blakeblackshear/frigate:stable-tensorrt
|
||||
privileged: true
|
||||
shm_size: "1024mb"
|
||||
cpuset: "0-3,8-11" # Pin to NUMA node 0 — co-located with GTX 1050 Ti on PCIe
|
||||
restart: always
|
||||
runtime: nvidia
|
||||
environment:
|
||||
- NVIDIA_VISIBLE_DEVICES=all
|
||||
- NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
|
||||
- FRIGATE_RTSP_PASSWORD=restreampass
|
||||
- GO2RTC_ALLOW_ARBITRARY_EXEC=true
|
||||
secrets:
|
||||
- frigate_jwt_secret
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 8G # Increased from 4G — now have 62GB, give Frigate more headroom
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: 1
|
||||
capabilities: [gpu, compute, video]
|
||||
volumes:
|
||||
- /srv/docker/frigate/config:/config
|
||||
- /mnt/14TB-HD/frigate/media:/media/frigate
|
||||
- /mnt/INTEL-SSD/frigate/db:/nvme_db
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "5000:5000"
|
||||
- "8971:8971"
|
||||
- "8554:8554"
|
||||
- "8555:8555/tcp"
|
||||
- "8555:8555/udp"
|
||||
|
||||
secrets:
|
||||
frigate_jwt_secret:
|
||||
file: /srv/docker/frigate/config/jwt_secret
|
||||
@@ -0,0 +1,129 @@
|
||||
# Frigate Camera Specifications
|
||||
|
||||
> Generated 2026-07-07. Hardware/firmware data queried live from each camera's Reolink API (`GetDevInfo`, `GetEnc`); Frigate settings from `frigate-config.yml` (Frigate v0.17-0).
|
||||
> Credentials are **not** included in this document — camera RTSP and MQTT passwords are in `frigate-config.yml`; web UI login is in the ownCloud note `Personal/Notes/Homelab/Frigate.md`.
|
||||
|
||||
## System Overview
|
||||
|
||||
| Item | Value |
|
||||
|---|---|
|
||||
| NVR host | thinkstation / jgpc (192.168.88.41), Docker stack at `/srv/docker/frigate` |
|
||||
| Frigate version | 0.17-0 |
|
||||
| Web access | https://cameras.jgitta.com (via Caddy → port 8971 TLS/auth); port 5000 local unauthenticated |
|
||||
| RTSP / WebRTC | Ports 8554 / 8555 (go2rtc) |
|
||||
| Hardware accel | NVIDIA GTX 1050 Ti — NVENC transcode (H.265→H.264 2 Mbps) + CUDA decode |
|
||||
| Object detection | YOLOv9-tiny 320×320 (ONNX detector), COCO-80 labels, GPU |
|
||||
| License plate recognition | Enabled, GPU, small model; 3 known plates (Joe, Cynthia, Wesley) |
|
||||
| MQTT | 192.168.88.39 (Home Assistant), user `mqtt-user` |
|
||||
| Recording retention | Alerts 30 d · Detections 30 d · Motion 30 d · Continuous 0 d |
|
||||
| Snapshots | Enabled, 30 d retention |
|
||||
| Birdseye | Disabled (restream config present: 1280×720) |
|
||||
|
||||
## Camera Summary
|
||||
|
||||
| Frigate name | Camera name | IP | Model | Firmware | Serial |
|
||||
|---|---|---|---|---|---|
|
||||
| front_driveway | Front Driveway | 192.168.88.105 | Reolink Duo 3 PoE | v3.0.0.5049_2506302188 | 00326417514496 |
|
||||
| front_yard | Front Yard | 192.168.88.104 | Reolink RLC-811A | v3.1.0.4695_2504301440 | 141484731935925 |
|
||||
| shop | Shop | 192.168.88.103 | Reolink RLC-811A | v3.1.0.4695_2504301440 | 141484731944148 |
|
||||
| deck | Deck | 192.168.88.101 | Reolink RLC-811A | v3.1.0.4695_2504301440 | 141484731972735 |
|
||||
| back_yard | Back Yard | 192.168.88.102 | Reolink RLC-811A | v3.1.0.4695_2504301440 | 141484731964559 |
|
||||
| front_right | Front-Right | 192.168.88.100 | Reolink RLC-1212A | v3.1.0.5036_2509040629 | 141484729875960 |
|
||||
|
||||
All cameras: wired PoE (no Wi-Fi), 1 audio channel, microSD slot, RTSP on port 554 (paths `h264Preview_01_main` / `h264Preview_01_sub`).
|
||||
|
||||
---
|
||||
|
||||
## Hardware Specifications by Model
|
||||
|
||||
### Reolink Duo 3 PoE — front_driveway (192.168.88.105)
|
||||
|
||||
| Spec | Value |
|
||||
|---|---|
|
||||
| Item no / hardware | P750 / IPC_NT13NA416MP |
|
||||
| Image sensors | Dual 1/2.7" CMOS (2 × 8MP, stitched) |
|
||||
| Max resolution | 7680 × 2160 (16MP) @ 20 fps, H.265 |
|
||||
| Lens | Dual f=2.8 mm, F1.6 fixed |
|
||||
| Field of view | 180° horizontal / 55° vertical (seamless dual-image stitching) |
|
||||
| Night vision | IR LEDs + spotlights, F1.6 color night vision |
|
||||
| Audio | Two-way talk (mic + speaker) — audio recording enabled 2026-07-07 |
|
||||
| Extras | Motion track, person/vehicle/animal detection, 4-core SoC stitching |
|
||||
| Power | PoE, single Ethernet cable |
|
||||
|
||||
### Reolink RLC-811A — front_yard, shop, deck, back_yard (192.168.88.101–104)
|
||||
|
||||
| Spec | Value |
|
||||
|---|---|
|
||||
| Item no / hardware | P430 / IPC_560B158MP |
|
||||
| Image sensor | 1/2.8" CMOS |
|
||||
| Max resolution | 3840 × 2160 (8MP / 4K) @ 25 fps |
|
||||
| Lens | f=2.7–13.5 mm motorized, F1.6–3.3, **5× optical zoom** |
|
||||
| Field of view | 105°H / 55°V (wide) → 31°H / 17°V (telephoto) |
|
||||
| Night vision | IR: 4 LEDs (850 nm), ~30 m range; Color: 5 spotlights (4W, 6500K, 450 lm) |
|
||||
| Audio | Built-in mic + speaker, two-way talk |
|
||||
| Weatherproofing | IP66 |
|
||||
| Storage | microSD up to 512 GB |
|
||||
| Power | PoE IEEE 802.3af, 48V |
|
||||
|
||||
### Reolink RLC-1212A — front_right (192.168.88.100)
|
||||
|
||||
| Spec | Value |
|
||||
|---|---|
|
||||
| Item no / hardware | P340 / IPC_523B18128M12MP |
|
||||
| Image sensor | 1/2.49" CMOS |
|
||||
| Max resolution | 4512 × 2512 (12MP) @ 20 fps |
|
||||
| Lens | f=4.0 mm fixed, F1.6 |
|
||||
| Field of view | 93°H / 49°V (upgraded revision: 106°) |
|
||||
| Night vision | IR: 2 LEDs (850 nm), ~30 m; Color: 1 spotlight (4.3W, 6500K, 700 lm) |
|
||||
| Audio | Built-in mic + speaker, two-way talk |
|
||||
| Power | PoE |
|
||||
| Note | Main stream currently configured at 2560×1440 — below the sensor's 4512×2512 maximum |
|
||||
|
||||
---
|
||||
|
||||
## Configured Stream Settings (live from cameras)
|
||||
|
||||
| Camera | Main stream | Main fps | Main bitrate | Codec | Sub stream | Sub fps | Sub bitrate | Audio |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| front_driveway | 7680×2160 | 20 | 10240 kbps | H.265 | 1536×432 | 20 | 1024 kbps | On |
|
||||
| front_yard | 3840×2160 | 25 | 6144 kbps | H.264 | 640×360 | 10 | 256 kbps | On |
|
||||
| shop | 3840×2160 | 25 | 6144 kbps | H.264 | 640×360 | 10 | 256 kbps | On |
|
||||
| deck | 3840×2160 | 15 | 8192 kbps | H.264 | 640×360 | 10 | 256 kbps | On |
|
||||
| back_yard | 3840×2160 | 15 | 8192 kbps | H.264 | 640×360 | 10 | 256 kbps | On |
|
||||
| front_right | 2560×1440 | 15 | 8192 kbps | H.264 | 896×512 | 10 | 1024 kbps | On |
|
||||
|
||||
All sub streams are H.264, High profile. Sub streams feed Frigate object detection; main streams are recorded.
|
||||
|
||||
## Frigate Per-Camera Configuration
|
||||
|
||||
| Camera | UI order | Detect resolution | Detect fps | Tracked objects | Zones | Motion masks |
|
||||
|---|---|---|---|---|---|---|
|
||||
| front_driveway | 1 | 1536×432 | 5 | person, car, dog, cat (plates via dedicated LPR detector) | front_driveway_zone (alerts require zone) | — |
|
||||
| front_yard | 2 | 640×360 | 5 | person, car, dog, cat | — | — |
|
||||
| shop | 3 | 640×360 | 5 | person, car, dog, cat | — | 2 masks |
|
||||
| deck | 4 | 640×360 | 5 | person, car, dog, cat | — | 2 masks |
|
||||
| back_yard | 5 | 640×360 | 5 | person, car, dog, cat | — | 2 masks |
|
||||
| front_right | 6 | 896×512 | 5 | person, car, dog, cat | — | 1 mask |
|
||||
|
||||
Notifications are enabled on all six cameras.
|
||||
|
||||
### Stream routing (go2rtc)
|
||||
|
||||
- Each camera has a native H.265/H.264 main-stream ingest (`<name>_h265`) plus a sub-stream (`<name>_sub`) pulled directly from the camera.
|
||||
- front_driveway and front_right main streams are additionally transcoded to H.264 via NVENC (`exec` ffmpeg pipelines, CUDA hwaccel, 2 Mbps low-latency) for browser-compatible live view.
|
||||
- front_driveway records with a custom pipeline: CUDA scale to 3840×1080, 10 s segments, H.264 NVENC 4 Mbps, AAC 64k audio. All others use `preset-record-generic-audio-aac`.
|
||||
- ffmpeg globally capped at 2 CPU threads per process (NUMA contention mitigation); `preset-nvidia` hwaccel.
|
||||
|
||||
### Quirks / notes
|
||||
|
||||
- Shop camera (.103) HTTP API redirects to HTTPS — use `https://` (self-signed) for API calls; other cameras answer on plain HTTP.
|
||||
- 2026-07-07: audio enabled on-camera for front_driveway and shop; Duo 3 interframe set to 1x; front_driveway live transcode uses `hevc_cuvid -resize 3840x1080` (GPU-only decode+resize — `scale_cuda` filter crashes when Reolink's corrupt stream-join frames force a software-decode fallback); front_right live is direct H.264 passthrough (no transcode needed); `license_plate` removed from tracked objects (COCO model doesn't have that label — LPR uses its own plate detector on cars).
|
||||
- 2026-07-07: two-way talk enabled on all 6 cameras — each live go2rtc stream has 3 sources (primary video, `ffmpeg:<name>#audio=opus` for WebRTC, `onvif://<ip>:8000` backchannel); WebRTC candidates 192.168.88.41:8555 + stun:8555. LAN only unless 8555 tcp/udp is port-forwarded.
|
||||
- `auth.enabled: false` only affects port 5000; port 8971 (behind Caddy) always requires login. Caddy injects `Remote-User: guest_viewer` for auto viewer login.
|
||||
|
||||
## Sources
|
||||
|
||||
- Camera API queries (GetDevInfo / GetEnc) run 2026-07-07 from thinkstation
|
||||
- [Reolink RLC-811A product page](https://reolink.com/product/rlc-811a/) · [RLC-811A spec sheet (PDF)](https://m.media-amazon.com/images/I/61ct5728JtL.pdf)
|
||||
- [Reolink RLC-1212A product page](https://reolink.com/product/rlc-1212a/) · [RLC-1212A technical specs](https://connectit.ie/pages/rlc-1212a-technical-specs)
|
||||
- [Reolink Duo 3 PoE product page](https://reolink.com/product/reolink-duo-3-poe/) · [Duo 3 PoE spec sheet (PDF)](https://gzhls.at/blob/ldb/0/0/2/8/6061bca69ab0a9fcdd5fd409ca11286c3755.pdf)
|
||||
@@ -0,0 +1,176 @@
|
||||
# Frigate NVR & CCTV Setup
|
||||
|
||||
**Last Updated:** July 2026
|
||||
**Host:** jgpc — `192.168.88.41`
|
||||
|
||||
---
|
||||
|
||||
## Hardware
|
||||
|
||||
| Component | Details |
|
||||
|-----------|---------|
|
||||
| Machine | Lenovo jgpc P710 |
|
||||
| CPU | Intel Xeon E5-2623 v4 @ 2.60 GHz (4 cores / 8 threads, boost to 3.2 GHz) |
|
||||
| RAM | 24 GB |
|
||||
| GPU | NVIDIA GeForce GTX 1050 Ti (4 GB VRAM) |
|
||||
| OS Disk | 234 GB SSD (`/dev/sda2`) |
|
||||
| Media Storage | 14 TB HDD — mounted at `/mnt/14TB-HD/frigate/media` |
|
||||
|
||||
---
|
||||
|
||||
## Frigate Docker Setup
|
||||
|
||||
| Item | Value |
|
||||
|------|-------|
|
||||
| Image | `ghcr.io/blakeblackshear/frigate:stable-tensorrt` |
|
||||
| Container name | `frigate` |
|
||||
| Config path | `/srv/docker/frigate/config/` |
|
||||
| Media path | `/mnt/14TB-HD/frigate/media` |
|
||||
| Compose file | `jgpc/frigate/docker-compose.yml` (this repo) |
|
||||
| Web UI | `http://192.168.88.41:5000` → `https://cameras.jgitta.com` |
|
||||
| RTSP port | `8554` |
|
||||
| WebRTC port | `8555` |
|
||||
|
||||
**GPU acceleration:** Container runs with `runtime: nvidia` and `NVIDIA_VISIBLE_DEVICES=all`. The GTX 1050 Ti handles:
|
||||
- LPR (licence plate recognition) via GPU
|
||||
- Birdseye re-stream encoding via `h264_nvenc`
|
||||
- ONNX object detection via the `onnx` detector
|
||||
|
||||
**Shared memory:** `shm_size: 1024mb` — required for frame buffers across 6 cameras.
|
||||
|
||||
---
|
||||
|
||||
## Object Detection
|
||||
|
||||
| Item | Value |
|
||||
|------|-------|
|
||||
| Detector | ONNX (GPU-accelerated) |
|
||||
| Model | YOLOv9-t-320 (`yolov9-t-320.onnx`) |
|
||||
| Input size | 320 × 320 |
|
||||
| Label map | COCO-80 |
|
||||
| Model path | `/config/model_cache/onnx/yolov9-t-320.onnx` |
|
||||
|
||||
---
|
||||
|
||||
## Licence Plate Recognition (LPR)
|
||||
|
||||
| Item | Value |
|
||||
|------|-------|
|
||||
| Enabled | Yes |
|
||||
| Device | GPU |
|
||||
| Model size | Small |
|
||||
|
||||
**Known plates:**
|
||||
|
||||
| Name | Plate |
|
||||
|------|-------|
|
||||
| Joe | ABC1234 |
|
||||
| Cynthia | ABC4567 |
|
||||
| Wesley | XYZ9876 |
|
||||
|
||||
---
|
||||
|
||||
## Camera Inventory
|
||||
|
||||
All cameras are **Reolink** PoE units on the `192.168.88.0/24` subnet.
|
||||
|
||||
| Camera | IP | Model notes | Mount location |
|
||||
|--------|----|-------------|----------------|
|
||||
| front_driveway | 192.168.88.105 | Dual-lens panoramic (7680×2160 = two 4K sensors stitched) | Front driveway |
|
||||
| front_yard | 192.168.88.104 | 4K 811A | Front yard |
|
||||
| shop | 192.168.88.103 | 4K 811A (uses HTTPS for API) | Shop / outbuilding |
|
||||
| deck | 192.168.88.101 | 4K 811A | Deck |
|
||||
| back_yard | 192.168.88.102 | 4K 811A | Back yard |
|
||||
| front_right | 192.168.88.100 | 4512×2512 sensor (non-standard resolution) | Front right |
|
||||
|
||||
---
|
||||
|
||||
## Camera Stream Settings
|
||||
|
||||
All cameras confirmed via Reolink API (May 2026):
|
||||
|
||||
| Camera | Main Resolution | Main Codec | Bitrate | FPS | I-frame | Sub Resolution | Sub Codec |
|
||||
|--------|----------------|------------|---------|-----|---------|----------------|-----------|
|
||||
| front_driveway (.105) | 7680×2160 | H.265 | 10240 Kbps | 20 | 1x | 1536×432 | H.264 |
|
||||
| front_yard (.104) | 3840×2160 | H.265 | 6144 Kbps | 25 | 1x | 640×360 | H.264 |
|
||||
| shop (.103) | 3840×2160 | H.265 | 6144 Kbps | 25 | 1x | 640×360 | H.264 |
|
||||
| deck (.101) | 3840×2160 | H.265 | 6144 Kbps | 25 | 1x | 640×360 | H.264 |
|
||||
| back_yard (.102) | 3840×2160 | H.265 | 6144 Kbps | 25 | 1x | 640×360 | H.264 |
|
||||
| front_right (.100) | 4512×2512 | H.265 | 8192 Kbps | 20 | 1x | 896×512 | H.264 |
|
||||
|
||||
**I-frame interval** set to 1x on all cameras so Frigate can start/end recording clips cleanly without waiting for a keyframe.
|
||||
|
||||
---
|
||||
|
||||
## go2rtc Stream Architecture
|
||||
|
||||
Chrome/Firefox cannot play H.265 (HEVC) via MSE (Media Source Extensions), so each camera requires two go2rtc streams:
|
||||
|
||||
```
|
||||
camera_h265 → native H.265 RTSP from camera
|
||||
└─ consumed by Frigate ffmpeg for RECORDING (stream copy, no re-encode)
|
||||
|
||||
camera → ffmpeg:camera_h265#video=h264 (software H.265 → H.264 transcode)
|
||||
└─ served to browser via MSE WebSocket for LIVE VIEW
|
||||
|
||||
camera_sub → native low-res H.264 RTSP sub-stream
|
||||
└─ consumed by Frigate for OBJECT DETECTION only
|
||||
```
|
||||
|
||||
**Key behaviour notes:**
|
||||
- go2rtc uses **lazy initialization** — transcoders only start when a browser opens the live view, and shut down ~30 seconds after the last viewer leaves. This causes a 2–3 second gray screen on first view, which is expected and unavoidable.
|
||||
- The `_h265` streams are kept alive continuously by Frigate's recording ffmpeg processes, so recording starts instantly.
|
||||
- The `#hardware` flag for NVENC transcoding in go2rtc causes EOF crashes with Reolink cameras and **must not be used**. Software transcoding (`libx264`) is used instead.
|
||||
- Reolink cameras drop RTSP connections every 5–20 minutes (firmware behaviour). go2rtc reconnects automatically; this produces a brief gray screen, not static.
|
||||
|
||||
### shop camera note
|
||||
The shop camera (`192.168.88.103`) redirects HTTP → HTTPS. All API calls to shop must use `https://` with `-k` (skip cert verification).
|
||||
|
||||
---
|
||||
|
||||
## Frigate Camera Detection Zones
|
||||
|
||||
| Camera | Detect Resolution | Tracked Objects | Notes |
|
||||
|--------|------------------|-----------------|-------|
|
||||
| front_driveway | 1536×432 | person, car, dog, cat, license_plate | Has zone + LPR; alerts require `front_driveway_zone` |
|
||||
| front_yard | 640×360 | person, car, dog, cat | — |
|
||||
| shop | 640×360 | person, car, dog, cat | Motion mask on upper-right and mid-frame |
|
||||
| deck | 640×360 | person, car, dog, cat | Two motion masks |
|
||||
| back_yard | 640×360 | person, car, dog, cat | Two motion masks |
|
||||
| front_right | 896×512 | person, car, dog, cat | Motion mask on upper-centre |
|
||||
|
||||
---
|
||||
|
||||
## Recording & Retention
|
||||
|
||||
| Type | Retention |
|
||||
|------|-----------|
|
||||
| Alert clips | 30 days |
|
||||
| Detection clips | 30 days |
|
||||
| Motion clips | 30 days |
|
||||
| Continuous | Disabled |
|
||||
| Snapshots | 30 days |
|
||||
|
||||
---
|
||||
|
||||
## Known Issues & Quirks
|
||||
|
||||
- **Reolink H.265 sub-stream firmware bug:** On some Reolink firmware versions, setting the sub-stream to H.265 produces a corrupted bitstream that go2rtc rejects with 404. Sub-streams should always remain H.264.
|
||||
- **front_driveway panoramic:** The 7680×2160 resolution is two 4K sensors stitched side by side. The wide 1536×432 detect resolution in the Frigate config accounts for this.
|
||||
- **front_right non-standard resolution:** Camera reports 4512×2512 rather than standard 4K. Model unknown — may be a 5MP variant or older sensor.
|
||||
- **Swap pressure:** jgpc runs ~5.5 GB swap used under normal load. Monitor if adding more cameras or enabling Birdseye.
|
||||
|
||||
---
|
||||
|
||||
## Changelog
|
||||
|
||||
### 2026-07-07 — Live view fixes, audio, and two-way talk
|
||||
|
||||
- **Green-box fix (front_driveway High stream):** the exec transcode crash-looped because Reolink RTSP emits corrupt HEVC frames at stream-join ("PPS changed between slices"); ffmpeg fell back to software decode and the GPU-only `scale_cuda` filter failed. Replaced with `-hwaccel cuvid -c:v hevc_cuvid -resize 3840x1080` — decode + resize stay on the GPU, no filter graph. (Also: NVENC caps H.264 at 4096 px wide, so the 7680×2160 Duo 3 main stream must be scaled before encode.)
|
||||
- **front_right:** main stream is native H.264 2560×1440 — replaced NVENC transcode with direct passthrough (frees a GPU encode session). Live label renamed "High (Native)".
|
||||
- **Live stream selectors:** added `live: streams:` (High/Low) to all 6 cameras to pin stream choice per device.
|
||||
- **Audio:** enabled on-camera mic audio for front_driveway (Duo 3) and shop (both were off in camera firmware); front_driveway transcode now passes AAC (`-c:a copy` instead of `-an`).
|
||||
- **Two-way talk (all 6 cameras):** each live go2rtc stream now has 3 sources — primary video, `ffmpeg:<name>#audio=opus` (WebRTC audio), and `onvif://<camera>:8000` (backchannel). Added `webrtc: candidates: [192.168.88.41:8555, stun:8555]`. LAN-only unless 8555 tcp/udp is forwarded.
|
||||
- **LPR:** removed `license_plate` from front_driveway tracked objects — the COCO-80 model has no such label (startup warning); LPR runs via Frigate's dedicated plate detector on `car` objects.
|
||||
- **Camera-side:** Duo 3 interframe space set to 1x (gop 1) per Frigate live-view docs for faster stream startup/recovery.
|
||||
- Full camera hardware specs: see `frigate-cameras.md` (this folder).
|
||||
@@ -0,0 +1,25 @@
|
||||
services:
|
||||
open-webui:
|
||||
image: ghcr.io/open-webui/open-webui:main
|
||||
container_name: open-webui
|
||||
network_mode: host
|
||||
restart: always
|
||||
volumes:
|
||||
- open-webui:/app/backend/data
|
||||
environment:
|
||||
- OLLAMA_BASE_URL=http://127.0.0.1:11434
|
||||
- PORT=8080
|
||||
- SCARF_NO_ANALYTICS=true
|
||||
- DO_NOT_TRACK=true
|
||||
- ANONYMIZED_TELEMETRY=false
|
||||
- WHISPER_MODEL=base
|
||||
- DOCKER=true
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl --silent --fail http://localhost:8080/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
volumes:
|
||||
open-webui:
|
||||
external: true
|
||||
@@ -0,0 +1,18 @@
|
||||
services:
|
||||
stirling-pdf:
|
||||
image: stirlingtools/stirling-pdf:latest
|
||||
container_name: stirling-pdf
|
||||
ports:
|
||||
- "8081:8080"
|
||||
volumes:
|
||||
- /srv/docker/stirling-pdf/trainingData:/usr/share/tessdata
|
||||
- /srv/docker/stirling-pdf/configs:/configs
|
||||
- /srv/docker/stirling-pdf/customFiles:/customFiles
|
||||
- /srv/docker/stirling-pdf/logs:/logs
|
||||
environment:
|
||||
- DOCKER_ENABLE_SECURITY=false
|
||||
- INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
|
||||
- LANGS=en_GB
|
||||
- SECURITY_INITIALLOGIN_USERNAME=admin
|
||||
- SECURITY_INITIALLOGIN_PASSWORD=stirling
|
||||
restart: unless-stopped
|
||||
Reference in New Issue
Block a user