Skip to content

Commit 243c7e9

Browse files
authored
Merge pull request #14 from ch-bas/release/1.5.0
Release v1.5.0 — SV3C brand, Dahua SDT7425, full Dahua/Hikvision config audit
2 parents 4991e03 + 5ef72d4 commit 243c7e9

393 files changed

Lines changed: 5741 additions & 8594 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.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
## Summary
2+
3+
<!-- One-paragraph overview of what this release delivers -->
4+
5+
### Added
6+
7+
<!-- New brands, cameras, schema fields, frontend features.
8+
Reference issues with "closes #N" to auto-close them on merge. -->
9+
10+
-
11+
12+
### Fixed
13+
14+
<!-- Data corrections, removed fabricated configs, deduplication, audits -->
15+
16+
-
17+
18+
### Changed
19+
20+
<!-- Schema migrations, workflow changes, breaking changes -->
21+
22+
- Database: **X,XXX cameras across XX brands**
23+
24+
## Checklist
25+
26+
- [ ] `npm run build` passes — all cameras validate
27+
- [ ] `package.json` version bumped (release auto-creates tag + GitHub Release on merge)
28+
- [ ] CHANGELOG.md has a section for this version (used as release notes)
29+
- [ ] README.md stats synced (camera/brand counts, badges, brand table)
30+
- [ ] No fabricated specs — every new camera has a verifiable source URL

.github/workflows/release.yml

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ name: release
22

33
on:
44
push:
5+
branches: [main]
56
tags:
67
- "v*"
78

@@ -18,25 +19,48 @@ jobs:
1819
with:
1920
node-version: "20"
2021

22+
- name: Determine version
23+
id: version
24+
run: |
25+
if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then
26+
echo "version=${GITHUB_REF#refs/tags/v}" >> "$GITHUB_OUTPUT"
27+
else
28+
echo "version=$(node -p "require('./package.json').version")" >> "$GITHUB_OUTPUT"
29+
fi
30+
31+
- name: Skip if release already exists
32+
id: check
33+
env:
34+
GH_TOKEN: ${{ github.token }}
35+
run: |
36+
if gh release view "v${{ steps.version.outputs.version }}" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
37+
echo "exists=true" >> "$GITHUB_OUTPUT"
38+
echo "Release v${{ steps.version.outputs.version }} already exists — skipping."
39+
else
40+
echo "exists=false" >> "$GITHUB_OUTPUT"
41+
fi
42+
2143
- name: Build dataset
44+
if: steps.check.outputs.exists == 'false'
2245
run: node scripts/build.js
2346

24-
- name: Extract version from tag
25-
id: version
26-
run: echo "version=${GITHUB_REF#refs/tags/v}" >> "$GITHUB_OUTPUT"
27-
2847
- name: Extract changelog for this version
48+
if: steps.check.outputs.exists == 'false'
2949
id: changelog
3050
run: |
31-
# Extract the section for this version from CHANGELOG.md
32-
awk '/^## \['"${{ steps.version.outputs.version }}"'\]/{found=1; next} /^## /{if(found) exit} found' CHANGELOG.md > /tmp/release-notes.md
33-
echo "body<<RELEASE_EOF" >> "$GITHUB_OUTPUT"
34-
cat /tmp/release-notes.md >> "$GITHUB_OUTPUT"
35-
echo "RELEASE_EOF" >> "$GITHUB_OUTPUT"
51+
# Extract the section for this version from CHANGELOG.md (header may be "## [X.Y.Z]" or "## X.Y.Z")
52+
awk '/^## \[?'"${{ steps.version.outputs.version }}"'\]?/{found=1; next} /^## /{if(found) exit} found' CHANGELOG.md > /tmp/release-notes.md
53+
{
54+
echo "body<<RELEASE_EOF"
55+
cat /tmp/release-notes.md
56+
echo "RELEASE_EOF"
57+
} >> "$GITHUB_OUTPUT"
3658
37-
- name: Create GitHub Release
59+
- name: Create GitHub Release (creates tag if missing)
60+
if: steps.check.outputs.exists == 'false'
3861
uses: softprops/action-gh-release@v2
3962
with:
63+
tag_name: v${{ steps.version.outputs.version }}
4064
name: v${{ steps.version.outputs.version }}
4165
body: ${{ steps.changelog.outputs.body }}
4266
files: |

CHANGELOG.md

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

77
---
88

