Skip to content

Commit 4a7622f

Browse files
authored
Merge pull request #313 from ch-bas/release/2.2.0
Release 2.2.0 — dedupe + docs accuracy + tooling audit sweep
2 parents 1647500 + 977b182 commit 4a7622f

1,875 files changed

Lines changed: 23899 additions & 6187 deletions

File tree

Some content is hidden

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

CHANGELOG.md

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

77
---
88

9+
## [2.2.0] — 2026-08-22
10+
11+
A correctness release: removed four duplicate camera entries (3,433 → 3,429), a community-verified Frigate config, a README/docs accuracy pass, and a wide **audit sweep of the build/generator tooling** — including making `npm run add` produce valid records and stopping several generators from fabricating or mis-reporting data. Also surfaces substream coverage/specs.
12+
13+
### Added
14+
- **Substream surfacing (#177)** — no schema change; `video.streams[]` already carries it, it was just invisible. `coverage-report.js` splits the "Video streams" lane into **"Video streams (any)"** (53%) and **"Substream data"** (24%, any non-`main` stream) so the gap is trackable on its own line. `build.js` injects two derived fields into the aggregate (flat, alongside `sensor_size_inch`/`added` — kept out of the AJV schema, which validates source not build output): `substream_count` and `substream_max_resolution` (highest-pixel non-`main` stream). Per-camera docs now render a full **Streams** table (every stream's resolution/fps/codec), not just the main resolution.
15+
16+
### Verified
17+
- **Hikvision DS-2CD2143G2-I Frigate config (#311):** community-confirmed working on Frigate 0.17.x and 0.18.0-beta3 (both main + sub streams, no changes needed) — marked `configs.frigate.verified` and `last_verified` bumped. Thanks @IAmKonni.
18+
19+
### Removed
20+
- **Fake "NetCamCenter" brand (2 entries):** `netcamcenter-ndm-7702-a` and `-ndm-7703-al` were Bosch FLEXIDOME multi 7000i cameras (their own aliases said so), duplicating the better-sourced `bosch/ndm-7702-a` / `bosch/ndm-7703-al`. NetCamCenter is a German retailer, not a manufacturer.
21+
- **Two Hikvision same-model duplicates:** `ds-2cd1143g2-liuf-n` and `ds-2cd2h43g2-izs-uk` — sparse entries citing generic hikvision.com homepages whose conflicting specs are wrong per the official datasheet (LIUF-N: microSD 256→512 GB, FOV 107→98°/78°; IZS-UK: IR 60→40 m, microSD 256→512 GB, FOV 106-32→95.8-29.2°). The datasheet-accurate base entries are kept; the one real signal from IZS-UK (UK market) was merged into the base.
22+
23+
### Docs
24+
- **README accuracy pass:** fixed the broken "Querying the data" example (`connectivity``power_source` for PoE), corrected the `connectivity` field example (PoE lives in `power_source`), unified three disagreeing RTSP counts to the actual `rtsp-patterns.json` totals (172 brands / 118 verified / 54 unverified / 349 templates), dropped the hand-maintained (badly stale) Market coverage table in favor of a query snippet, replaced the all-checked Roadmap with the real open work (#164/#165 re-sourcing, #169 resolution backfill, Frigate verification, `community_notes`), documented the hosted JSON API, and added a CI status badge plus Releases/citation sections.
25+
- **`build.js` now auto-maintains** the "search N cameras" showcase caption and the RTSP-layer counts, so they can't drift from the dataset again (joining the brand/stat counts it already syncs).
26+
- **Corrected a miscount in the historical [1.55.0] entry:** that release actually added +159 cameras (2,617 → 2,776), not +147 → 2,764 — Uniarch gained 37 files, not 25 (12 motorized-varifocal/PTZ + UHO models were never itemized). Verified against the `v1.54.3`/`v1.55.0`/`v1.56.0` tags; the count chain now reconciles end-to-end.
27+
28+
### Fixed — tooling & generators (audit sweep)
29+
Data-affecting:
30+
- **Sensor sort for worded 1" formats:** `sensorSizeInch` (build.js + the site parser) now accepts `1-inch` / `1 in.` / `1 inch`, so Bosch's 1" flagships (MIC 7504 ×3, NDP-7804) sort by true sensor size instead of collapsing to null/last.
31+
- **README "By the numbers" MP bins** now match their labels: `4K / 8MP+`, `4–7MP` (was mislabeled "4–5MP" but counted <8MP), `Under 4MP` (was "1080p–2MP" but counted <4MP, and dropped the 0-MP hub). The three bins now partition the whole catalogue.
32+
- **Doc pages:** guarded `night_vision.type` so 45 ACTi pages no longer render `| Night vision | undefined |`; `gen-docs` now **prunes** pages for deleted/renamed cameras (removed 22 ghost `.md`, incl. the deleted `ds-2cd2h43g2-izs-uk`, that were still served via Pages).
33+
- **`npm run add` wizard** was writing invalid/fabricated data — now it validates against the schema before writing (like `add-note`), records PoE correctly (`power_source`, not the wrong `connectivity` enum), stops fabricating `range_m: 20` / `megapixels: 2` / `NaNMP` / an Enter-selected form factor, drops the schema-rejected `msrp_usd`, and adds `floodlight`/`doorbell`.
34+
35+
Robustness (no data change):
36+
- **check-sources** now flags datasheets that 301 to the vendor homepage (the exact rot the weekly cron exists to catch), surfaces the real `err.cause`, and exits non-zero when a filter matches nothing.
37+
- **archive-sources** no longer counts a Wayback `429` as a successful capture (so it revisits), and a typo'd `--brand` can't throw an unhandled rejection in the never-fail-CI job.
38+
- **gen-netbox** no longer fabricates a DC power port from a PoE nominal voltage (gated on `power_source: dc`), and the 60/90 W 802.3bt detector is word-anchored so a `360 Wh` battery spec can't match.
39+
- **strix-fetch** snapshot-key separator is now the `\u0000` escape instead of a raw NUL byte (an editor/formatter stripping the control char would have silently invalidated ~17k keys).
40+
- **build.js** guards the pre-validation `id` sort so a contributor file missing `id` gets Ajv's friendly error, not a bare `TypeError`.
41+
- **build.js** #169 megapixels-vs-pixels warning no longer false-flags the 13 multi-imager cameras with `lens.count > 1` (multi-directional PTZ/domes typed `ptz`/`dome`, e.g. Hanwha PNM-9322VQP) whose stated megapixels is the combined multi-sensor total; the skip now keys on `lens.count > 1`, not just the `panoramic`/`dual-lens` type.
42+
- **check-staleness** rejects a garbage `STALE_MONTHS` (was silently reporting 0 stale) and computes the month cutoff without the ±3-day month-end drift.
43+
- **lint-data / coverage-report** anchor to the repo root, not the cwd; **package-release** gives a clear error when the `zip` binary is missing; **build-qa-validator** cleans up its temp file even on esbuild failure; **add-note**'s flag parser no longer swallows the following flag as a value.
44+
45+
---
46+
947
## [2.1.0] — 2026-08-22
1048

1149
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.
@@ -317,7 +355,7 @@ Camera count 2,776 → **2,797**.
317355

318356
## [1.55.0] — 2026-08-02
319357

320-
**Annke + Camius + Uniview + Uniarch catalog expansion (+147 cameras).**
358+
**Annke + Camius + Uniview + Uniarch catalog expansion (+159 cameras).**
321359

322360
### Added — Annke (+21) — #217, @fvdpol
323361
- **+21 Annke analog/coax cameras** (HD-TVI/AHD/CVI — bullets, turrets, dome, PTZ): C51 (BY/BZ/EZ), CR1 (CJ/CV/CW/CX/CY/CZ/DD/DR/EQ/ES/FC), CT1 (DW/FC/GR/GS/GT/GU/GV). Each sourced to an official Annke datasheet PDF (Shopify CDN) where available.
@@ -329,15 +367,16 @@ Camera count 2,776 → **2,797**.
329367
### Added — Uniview (+94)
330368
- **EasyBasic (23)**, **Owlview / Owlview Plus / Owlview PTZ (32)**, **PRIMEI / II / III (29)** — incl. fisheye and dual-lens stitched panoramic, **Pro / ProBasic / Alphaview (3)** — fisheye, 180° OmniView, 4-directional multi-sensor, **Pro / Prime PTZ (5)** — 4x–42x zoom w/ laser illuminators, and **EasyProject (8)** — LightHunter/dual-light + 4G cellular. Specs from official Uniview datasheets. Two `RVS441-2D` **security-radar** units were excluded (not IP cameras).
331369

332-
### Added — Uniarch (+25)
370+
### Added — Uniarch (+37)
333371
- **Halo (4):** IPC-T242/B242/T244/B244-ADF28K-WP — ColorHunter full-color turrets/bullets (2/4MP).
334372
- **Entry (21):** ECO IR + dual-light bullets/turrets/domes (IPC-B/T/D 1/2-series, 2/4MP), the `APF28K`/`PF28K` hardware variants, and 2 pan-tilt models (IPC-P222/P224-AF40C). Specs from official uniarch.cn datasheets.
373+
- **Motorized varifocal + PTZ (12):** `ADZK` 3-series motorized-zoom — IPC-B314 (4MP bullet), IPC-D312/D314 (2/4MP domes), IPC-T312/T314 (2/4MP turrets); the IPC-P413-X20K (3MP, 20× PTZ); and six UHO-line units — UHO-B1R-M2F3-A (2MP bullet) plus the UHO-P1A-M5F4D / UHO-S2-M3-A / UHO-S2-M4 / UHO-S2E-M3-A / UHO-S2E-M4 PTZ (3–5MP). Specs from official uniarch.cn datasheets.
335374

336375
### Changed / Fixed — Annke maintainer review
337376
- **2 slug corrections** (301 redirects added on the web deploy): `annke-c800x``annke-c800x-i91by`, `annke-c800-i91db``annke-c800x-i91db`.
338377
- Datasheet-verified: `cr1dd` / `cr1dr` resolution `2328×1504`**`3328×1504`** (transposed-digit typo); `cr1fc`**`2592×1944`**; `cr1cj` warm-light range 20 → **30 m**; `ct1fc` — removed a mismatched datasheet source.
339378

340-
Camera count 2,617 → **2,764**.
379+
Camera count 2,617 → **2,776**.
341380

342381
## [1.54.3] — 2026-07-31
343382

COVERAGE.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,24 @@
44
55
![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-
**3,433 cameras** across **77 brands**.
7+
**3,429 cameras** across **76 brands**.
88

99
| Field | Coverage | Filled | Lane |
1010
|---|---|---:|:---:|
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) |
11+
| 🌍 Environment (in/outdoor) | `██████████` 100% | 3,424 | [#123](https://github.com/ch-bas/cctv-camera-database/issues/123) |
12+
| 🔎 Lens | `█████████░` 94% | 3,217 | |
13+
| 📡 Field of view | `█████████░` 92% | 3,151 | [#179](https://github.com/ch-bas/cctv-camera-database/issues/179) |
14+
| 💧 IP rating | `█████████░` 88% | 3,031 | |
15+
| 🔬 Sensor | `█████████░` 87% | 2,993 | |
16+
| 🔧 Frigate config | `████████░░` 82% | 2,827 | [#170](https://github.com/ch-bas/cctv-camera-database/issues/170) |
17+
| 🌙 Min-lux (color) | `██████░░░░` 64% | 2,187 | [#161](https://github.com/ch-bas/cctv-camera-database/issues/161) |
18+
| 🎞️ Video streams (any) | `█████░░░░░` 53% | 1,827 | [#177](https://github.com/ch-bas/cctv-camera-database/issues/177) |
1919
| 📐 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) |
20+
| 🗺️ Markets | `█████░░░░░` 49% | 1,671 | [#166](https://github.com/ch-bas/cctv-camera-database/issues/166) |
2121
| ⚖️ 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) |
22+
| 🛡️ IK / impact rating | `████░░░░░░` 43% | 1,460 | [#162](https://github.com/ch-bas/cctv-camera-database/issues/162) |
23+
| 📅 Release year | `████░░░░░░` 35% | 1,194 | [#166](https://github.com/ch-bas/cctv-camera-database/issues/166) |
24+
| 🎞️ Substream data | `██░░░░░░░░` 24% | 817 | [#177](https://github.com/ch-bas/cctv-camera-database/issues/177) |
2425

2526
Cameras with community notes: 4 (4 notes total).
2627

0 commit comments

Comments
 (0)