Skip to content

Repository files navigation

CCTV Camera Database

An open, structured database of 3,469 CCTV / IP camera models and their technical specifications, covering 76 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).

build cameras brands license

Field coverage

environment 100% FOV 92% streams 53% dimensions 50% IK rating 43% color min-lux 64% Frigate 82%

📊 Full field-coverage report → COVERAGE.md


CCTV Camera Database — search 3,469 cameras, browse full specs, copy ready-to-use Frigate configs, and audit the open dataset with the built-in QA tool
cctv-database.com — search 3,469 cameras · full spec sheets · copy-paste Frigate configs · open & auditable


Why this exists

Camera spec sheets are scattered across vendor PDFs, retailer pages, and paywalled databases (IPVM, etc.) in inconsistent formats. This repo normalises them into one machine-readable structure so they can be compared, filtered, and reused.

The dataset is CC0 and always will be — free to use, copy, and redistribute with no restrictions. The website is just a convenient viewer; the data here is the source of truth.


Browse online

Browse the database → cctv-database.com

Prefer to self-host or browse offline? A standalone demo (just demo.html + cameras.json, no build step) is included — serve the docs/ folder locally with any static server, e.g. python3 -m http.server inside docs/, then open it.

What you see above:

  • Search — instant full-text search across brand, model, and features
  • Filter — narrow by brand, camera type, night vision, resolution, or market
  • Sort — click any column header to sort ascending/descending
  • Detail drawer — click a row to slide open the full spec sheet (resolution, connectivity, protocols, storage, audio, source links)
  • Community notes — user-reported quirks and behaviors per camera, sourced and attributed, kept separate from datasheet specs
  • Pagination — page through all 3,469 cameras, 25 per page
  • Stats bar — live counts for total cameras, brands, 4K+, WiFi, and no-subscription models

How this was built

The database was assembled with the help of Claude Code.

Specs are sourced from manufacturer datasheets and reputable retailer listings — each entry includes a sources array with URLs. As with any compiled dataset, errors are possible; always verify against the official datasheet before purchasing or deploying.

The demo video was produced with hve-spielberg, a Claude Code skill for AI-powered video production built on Remotion.


Repository layout

cctv-camera-database/
├── cameras/              # source of truth — one JSON file per camera, grouped by brand
│   ├── hikvision/        # 467 cameras
│   ├── i-pro/            # 354 cameras
│   ├── dahua/            # 350 cameras
│   ├── acti/             # 248 cameras
│   ├── bosch/            # 153 cameras
│   ├── abus/             # 142 cameras
│   └── …70 more brands
├── data/                 # GENERATED — do not edit by hand
│   ├── cameras.json      # all 3,469 cameras as one array
│   ├── cameras.csv       # flattened, spreadsheet-friendly
│   └── rtsp-patterns.json  # CC0 brand-level RTSP URL layer (172 brands)
├── strix/
│   └── verified/         # per-brand RTSP source files → rtsp-patterns.json
├── schema/
│   └── camera.schema.json
├── scripts/
│   └── build.js          # aggregates + validates cameras/ → data/
├── tools/                # local QA tool (qa.html) + browser schema validator
├── docs/
│   ├── glossary.md       # field reference (source — edit when adding fields)
│   ├── cameras.json      # GENERATED — aggregate copy for the demo/Pages API
│   └── cameras/          # GENERATED — one browsable .md spec sheet per camera
├── CONTRIBUTING.md
└── LICENSE

Quick start

npm install   # installs Ajv for schema validation (no runtime deps)
npm run build # validates all JSON, writes data/cameras.json + data/cameras.csv

Other scripts: npm run add (interactive add-a-camera wizard) and npm run check-sources [brand] (probes every sources URL for dead/moved links — see docs/check-sources.md; also runs weekly in CI).

RTSP reference layer

data/rtsp-patterns.json is a CC0 brand-level RTSP URL reference for 172 brands (118 verified / 54 unverified / 349 stream templates). Each path is confirmed against the manufacturer's own documentation — never copied from aggregators. Regenerate after editing strix/verified/:

RTSP_PATTERNS_DATE=$(date +%Y-%m-%d) node scripts/build-rtsp-patterns.js

Local QA tool

tools/qa.html is a zero-dependency, offline browser tool for previewing and sanity-checking camera data before you open a PR — a wide grid view across the dataset, gap highlighting, outlier flags, and in-browser schema validation (the schema is compiled to tools/qa-validator.js via node tools/build-qa-validator.js, regenerate after any schema change). Open it from the repo root (it reads ../data/cameras.json, or use the file picker). See tools/plan-demo-and-tools.md.

Verifying Frigate configs

The shipped configs.frigate snippets are generated; run one of these cameras and you can mark it community-verified (configs.frigate.verified / tested_by / tested_version) via the Verify a Frigate config issue form.

NetBox device-type export

