Skip to content

Commit 1647500

Browse files
authored
Merge pull request #310 from ch-bas/release/2.1.0
Release 2.1.0 — community_notes + sensor_size_inch + AD410 NVR fix
2 parents 9b286b6 + 55e6b2a commit 1647500

23 files changed

Lines changed: 15039 additions & 9012 deletions
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: "🔧 Report a quirk / behavior"
2+
description: "Something this camera does that isn't in the datasheet — RTSP oddities, ONVIF bugs, firmware regressions, etc."
3+
title: "Quirk: [Brand] [Model] — [short description]"
4+
labels: ["community-note"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
This is for **observed behavior**, not spec corrections. If a spec value in the database is wrong, use the "Correct an existing entry" template instead.
10+
11+
- type: input
12+
id: camera
13+
attributes:
14+
label: "Which camera?"
15+
placeholder: "e.g. Hikvision DS-2CD2387G2-LU"
16+
validations:
17+
required: true
18+
19+
- type: textarea
20+
id: note
21+
attributes:
22+
label: "What does it do?"
23+
description: "One behavior per issue. What happens, under what condition."
24+
placeholder: "e.g. Substream drops to 5fps when WDR is enabled, regardless of the fps set in the UI."
25+
validations:
26+
required: true
27+
28+
- type: dropdown
29+
id: category
30+
attributes:
31+
label: "Category"
32+
options: ["rtsp", "onvif", "firmware", "audio", "ptz", "power", "network", "frigate", "home_assistant", "blue_iris", "other"]
33+
34+
- type: input
35+
id: firmware
36+
attributes:
37+
label: "Firmware version (if known)"
38+
placeholder: "e.g. V5.7.3 build 230801"
39+
40+
- type: input
41+
id: source
42+
attributes:
43+
label: "Source"
44+
description: "Link to the thread / issue / video where this is discussed. If you found it yourself on your own device, write: empirical"
45+
placeholder: "https://… or empirical"
46+
validations:
47+
required: true

CHANGELOG.md

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

77
---
88

9+
## [2.1.0] — 2026-08-22
10+
11+
Adds the **`community_notes`** layer — per-camera observed behaviors/quirks that aren't in the datasheet — plus a build-time `sensor_size_inch` field for the site's sort-by-sensor, and a community data fix.
12+
13+
### Added
14+
- **`community_notes` schema block** — an optional array of user-reported behaviors/quirks (RTSP/ONVIF oddities, firmware regressions, integration gotchas). Explicitly **not specs** and **not project-verified**: each note carries a `source` (URL or the literal `empirical`) + `reported_by` + `date`, rendered under an "unverified" heading. The datasheet-only rule for specs is unchanged.
15+
- Tooling: `npm run add-note` CLI (revalidates before writing), a `camera-quirk.yml` issue template (label `community-note`), lint checks (reject empty arrays / datasheet-domain sources; warn on spec-correction-looking text and implausible dates), a `community_notes_count` CSV column, per-camera docs section, and a coverage summary line. Seeded with 4 sourced notes.
16+
- **`sensor_size_inch`** — a numeric sensor size derived at build time from the `sensor` string (`1/2.8"` → 0.3571), injected into `data/cameras.json` so the site can sort by sensor size without runtime parsing. ~2,776 cameras get it.
17+
18+
### Fixed
19+
- **Amcrest AD410 doorbell is NVR-compatible (#307):** `storage.nvr_compatible` corrected false → true (Dahua-protocol doorbell; owner-confirmed on an Amcrest NVR).
20+
21+
---
22+
923
## [2.0.1] — 2026-08-22
1024

1125
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.

CONTRIBUTING.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,47 @@ See [`configs/README.md`](configs/README.md) for templates and full details.
225225

226226
---
227227

228+
## Community notes (quirks and behaviors)
229+
230+
Datasheets tell you what a camera claims to do. They don't tell you that the substream drops to 5fps when WDR is on, or that ONVIF events stop working after a specific firmware. That knowledge is spread across forum threads and gets lost.
231+
232+
Each camera can carry a `community_notes` array for exactly this. These are **observed behaviors, not specs**, and they are **not verified by the project** — the source link and reporter name carry the accountability.
233+
234+
### What belongs here
235+
- RTSP/ONVIF oddities (wrong default path, substream limits, auth quirks)
236+
- Firmware-specific regressions or fixes
237+
- Integration gotchas for Frigate / Home Assistant / Blue Iris
238+
- Power/PoE behavior under load, hardware revisions with different behavior
239+
240+
### What does NOT belong here
241+
- Spec corrections. If the database says 20m IR and the datasheet says 30m, that's a correction — use the spec fields and link the datasheet.
242+
- Opinions ("image quality is bad"), purchasing advice, or comparisons.
243+
- Anything without a source.
244+
245+
### How to add one
246+
**Easiest:** open a [quirk report issue](https://github.com/ch-bas/cctv-camera-database/issues/new?template=camera-quirk.yml) and we'll file it.
247+
248+
**PR:** add to the camera's JSON:
249+
250+
```json
251+
"community_notes": [
252+
{
253+
"note": "Substream drops to 5fps when WDR is enabled, regardless of the fps set in the UI.",
254+
"category": "rtsp",
255+
"firmware": "V5.7.3 build 230801",
256+
"source": "https://github.com/blakeblackshear/frigate/discussions/12345",
257+
"reported_by": "yourhandle",
258+
"date": "2026-08-22"
259+
}
260+
]
261+
```
262+
263+
Or run `npm run add-note -- --id hikvision-ds-2cd2387g2-lu`.
264+
265+
`source` is a URL, or the literal word `empirical` if you observed it on your own device. Contradicting notes are fine — different firmware, different behavior. We don't delete old notes; `firmware` and `date` let readers judge.
266+
267+
---
268+
228269
## Corrections
229270

230271
Found a mistake? [Open a correction issue](../../issues/new?template=correction.yml) — no need to fork anything.

COVERAGE.md

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
# 📊 Field coverage
22

3-
> Auto-generated by `scripts/coverage-report.js` (do not edit by hand). Last updated: 2026-08-13.
3+
> Auto-generated by `scripts/coverage-report.js` (do not edit by hand). Last updated: 2026-08-22.
44
5-
![environment 100%](https://img.shields.io/badge/environment-100%25-brightgreen) ![FOV 89%](https://img.shields.io/badge/FOV-89%25-brightgreen) ![streams 61%](https://img.shields.io/badge/streams-61%25-green) ![dimensions 54%](https://img.shields.io/badge/dimensions-54%25-yellow) ![IK rating 36%](https://img.shields.io/badge/IK%20rating-36%25-orange) ![color min-lux 59%](https://img.shields.io/badge/color%20min--lux-59%25-yellow) ![Frigate 82%](https://img.shields.io/badge/Frigate-82%25-brightgreen)
5+
![environment 100%](https://img.shields.io/badge/environment-100%25-brightgreen) ![FOV 92%](https://img.shields.io/badge/FOV-92%25-brightgreen) ![streams 53%](https://img.shields.io/badge/streams-53%25-yellow) ![dimensions 50%](https://img.shields.io/badge/dimensions-50%25-yellow) ![IK rating 43%](https://img.shields.io/badge/IK%20rating-43%25-yellow) ![color min-lux 64%](https://img.shields.io/badge/color%20min--lux-64%25-green) ![Frigate 82%](https://img.shields.io/badge/Frigate-82%25-brightgreen)
66

7-
**2,904 cameras** across **74 brands**.
7+
**3,433 cameras** across **77 brands**.
88

99
| Field | Coverage | Filled | Lane |
1010
|---|---|---:|:---:|
11-
| 🌍 Environment (in/outdoor) | `██████████` 100% | 2,904 | [#123](https://github.com/ch-bas/cctv-camera-database/issues/123) |
12-
| 🔎 Lens | `█████████░` 94% | 2,719 | |
13-
| 📡 Field of view | `█████████░` 89% | 2,572 | [#179](https://github.com/ch-bas/cctv-camera-database/issues/179) |
14-
| 💧 IP rating | `█████████░` 89% | 2,580 | |
15-
| 🔬 Sensor | `█████████░` 87% | 2,519 | |
16-
| 🔧 Frigate config | `████████░░` 82% | 2,395 | [#170](https://github.com/ch-bas/cctv-camera-database/issues/170) |
17-
| 🎞️ Video streams | `██████░░░░` 61% | 1,759 | [#177](https://github.com/ch-bas/cctv-camera-database/issues/177) |
18-
| 🌙 Min-lux (color) | `██████░░░░` 59% | 1,725 | [#161](https://github.com/ch-bas/cctv-camera-database/issues/161) |
19-
| 📐 Dimensions | `█████░░░░░` 54% | 1,567 | [#178](https://github.com/ch-bas/cctv-camera-database/issues/178) |
20-
| 🗺️ Markets | `█████░░░░░` 52% | 1,509 | [#166](https://github.com/ch-bas/cctv-camera-database/issues/166) |
21-
| ⚖️ Weight | `█████░░░░░` 47% | 1,368 | [#178](https://github.com/ch-bas/cctv-camera-database/issues/178) |
22-
| 📅 Release year | `████░░░░░░` 38% | 1,104 | [#166](https://github.com/ch-bas/cctv-camera-database/issues/166) |
23-
| 🛡️ IK / impact rating | `████░░░░░░` 36% | 1,042 | [#162](https://github.com/ch-bas/cctv-camera-database/issues/162) |
11+
| 🌍 Environment (in/outdoor) | `██████████` 100% | 3,428 | [#123](https://github.com/ch-bas/cctv-camera-database/issues/123) |
12+
| 🔎 Lens | `█████████░` 94% | 3,220 | |
13+
| 📡 Field of view | `█████████░` 92% | 3,155 | [#179](https://github.com/ch-bas/cctv-camera-database/issues/179) |
14+
| 💧 IP rating | `█████████░` 88% | 3,035 | |
15+
| 🔬 Sensor | `█████████░` 87% | 2,996 | |
16+
| 🔧 Frigate config | `████████░░` 82% | 2,831 | [#170](https://github.com/ch-bas/cctv-camera-database/issues/170) |
17+
| 🌙 Min-lux (color) | `██████░░░░` 64% | 2,189 | [#161](https://github.com/ch-bas/cctv-camera-database/issues/161) |
18+
| 🎞️ Video streams | `█████░░░░░` 53% | 1,827 | [#177](https://github.com/ch-bas/cctv-camera-database/issues/177) |
19+
| 📐 Dimensions | `█████░░░░░` 50% | 1,708 | [#178](https://github.com/ch-bas/cctv-camera-database/issues/178) |
20+
| 🗺️ Markets | `█████░░░░░` 49% | 1,673 | [#166](https://github.com/ch-bas/cctv-camera-database/issues/166) |
21+
| ⚖️ Weight | `████░░░░░░` 44% | 1,505 | [#178](https://github.com/ch-bas/cctv-camera-database/issues/178) |
22+
| 🛡️ IK / impact rating | `████░░░░░░` 43% | 1,463 | [#162](https://github.com/ch-bas/cctv-camera-database/issues/162) |
23+
| 📅 Release year | `████░░░░░░` 35% | 1,196 | [#166](https://github.com/ch-bas/cctv-camera-database/issues/166) |
24+
25+
Cameras with community notes: 4 (4 notes total).
2426

2527
Help raise a lane — see [open data-collection issues](https://github.com/ch-bas/cctv-camera-database/issues) (index: #163).

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ An open, structured database of 3,433 CCTV / IP camera models and their technica
99
### Field coverage
1010

1111
<!-- coverage:start (auto-generated by scripts/coverage-report.js — do not edit by hand) -->
12-
![environment 100%](https://img.shields.io/badge/environment-100%25-brightgreen) ![FOV 89%](https://img.shields.io/badge/FOV-89%25-brightgreen) ![streams 61%](https://img.shields.io/badge/streams-61%25-green) ![dimensions 54%](https://img.shields.io/badge/dimensions-54%25-yellow) ![IK rating 36%](https://img.shields.io/badge/IK%20rating-36%25-orange) ![color min-lux 59%](https://img.shields.io/badge/color%20min--lux-59%25-yellow) ![Frigate 82%](https://img.shields.io/badge/Frigate-82%25-brightgreen)
12+
![environment 100%](https://img.shields.io/badge/environment-100%25-brightgreen) ![FOV 92%](https://img.shields.io/badge/FOV-92%25-brightgreen) ![streams 53%](https://img.shields.io/badge/streams-53%25-yellow) ![dimensions 50%](https://img.shields.io/badge/dimensions-50%25-yellow) ![IK rating 43%](https://img.shields.io/badge/IK%20rating-43%25-yellow) ![color min-lux 64%](https://img.shields.io/badge/color%20min--lux-64%25-green) ![Frigate 82%](https://img.shields.io/badge/Frigate-82%25-brightgreen)
1313

1414
📊 **[Full field-coverage report → COVERAGE.md](COVERAGE.md)**
1515
<!-- coverage:end -->
@@ -47,6 +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+
- **Community notes** — user-reported quirks and behaviors per camera, sourced and attributed, kept separate from datasheet specs
5051
- **Pagination** — page through all 3,433 cameras, 25 per page
5152
- **Stats bar** — live counts for total cameras, brands, 4K+, WiFi, and no-subscription models
5253

cameras/amcrest/ad410-doorbell.json

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"storage": {
3434
"onboard": false,
3535
"max_microsd_gb": 128,
36-
"nvr_compatible": false,
36+
"nvr_compatible": true,
3737
"cloud": true
3838
},
3939
"protocols": [
@@ -64,7 +64,7 @@
6464
"markets": [
6565
"global"
6666
],
67-
"last_verified": "2026-08-21",
67+
"last_verified": "2026-08-22",
6868
"power_source": [
6969
"battery",
7070
"ac-mains"
@@ -94,5 +94,14 @@
9494
},
9595
"environment": [
9696
"outdoor"
97+
],
98+
"community_notes": [
99+
{
100+
"note": "go2rtc opens the Dahua two-way-audio backchannel by default, which can disrupt the doorbell's button/chime. Append #backchannel=0 to the go2rtc stream URL for normal behavior; #backchannel=1 enables two-way audio (needs extra setup).",
101+
"category": "frigate",
102+
"source": "https://github.com/ch-bas/cctv-camera-database/issues/301",
103+
"reported_by": "ch-bas",
104+
"date": "2026-08-22"
105+
}
97106
]
98107
}

cameras/hikvision/ds-2cd2387g2-lu.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,5 +116,14 @@
116116
},
117117
"environment": [
118118
"outdoor"
119+
],
120+
"community_notes": [
121+
{
122+
"note": "Substream lives at /Streaming/Channels/102 (main is /101), which isn't in the datasheet. Frigate/go2rtc also needs the camera set to RTSP Authentication digest/basic with Digest Algorithm MD5, or the stream fails to open.",
123+
"category": "rtsp",
124+
"source": "https://docs.frigate.video/configuration/camera_specific/",
125+
"reported_by": "ch-bas",
126+
"date": "2026-08-22"
127+
}
119128
]
120129
}

cameras/reolink/e1-zoom.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,5 +102,14 @@
102102
"ptz": {
103103
"onvif_ptz": "absolute",
104104
"autotracking": true
105-
}
105+
},
106+
"community_notes": [
107+
{
108+
"note": "For Reolink, the HTTP-FLV streams tend to be more reliable in Frigate than RTSP (which can stall / throw non-monotonic-timestamp errors); go2rtc can use the http source and add a secondary RTSP stream only for audio.",
109+
"category": "rtsp",
110+
"source": "https://docs.frigate.video/configuration/camera_specific/",
111+
"reported_by": "ch-bas",
112+
"date": "2026-08-22"
113+
}
114+
]
106115
}

cameras/sv3c/c25.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,14 @@
104104
"last_verified": "2026-08-21",
105105
"environment": [
106106
"outdoor"
107+
],
108+
"community_notes": [
109+
{
110+
"note": "go2rtc's native RTSP client hangs on this camera (live view spins forever); prefixing the URL with ffmpeg: (ffmpeg:rtsp://.../11) fixes it. Stream paths are /11 (main) and /12 (sub), not the /stream0 & /stream1 shown in older docs.",
111+
"category": "rtsp",
112+
"source": "https://github.com/ch-bas/cctv-camera-database/issues/300",
113+
"reported_by": "ch-bas",
114+
"date": "2026-08-22"
115+
}
107116
]
108117
}

0 commit comments

Comments
 (0)