Skip to content

Commit dd6db81

Browse files
authored
Merge pull request #295 from ch-bas/release/2.0.1
Release 2.0.1 — community fixes (#293, #289, #294)
2 parents 61530db + 7f5759a commit dd6db81

55 files changed

Lines changed: 505 additions & 81 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/release.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ jobs:
4747
if: steps.check.outputs.exists == 'false'
4848
run: node scripts/build.js
4949

50+
- name: Package release archive
51+
if: steps.check.outputs.exists == 'false'
52+
env:
53+
RELEASE_VERSION: ${{ steps.version.outputs.version }}
54+
RELEASE_TAG: v${{ steps.version.outputs.version }}
55+
run: npm run package-release
56+
5057
- name: Extract changelog for this version
5158
if: steps.check.outputs.exists == 'false'
5259
id: changelog
@@ -67,5 +74,6 @@ jobs:
6774
name: v${{ steps.version.outputs.version }}
6875
body: ${{ steps.changelog.outputs.body }}
6976
files: |
77+
cameras.zip
7078
data/cameras.json
7179
data/cameras.csv

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ node_modules/
44
.idea/
55
.env
66
cameras/**/*.md
7+
/cameras.zip
78

89
# Local datasheet cache — pulled datasheets kept for reuse, never committed
910
datasheet-cache/

CHANGELOG.md

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,39 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
66

77
---
88

9-
## [Unreleased]
9+
## [2.0.1] — 2026-08-22
10+
11+
Adds a `network.ethernet_speed_mbps` schema field and backfills it for 280 PoE cameras across five brands (with a companion NetBox devicetype-library export), plus a batch of community-reported camera/config fixes and deeper Frigate/go2rtc integration notes.
1012

1113
### Added
14+
- **Release archive** — GitHub Releases now include `cameras.zip`, bundling `cameras.json`, `cameras.csv`, and machine-readable `release-metadata.json` with release/commit provenance, camera count, byte sizes, and SHA-256 checksums. The standalone JSON and CSV assets remain available for compatibility.
1215
- **`network` schema block** — optional `network.ethernet_speed_mbps` (RJ45 link speed: 10 / 100 / 1000 / 2500 / 10000) and `network.ethernet_ports`, read from the datasheet's Ethernet / Network Interface row. The field is optional; no existing record is affected.
1316
- **Ethernet link speed for 46 Hikvision PoE cameras** — backfilled from the official datasheets (44 × 100 Mbps `10M/100M self-adaptive`, 2 × Gigabit on the iDS-2CD7A DeepinView pair). No values estimated. Two records (DS-2CD1027G2H-LIU, DS-2CD3086G2-IS) also had their `sources` upgraded from JS product pages to the official `assets.hikvision.com` datasheet PDFs.
1417
- **Ethernet link speed for 30 Dahua PoE cameras** — backfilled from the official datasheets' `Network Port RJ-45` row (26 × 100 Mbps, 4 × Gigabit on the WizSense-3 PRO models). `IPC-HDW1439V-IL-K` was deliberately left unfilled — its exact `-IL-K` datasheet isn't publicly published, and the family value wasn't read from that model's own sheet.
1518
- **Ethernet link speed for 86 Uniview PoE cameras** — backfilled from each model's official spec sheet (`RJ45 … Base-TX` row; 83 × 100 Mbps, 3 × Gigabit on the Pro PTZ / high-end models). Two `-WP-L2` Owlview variants were left unfilled — their published datasheets omit the network-interface row.
1619
- **Ethernet link speed for 73 Axis PoE cameras** — backfilled from each official datasheet's `RJ45 …BASE-T` connector row (60 × 100 Mbps, 13 × Gigabit). Four were left unfilled: `AXIS F4105-LRE` (a modular sensor unit with no network port of its own) and three discontinued models (`P3265-LVE`, `P3344`, `Q2101-E`) whose datasheets aren't currently obtainable.
1720
- **Ethernet link speed for all 45 Hanwha PoE cameras** — backfilled from each model's official datasheet `Ethernet RJ-45 (…BASE-T)` row (32 × 100 Mbps, 13 × Gigabit on the Wisenet P / multi-sensor models). Complete coverage — no Hanwha PoE camera left unfilled.
18-
- **`scripts/gen-netbox.js`** — exports cameras that have a known link speed to [netbox-community/devicetype-library](https://github.com/netbox-community/devicetype-library) YAML device types. Skips any camera missing `ethernet_speed_mbps`, so the NetBox interface `type` is never guessed, and only annotates PoE (`poe_mode`/`poe_type`) when the datasheet states the 802.3 standard. Emits the `---` document-start marker and maps dataset brand names to the library's manufacturer/directory convention (e.g. `Axis``AXIS`); run the output through the library's `yamlfmt` pre-commit hook before submitting.
21+
- **`scripts/gen-netbox.js`** — exports cameras that have a known link speed to [netbox-community/devicetype-library](https://github.com/netbox-community/devicetype-library) YAML device types. Skips any camera missing `ethernet_speed_mbps`, so the NetBox interface `type` is never guessed, and only annotates PoE (`poe_mode`/`poe_type`) when the datasheet states the 802.3 standard. Emits the `---` document-start marker and maps dataset brand names to the library's manufacturer/directory convention (e.g. `Axis``AXIS`); run the output through the library's `yamlfmt` pre-commit hook before submitting. Upstream PRs: netbox-community/devicetype-library #4485#4489.
22+
- **Hanwha QNP-6250R (#293):** community-submitted 2MP 25x IR PTZ (Wisenet Q). Full spec from the official datasheet — 1/2.8" CMOS, 4.44–111 mm 25x zoom, 100 m Wise IR, 120 dB WDR, auto-tracking, PoE+ Class 4, IP66/IK10, 256 GB microSD — including `network.ethernet_speed_mbps`.
23+
- **Tapo TCB72:** 2K QHD (4MP) pan/tilt AI Wi-Fi camera (retail SKU) — 1/3" starlight CMOS, 4 mm F2.0, 850 nm IR 12 m, 12x digital zoom, two-way audio + 99 dB siren, RTSP+ONVIF, DC 9 V, indoor. Specs from the official TP-Link product page.
1924

2025
### Changed
2126
- **PoE standard added to `power.method` for 22 Dahua cameras** — where the datasheet's Power Supply row states it (e.g. `12VDC/PoE``12VDC/PoE (802.3af)`, `12VDC/PoE+``12VDC/PoE+ (802.3at)`). Datasheet-grounded; enables a correct NetBox `poe_type`.
27+
- **go2rtc `tapo://` note on 36 Tapo cameras (#297):** documents TP-Link's proprietary go2rtc protocol as a more-stable alternative to RTSP on the mains/USB models with local streaming — including the firmware-dependent password form (Tapo cloud account password, or `admin` + UPPERCASE SHA-256 of the camera password), the audio-disable workaround for non-monotonic-timestamp errors, and a Chrome live-view aspect-ratio quirk. Battery/hub/app-only models skipped.
28+
- **Tapo ONVIF PTZ + go2rtc two-way audio documented** — on the 20 pan/tilt models, Tapo exposes ONVIF PTZ on **port 2020** (wire Frigate's `onvif` block there for manual pan/tilt); on the 34 mic+speaker models, the go2rtc `tapo://` backchannel enables Frigate's live-view talk button.
29+
30+
### Fixed
31+
- **Reolink RLC-1212A form factor (#294):** was mislabeled a dome throughout (id/model/type/feature); it's a bullet (Φ67 × 187 mm barrel). Corrected and the `-dome` slug dropped → `reolink-rlc-1212a` (old URL 301-redirected in the web repo).
32+
- **Axis multi-sensor Frigate configs (#296):** the 5 panoramic multi-sensor models (P3727-PLE, P3737-PLE, P3818-PVE, Q3819-PVE, Q6100-E) lacked `?camera=` on `/axis-media/media.amp`, so Frigate only saw the first channel. Templates now pin `?camera=1` with per-sensor notes.
33+
- **Reolink E1 Zoom detect resolution:** `configs.frigate.detect` was the 1280×720 default but the camera's sub-stream (`/Preview_01_sub`) is locked at 640×480 — corrected to match so Frigate isn't resizing every frame.
34+
- **SV3C C25 / C12 RTSP paths (#12, #300):** owner-reported the shipped `/stream0`+`/stream1` don't work — corrected to `/11` (main) + `/12` (sub), and documented that go2rtc needs the `ffmpeg:` prefix (its native RTSP client hangs → spinning live view).
35+
- **SV3C C12 is RTSP-only (#12):** removed the incorrect `onvif` protocol (Home Assistant integration switched to generic); confirmed by the owner and the product listing. C25 keeps ONVIF.
36+
- **Amcrest AD410 go2rtc backchannel (#301):** documented `#backchannel=0` (two-way off / normal button+chime — the recommended default) vs `#backchannel=1` (two-way audio on, needs extra setup).
37+
38+
### Verified
39+
- **Tapo C545D (#289):** Frigate config confirmed working; documented the community-reported per-lens RTSP mapping (wide lens `/stream1` + `/stream2`, telephoto lens `/stream6` + `/stream7`).
40+
- **Tapo C510W (#303):** Frigate config confirmed working (both streams, Frigate 0.18.0-344efb6).
41+
- **Amcrest AD410 doorbell (#302):** Frigate config confirmed working (main stream, Frigate 0.17).
2242

2343
---
2444

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# CCTV Camera Database
22

3-
An open, structured database of 3,431 CCTV / IP camera models and their technical specifications, covering 77 brands across every market segment — from budget consumer WiFi cameras to enterprise PTZ domes and thermal imaging systems. Each camera is a validated JSON file, aggregated into a single queryable dataset (JSON + CSV).
3+
An open, structured database of 3,433 CCTV / IP camera models and their technical specifications, covering 77 brands across every market segment — from budget consumer WiFi cameras to enterprise PTZ domes and thermal imaging systems. Each camera is a validated JSON file, aggregated into a single queryable dataset (JSON + CSV).
44

55
[![cameras](https://img.shields.io/badge/cameras-3%2C431-blue)](data/cameras.json)
66
[![brands](https://img.shields.io/badge/brands-77-green)](cameras/)
@@ -47,7 +47,7 @@ Prefer to self-host or browse offline? A [standalone demo](docs/demo.html) (just
4747
- **Filter** — narrow by brand, camera type, night vision, resolution, or market
4848
- **Sort** — click any column header to sort ascending/descending
4949
- **Detail drawer** — click a row to slide open the full spec sheet (resolution, connectivity, protocols, storage, audio, pricing, source links)
50-
- **Pagination** — page through all 3,431 cameras, 25 per page
50+
- **Pagination** — page through all 3,433 cameras, 25 per page
5151
- **Stats bar** — live counts for total cameras, brands, 4K+, WiFi, and no-subscription models
5252

5353
---
@@ -174,7 +174,7 @@ Or open `data/cameras.csv` in any spreadsheet for a quick browse.
174174
175175
| Metric | Count |
176176
|--------|-------|
177-
| Total cameras | **3,431** |
177+
| Total cameras | **3,433** |
178178
| Brands | **77** |
179179
| Form factors | 11 (bullet, dome, turret, PTZ, dual-lens, panoramic, covert, box, fisheye, floodlight, doorbell) |
180180
| PoE wired | 2,640 |

cameras/amcrest/ad410-doorbell.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
"markets": [
6565
"global"
6666
],
67-
"last_verified": "2026-07-04",
67+
"last_verified": "2026-08-21",
6868
"power_source": [
6969
"battery",
7070
"ac-mains"
@@ -78,7 +78,10 @@
7878
},
7979
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}:554/cam/realmonitor?channel=1&subtype=0",
8080
"best_substream": "rtsp://{user}:{pass}@{ip}:554/cam/realmonitor?channel=1&subtype=1",
81-
"notes": "Uses Dahua protocol (Amcrest standard). Portrait 3:4 aspect ratio — set detect to 720x960. Community favorite for local-only doorbell with Frigate. Button press exposed as Dahua event (AccessControl/CallNoAnswered). For two-way audio use go2rtc with Dahua back-channel."
81+
"notes": "Uses Dahua protocol (Amcrest standard). Portrait 3:4 aspect ratio — set detect to 720x960. Community favorite for local-only doorbell with Frigate. Button press exposed as Dahua event (AccessControl/CallNoAnswered). go2rtc backchannel (append to the go2rtc stream URL): #backchannel=0 = two-way audio off, normal button/chime behavior (recommended default — go2rtc otherwise auto-opens the Dahua backchannel, which can disrupt the doorbell); #backchannel=1 = two-way audio on, requires extra setup (e.g. github.com/RobTheBuilder2/amcrest-intercom).",
82+
"verified": true,
83+
"tested_by": "Zemoj (GitHub #302)",
84+
"tested_version": "0.17"
8285
},
8386
"home_assistant": {
8487
"integration": "amcrest",

cameras/axis/p3727-ple.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,9 @@
7474
"height": 720,
7575
"fps": 5
7676
},
77-
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=1920x1080",
78-
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=640x480"
77+
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=1920x1080",
78+
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=640x480",
79+
"notes": "Multi-sensor camera: append ?camera=N to select each sensor (N = 1-4); camera=1 is shown. Add each sensor to Frigate as its own camera. Without ?camera= the encoder streams only the first channel."
7980
},
8081
"home_assistant": {
8182
"integration": "axis",

cameras/axis/p3737-ple.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,9 @@
7272
"height": 720,
7373
"fps": 5
7474
},
75-
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=1920x1080",
76-
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=640x480"
75+
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=1920x1080",
76+
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=640x480",
77+
"notes": "Multi-sensor camera: append ?camera=N to select each sensor (N = 1-4); camera=1 is shown. Add each sensor to Frigate as its own camera. Without ?camera= the encoder streams only the first channel."
7778
},
7879
"home_assistant": {
7980
"integration": "axis",

cameras/axis/p3818-pve.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,9 @@
6969
"height": 720,
7070
"fps": 5
7171
},
72-
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=1920x1080",
73-
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=640x480"
72+
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=1920x1080",
73+
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=640x480",
74+
"notes": "Multi-sensor camera: append ?camera=N to select each sensor (N = 1-3); camera=1 is shown. Add each sensor to Frigate as its own camera. Without ?camera= the encoder streams only the first channel."
7475
},
7576
"home_assistant": {
7677
"integration": "axis",

cameras/axis/q3819-pve.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,9 @@
7373
"height": 720,
7474
"fps": 5
7575
},
76-
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=1920x1080",
77-
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=640x480"
76+
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=1920x1080",
77+
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=640x480",
78+
"notes": "Multi-sensor camera: append ?camera=N to select each sensor (N = 1-4); camera=1 is shown. Add each sensor to Frigate as its own camera. Without ?camera= the encoder streams only the first channel."
7879
},
7980
"home_assistant": {
8081
"integration": "axis",

cameras/axis/q6100-e.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,9 @@
6969
"height": 720,
7070
"fps": 5
7171
},
72-
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=1920x1080",
73-
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?resolution=640x480"
72+
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=1920x1080",
73+
"best_substream": "rtsp://{user}:{pass}@{ip}/axis-media/media.amp?camera=1&resolution=640x480",
74+
"notes": "Multi-sensor camera: append ?camera=N to select each sensor (N = 1-4); camera=1 is shown. Add each sensor to Frigate as its own camera. Without ?camera= the encoder streams only the first channel."
7475
},
7576
"home_assistant": {
7677
"integration": "axis",

0 commit comments

Comments
 (0)