9+
## [1.5.0] — 2026-06-12
10+
11+
### Added
12+
13+
- **SV3C brand** (13 cameras incl. C25 & C12 verified via Amazon): PoE bullets/domes, WiFi/PoE PTZs, solar dual-lens kit — all specs from official product pages; honest ONVIF notes (C25 and the original B05W have ONVIF, the rest are RTSP-only)
14+
- **Dahua DH-SDT7425-4P-AD3E-PV-i** (issue #11) — CN-market dual-channel panoramic+PTZ with full datasheet specs: 180° stitched 3840x1080 panoramic + 4MP 25x PTZ, starlight 0.001 lux, DC 36V/35W, Smart H.265, 150m IR + white light deterrence. ONVIF autotracking behavior verified via frigate#22135 (Channel 2 has unified VideoEncoder+PTZ profile, unlike SDT4E series)
15+
- **Real video/power specs** for 4 Reolink doorbells and 12 Reolink cameras from official datasheets
16+
17+
### Fixed
18+
19+
- **Full Dahua config audit** (109 cameras): 8 panoramic/multi-sensor cameras got stitched-stream aspect-ratio and channel-layout notes, 8 PTZs got ONVIF autotracking instructions, 4 HDCVI analog cameras corrected (were listed as ethernet with invalid protocol — now coax), 2 duplicates removed, 1 misnamed ZAS varifocal variant renamed
20+
- **Full Hikvision config audit** (150 cameras): PanoVu 4-sensor channel layout (101/201/301/401), TandemVu PTZ+bullet dual-camera setup, fisheye dewarp channel notes, 12 PTZs got ONVIF autotracking setup (incl. the enable-Integration-Protocol gotcha), 5 analog cameras corrected from "hdcvi" (Dahua's tech) to Turbo HD (HD-TVI) over coax, 2 miscategorized types fixed (DS-2CD2385G1-I → turret, DS-2CD2443G2-I(W) → box), solar camera got battery-drain warning
21+
22+
- **Fabricated RTSP/configs removed** from 13 more cameras: Aqara G3/G5 Pro (HomeKit/Matter only), Zebronics, Wyze battery & floodlight cameras (docker-wyze-bridge notes), Yale (cloud-only), ABUS battery model
23+
- **22 duplicate camera files removed**: Axis, Arlo, Dahua, Google Nest, Hikvision, Reolink, Uniview, Tapo, ADT, CP Plus, Somfy duplicates consolidated with markets merged
24+
- **Night vision corrections**: Axis P5655-E (has OptimizedIR), Hikvision DS-2CD2025FWD-I ("-I" suffix = EXIR 30m)
25+
- **9 cameras** missing `power_source` field populated (Arlo, Eufy, Ring)
26+
- **IK vandal ratings** moved out of `ip_rating` field into features (9 cameras)
27+
- **12 cameras** with empty connectivity fixed (4G/WiFi derived from model specs)
28+
- **22 enterprise cameras** had redundant `http` protocol removed
29+
- **15 cameras** with megapixel/resolution mismatches corrected
30+
- **Doorbell detect configs** flipped to portrait for UniFi G4 Doorbell/Pro
31+
- **Cathexis cameras**: RTSP added (ONVIF implies RTSP)
32+
- Thermal Axis cameras: corrected megapixels (0.3MP/0.08MP LWIR sensors)
33+
34+
### Changed
35+
36+
- Database now covers **1,314 cameras** across **67 brands**
37+
38+
---
39+
940
## [1.4.0] — 2026-06-11
1041

1142
### Added

README.md

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

3-
An open, structured database of 1,324 CCTV / IP camera models and their technical specifications, covering 66 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 1,314 CCTV / IP camera models and their technical specifications, covering 67 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

5-
[![cameras](https://img.shields.io/badge/cameras-1%2C324-blue)](data/cameras.json)
6-
[![brands](https://img.shields.io/badge/brands-66-green)](cameras/)
5+
[![cameras](https://img.shields.io/badge/cameras-1%2C314-blue)](data/cameras.json)
6+
[![brands](https://img.shields.io/badge/brands-67-green)](cameras/)
77
[![license](https://img.shields.io/badge/license-CC0-lightgrey)](LICENSE)
88

99
---
@@ -27,7 +27,7 @@ Camera spec sheets are scattered across vendor PDFs, retailer pages, and paywall
2727
- **Filter** — narrow by brand, camera type, night vision, resolution, or market
2828
- **Sort** — click any column header to sort ascending/descending
2929
- **Detail drawer** — click a row to slide open the full spec sheet (resolution, connectivity, protocols, storage, audio, pricing, source links)
30-
- **Pagination** — page through all 1,324 cameras, 25 per page
30+
- **Pagination** — page through all 1,314 cameras, 25 per page
3131
- **Stats bar** — live counts for total cameras, brands, 4K+, WiFi, and no-subscription models
3232

3333
---
@@ -51,15 +51,15 @@ a Claude Code skill for AI-powered video production built on [Remotion](https://
5151
```
5252
cctv-camera-database/
5353
├── cameras/ # source of truth — one JSON file per camera, grouped by brand
54-
│ ├── hikvision/ # 139 cameras
55-
│ ├── reolink/ # 133 cameras
56-
│ ├── dahua/ # 101 cameras
57-
│ ├── hanwha/ # 62 cameras
58-
│ ├── axis/ # 58 cameras
59-
│ ├── tapo/ # 56 cameras
54+
│ ├── hikvision/ # 150 cameras
55+
│ ├── reolink/ # 130 cameras
56+
│ ├── dahua/ # 107 cameras
57+
│ ├── hanwha/ # 71 cameras
58+
│ ├── axis/ # 66 cameras
59+
│ ├── tapo/ # 62 cameras
6060
│ └── …60 more brands
6161
├── data/ # GENERATED — do not edit by hand
62-
│ ├── cameras.json # all 1,324 cameras as one array
62+
│ ├── cameras.json # all 1,314 cameras as one array
6363
│ └── cameras.csv # flattened, spreadsheet-friendly
6464
├── schema/
6565
│ └── camera.schema.json
@@ -117,45 +117,45 @@ Or open `data/cameras.csv` in any spreadsheet for a quick browse.
117117
118118
| Metric | Count |
119119
|--------|-------|
120-
| Total cameras | **1,324** |
121-
| Brands | **66** |
120+
| Total cameras | **1,314** |
121+
| Brands | **67** |
122122
| Form factors | 10 (bullet, dome, turret, PTZ, dual-lens, panoramic, covert, box, fisheye, doorbell) |
123-
| PoE wired | 863 |
124-
| WiFi | 427 |
125-
| Battery / wire-free | 130 |
126-
| 4K / 8MP+ | 411 |
127-
| 4–5MP | 588 |
128-
| 1080p–2MP | 296 |
123+
| PoE wired | 856 |
124+
| WiFi | 430 |
125+
| Battery / wire-free | 155 |
126+
| 4K / 8MP+ | 417 |
127+
| 4–5MP | 594 |
128+
| 1080p–2MP | 292 |
129129
130-
### All 66 brands
130+
### All 67 brands
131131
132132
| Brand | Cameras | Segment |
133133
|-------|---------|---------|
134-
| Hikvision | 151 | Enterprise + consumer, global |
135-
| Reolink | 133 | Prosumer, no-subscription, global |
136-
| Dahua | 111 | Enterprise + consumer, global |
134+
| Hikvision | 150 | Enterprise + consumer, global |
135+
| Reolink | 130 | Prosumer, no-subscription, global |
136+
| Dahua | 107 | Enterprise + consumer, global |
137137
| Hanwha | 71 | Enterprise AI, Korea/global |
138-
| Axis | 68 | Enterprise premium, global |
139-
| Tapo (TP-Link) | 64 | Consumer budget, global |
138+
| Axis | 66 | Enterprise premium, global |
139+
| Tapo (TP-Link) | 62 | Consumer budget, global |
140140
| Eufy (Anker) | 36 | Consumer no-subscription, global |
141-
| Arlo | 31 | Consumer premium wire-free, global |
142-
| Ring (Amazon) | 30 | Consumer ecosystem, US/EU/AU |
141+
| Arlo | 29 | Consumer premium wire-free, global |
142+
| Ring (Amazon) | 25 | Consumer ecosystem, US/EU/AU |
143143
| Avigilon | 24 | Enterprise NDAA, US/CA |
144144
| Amcrest | 24 | Prosumer, US |
145145
| Ubiquiti UniFi | 26 | Prosumer/SMB, US/global |
146146
| Annke | 23 | Prosumer, global |
147-
| Google Nest | 23 | Consumer smart home, global |
147+
| Google Nest | 19 | Consumer smart home, global |
148148
| Bosch | 22 | Enterprise, EU/global |
149149
| EZVIZ (Hikvision) | 21 | Consumer, global |
150150
| Lorex | 21 | Consumer NVR systems, CA/US |
151151
| HiLook (Hikvision) | 20 | Budget installer, EU/UK/AU |
152152
| Lupus Electronics | 20 | Privacy-first, DE/AT/CH |
153153
| Tiandy | 20 | Enterprise + prosumer, CN/ME/Africa |
154-
| Uniview | 17 | Enterprise NDAA, global |
154+
| Uniview | 15 | Enterprise NDAA, global |
155155
| Blink (Amazon) | 16 | Budget battery, US/UK/EU |
156156
| Swann | 16 | Consumer, AU/US/UK |
157157
| ABUS | 15 | Consumer/SMB GDPR-first, DE/AT/CH |
158-
| CP Plus | 15 | India #2 brand, IN |
158+
| CP Plus | 14 | India #2 brand, IN |
159159
| GeoVision | 15 | Enterprise, TW/Asia/global |
160160
| IMOU (Dahua) | 15 | Consumer, global |
161161
| Milesight | 15 | Prosumer/Enterprise IoT, global |
@@ -166,6 +166,7 @@ Or open `data/cameras.csv` in any spreadsheet for a quick browse.
166166
| FLIR (Teledyne) | 12 | Thermal imaging, NA/EU |
167167
| Kedacom | 12 | Enterprise, CN/global |
168168
| Sunell | 12 | Prosumer/Enterprise, CN/global |
169+
| SV3C | 13 | Budget consumer, CN/US |
169170
| Synology | 12 | NAS-native cameras, global |
170171
| TVT Digital | 12 | Prosumer budget, CN/IN/SE Asia |
171172
| Hi-Focus | 10 | Made-in-India, BIS certified, IN |
@@ -180,10 +181,10 @@ Or open `data/cameras.csv` in any spreadsheet for a quick browse.
180181
| March Networks | 6 | Enterprise retail/banking, NA |
181182
| Netatmo | 6 | Privacy-first no-subscription, EU |
182183
| Secureye | 6 | Budget consumer, IN |
183-
| ADT | 5 | Monitored security, US |
184+
| ADT | 4 | Monitored security, US |
184185
| Hive (British Gas) | 5 | Consumer smart home, UK |
185186
| KBvision | 5 | Budget installer, VN |
186-
| Somfy | 5 | Smart home, FR/EU |
187+
| Somfy | 3 | Smart home, FR/EU |
187188
| Godrej | 4 | Consumer, IN |
188189
| Honeywell | 4 | Enterprise, US/IN |
189190
| Qubo (Hero) | 4 | Consumer IoT, IN |

cameras/abus/ppic90520.json

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@
4343
"nvr_compatible": false,
4444
"cloud": false
4545
},
46-
"protocols": [
47-
"rtsp"
48-
],
46+
"protocols": [],
4947
"ip_rating": "IP65",
5048
"audio": {
5149
"microphone": true,
@@ -72,22 +70,9 @@
7270
"solar"
7371
],
7472
"configs": {
75-
"frigate": {
76-
"detect": {
77-
"width": 640,
78-
"height": 480,
79-
"fps": 5
80-
},
81-
"rtsp_url_template": "rtsp://{user}:{pass}@{ip}:554/Streaming/Channels/101",
82-
"best_substream": "rtsp://{user}:{pass}@{ip}:554/Streaming/Channels/102"
83-
},
8473
"home_assistant": {
8574
"integration": "onvif",
86-
"notes": "Use ONVIF integration."
87-
},
88-
"blue_iris": {
89-
"profile": "Hikvision",
90-
"notes": "Select 'Hikvision' profile. Most ABUS IP cameras use Hikvision protocol."
75+
"notes": "Battery/solar ABUS camera. RTSP/ONVIF support unconfirmed for this battery model. May be app-only."
9176
}
9277
}
9378
}

cameras/abus/ppic90520.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
| Night vision | ir (8m) |
1616
| Power | Rechargeable battery / optional solar panel (PPIC90650) |
1717
| Storage | microSD ≤ 128GB |
18-
| Protocols | rtsp |
1918
| IP rating | IP65 |
2019
| Two-way audio | Yes |
2120
| Released | 2023 |

cameras/abus/tvip61600.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"two_way": false
3737
},
3838
"features": [
39+
"pan/tilt/zoom",
3940
"ABUS 1080p 12x PTZ outdoor",
4041
"50m IR",
4142
"H.265",

cameras/abus/tvip61600.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
## Features
2121

22+
- pan/tilt/zoom
2223
- ABUS 1080p 12x PTZ outdoor
2324
- 50m IR
2425
- H.265

cameras/acti/kcm-5611.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,6 @@
7474
"profile": "ACTi",
7575
"notes": "Select 'ACTi' profile. Default RTSP port is 7070."
7676
}
77-
}
77+
},
78+
"status": "discontinued"
7879
}

cameras/acti/q416.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"megapixels": 12,
1111
"max_width": 4000,
1212
"max_height": 3000,
13-
"label": "12MP"
13+
"label": "12MP UHD"
1414
},
1515
"sensor": "1/1.7\" CMOS",
1616
"lens": {

0 commit comments

Comments
 (0)