scripts/gen-netbox.js exports cameras into netbox-community/devicetype-library YAML device types — PoE interface (with the standard parsed from power.method), DC power port, microSD module bay, and weight, sourced from each camera's datasheet.

node scripts/gen-netbox.js --brand Hikvision            # → netbox-out/device-types/Hikvision/*.yaml
node scripts/gen-netbox.js --brand Hikvision --report   # list PoE cameras still missing a link speed

A device type is only emitted when the camera has a known RJ45 link speed (network.ethernet_speed_mbps), since the library requires an interface type and it is never guessed. Before opening a PR against devicetype-library, run the generated files through that repo's yamlfmt pre-commit hook so they match its canonical formatting.

Querying the data

const cameras = require('./data/cameras.json');

// All 4K PoE outdoor cameras
const poe4k = cameras.filter(c =>
  c.power_source?.includes('poe') &&
  c.resolution.megapixels >= 8
);

// All cameras with color night vision
const colorNight = cameras.filter(c =>
  c.night_vision?.type === 'color'
);

// All cameras for the UK market
const uk = cameras.filter(c =>
  c.markets?.includes('UK')
);

// All cameras with no subscription fee
const noSub = cameras.filter(c =>
  c.features?.some(f => f.toLowerCase().includes('no subscription'))
);

Or open data/cameras.csv in any spreadsheet for a quick browse.


Coverage

By the numbers

Metric Count
Total cameras 3,469
Brands 76
Form factors 11 (bullet, dome, turret, PTZ, dual-lens, panoramic, covert, box, fisheye, floodlight, doorbell)
PoE wired 2,667
WiFi 611
Battery / wire-free 206
4K / 8MP+ 956
4–7MP 1,436
Under 4MP 1,077
With integration configs (Frigate / Home Assistant) 2,901
With color-lux rating (night_vision.min_lux_color) 2,225

All 76 brands

Brand Cameras Segment
Hikvision 467 Enterprise + consumer, global
i-PRO 354 Enterprise AI (ex-Panasonic), JP/global
Dahua 350 Enterprise + consumer, global
ACTi 248 Enterprise IP + analog, NDAA, TW/global
Bosch 153 Enterprise + thermal, EU/global
ABUS 142 Consumer + professional, GDPR-first, DE/AT/CH
Annke 140 Prosumer, global
Reolink 127 Prosumer, no-subscription, global
Uniview 112 Enterprise NDAA, global
EZVIZ (Hikvision) 87 Consumer, global
Axis 81 Enterprise premium, global
Digital Watchdog 70
Speco 61 Professional/commercial (NDAA), US
Hi-Focus 60 Made-in-India, BIS certified, IN
Kedacom 58 Enterprise, CN/global
IMOU (Dahua) 56 Consumer + prosumer, global
Tapo (TP-Link) 55 Consumer budget, global
Eufy (Anker) 46 Consumer no-subscription, global
Hanwha 46 Enterprise AI, Korea/global
Ubiquiti UniFi 46 Prosumer/SMB, US/global
Uniarch (Uniview) 43 Budget NDAA sub-brand, global
Lorex 40 Consumer NVR systems, CA/US
Luma 33 Custom-install (SnapAV), US
CP Plus 26 India #2 brand, IN
Xiaomi 26 Consumer smart home, CN/global
Amcrest 25 Prosumer, global
Arlo 25 Consumer premium wire-free, global
VIGI (TP-Link) 25 Business/SMB PoE, global
ClareVision 24
HiLook (Hikvision) 23 Budget installer, EU/UK/AU
Ajax 22 Professional alarm + wired PoE cameras, EU/UK
Foscam 22 Consumer WiFi/PoE, global
Ring (Amazon) 21 Consumer ecosystem, global
Verkada 20 Cloud-managed enterprise, US/CA
Vivotek 19 Enterprise AI, global
SV3C 17 Budget consumer, CN/US
Avigilon 16 Enterprise NDAA, global
Wyze 14 Budget consumer, US
Blink (Amazon) 12 Budget battery, US/UK/EU
GeoVision 12 Enterprise, TW/Asia/global
Google Nest 12 Consumer smart home, global
Instar 12 Privacy-first prosumer, DE/EU
Milesight 12 Prosumer/Enterprise IoT, global
Swann 12 Consumer, AU/US/UK
Camius 11 Consumer direct, US
Resideo 11
Tiandy 11 Enterprise + prosumer, CN/ME/Africa
Costar 10 Enterprise (Arecont successor), US
FLIR (Teledyne) 10 Thermal imaging, NA/EU
Kasa 10 Consumer budget, global
Aqara 9 Smart home HomeKit, EU/global
Lupus Electronics 9 Privacy-first, DE/AT/CH
Pelco 9 Enterprise legacy, NA/global
TVT 9 Prosumer budget, CN/IN/SE Asia
Yale 9 Consumer smart home, UK/EU
D-Link 8
Intelbras 8 #1 Latin America, BR/AR/LATAM
LaView 8 Consumer WiFi/solar/4G, US
Mobotix 8 Enterprise GDPR-first, EU
LTS 7 Prosumer/installer, US
Canon 4 Enterprise optical, JP/global
Godrej 4 Consumer, IN
Grandstream 4
Longse 4 OEM/budget, CN/global
March Networks 4 Enterprise retail/banking, NA
Netatmo 4 Privacy-first no-subscription, EU
Qubo 4 Consumer, IN
SimpliSafe 4 DIY monitored security, US
Synology 4 NAS-native cameras, global
ADT 3 Monitored security, US
Somfy 3 Smart home, FR/EU
Hive 2 Smart home, UK
Honeywell 2 Enterprise, US/IN
Steinel 2 Outdoor smart light/cam, DE/AT/CH
Bosch Smart Home 1 Consumer smart home, DE/AT/CH
IDIS 1 Enterprise DirectIP, KR/global

Market coverage

Cameras carry a markets[] tag (ISO country codes + region tags like EU/MENA/LATAM) where a regional availability is known. Coverage is intentionally sparse — most entries are untagged or global — so rather than a hand-maintained table that drifts, filter by market on cctv-database.com or query the field directly:

const uk = require('./data/cameras.json').filter(c => c.markets?.includes('UK'));

Schema

Each camera JSON follows schema/camera.schema.json. Required fields:

{
  "id": "reolink-rlc-823a",
  "brand": "Reolink",
  "model": "RLC-823A",
  "type": "bullet",
  "resolution": { "megapixels": 8, "label": "4K UHD" }
}

Common optional fields:

Field Type Example
connectivity string[] ["wifi", "ethernet"] (network only — PoE lives in power_source)
night_vision.type string "color" / "ir" / "none"
night_vision.range_m number 30
night_vision.min_lux_color number 0.01
power.method string "PoE (802.3af) / DC 12V"
network.ethernet_speed_mbps number 100 (RJ45 link speed)
ip_rating string "IP67"
ik_rating string "IK10"
audio.two_way boolean true
protocols string[] ["onvif", "rtsp"]
markets string[] ["UK", "EU", "DE"]
features string[] ["no subscription", "IP67"]
sources string[] datasheet / retailer URLs

See CONTRIBUTING.md for the full field reference and naming conventions.


Contributing

Three paths — pick the one that fits you:

Path Best for
🌐 Open a GitHub issue Anyone — fill a web form, no cloning needed
🧙 npm run add — interactive CLI wizard Regular contributors — guided questions, writes JSON for you
🛠 Edit JSON directly Developers — see CONTRIBUTING.md

The wizard flow:

git clone https://github.com/YOUR_USERNAME/cctv-camera-database.git
cd cctv-camera-database && npm install
npm run add      # asks questions, writes the JSON file
npm run build    # validates everything

See CONTRIBUTING.md for the full field reference, naming conventions, and what makes a good entry.


API

A read-only, static JSON API is hosted alongside the site (CC0, no key, no rate limit):

Endpoint Returns
/api/brands.json brand index — name, slug, camera count
https://www.cctv-database.com/api/brands/{slug}.json a brand summary + its cameras (brief)
https://www.cctv-database.com/api/cameras/{id}.json one full camera record

For bulk use, grab the whole dataset from data/cameras.json / data/cameras.csv, or a versioned, checksummed cameras.zip from any release.


Roadmap

Shipped: JSON Schema CI, the web frontend (search / filter / sort / compare), Frigate + Home Assistant config export, the NetBox device-type export, and the read-only API above.

Open — contributions very welcome:

  • Re-source ~721 reseller-only cameras to official OEM datasheets (#164 / #165)
  • Backfill pixel resolution for the ~179 entries that state megapixels but no width×height (#169)
  • Frigate verification drive — only 25 of 2,827 shipped configs are community-verified; confirm one you run
  • Grow community_notes — the per-camera quirks/behaviors layer (#297)

Community

🐛 Report a data error Open a correction issue
➕ Add a missing camera Open a camera submission
🔒 Report a security issue GitHub Security Advisories
💬 Code of conduct CODE_OF_CONDUCT.md
📋 Changelog CHANGELOG.md

Disclaimer

Specifications are compiled from manufacturer datasheets and reputable retailers and may contain errors or become outdated. Always confirm against the official datasheet (linked in each entry's sources array) before purchasing. Not affiliated with any manufacturer.

Releases

Tagged releases ship a versioned, checksummed cameras.zip (JSON + CSV) — see the latest release or the full history. The CHANGELOG records what changed in each version. For the always-current data, use data/cameras.json on the default branch.

Citation

If you use this dataset, a link back is appreciated:

CCTV Camera Database (v2.2.0), CC0 1.0. https://cctv-database.com — https://github.com/ch-bas/cctv-camera-database

License

Data is released under CC0 1.0 (public domain). Trademarks and model names belong to their respective owners.

Releases

Sponsor this project

Packages

Contributors

Languages