{
 "schema": "skywatch-tracker/2",
 "brand": "skywatch.monster+more!",
 "generated": "2026-11-10T06:08:16-05:00",
 "next_audit_due": "2026-11-10T12:00:00-05:00",
 "timezone": "America/Winnipeg",
 "audit_cadence": "00:00, 06:00, 12:00, 18:00 America/Winnipeg",
 "totals": {
  "sources": 386,
  "by_status": {
   "partial": 50,
   "live": 93,
   "off": 4,
   "blocked": 53,
   "down": 12,
   "considered": 154,
   "viable": 20
  },
  "by_tier": {
   "sky": 265,
   "+more": 118
  },
  "extras": 30,
  "playlist_channels": 18486,
  "mapped_cameras": 62026,
  "map_live_video": 21307
 },
 "status_legend": {
  "live": "in playlist, >=90% of probed streams up",
  "partial": "some streams down/unchecked, or stills-only (map only, stills HLS paused)",
  "down": "<30% up or all video failing",
  "blocked": "catalogued but video blocked (token/Referer/network)",
  "viable": "not in prod; researched and confirmed workable (plays from prod or official embed), ready to build",
  "considered": "not in prod; researched candidate",
  "off": "disabled"
 },
 "rules": {
  "max_ffmpeg_runners": 8,
  "norcast_always_public": true,
  "okcweather_enabled": false,
  "space_feeds_on_map": false,
  "stills_in_playlist": "only Norcast (STILLS_HLS off)"
 },
 "tiers": [
  {
   "id": "sky",
   "order": 0,
   "name": "sky (core)"
  },
  {
   "id": "+more",
   "order": 1,
   "name": "+more (animals, nature, landmarks)"
  }
 ],
 "categories": [
  {
   "id": "weather-cams",
   "tier": "sky",
   "name": "Weather & sky cams"
  },
  {
   "id": "aurora",
   "tier": "sky",
   "name": "Aurora & all-sky cams"
  },
  {
   "id": "horizon-cams",
   "tier": "sky",
   "name": "Horizon / skyline / coastal cams"
  },
  {
   "id": "storms",
   "tier": "sky",
   "name": "Storm & severe-weather cams"
  },
  {
   "id": "space",
   "tier": "sky",
   "name": "Space live video (ISS & launches; never on map)"
  },
  {
   "id": "sun-space",
   "tier": "sky",
   "name": "Sun, sunrise/sunset & space feeds"
  },
  {
   "id": "road-weather",
   "tier": "sky",
   "name": "Road & traffic cams (weather/horizon views)"
  },
  {
   "id": "animals",
   "tier": "+more",
   "name": "Animals"
  },
  {
   "id": "nature",
   "tier": "+more",
   "name": "Nature"
  },
  {
   "id": "landmarks",
   "tier": "+more",
   "name": "Landmarks"
  },
  {
   "id": "other",
   "tier": "+more",
   "name": "Other / excluded"
  },
  {
   "id": "high-points",
   "tier": "+more",
   "name": "Tallest buildings, towers & high points"
  },
  {
   "id": "lighthouses-harbours",
   "tier": "+more",
   "name": "Lighthouses, harbours & ports"
  },
  {
   "id": "bridges",
   "tier": "+more",
   "name": "Bridges"
  },
  {
   "id": "ski-resorts",
   "tier": "+more",
   "name": "Ski resorts"
  },
  {
   "id": "waterfalls",
   "tier": "+more",
   "name": "Waterfalls"
  },
  {
   "id": "airports",
   "tier": "+more",
   "name": "Airports & aerodromes"
  },
  {
   "id": "glaciers-icefields",
   "tier": "+more",
   "name": "Glaciers & icefields"
  },
  {
   "id": "observatories-planetariums",
   "tier": "sky",
   "name": "Observatories & planetariums"
  },
  {
   "id": "park-gateways",
   "tier": "+more",
   "name": "National-park gateway towns"
  }
 ],
 "roadmap": [
  {
   "id": "p1",
   "order": 1,
   "name": "Canada / USA",
   "countries": [
    "CA",
    "US"
   ],
   "status": "in_progress",
   "top_picks": [
    "nasa-plus-events",
    "nasa-iss-live-youtube",
    "nasa-iss-hd-views-youtube",
    "webcoos",
    "tn-smartway",
    "goakamai-hi"
   ],
   "notes": "Current phase. Top sky priority: ISS/space live video (NASA+ event HLS + official NASA ISS YouTube embeds) for playlist + /space only (never the map). Remaining work: blocked video (FL/PA/GA/NJ/TN/MA/QC), BC has no source, HI/RI/PEI/NWT/YT none.",
   "candidate_source_ids": [
    "nasa-plus-events",
    "nasa-iss-live-youtube",
    "nasa-iss-hd-views-youtube",
    "sdo-nrt-movies",
    "goes-suvi",
    "iss-position-celestrak",
    "esa-webtv",
    "spacex-webcasts",
    "jaxa-live",
    "nasa-tv-public-legacy",
    "iss-hdev",
    "roscosmos-tv",
    "ga-video",
    "njta-wink",
    "webcoos",
    "nj511",
    "ma-trafficland",
    "qc-mtq",
    "tn-smartway",
    "fl-video",
    "pa-video",
    "or-tripcheck",
    "nm-roads",
    "lake-passage",
    "opencctv",
    "road511",
    "earthcam",
    "commercial-ipcams",
    "shodan",
    "auroramax",
    "ucalgary-arctic-live",
    "pbi-churchill-aurora",
    "avo-ashcam",
    "cbc-calgary-skyline",
    "spaceneedle-roundshot",
    "chasermap",
    "mwobs-summit",
    "pikes-peak-summit",
    "sdzoo-cams",
    "natzoo-cams",
    "mbayaq-cams",
    "georgia-aq-cams",
    "houston-zoo-cams",
    "cornell-birdcams",
    "usgs-volcview",
    "hvo-kilauea-live",
    "nps-oldfaithful",
    "cn-tower-earthcam",
    "alertca",
    "hpwren",
    "ndbc-buoycam",
    "faa-weathercams",
    "kpno-allsky",
    "mdm-allsky",
    "lick-allsky",
    "palomar-allsky",
    "gemini-cloudcams",
    "ri-ridot",
    "mi-midrive",
    "mt-mdt",
    "nwt-highways",
    "parks-canada-glacier",
    "parks-canada-explore",
    "aquarium-pacific",
    "seattle-aq",
    "nps-partner-cams",
    "nysm-cams",
    "ky-mesonet-cams",
    "uaf-allsky",
    "cfht-nanaao",
    "whiteface-summit",
    "pgc-hdontap",
    "fws-nctc-eaglecam",
    "toronto-zoo-zoolife",
    "wildcenter-whiteface-view",
    "duluth-harbor-cam",
    "ns-webcams",
    "portland-head-light",
    "burnt-coat-harbor",
    "ky-kytc-cams",
    "wy-wydot-cams",
    "ar-ardot-idrive",
    "navcanada-metcam",
    "nasa-asgard-allsky",
    "mkwc-maunakea-cams",
    "athabasca-augo",
    "goes-ccor1",
    "gong-halpha",
    "phenocam-network",
    "ndawn-station-photos",
    "theauroraguy-webcam-list",
    "mackinac-bridge-cams",
    "confederation-bridge-cam",
    "golden-gate-bridge-cams",
    "chesapeake-bay-bridge-cams",
    "noaa-gml-obs-cams",
    "nws-wfo-webcams",
    "plymouth-state-vortex-cam",
    "uw-atmos-webcam",
    "ubc-eos-weather-cams",
    "state-mesonet-cams-survey",
    "storm-chaser-streams",
    "wild-windows-directory",
    "cochrane-polar-bear-habitat",
    "conserve-wildlife-nj-cam-guide",
    "lake-louise-cams",
    "mt-bachelor-cams",
    "silverstar-cams",
    "red-mountain-cams",
    "bcweathercams-ski-directory",
    "sd-iteris-rwis-cams",
    "us-il-idot-gateway-cams",
    "pixelcaster-vendor",
    "alertwest-wildfire-cams",
    "ncar-foothills-webcam",
    "shoshone-falls-twin-falls",
    "niagara-falls-cams",
    "orcalab-live-streams",
    "uw-madison-aoss-webcams",
    "umd-chikwauk-allsky",
    "port-pa-clm-youtube",
    "paterson-great-falls-earthcam",
    "yorku-physics-sky-camera",
    "whitehorse-jacquin-allsky",
    "umanitoba-glenlea-allsky",
    "nws-maf-towercam",
    "akwx-juneau-icefield-cams",
    "pursuit-columbia-icefield-cams",
    "mendenhall-glacier-explore",
    "algonquin-park-webcam",
    "mtu-webcams",
    "raptor-resource-decorah",
    "rao-ucalgary-skywatch",
    "omm-megantic-allsky",
    "kake-weathernow-cams",
    "fobwr-blackwater-osprey",
    "ferris-osprey-cam",
    "malheur-osprey-cam",
    "estes-park-webcams",
    "moab-perpetual-images-netcam",
    "seejh-gateway-cams",
    "banff-gondola-360",
    "banff-lake-louise-tourism-cams",
    "jasper-skytram-roundshot",
    "gatlinburg-space-needle-cam",
    "anakeesta-roundshot",
    "tofino-cams",
    "barharborcam",
    "eldesierto-dust-cams",
    "nwr-weather-regina",
    "cbc-regina-webcam",
    "avalanche-quebec-chic-chocs",
    "mmto-mt-hopkins-cams",
    "lbto-mt-graham-cams",
    "nasa-dscovr-epic",
    "bbso-halpha-fulldisk",
    "wibw-topeka-cams",
    "newson6-skycam-network",
    "qubs-feeder-cam"
   ],
   "in_prod_sources": 111,
   "gap_summary": {
    "regions": {
     "weak": 38,
     "ok": 25,
     "none": 1
    },
    "metros": {
     "ok": 61,
     "weak": 58,
     "none": 12
    }
   }
  },
  {
   "id": "p2",
   "order": 2,
   "name": "New Zealand",
   "countries": [
    "NZ"
   ],
   "status": "planned",
   "top_picks": [
    "nz-tekapo-mtjohn",
    "nz-mtjohn-allsky",
    "nz-nzta"
   ],
   "notes": "Sky-first: Mt John (Tekapo) aurora/all-sky cams lead; NZTA is the volume feed. One national open feed (NZTA) covers most state-highway cams incl. Auckland/Wellington/Christchurch. Stills only.",
   "candidate_source_ids": [
    "nz-metservice-wx",
    "nz-tekapo-mtjohn",
    "nz-mtjohn-allsky",
    "nz-ruru",
    "nz-nzta",
    "nz-at",
    "nz-metservice",
    "nz-councils"
   ],
   "in_prod_sources": 0,
   "gap_summary": {
    "regions": {
     "none": 6,
     "weak": 10
    },
    "metros": {
     "weak": 2,
     "none": 4
    }
   }
  },
  {
   "id": "p3",
   "order": 3,
   "name": "Australia",
   "countries": [
    "AU"
   ],
   "status": "planned",
   "top_picks": [
    "au-aad-webcams",
    "au-nsw",
    "au-qld"
   ],
   "notes": "Sky-first: AAD Antarctic station cams (Davis skycam, aurora australis) lead; BoM publishes no webcams. NSW + QLD have open GeoJSON camera APIs (keys). VIC/WA/NT/ACT publish no public camera feed; SA/TAS sites WAF-403 datacenter IPs. Stills only.",
   "candidate_source_ids": [
    "au-bom",
    "au-aad-webcams",
    "au-nsw",
    "au-qld",
    "au-vic",
    "au-wa",
    "au-sa",
    "au-tas",
    "au-nt",
    "au-act"
   ],
   "in_prod_sources": 0,
   "gap_summary": {
    "regions": {
     "weak": 4,
     "none": 4
    },
    "metros": {
     "weak": 4,
     "none": 9
    }
   }
  },
  {
   "id": "p4",
   "order": 4,
   "name": "United Kingdom",
   "countries": [
    "GB"
   ],
   "status": "planned",
   "top_picks": [
    "uk-northumberland-astro",
    "uk-hag-allsky",
    "tfl-jamcams"
   ],
   "notes": "Sky-first: amateur/academic aurora & all-sky cams (Northumberland, HAG, Armagh) lead; Met Office publishes no webcams. TfL JamCams is the only open, video-ish (mp4 loop) feed. Scotland/Wales/NI need registration/permission; National Highways images need a Crown-copyright licence.",
   "candidate_source_ids": [
    "uk-metoffice",
    "uk-northumberland-astro",
    "uk-hag-allsky",
    "uk-armagh-wx",
    "uk-aurorawatch",
    "tfl-jamcams",
    "uk-scotland",
    "uk-wales",
    "uk-twni",
    "uk-nh",
    "uk-councils"
   ],
   "in_prod_sources": 3,
   "gap_summary": {
    "regions": {
     "weak": 11,
     "none": 2
    },
    "metros": {
     "weak": 6,
     "none": 17
    }
   }
  }
 ],
 "sources": [
  {
   "id": "arlington",
   "name": "Arlington County VA (DES Wowza)",
   "plugin": "arlington",
   "in_prod": true,
   "coverage": "Arlington County, Virginia, US",
   "status": "partial",
   "enabled": true,
   "channels": 267,
   "mapped_cameras": 309,
   "video_cameras": 309,
   "video_up": 267,
   "video_down": 42,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "County open-data JSON (datahub-v2-s3 Traffic+Cameras.json), STATUS=ONLINE, refresh 6 h",
   "blockers": [],
   "notes": "Recent add (~270 in playlist). Wowza on ports 8011-8013: box egress can't reach non-standard ports, prod can (200).",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "bellevue",
   "name": "City of Bellevue WA",
   "plugin": "bellevue",
   "in_prod": true,
   "coverage": "Bellevue, Washington, US",
   "status": "partial",
   "enabled": true,
   "channels": 183,
   "mapped_cameras": 207,
   "video_cameras": 207,
   "video_up": 173,
   "video_down": 24,
   "video_unknown": 10,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "City ArcGIS layer TrafficCameras_Public_View (Media='Stream'), daily",
   "blockers": [],
   "notes": "Gentle master-playlist-only health every 6 h.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "caltrans",
   "name": "Caltrans CWWP2 (12 districts)",
   "plugin": "caltrans",
   "in_prod": true,
   "coverage": "California, US (districts 1-12)",
   "status": "partial",
   "enabled": true,
   "channels": 757,
   "mapped_cameras": 3437,
   "video_cameras": 2198,
   "video_up": 751,
   "video_down": 1436,
   "video_unknown": 11,
   "still_cameras": 1239,
   "stream_type": "HLS (direct) + stills",
   "discovery": "Per-district cctvStatusDNN.json, inService only, daily",
   "blockers": [
    "wzmedia.dot.ca.gov 404s ffmpeg-like UA: M3U carries browser UA hint (#EXTVLCOPT)"
   ],
   "notes": "Many map cams are stills-only; ~660 video cams marked down (D7/D4 timeouts).",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "cars-mn",
   "name": "511 Minnesota (CARS)",
   "plugin": "cars",
   "in_prod": true,
   "coverage": "Minnesota, US",
   "status": "partial",
   "enabled": true,
   "channels": 1104,
   "mapped_cameras": 1955,
   "video_cameras": 1255,
   "video_up": 1104,
   "video_down": 151,
   "video_unknown": 0,
   "still_cameras": 700,
   "stream_type": "HLS (direct) + stills",
   "discovery": "CARS cameras_v1 API, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "cars-co",
   "name": "COtrip Colorado (CARS)",
   "plugin": "cars",
   "in_prod": true,
   "coverage": "Colorado, US",
   "status": "live",
   "enabled": true,
   "channels": 819,
   "mapped_cameras": 1268,
   "video_cameras": 823,
   "video_up": 819,
   "video_down": 4,
   "video_unknown": 0,
   "still_cameras": 445,
   "stream_type": "HLS (direct) + stills",
   "discovery": "CARS cameras_v1 API, daily",
   "blockers": [],
   "notes": "Colorado gap: 821 in playlist vs Ora 831 (was 660 on 2026-10-30).",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "cars-ia",
   "name": "511 Iowa (CARS)",
   "plugin": "cars",
   "in_prod": true,
   "coverage": "Iowa, US",
   "status": "partial",
   "enabled": true,
   "channels": 600,
   "mapped_cameras": 1261,
   "video_cameras": 699,
   "video_up": 600,
   "video_down": 99,
   "video_unknown": 0,
   "still_cameras": 562,
   "stream_type": "HLS (direct) + stills",
   "discovery": "CARS cameras_v1 API, daily",
   "blockers": [
    "video*.iowadot.gov:8888 non-standard port (fine from prod/viewers; box egress blocked)"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "cars-ne",
   "name": "511 Nebraska (CARS)",
   "plugin": "cars",
   "in_prod": true,
   "coverage": "Nebraska, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 1039,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 1039,
   "stream_type": "still image",
   "discovery": "CARS cameras_v1 API, daily",
   "blockers": [
    "no public video views; stills HLS paused site-wide"
   ],
   "notes": "Stills only (map only).",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "cars-in",
   "name": "TrafficWise Indiana (CARS)",
   "plugin": "cars",
   "in_prod": true,
   "coverage": "Indiana, US",
   "status": "live",
   "enabled": true,
   "channels": 757,
   "mapped_cameras": 759,
   "video_cameras": 759,
   "video_up": 757,
   "video_down": 2,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "CARS cameras_v1 API, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "cars-ks",
   "name": "KanDrive Kansas (CARS)",
   "plugin": "cars",
   "in_prod": true,
   "coverage": "Kansas, US",
   "status": "live",
   "enabled": true,
   "channels": 201,
   "mapped_cameras": 603,
   "video_cameras": 201,
   "video_up": 201,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 402,
   "stream_type": "HLS (/s/ 302 redirect, ~5 min JWT) + stills",
   "discovery": "CARS cameras_v1 API; KS views delivered as stream_auth redirect: /s/<key>.m3u8 302s to a fresh-token URL (listing cached 60 s, re-read when <150 s left)",
   "blockers": [
    "fix deployed 2026-11-01 (cars.py REDIRECT={'ks'}); takes effect at the next cars/ks catalogue refresh (~2026-11-01 21:32 America/Winnipeg) or an admin Refresh of cars",
    "players that outlive the ~5 min token get 401 and must re-open /s/ (same as DriveTexas)"
   ],
   "notes": "Diagnosis 2026-11-01: 0/200 up because token cams are excluded from the public streams feed (S_TOKEN_REDIRECTS off). JWT has iat/exp only, not IP-bound; plays from prod (5/5 sampled, 1280x720). Stills now 200 (old 403 note stale).",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "cars-sd",
   "name": "San Diego (CARS / SANDAG)",
   "plugin": "cars",
   "in_prod": true,
   "coverage": "San Diego, California, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 127,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 127,
   "stream_type": "still image",
   "discovery": "CARS cameras_v1 API, daily",
   "blockers": [
    "stills only; stills HLS paused"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "cars-nysdot",
   "name": "511NY (NYSDOT + NYC DOT)",
   "plugin": "cars",
   "in_prod": true,
   "coverage": "New York, US",
   "status": "partial",
   "enabled": true,
   "channels": 1527,
   "mapped_cameras": 2901,
   "video_cameras": 1743,
   "video_up": 1524,
   "video_down": 218,
   "video_unknown": 1,
   "still_cameras": 1158,
   "stream_type": "HLS (direct) + stills",
   "discovery": "CARS cameras_v1 API, daily; skyvdn slow-start",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "goakamai-hi",
   "name": "Hawaii GoAkamai (Hawaii DOT)",
   "plugin": "goakamai",
   "in_prod": true,
   "coverage": "Oahu, Hawaii, US",
   "status": "partial",
   "enabled": true,
   "channels": 115,
   "mapped_cameras": 302,
   "video_cameras": 302,
   "video_up": 115,
   "video_down": 187,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct) (Wowza)",
   "discovery": "goakamai.org config.json -> cameraservice ?format=mapPage (x-icx headers + goakamai.org Referer/Origin, approved by Jon 2026-11-01), daily",
   "blockers": [],
   "notes": "Live 2026-11-01: 302 catalogued (all Oahu), ~248 pass health into the playlist; 10-11/12 sampled played from prod (720x480 / 1080p).",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ssec-roofcam",
   "name": "UW-Madison SSEC/AOS rooftop sky cams (5 directions)",
   "plugin": "ssec",
   "in_prod": true,
   "coverage": "Madison, Wisconsin, US",
   "status": "live",
   "enabled": true,
   "channels": 5,
   "mapped_cameras": 5,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 5,
   "stream_type": "H.264 raw MPEG-TS over HTTP -> on-demand transcode HLS (1440x1080 10 fps 1400k + 360p)",
   "discovery": "metobs.ssec.wisc.edu/aoss/cameras/ -> 5 .xspf playlists, daily",
   "blockers": [
    "terms: credit 'UW-Madison SSEC/AOS', noncommercial use"
   ],
   "notes": "Live 2026-11-01: always_public sky tier, channels 86002-86006, TranscodeRunner (8-runner cap, per-plugin max 2, idle/warm eviction); 5/5 played from prod.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "weather-cams",
   "origin": "build",
   "tier": "sky",
   "tier_locked": true
  },
  {
   "id": "cars-sr",
   "name": "Spokane Regional TMC (CARS)",
   "plugin": "cars",
   "in_prod": true,
   "coverage": "Spokane, Washington, US",
   "status": "live",
   "enabled": true,
   "channels": 117,
   "mapped_cameras": 215,
   "video_cameras": 122,
   "video_up": 117,
   "video_down": 5,
   "video_unknown": 0,
   "still_cameras": 93,
   "stream_type": "HLS (direct) + stills",
   "discovery": "CARS cameras_v1 API, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-va",
   "name": "511 Virginia (VDOT)",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "Virginia, US",
   "status": "live",
   "enabled": true,
   "channels": 1635,
   "mapped_cameras": 1695,
   "video_cameras": 1695,
   "video_up": 1635,
   "video_down": 60,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Agency public map feed, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-sc",
   "name": "511SC (SCDOT)",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "South Carolina, US",
   "status": "live",
   "enabled": true,
   "channels": 786,
   "mapped_cameras": 799,
   "video_cameras": 799,
   "video_up": 786,
   "video_down": 13,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Agency public map feed, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-ms",
   "name": "MDOTtraffic (Mississippi)",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "Mississippi, US",
   "status": "live",
   "enabled": true,
   "channels": 934,
   "mapped_cameras": 935,
   "video_cameras": 935,
   "video_up": 934,
   "video_down": 1,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Per-site crawl, ~1 req/s, daily",
   "blockers": [],
   "notes": "Occasional catalogue timeouts.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-al",
   "name": "ALGO Traffic (Alabama)",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "Alabama, US",
   "status": "off",
   "enabled": false,
   "channels": 0,
   "mapped_cameras": 596,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 596,
   "stream_type": "HLS (direct) (FairPlay SAMPLE-AES)",
   "discovery": "Agency public map feed, daily",
   "blockers": [
    "media playlists carry FairPlay DRM (EXT-X-KEY SAMPLE-AES, skd://fps.ezdrm.com): no DRM bypass",
    "video disabled via instance flag video=False (reversible)"
   ],
   "notes": "FairPlay DRM since ~2026-11-01; dropped per Jon. Video removed from playlist/EPG/demo; 619 non-DRM ALGO snapshot stills (api.algotraffic.com) remain on /map. streamhealth now marks SAMPLE-AES/skd/Widevine/PlayReady playlists as down ('drm').",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-md",
   "name": "MDOT SHA CHART (Maryland)",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "Maryland, US",
   "status": "live",
   "enabled": true,
   "channels": 532,
   "mapped_cameras": 549,
   "video_cameras": 549,
   "video_up": 532,
   "video_down": 17,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Agency public map feed, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-mo",
   "name": "MoDOT Traveler + Ozarks Traffic",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "Missouri, US",
   "status": "partial",
   "enabled": true,
   "channels": 382,
   "mapped_cameras": 554,
   "video_cameras": 554,
   "video_up": 382,
   "video_down": 172,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Agency public map feed, daily",
   "blockers": [
    "~230 modot sfs hosts down/timeouts"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-sea",
   "name": "Seattle DOT",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "Seattle, Washington, US",
   "status": "partial",
   "enabled": true,
   "channels": 354,
   "mapped_cameras": 395,
   "video_cameras": 395,
   "video_up": 354,
   "video_down": 41,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Agency public map feed, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-de",
   "name": "DelDOT TMC",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "Delaware, US",
   "status": "live",
   "enabled": true,
   "channels": 362,
   "mapped_cameras": 364,
   "video_cameras": 364,
   "video_up": 362,
   "video_down": 2,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Agency public map feed, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-wv",
   "name": "WV511 (WVDOT)",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "West Virginia, US",
   "status": "partial",
   "enabled": true,
   "channels": 117,
   "mapped_cameras": 133,
   "video_cameras": 133,
   "video_up": 117,
   "video_down": 16,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Per-site crawl, ~1 req/s, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-edm",
   "name": "City of Edmonton",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "Edmonton, Alberta, CA",
   "status": "live",
   "enabled": true,
   "channels": 56,
   "mapped_cameras": 58,
   "video_cameras": 58,
   "video_up": 56,
   "video_down": 2,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Agency public map feed, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "dotvideo-tn",
   "name": "TDOT SmartWay (Tennessee)",
   "plugin": "dotvideo",
   "in_prod": true,
   "coverage": "Tennessee, US",
   "status": "off",
   "enabled": false,
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "TDOT Open Data API (needs our own key)",
   "blockers": [
    "needs our own TDOT Open Data API key (policy: don't use SmartWay's published client key)"
   ],
   "notes": "Instance disabled.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "drivenc",
   "name": "DriveNC (NCDOT)",
   "plugin": "drivenc",
   "in_prod": true,
   "coverage": "North Carolina, US",
   "status": "live",
   "enabled": true,
   "channels": 1000,
   "mapped_cameras": 1000,
   "video_cameras": 1000,
   "video_up": 1000,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (/s/ 302 redirect, tokenised)",
   "discovery": "DriveNC DataTables /List/GetData/Cameras + GetVideoUrl -> SecureTokenUri (rate-limited ~10/min)",
   "blockers": [
    "NCDOT :8887 hosts don't answer the VPS: health = token mint, not HLS probe",
    "DriveNC GetVideoUrl 429 above ~10/min"
   ],
   "notes": "Recent add (1,003).",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "drivetexas",
   "name": "TxDOT DriveTexas",
   "plugin": "drivetexas",
   "in_prod": true,
   "coverage": "Texas, US",
   "status": "live",
   "enabled": true,
   "channels": 3357,
   "mapped_cameras": 3562,
   "video_cameras": 3562,
   "video_up": 3357,
   "video_down": 205,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (/s/ 302 redirect, tokenised)",
   "discovery": "Public MapLarge table appgeo/cameraPoint (httpsurl with ~10 min token), re-read <=180 s",
   "blockers": [
    "CloudFront caches stale tokens: query varied per 20 s bucket"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-on",
   "name": "511 Ontario",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Ontario, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 1672,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 1672,
   "stream_type": "still image",
   "discovery": "ibi /List/GetData/Cameras (DataTables), daily",
   "blockers": [
    "no public video; stills HLS paused"
   ],
   "notes": "Map only.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-ab",
   "name": "511 Alberta",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Alberta, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 581,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 581,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-sk",
   "name": "Saskatchewan Highway Hotline",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Saskatchewan, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 63,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 63,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-mb",
   "name": "Manitoba 511",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Manitoba, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 46,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 46,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-nb",
   "name": "511 New Brunswick",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "New Brunswick, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 66,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 66,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-ns",
   "name": "511 Nova Scotia",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Nova Scotia, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 57,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 57,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-nl",
   "name": "511 Newfoundland & Labrador",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Newfoundland and Labrador, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 48,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 48,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-yt",
   "name": "511 Yukon",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Yukon, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 19,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 19,
   "stream_type": "still image",
   "discovery": "ibi DataTables (511yukon.ca), daily",
   "blockers": [
    "stills only"
   ],
   "notes": "Added 2026-11-01 (deep dive round 4): 21 cams, fills the Yukon gap. Map only.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-pe",
   "name": "511 PEI",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Prince Edward Island, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 7,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 7,
   "stream_type": "still image",
   "discovery": "ibi DataTables (511.gov.pe.ca), daily",
   "blockers": [
    "stills only"
   ],
   "notes": "Added 2026-11-01 (deep dive round 4): 7 cams, fills the PEI gap. Map only.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-fl",
   "name": "FL511",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Florida, US",
   "status": "blocked",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 4979,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 4979,
   "stream_type": "stills (video: DIVAS securetoken relay, opt-in off)",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "video: DIVAS SecureTokenUri + dis-seN.divas.cloud:8200 unreachable from VPS; agency Referer"
   ],
   "notes": "4,991 stills on map; Florida video only via Manatee + Palm Beach.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-ga",
   "name": "511 Georgia",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Georgia, US",
   "status": "blocked",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 4331,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 4331,
   "stream_type": "stills (video: token relay/redirect, gated)",
   "discovery": "ibi DataTables, daily; GetVideoUrl JWT",
   "blockers": [
    "video gated behind S_TOKEN_REDIRECTS env; stream hosts unreachable from box+prod: test from home network"
   ],
   "notes": "Up to 4,331 channels if client reachability checks out.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-ut",
   "name": "UDOT Traffic",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Utah, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 2088,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 2088,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-pa",
   "name": "511PA",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Pennsylvania, US",
   "status": "blocked",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 1440,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 1440,
   "stream_type": "stills (video: Arcadis securetoken, opt-in off)",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "video: Arcadis SecureTokenUri + :8200 hosts unreachable from VPS; agency Referer"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-az",
   "name": "AZ511",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Arizona, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 678,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 678,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-nv",
   "name": "NVroads",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Nevada, US",
   "status": "partial",
   "enabled": true,
   "channels": 521,
   "mapped_cameras": 651,
   "video_cameras": 628,
   "video_up": 521,
   "video_down": 107,
   "video_unknown": 0,
   "still_cameras": 23,
   "stream_type": "HLS (direct) + stills",
   "discovery": "ibi DataTables, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-id",
   "name": "Idaho 511",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Idaho, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 730,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 730,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-wi",
   "name": "511 Wisconsin",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Wisconsin, US",
   "status": "live",
   "enabled": true,
   "channels": 478,
   "mapped_cameras": 461,
   "video_cameras": 459,
   "video_up": 445,
   "video_down": 14,
   "video_unknown": 0,
   "still_cameras": 2,
   "stream_type": "HLS (direct) + stills",
   "discovery": "ibi DataTables, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-la",
   "name": "511 Louisiana",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Louisiana, US",
   "status": "live",
   "enabled": true,
   "channels": 469,
   "mapped_cameras": 490,
   "video_cameras": 490,
   "video_up": 469,
   "video_down": 21,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct) + stills",
   "discovery": "ibi DataTables, daily",
   "blockers": [],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-ak",
   "name": "Alaska 511",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Alaska, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 466,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 466,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-ne",
   "name": "New England 511",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Maine / New Hampshire / Vermont, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 363,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 363,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ibi-ct",
   "name": "CTroads",
   "plugin": "ibi511",
   "in_prod": true,
   "coverage": "Connecticut, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 347,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 347,
   "stream_type": "still image",
   "discovery": "ibi DataTables, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "jccbi",
   "name": "JCCBI Jacques Cartier Bridge",
   "plugin": "jccbi",
   "in_prod": true,
   "coverage": "Montréal, Québec, CA",
   "status": "down",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 2,
   "video_cameras": 2,
   "video_up": 0,
   "video_down": 2,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "Hard-coded 2 Wowza Cloud URLs",
   "blockers": [
    "both Wowza streams down at the source (health check 2026-11-10: jccbi-1 HTTP 404, jccbi-2 timeout; last OK 2026-11-07)"
   ],
   "notes": "Candidate to drop or re-discover. | 2026-11-10: hidden from playlist/EPG by the stream health check; returns automatically if JCCBI's feeds recover.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky",
   "last_update": "2026-11-10"
  },
  {
   "id": "manatee",
   "name": "Manatee County FL RTMC",
   "plugin": "manatee",
   "in_prod": true,
   "coverage": "Manatee County, Florida, US",
   "status": "live",
   "enabled": true,
   "channels": 241,
   "mapped_cameras": 243,
   "video_cameras": 243,
   "video_up": 241,
   "video_down": 2,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "County ArcGIS TMC_Camera_Feeds (whitelisted fields), 12 h",
   "blockers": [
    "each request starts a go2rtc session: very gentle health"
   ],
   "notes": "Layer exposes internal RTSP creds in other fields: never requested.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "norcast",
   "name": "Norcast Weather Camera Network",
   "plugin": "norcast",
   "in_prod": true,
   "coverage": "South Jersey shore + Camden, New Jersey, US",
   "status": "live",
   "enabled": true,
   "channels": 4,
   "mapped_cameras": 4,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 4,
   "stream_type": "still image (Dropbox JPEG -> HLS via ffmpeg)",
   "discovery": "norcast.tv page (SiteGround sg-captcha blocks prod IP) + built-in list of 4 Dropbox links",
   "blockers": [
    "norcast.tv page IP-blocked from prod (HTTP 202 sg-captcha): built-in list used"
   ],
   "notes": "Fixed 2026-10-31 ~01:30 UTC: 4 cams, ALWAYS_PUBLIC, the only stills in the playlist.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "weather-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "okcweather",
   "name": "OKC Weather",
   "plugin": "okcweather",
   "in_prod": true,
   "coverage": "Oklahoma City area, Oklahoma, US",
   "status": "off",
   "enabled": false,
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still image",
   "discovery": "okcweather.com weathercam page + built-in list",
   "blockers": [],
   "notes": "Disabled in engine-state (plugins.okcweather=false); also excluded from map. Still catalogues 14 cams hourly.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "weather-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "oktraffic",
   "name": "ODOT OKTraffic",
   "plugin": "oktraffic",
   "in_prod": true,
   "coverage": "Oklahoma, US",
   "status": "partial",
   "enabled": true,
   "channels": 469,
   "mapped_cameras": 469,
   "video_cameras": 469,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 469,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "oktraffic.org/api/CameraPoles (LoopBack filter), every 3 h",
   "blockers": [
    "stream.oktraffic.org Cloudflare blocks datacenter IPs: VPS health skipped (status unknown); viewers fetch directly"
   ],
   "notes": "465 in playlist, never health-checked.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "palmbeach",
   "name": "Palm Beach County FL",
   "plugin": "palmbeach",
   "in_prod": true,
   "coverage": "Palm Beach County, Florida, US",
   "status": "live",
   "enabled": true,
   "channels": 188,
   "mapped_cameras": 205,
   "video_cameras": 205,
   "video_up": 188,
   "video_down": 17,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct) (fMP4)",
   "discovery": "Portal XML loader.php, active + otp_server=0, 12 h",
   "blockers": [
    "no CORS header (fine for IPTV players)"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "sky",
   "name": "Sky & Space",
   "plugin": "sky",
   "in_prod": true,
   "coverage": "Earth / Sun / Aurora (non-terrestrial)",
   "status": "live",
   "enabled": true,
   "channels": 25,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still image -> HLS (rendered 1280x720)",
   "discovery": "Curated NOAA/NASA/ESA/JMA/EUMETSAT/SWPC feeds",
   "blockers": [],
   "notes": "Off the map by design; separate space/sun/aurora playlists (25 channels).",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "n/a",
   "category": "sun-space",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "stills-bwb",
   "name": "Blue Water Bridge (Sarnia/Port Huron)",
   "plugin": "stillspack",
   "in_prod": true,
   "coverage": "Sarnia, Ontario, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 2,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 2,
   "stream_type": "still image",
   "discovery": "2 fixed JPEG URLs",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "stills-nd",
   "name": "NDDOT North Dakota",
   "plugin": "stillspack",
   "in_prod": true,
   "coverage": "North Dakota, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 582,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 582,
   "stream_type": "still image",
   "discovery": "travelfiles.dot.nd.gov cameras.json, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "stills-nyc",
   "name": "NYC DOT webcams",
   "plugin": "stillspack",
   "in_prod": true,
   "coverage": "New York City, New York, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 952,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 952,
   "stream_type": "still image",
   "discovery": "webcams.nyctmc.org/api/cameras, daily",
   "blockers": [
    "stills only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "drivebc-bc",
   "name": "DriveBC highway cameras",
   "plugin": "drivebc",
   "in_prod": true,
   "coverage": "British Columbia, CA",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 1068,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 1068,
   "stream_type": "still image",
   "discovery": "www.drivebc.ca/api/webcams/ (public JSON), daily",
   "blockers": [
    "stills only"
   ],
   "notes": "Added 2026-11-01: ~1,068 cams under the Open Government Licence - British Columbia (commercial OK with attribution). Map only.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "usgs-volc",
   "name": "USGS volcano webcams (AVO/CVO/HVO/YVO)",
   "plugin": "usgs_ashcam",
   "in_prod": true,
   "coverage": "Alaska, Washington, Oregon, Hawaii, Wyoming, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 95,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 95,
   "stream_type": "still image",
   "discovery": "volcview.wr.usgs.gov/ashcam-api/webcamApi/webcams, daily",
   "blockers": [
    "stills only",
    "FAA weathercams and third-party mirrors (resorts, Roundshot, WSDOT) excluded"
   ],
   "notes": "Added 2026-11-01: USGS-run cams only (public domain). 81 live now; 95 after the next catalogue refresh (id-case fix).",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "horizon-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nps-webcams",
   "name": "National Park Service webcams",
   "plugin": "nps_webcams",
   "in_prod": true,
   "coverage": "21 states + DC (HI, TX, MA, CA, CO, MT, ID, WA, MI, OR, AZ, WY, AK ...), US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 131,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 131,
   "stream_type": "still image",
   "discovery": "NPS Data API /webcams (live, api.data.gov key) + view pages, every 6h",
   "blockers": [
    "stills only",
    "partner-hosted (webcam.io, pixelcaster, glacier.org) and YouTube cams excluded"
   ],
   "notes": "Added 2026-11-01; API key obtained 2026-11-01 (info@skywatch.monster signup) -> list now live from the API: 131 of 289 NPS webcams kept (NPS/USGS/NWS-hosted, image updated within 7 days). Map only.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "nature",
   "origin": "build",
   "tier": "+more"
  },
  {
   "id": "geonet-volcano",
   "name": "GeoNet volcano cameras (NZ)",
   "plugin": "geonet_volcano",
   "in_prod": true,
   "coverage": "Ruapehu, Tongariro, Ngauruhoe, Taranaki, Whakaari/White Island, Raoul Island, NZ",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "mapped_cameras": 11,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 11,
   "stream_type": "still image",
   "discovery": "geonet.org.nz/volcano/cameras page + images.geonet.org.nz latest JPGs, daily",
   "blockers": [
    "stills only",
    "camera positions approximate"
   ],
   "notes": "Added 2026-11-01: 11 cams, CC BY 3.0 NZ with the GeoNet acknowledgement. Map only.",
   "last_audit": "2026-11-10T06:08:16-05:00",
   "next_audit_due": "2026-11-10T12:00:00-05:00",
   "phase": "p1",
   "country": "n/a",
   "category": "horizon-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ga-video",
   "name": "Georgia 511GA live video",
   "plugin": null,
   "in_prod": false,
   "coverage": "Georgia, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 4331,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (token redirect)",
   "discovery": "Already catalogued in ibi-ga; S_TOKEN_REDIRECTS env gate",
   "blockers": [
    "stream hosts unreachable from box+prod; test from a home network before enabling"
   ],
   "notes": "Up to 4,331 channels.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "njta-wink",
   "name": "NJ Turnpike Authority WINK",
   "plugin": null,
   "in_prod": false,
   "coverage": "NJ Turnpike + Garden State Parkway, New Jersey, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 136,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (direct)",
   "discovery": "wink.njta.com/{node}/public/hls/{id}_nj.m3u8 (200 from prod)",
   "blockers": [
    "njta.gov camera list is Cloudflare 403 from box+prod: needs seed list or 511nj flow"
   ],
   "notes": "Found via Argus/opencctv.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "webcoos",
   "name": "WebCOOS coastal cams (NOAA IOOS)",
   "plugin": null,
   "in_prod": false,
   "coverage": "US coasts",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 49,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS 1080p (direct, CORS *)",
   "discovery": "app.webcoos.org API v1 -> stage-ams.srv.axds.co/stream/adaptive/{org}/{site}/hls.m3u8",
   "blockers": [
    "catalogue API needs a free WebCOOS token (403 without)"
   ],
   "notes": "Register for token.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "horizon-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nj511",
   "name": "511NJ",
   "plugin": null,
   "in_prod": false,
   "coverage": "New Jersey, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 794,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS",
   "discovery": "511nj guest login + AES-CBC",
   "blockers": [
    "AES guest-login + Referer: blocked by policy"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "ma-trafficland",
   "name": "Massachusetts (trafficland)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Massachusetts, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 285,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (expiring tokens)",
   "discovery": "Mass511 / trafficland",
   "blockers": [
    "expiring trafficland tokens; stream timed out"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "qc-mtq",
   "name": "Québec MTQ / Québec 511",
   "plugin": null,
   "in_prod": false,
   "coverage": "Québec, CA",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 680,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "MP4 clips + stills",
   "discovery": "MTQ WFS ms:infos_cameras (680, 200 from box+prod) + quebec511.info camera.ashx",
   "blockers": [
    "quebec511 Cloudflare 403 from datacenter IPs (box+prod)"
   ],
   "notes": "Would need residential egress. Source: canada-cams.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "CA",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "tn-smartway",
   "name": "TDOT SmartWay video",
   "plugin": null,
   "in_prod": false,
   "coverage": "Tennessee, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 669,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS",
   "discovery": "TDOT Open Data API",
   "blockers": [
    "needs our own TDOT Open Data API key"
   ],
   "notes": "Instance exists (dotvideo-tn) but disabled.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "fl-video",
   "name": "FL511 live video",
   "plugin": null,
   "in_prod": false,
   "coverage": "Florida, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 4325,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (securetoken relay)",
   "discovery": "ibi GetVideoUrl -> DIVAS SecureTokenUri",
   "blockers": [
    "dis-seN.divas.cloud:8200 unreachable from VPS; agency Referer"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "pa-video",
   "name": "511PA live video",
   "plugin": null,
   "in_prod": false,
   "coverage": "Pennsylvania, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 1304,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS (securetoken relay)",
   "discovery": "ibi GetVideoUrl -> Arcadis SecureTokenUri",
   "blockers": [
    "pa-seN.arcadis-ivds.com:8200 unreachable from VPS; agency Referer"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "or-tripcheck",
   "name": "ODOT TripCheck (Oregon)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Oregon, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still image",
   "discovery": "tripcheck.com cctv inventory",
   "blockers": [
    "stills only; stills HLS paused"
   ],
   "notes": "Source: pdxtraffic.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nm-roads",
   "name": "NMRoads (New Mexico)",
   "plugin": null,
   "in_prod": false,
   "coverage": "New Mexico, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still image",
   "discovery": "ss.nmroads.com snapshots",
   "blockers": [
    "snapshots 500 without site Referer (we don't send one)"
   ],
   "notes": "Noted in stillspack.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "lake-passage",
   "name": "Lake County PASSAGE (IL)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Lake County, Illinois, US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still image",
   "discovery": "SSE/worker API, no plain list",
   "blockers": [
    "no plain list; cams also in Travel Midwest"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "opencctv",
   "name": "opencctv.org / Argus catalogue",
   "plugin": null,
   "in_prod": false,
   "coverage": "Global",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "mixed",
   "discovery": "opencctv /api/cameras/markers + batch",
   "blockers": [
    "now 403 from box+prod; aggregator: mimic agencies instead"
   ],
   "notes": "Mined for Arlington/NJTA/WebCOOS.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "global",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "road511",
   "name": "api.road511.com",
   "plugin": null,
   "in_prod": false,
   "coverage": "US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "mixed",
   "discovery": "road511 API",
   "blockers": [
    "needs X-API-Key (401)"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "earthcam",
   "name": "EarthCam",
   "plugin": null,
   "in_prod": false,
   "coverage": "Global",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS",
   "discovery": "n/a",
   "blockers": [
    "403 + ToS: excluded"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "global",
   "category": "landmarks",
   "origin": "build",
   "tier": "+more"
  },
  {
   "id": "commercial-ipcams",
   "name": "ipcamlive / resortcams / surfchex / brownrice",
   "plugin": null,
   "in_prod": false,
   "coverage": "US",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "HLS",
   "discovery": "n/a",
   "blockers": [
    "commercial; most sample URLs 404"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "US",
   "category": "horizon-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "shodan",
   "name": "Shodan-indexed cameras (camforge)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Global",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "mixed",
   "discovery": "n/a",
   "blockers": [
    "indexes private/unsecured cameras: excluded"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "global",
   "category": "other",
   "origin": "build",
   "tier": "+more"
  },
  {
   "id": "nz-metservice-wx",
   "name": "MetService (NZ national weather service)",
   "plugin": null,
   "in_prod": false,
   "coverage": "NZ nationwide",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "n/a (forecast/radar/satellite imagery)",
   "discovery": "n/a",
   "blockers": [
    "no public cam feed",
    "imagery commercially licensed"
   ],
   "notes": "Use as weather context only, not a cam source. Site 200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p2",
   "country": "NZ",
   "url": "https://www.metservice.com/",
   "approx_cameras": "no own public weather cams; mountain/ski cams are third-party",
   "public_api": "Commercial API (paid) for data; no cam API",
   "licence": "MetService terms: no reuse without licence",
   "priority": 3,
   "category": "weather-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nz-tekapo-mtjohn",
   "name": "Tekapo Tourism Mt John live cam (aurora at night)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Lake Tekapo / Mackenzie dark-sky reserve (southern sky at night)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 1,
   "est_map_cameras": 1,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "live video (camstreamer embed, 24 h archive); daytime pan tour, night points at southern sky",
   "discovery": "page embeds camstreamer.com player",
   "blockers": [
    "permission needed",
    "embed-only player (no direct HLS published)"
   ],
   "notes": "Best NZ aurora-australis video cam. Page 200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p2",
   "country": "NZ",
   "url": "https://www.tekapotourism.nz/videocam.html",
   "approx_cameras": "1",
   "public_api": "No — embed only",
   "licence": "Tekapo Tourism / Air Safaris sponsored; ask permission to embed or relay",
   "priority": 1,
   "category": "aurora",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nz-mtjohn-allsky",
   "name": "UC Mt John Observatory all-sky camera",
   "plugin": null,
   "in_prod": false,
   "coverage": "Mt John, Tekapo (full sky)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 1,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still image + nightly all-sky timelapse videos",
   "discovery": "landing page latest image + nightly videos",
   "blockers": [
    "timed out from box and prod (likely geo/firewall)",
    "permission needed"
   ],
   "notes": "Pair with nz-tekapo-mtjohn for Tekapo sky.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p2",
   "country": "NZ",
   "url": "https://www2.phys.canterbury.ac.nz/~physweb/",
   "approx_cameras": "1 (+ aurora cam, AllSky7 on-campus only)",
   "public_api": "No",
   "licence": "University of Canterbury — ask SPCS (Matthew Pannell / Orlon Petterson)",
   "priority": 1,
   "category": "aurora",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nz-ruru",
   "name": "Ruru Observatory southern-horizon sky cam",
   "plugin": null,
   "in_prod": false,
   "coverage": "Otago (southern horizon)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 1,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still image (ZWO ASI120, SharpCap uploads)",
   "discovery": "page image",
   "blockers": [
    "hobby site; 500 from box, 200 from prod",
    "permission needed"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p2",
   "country": "NZ",
   "url": "http://www.ruruobservatory.org.nz/php/astLiveCam.php",
   "approx_cameras": "1",
   "public_api": "No",
   "licence": "private observatory — ask",
   "priority": 2,
   "category": "aurora",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "au-bom",
   "name": "Bureau of Meteorology",
   "plugin": null,
   "in_prod": false,
   "coverage": "Australia",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "radar/satellite imagery only",
   "discovery": "n/a",
   "blockers": [
    "no public cam feed"
   ],
   "notes": "Context data only. Site 200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://www.bom.gov.au/",
   "approx_cameras": "no public webcams",
   "public_api": "Registered/commercial data services",
   "licence": "BoM copyright; imagery reuse needs licence",
   "priority": 3,
   "category": "weather-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "au-aad-webcams",
   "name": "Australian Antarctic Division station webcams (Davis skycam, Mawson, Casey, Macquarie Is.)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Antarctica + Macquarie Island (AU programme)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 6,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG every ~3 min (images.antarctica.gov.au) + timelapse MP4",
   "discovery": "station page <img> latest + skycam mp4",
   "blockers": [
    "stills only (no live video by design, bandwidth)",
    "confirm reuse terms"
   ],
   "notes": "Aurora australis + polar sky. Page 200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://www.antarctica.gov.au/antarctic-operations/webcams/",
   "approx_cameras": "5 + Davis all-sky skycam + Nuyina ship cam",
   "public_api": "No API; stable dated image paths on page",
   "licence": "© Commonwealth (AAD); check site copyright/CC terms before reuse",
   "priority": 1,
   "category": "aurora",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "uk-metoffice",
   "name": "Met Office",
   "plugin": null,
   "in_prod": false,
   "coverage": "UK",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "n/a",
   "discovery": "n/a",
   "blockers": [
    "no public cam feed"
   ],
   "notes": "Context data only. Site 200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://www.metoffice.gov.uk/",
   "approx_cameras": "no public webcams",
   "public_api": "Met Office DataHub (key, data not cams); WOW observations",
   "licence": "Met Office terms / OGL for some data",
   "priority": 3,
   "category": "weather-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "uk-northumberland-astro",
   "name": "Northumberland Astro sky cams (Embleton, Cresswell, Budle Bay)",
   "plugin": "pendinglive",
   "in_prod": true,
   "coverage": "Northumberland coast, NE England (north-facing)",
   "status": "live",
   "enabled": true,
   "channels": 0,
   "est_new_channels": 4,
   "est_map_cameras": 5,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "live aurora/meteor cams + all-sky still ~60 s",
   "discovery": "sky-cameras page",
   "blockers": [
    "permission needed",
    "player/embed format unverified"
   ],
   "notes": "Aurora + noctilucent clouds. Page 200 from box/prod. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:northumberland, 1 cams) | 2026-11-10: restored after the 00:09 audit reset it (pendinglive instance still running).",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://northumberland-astro.space/sky-cameras/",
   "approx_cameras": "~5 (2 aurora, 2 meteor, 1 all-sky)",
   "public_api": "No",
   "licence": "private operator — ask permission",
   "priority": 1,
   "category": "aurora",
   "origin": "build",
   "tier": "sky",
   "takedown": "pendinglive:northumberland"
  },
  {
   "id": "uk-hag-allsky",
   "name": "HAG Observatory all-sky + aurora cams",
   "plugin": null,
   "in_prod": false,
   "coverage": "Southern England (allsky + north-facing aurora cam)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 2,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "all-sky still every 90 s + nightly timelapse",
   "discovery": "allsky.hagobservatory.uk",
   "blockers": [
    "permission needed",
    "stills"
   ],
   "notes": "200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://hagobservatory.uk/",
   "approx_cameras": "2 (+3 RMS meteor cams)",
   "public_api": "No",
   "licence": "private observatory — ask",
   "priority": 1,
   "category": "aurora",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "uk-armagh-wx",
   "name": "Armagh Observatory weather webcam",
   "plugin": null,
   "in_prod": false,
   "coverage": "Armagh, Northern Ireland",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 1,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still, refresh 2 min",
   "discovery": "page image",
   "blockers": [
    "permission needed",
    "stills"
   ],
   "notes": "200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://climate.armagh.ac.uk/aws/graphs/test.html",
   "approx_cameras": "1",
   "public_api": "No",
   "licence": "Armagh Observatory & Planetarium — ask",
   "priority": 2,
   "category": "weather-cams",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "uk-aurorawatch",
   "name": "AuroraWatch UK (Lancaster Univ.)",
   "plugin": null,
   "in_prod": false,
   "coverage": "UK",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "alert status API + links to cams",
   "discovery": "alert API -> boost UK aurora cams when amber/red",
   "blockers": [
    "don't copy their cam list — use only to find operators to ask",
    "alert API is a trigger, not a cam"
   ],
   "notes": "Good trigger for aurora mode. 200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://aurorawatch.lancs.ac.uk/map/",
   "approx_cameras": "index of own + third-party all-sky cams (used with permission)",
   "public_api": "Yes: AuroraWatch API (alert level)",
   "licence": "AuroraWatch UK terms; third-party cams belong to owners",
   "priority": 2,
   "category": "aurora",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nz-nzta",
   "name": "NZTA Waka Kotahi traffic cameras (Journey Planner)",
   "plugin": null,
   "in_prod": false,
   "coverage": "NZ state highways nationwide (Auckland, Wellington, Christchurch, Tauranga, Hamilton, Dunedin corridors)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 250,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG (~60 s refresh)",
   "discovery": "GET cameras.json (same as the agency map) -> features[].properties {Name, Latitude, Longitude, ImageUrl, Offline}",
   "blockers": [
    "stills only: map-only while STILLS_HLS is off"
   ],
   "notes": "200 from box and prod; image www.trafficnz.info/camera/{id}.jpg 200. Best NZ source by far.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p2",
   "country": "NZ",
   "url": "https://www.journeys.nzta.govt.nz/traffic-cameras",
   "approx_cameras": "313 (62 offline, 1 maintenance) — counted 2026-10-31",
   "public_api": "Yes: trafficnz.info/service/traffic/rest/4/cameras/all (JSON with Accept header, no key); the Journey Planner map itself loads /assets/map-data-cache/cameras.json (GeoJSON, max-age 60)",
   "licence": "NZTA Traffic & Travel data terms of use (attribution; terms page moved — reconfirm before launch)",
   "priority": 1,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nz-at",
   "name": "Auckland Transport (local-road cameras)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Auckland local arterials",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG (unverified)",
   "discovery": "ask AT / check developer portal",
   "blockers": [
    "no public camera list found",
    "Auckland motorway cams are NZTA's (already in nz-nzta)"
   ],
   "notes": "aucklandmotorways.co.nz is an NZTA motorway site (no separate feed).",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p2",
   "country": "NZ",
   "url": "https://at.govt.nz/",
   "approx_cameras": "unknown (tens?)",
   "public_api": "AT developer portal needs a subscription key; its documented APIs are public transport, not traffic cams",
   "licence": "AT developer terms (CC BY 4.0 for open data; confirm for cameras)",
   "priority": 2,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nz-metservice",
   "name": "MetService traffic & road-snow cams",
   "plugin": null,
   "in_prod": false,
   "coverage": "NZ cities + alpine passes/ski roads",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG",
   "discovery": "n/a — use nz-nzta instead",
   "blockers": [
    "derivative of NZTA for traffic cams",
    "terms forbid reuse"
   ],
   "notes": "Page 200 from box/prod (5.8 kB SPA shell).",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p2",
   "country": "NZ",
   "url": "https://www.metservice.com/traffic-cameras/auckland",
   "approx_cameras": "re-displays NZTA cams + some third-party snow cams",
   "public_api": "No (SPA; no documented API)",
   "licence": "MetService site terms: no reuse without permission; snow cams owned by third parties",
   "priority": 3,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nz-councils",
   "name": "Regional / city council cameras",
   "plugin": null,
   "in_prod": false,
   "coverage": "Ad hoc (e.g. Queenstown Lakes, Christchurch CTOC)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG",
   "discovery": "per council",
   "blockers": [
    "joint traffic operations centres already publish via NZTA",
    "per-council permission"
   ],
   "notes": "Revisit only after nz-nzta is live.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p2",
   "country": "NZ",
   "url": "",
   "approx_cameras": "small, fragmented",
   "public_api": "No common API",
   "licence": "per council",
   "priority": 3,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "au-nsw",
   "name": "Live Traffic NSW (TfNSW Open Data)",
   "plugin": "pendinglive",
   "in_prod": true,
   "coverage": "NSW (Sydney, Newcastle, Wollongong, regional highways)",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 150,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG (site refreshes every 15 s)",
   "discovery": "Developer Guide v1.9 s.4: GET /v1/live/cameras with Authorization: apikey",
   "blockers": [
    "needs our own free TfNSW API key",
    "stills only"
   ],
   "notes": "2026-11-03: Next round: TfNSW account registered (info@skywatch.monster); verification email not yet received. | 401 from box and prod as expected. | 2026-11-09: built (pendinglive:tfnsw, 250 cams, 'Transport for NSW (CC BY 4.0)'); auto-holds while image URLs return TfNSW's 'temporarily unavailable' page; takedown on request | 2026-11-10: restored after the 00:09 audit reset it (pendinglive instance still running).",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://www.livetraffic.com/traffic-cameras",
   "approx_cameras": "~150 (unverified; feed needs key)",
   "public_api": "Yes: api.transport.nsw.gov.au/v1/live/cameras GeoJSON (401 without key; free TfNSW Open Data key, Bronze 60k/day, 5/s)",
   "licence": "TfNSW Open Data licence (feed carries a rights{} object; CC BY 4.0 typical — confirm)",
   "priority": 1,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky",
   "takedown": "pendinglive:tfnsw"
  },
  {
   "id": "au-qld",
   "name": "QLDTraffic webcams (TMR)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Queensland (Brisbane, Gold Coast, Sunshine Coast, Toowoomba, regional)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 150,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG",
   "discovery": "API spec s.5.3 webcams -> properties.image_url",
   "blockers": [
    "shared public key returned 429 from box and prod (globally rate-limited)",
    "register own key: qldtraffic@tmr.qld.gov.au",
    "stills only"
   ],
   "notes": "Clean licence; best AU candidate after key.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://qldtraffic.qld.gov.au/",
   "approx_cameras": "~100-200 (unverified)",
   "public_api": "Yes: api.qldtraffic.qld.gov.au/v1/webcams GeoJSON; agency-published shared public key (global 100 req/min) or free registered key by email",
   "licence": "CC BY 4.0 AU (explicit in API spec v1.10)",
   "priority": 1,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "au-vic",
   "name": "VicTraffic (Dept of Transport and Planning)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Victoria",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "none public",
   "discovery": "n/a",
   "blockers": [
    "DTP does not publish camera images"
   ],
   "notes": "Melbourne stays 'none' unless DTP changes policy.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://traffic.transport.vic.gov.au/",
   "approx_cameras": "1,600+ exist but are TOC-internal",
   "public_api": "No camera feed (VicTraffic shows incidents/closures)",
   "licence": "n/a",
   "priority": 3,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "au-wa",
   "name": "Main Roads WA Travel Map",
   "plugin": null,
   "in_prod": false,
   "coverage": "Western Australia (Perth)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "none public",
   "discovery": "re-check Travel Map layers",
   "blockers": [
    "no public camera images found — verify"
   ],
   "notes": "Page 200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://www.mainroads.wa.gov.au/travelmap/",
   "approx_cameras": "0 public (camera feeds reportedly withdrawn)",
   "public_api": "Travel Map data (incidents/congestion) only",
   "licence": "MRWA terms",
   "priority": 3,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "au-sa",
   "name": "Traffic SA (DIT)",
   "plugin": null,
   "in_prod": false,
   "coverage": "South Australia (Adelaide)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "unknown",
   "discovery": "check data.sa.gov.au / ask DIT",
   "blockers": [
    "403 (WAF) from box and prod datacenter IPs — not bypassed"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://traffic.sa.gov.au/",
   "approx_cameras": "unknown",
   "public_api": "unknown",
   "licence": "SA Gov terms",
   "priority": 3,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "au-tas",
   "name": "Tasmania State Growth traffic cameras",
   "plugin": null,
   "in_prod": false,
   "coverage": "Hobart (Railway Roundabout, Argyle/Davey St, Davey/Sandy Bay, Tasman Bridge)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 4,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG (live links)",
   "discovery": "static list on page",
   "blockers": [
    "403 (WAF) from box and prod",
    "tiny"
   ],
   "notes": "Would give Hobart 'weak'.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://www.transport.tas.gov.au/managing_the_roads/traffic-cameras",
   "approx_cameras": "~4",
   "public_api": "No",
   "licence": "Tas Gov terms",
   "priority": 2,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "au-nt",
   "name": "Road Report NT",
   "plugin": null,
   "in_prod": false,
   "coverage": "Northern Territory",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "none",
   "discovery": "n/a",
   "blockers": [
    "no cameras published"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://roadreport.nt.gov.au/",
   "approx_cameras": "0 (conditions only)",
   "public_api": "No camera feed",
   "licence": "n/a",
   "priority": 3,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "au-act",
   "name": "ACT roads (Transport Canberra and City Services)",
   "plugin": null,
   "in_prod": false,
   "coverage": "ACT (Canberra)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "none",
   "discovery": "n/a",
   "blockers": [
    "no public traffic webcams found"
   ],
   "notes": "Live Traffic NSW shows some ACT road info, not cams.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p3",
   "country": "AU",
   "url": "https://www.act.gov.au/",
   "approx_cameras": "0 public found",
   "public_api": "No (data.act.gov.au lists enforcement camera locations only, not webcams)",
   "licence": "n/a",
   "priority": 3,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "tfl-jamcams",
   "name": "TfL JamCams (London)",
   "plugin": "tfl_jamcams",
   "in_prod": true,
   "coverage": "Greater London",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "est_new_channels": 799,
   "est_map_cameras": 799,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "~10 s MP4 loops + JPEG (S3 jamcams.tfl.gov.uk, refreshed every few min)",
   "discovery": "GET Place/Type/JamCam -> additionalProperties {available, imageUrl, videoUrl}",
   "blockers": [
    "stills only: map, /search and on-demand Live stills; no playlist channels (cameras_enabled off)"
   ],
   "notes": "200 from box and prod; mp4 sample 200 video/mp4. Moved from phase-1 'considered' list. | 2026-11-10: LIVE since the 2026-11-09 10:30 UTC restart (TFL_APP_KEY in keys.env); catalogue 831 cams (run 2026-11-09, ok); map + /search + on-demand Live stills; takedown on request (tfl_jamcams).",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://api.tfl.gov.uk/Place/Type/JamCam",
   "approx_cameras": "890 (799 available) — counted 2026-10-31",
   "public_api": "Yes: TfL Unified API Place/Type/JamCam (JSON; no key needed, free app_key raises limits)",
   "licence": "TfL Transport Data Service terms: free, attribution 'Powered by TfL Open Data', 500 calls/min/feed",
   "priority": 1,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky",
   "next_steps": "Live. Playlist channels only if Jon turns cameras_enabled on for this plugin.",
   "takedown": "tfl_jamcams",
   "last_update": "2026-11-10"
  },
  {
   "id": "uk-scotland",
   "name": "Traffic Scotland live cameras",
   "plugin": null,
   "in_prod": false,
   "coverage": "Scottish trunk roads (Glasgow, Edinburgh, Aberdeen, A9/A82/A83...)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 400,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG",
   "discovery": "FTP camera list after registration (don't scrape the page)",
   "blockers": [
    "registration + approval on developer portal",
    "stills only"
   ],
   "notes": "Page 200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://www.traffic.gov.scot/traffic-cameras",
   "approx_cameras": "413 listed on page — counted 2026-10-31",
   "public_api": "Registered 'Live Traffic Camera FTP Service' (images + camera list with coordinates); DATEX II for events",
   "licence": "Traffic Scotland developer T&Cs: credit Traffic Scotland, keep URLs, may revoke",
   "priority": 1,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "uk-wales",
   "name": "Traffic Wales cameras",
   "plugin": null,
   "in_prod": false,
   "coverage": "Welsh motorway + trunk roads (M4, A55...)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG (restricted server)",
   "discovery": "after approval",
   "blockers": [
    "apply by contact (name, org, service URL)",
    "stills only"
   ],
   "notes": "/cameras path 404 on probe; developer page is the entry point.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://traffic.wales/developers",
   "approx_cameras": "unknown (~100s)",
   "public_api": "DATEX II CCTV metadata (names, coords, status) + restricted stills server, on application",
   "licence": "Traffic Wales T&Cs: credit Traffic Wales; extra terms for images",
   "priority": 2,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "uk-twni",
   "name": "TrafficWatchNI (DfI)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Northern Ireland (Belfast + A1/M1/M2)",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 127,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "still JPEG",
   "discovery": "page lists /twni/cameras/static?id=N",
   "blockers": [
    "no API; permission needed for images",
    "stills only"
   ],
   "notes": "Page 200 from box/prod.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://trafficwatchni.com/twni/cameras",
   "approx_cameras": "127 — counted 2026-10-31",
   "public_api": "No camera API (RSS feeds for incidents only)",
   "licence": "RSS free incl. commercial with credit to DfI TICC; camera image reuse not covered -> ask DfI",
   "priority": 2,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "uk-nh",
   "name": "National Highways (Traffic England / NTIS)",
   "plugin": null,
   "in_prod": false,
   "coverage": "England motorways + trunk roads",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "stills + live video via VIH media partners",
   "discovery": "apply for image licence",
   "blockers": [
    "licence required for public display",
    "trafficengland.com images not for reuse"
   ],
   "notes": "Biggest UK prize but licence-gated.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "https://nationalhighways.co.uk/roads-and-travel/live-travel-updates/traffic-cameracctv-services/",
   "approx_cameras": "~4,000",
   "public_api": "NTIS DATEX II (free, registration) has no images; images only under licence",
   "licence": "Crown Copyright; image reuse needs a National Highways licence (non-commercial research/private study only otherwise)",
   "priority": 2,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "uk-councils",
   "name": "Local council UTMC cameras",
   "plugin": null,
   "in_prod": false,
   "coverage": "Various English cities",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "mostly stills",
   "discovery": "per council",
   "blockers": [
    "per-council permission",
    "fragmented"
   ],
   "notes": "Later, city by city.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p4",
   "country": "GB",
   "url": "",
   "approx_cameras": "fragmented",
   "public_api": "No common API",
   "licence": "per council (often OGL for data, not images)",
   "priority": 3,
   "category": "road-weather",
   "origin": "build",
   "tier": "sky"
  },
  {
   "id": "nasa-plus-events",
   "name": "NASA+ live events (spacewalks, dockings, launches) - direct HLS",
   "plugin": null,
   "in_prod": false,
   "coverage": "ISS spacewalks, dockings/undockings, crew & cargo launches, Artemis briefings",
   "status": "viable",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "direct HLS (Akamai, event-only); YouTube mirror per event",
   "discovery": "Same source NASA+'s own player uses: public WordPress REST https://plus.nasa.gov/wp-json/wp/v2/scheduled_video (?per_page=10&_fields=id,slug,link,title,meta). meta.video-url = https://ntv1.akamaized.net/hls/live/2110242/<event>/master.m3u8, meta.youtube-url, meta.first_aired_date / end_aired_date (unix). Event page renders it as video#main-video > source[type=application/x-mpegURL]. video-url is filled shortly before air (Spacewalk 101 not populated yet).",
   "blockers": [
    "event-only",
    "video-url appears only near air time"
   ],
   "notes": "Best (only) official direct-video ISS option. Legacy NASA-NTV1-HLS path is dead; this /2110242/ per-event path is current.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://plus.nasa.gov/",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 1,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "yes (2026-10-31 from stats.lat: past event spacewlk102926 master 200, master_360 variant 200, .ts segment 206 video/MP2T; ACAO *, no token/Referer). After air the playlist becomes a VOD (~9 h). Live-edge not yet tested - next window Spacewalk 101.",
   "availability": "Event-only, not 24/7. Next: U.S. Spacewalk 101, 2026-11-05 06:45 America/Winnipeg (11:45 UTC) to ~21:00. Feeds include ISS external/helmet cams; LOS dropouts during spacewalks are possible.",
   "terms": "NASA media generally not copyrighted in the US; use for informational purposes with 'NASA' credit. Must not imply NASA endorsement. NASA insignia ('meatball'), logotype ('worm') and seal are NOT public domain - do not use them as our branding/icons. Identifiable astronauts: no commercial use of likeness. NASA's AI guidance: don't attribute generated text to NASA.",
   "licence": "NASA media guidelines (credit NASA; no endorsement/logo)",
   "next_steps": [
    "app bot: poll scheduled_video every 15-30 min; when now within first/end_aired and video-url set -> add channel 'NASA+ live: <title>' to playlist + /space (map=false)",
    "fallback to meta.youtube-url as iframe embed when video-url empty",
    "test live edge from prod at Spacewalk 101 (Nov 5)",
    "counts against MAX_RUNNERS=8 only while live"
   ],
   "origin": "build"
  },
  {
   "id": "nasa-iss-live-youtube",
   "name": "NASA 'Live Video from the International Space Station' (official, 24/7)",
   "plugin": null,
   "in_prod": false,
   "coverage": "ISS interior/exterior views + ground audio, 24/7",
   "status": "viable",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "YouTube-only (embed)",
   "discovery": "nasa.gov/live -> 'Space Station Views' -> official playlist https://www.youtube.com/playlist?list=PL2aBZuCeDwlQMf6xMgQAUAY_nbHAgW5jz; titles confirmed via YouTube oEmbed (author NASA). Video ids rotate when NASA restarts streams -> resolve from the playlist/oEmbed, don't hard-code.",
   "blockers": [
    "no direct HLS",
    "not ffmpeg-relayable"
   ],
   "notes": "Most reliable 24/7 ISS feed; embed-only.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://www.youtube.com/watch?v=M3HKLzjvKPc",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 2,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "n/a - client-side YouTube iframe only (no direct HLS published; extracting YouTube streams breaks YouTube ToS)",
   "availability": "24/7 with a blue/static 'loss of signal' card during satellite hand-overs (several times per orbit, ~90 min orbit); views change with ops",
   "terms": "NASA media generally not copyrighted in the US; use for informational purposes with 'NASA' credit. Must not imply NASA endorsement. NASA insignia ('meatball'), logotype ('worm') and seal are NOT public domain - do not use them as our branding/icons. Identifiable astronauts: no commercial use of likeness. NASA's AI guidance: don't attribute generated text to NASA. Plus YouTube API/embed ToS (use youtube-nocookie embed, keep YouTube branding/controls).",
   "licence": "NASA media guidelines + YouTube embed ToS",
   "next_steps": [
    "app bot: /space 'embed' feed type (youtube-nocookie iframe); CSP frame-src www.youtube-nocookie.com on /space only",
    "playlist: not possible as video (no HLS) - optional placeholder entry linking to /space",
    "daily resolve of current ids from the official playlist page/oEmbed"
   ],
   "origin": "build"
  },
  {
   "id": "nasa-iss-hd-views-youtube",
   "name": "NASA 'Live High-Definition Views from the ISS' (external cams)",
   "plugin": null,
   "in_prod": false,
   "coverage": "ISS external HD camera (Earth views)",
   "status": "viable",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "YouTube-only (embed)",
   "discovery": "Same official 'Space Station Views' playlist on nasa.gov/live; oEmbed title 'Live High-Definition Views from the International Space Station (Official NASA Stream)'.",
   "blockers": [
    "no direct HLS",
    "recorded-loop periods must be labelled"
   ],
   "notes": "The Earth-view cam people expect from 'ISS live'. Replaces retired HDEV.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://www.youtube.com/watch?v=ROboUHfPUrU",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 3,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "n/a - client-side YouTube iframe only",
   "availability": "Near-24/7; shows a 'previously recorded' loop when the camera is unavailable, black on orbital night (~45 of every 90 min), LOS gaps",
   "terms": "NASA media generally not copyrighted in the US; use for informational purposes with 'NASA' credit. Must not imply NASA endorsement. NASA insignia ('meatball'), logotype ('worm') and seal are NOT public domain - do not use them as our branding/icons. Identifiable astronauts: no commercial use of likeness. NASA's AI guidance: don't attribute generated text to NASA. Plus YouTube embed ToS.",
   "licence": "NASA media guidelines + YouTube embed ToS",
   "next_steps": [
    "embed on /space beside nasa-iss-live-youtube",
    "label 'may be recorded / night side' using ISS position (iss-position-celestrak)"
   ],
   "origin": "build"
  },
  {
   "id": "sdo-nrt-movies",
   "name": "SDO near-real-time 48 h solar movies (MP4)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Sun (AIA 193/171/304/... and HMI)",
   "status": "viable",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "MP4 loop (near-live, regenerated through the day)",
   "discovery": "SDO 'latest' directory: https://sdo.gsfc.nasa.gov/assets/img/latest/mpeg/latest_1024_<chan>.mp4 (same tree as the latest_1024 stills sky.py already uses)",
   "blockers": [
    "not live video (loop)",
    "16 MB per fetch - cache, refresh <= hourly"
   ],
   "notes": "Only non-duplicate SDO addition: motion version of what sky.py shows as stills.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://sdo.gsfc.nasa.gov/data/",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 4,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "yes (200 video/mp4 from stats.lat; ~16 MB each; Last-Modified 2026-10-31 08:32 America/Winnipeg)",
   "availability": "Updates several times a day; occasional SDO eclipse seasons/data gaps",
   "terms": "NASA/SDO public; credit 'Courtesy of NASA/SDO and the AIA, EVE, and HMI science teams.' No endorsement/logo (NASA rules).",
   "licence": "NASA (credit SDO science teams)",
   "next_steps": [
    "optional: /space solar 'movie' tile (HTML5 video of cached mp4)",
    "do NOT duplicate the existing SDO latest_1024 stills"
   ],
   "origin": "build"
  },
  {
   "id": "goes-suvi",
   "name": "NOAA GOES-19 SUVI solar UV (24 h frame list)",
   "plugin": null,
   "in_prod": false,
   "coverage": "Sun (SUVI 304/195/171/... from GOES-19)",
   "status": "viable",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "stills sequence (PNG frames, ~4 min cadence)",
   "discovery": "SWPC's own animation player list: https://services.swpc.noaa.gov/products/animations/suvi-primary-304.json (359 frames ~24 h; frame urls relative to services.swpc.noaa.gov)",
   "blockers": [
    "stills only"
   ],
   "notes": "Complements SDO with a NOAA operational source.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://www.swpc.noaa.gov/products/goes-solar-ultraviolet-imager-suvi",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 5,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "yes (JSON 200 from stats.lat)",
   "availability": "Continuous, minutes-old",
   "terms": "NOAA/SWPC US-government public domain; credit NOAA SWPC.",
   "licence": "US Gov public domain (credit NOAA SWPC)",
   "next_steps": [
    "optional sky.py stills feed (provides photo) or /space loop; not in sky.py today"
   ],
   "origin": "build"
  },
  {
   "id": "iss-position-celestrak",
   "name": "ISS orbit (TLE) for /space overlay - data, not video",
   "plugin": null,
   "in_prod": false,
   "coverage": "ISS position / ground track / day-night",
   "status": "viable",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "data (GP/TLE JSON)",
   "discovery": "CelesTrak GP query for NORAD 25544 (ISS ZARYA)",
   "blockers": [],
   "notes": "Support data so viewers understand dark/LOS periods. Not a map layer (space stays off the map).",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=json",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 6,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "yes (200 JSON from stats.lat)",
   "availability": "Updated a few times a day",
   "terms": "Free public data; credit CelesTrak; fetch at most every few hours (CelesTrak rate-limits heavy users).",
   "licence": "CelesTrak (free, attribute)",
   "next_steps": [
    "app bot: propagate client- or server-side (SGP4) to show ISS position + day/night next to the ISS embeds",
    "use day/night to annotate the HD-views cam ('night side - dark')"
   ],
   "origin": "build"
  },
  {
   "id": "esa-webtv",
   "name": "ESA Web TV (launches, ISS/Columbus events, briefings)",
   "plugin": null,
   "in_prod": false,
   "coverage": "ESA live events",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "embed-only (Vimeo player html), event-only",
   "discovery": "watch.esa.int (WordPress) loads its schedule via admin-ajax actions get_webtv_weekly_schedule_async / get_currently_live_event_async; each event carries a Vimeo player_embed_html",
   "blockers": [
    "embed-only",
    "no 24/7 ISS feed"
   ],
   "notes": "Low priority vs NASA+; no extraction of Vimeo streams.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://watch.esa.int/",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 7,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "page 301->200; no direct HLS published (Vimeo embed only)",
   "availability": "Event-only",
   "terms": "ESA Standard Licence: educational/informational use free with credit 'European Space Agency - ESA'; no endorsement; commercial/entertainment use needs written authorisation.",
   "licence": "ESA Standard Licence",
   "next_steps": [
    "optional /space 'upcoming events' list linking/embedding ESA player during events"
   ],
   "origin": "build"
  },
  {
   "id": "spacex-webcasts",
   "name": "SpaceX launch webcasts",
   "plugin": null,
   "in_prod": false,
   "coverage": "Falcon/Starship launches, Dragon to ISS",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "embed-only (X/YouTube), event-only",
   "discovery": "spacex.com/launches (client-rendered) links the X/YouTube webcast per mission; NASA-partnered Dragon/CRS missions are ALSO on NASA+ HLS (covered by nasa-plus-events)",
   "blockers": [
    "copyrighted",
    "embed-only"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://www.spacex.com/launches/",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 8,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "page 200; no direct HLS",
   "availability": "Event-only",
   "terms": "SpaceX webcasts are SpaceX copyright; embed via the platform's official player only; no relay.",
   "licence": "SpaceX copyright (embed only)",
   "next_steps": [
    "rely on NASA+ for ISS-bound launches; optionally link SpaceX webcasts from /space"
   ],
   "origin": "build"
  },
  {
   "id": "jaxa-live",
   "name": "JAXA live (YouTube channel)",
   "plugin": null,
   "in_prod": false,
   "coverage": "H3/HTV-X launches, Kibo events",
   "status": "considered",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "YouTube-only, event-only",
   "discovery": "jaxa.jp home links the JAXA YouTube channel and current live (youtube.com/live/<id>)",
   "blockers": [
    "copyrighted",
    "embed-only",
    "commercial use needs permission"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://www.youtube.com/user/jaxachannel",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 9,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "page 200 (jaxa.jp); YouTube embed only",
   "availability": "Event-only",
   "terms": "(c) JAXA: use without permission only for news/research/education/private use with credit '(c) JAXA'; commercial use prohibited without permission; JAXA logo is trademark.",
   "licence": "(c) JAXA (non-commercial, credit)",
   "next_steps": [
    "optional link/embed during JAXA events only"
   ],
   "origin": "build"
  },
  {
   "id": "nasa-tv-public-legacy",
   "name": "NASA TV Public (legacy 24/7 channel HLS)",
   "plugin": null,
   "in_prod": false,
   "coverage": "former 24/7 NASA TV",
   "status": "blocked",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "direct HLS (retired)",
   "discovery": "old NASA-NTV1-HLS master on ntv1.akamaized.net/hls/live/2014075/",
   "blockers": [
    "retired",
    "variants 404"
   ],
   "notes": "Kept so nobody re-adds it.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://www.nasa.gov/live/",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 10,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "no - master 200 but stale stub (Last-Modified 2024-03-16), all variants 404 from stats.lat",
   "availability": "Retired (NASA TV Public replaced by event-based NASA+ in 2024)",
   "terms": "NASA media generally not copyrighted in the US; use for informational purposes with 'NASA' credit. Must not imply NASA endorsement. NASA insignia ('meatball'), logotype ('worm') and seal are NOT public domain - do not use them as our branding/icons. Identifiable astronauts: no commercial use of likeness. NASA's AI guidance: don't attribute generated text to NASA.",
   "licence": "NASA media guidelines",
   "next_steps": [
    "do not use; superseded by nasa-plus-events"
   ],
   "origin": "build"
  },
  {
   "id": "iss-hdev",
   "name": "ISS HDEV experiment (old Ustream/IBM Video Earth-view feed)",
   "plugin": null,
   "in_prod": false,
   "coverage": "ISS external Earth view",
   "status": "blocked",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "none (ended)",
   "discovery": "n/a",
   "blockers": [
    "ended 2019"
   ],
   "notes": "Kept so nobody re-adds it.",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://eol.jsc.nasa.gov/ESRS/HDEV/",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 11,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "no - experiment ended 2019-08-22; Ustream/IBM Video channels gone",
   "availability": "Ended",
   "terms": "NASA media generally not copyrighted in the US; use for informational purposes with 'NASA' credit. Must not imply NASA endorsement. NASA insignia ('meatball'), logotype ('worm') and seal are NOT public domain - do not use them as our branding/icons. Identifiable astronauts: no commercial use of likeness. NASA's AI guidance: don't attribute generated text to NASA.",
   "licence": "NASA media guidelines",
   "next_steps": [
    "use nasa-iss-hd-views-youtube instead"
   ],
   "origin": "build"
  },
  {
   "id": "roscosmos-tv",
   "name": "Roscosmos TV / launches",
   "plugin": null,
   "in_prod": false,
   "coverage": "Soyuz/Progress launches, Russian segment events",
   "status": "blocked",
   "enabled": false,
   "channels": 0,
   "est_new_channels": 0,
   "est_map_cameras": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "embed-only (VK Video/RuTube/YouTube), event-only",
   "discovery": "not completed - roscosmos.ru returns 403 to prod (stats.lat)",
   "blockers": [
    "403 from datacenter IPs",
    "no clear licence",
    "embed platforms VK/RuTube"
   ],
   "notes": "",
   "last_audit": "2026-11-10T00:09:10-05:00",
   "next_audit_due": "2026-11-10T06:00:00-05:00",
   "phase": "p1",
   "country": "SPACE",
   "url": "https://www.roscosmos.ru/",
   "category": "space",
   "tier": "sky",
   "priority": 0,
   "priority_label": "top",
   "space_rank": 12,
   "map": false,
   "surfaces": [
    "playlist",
    "/space"
   ],
   "plays_from_prod": "no - 403 from stats.lat (not bypassed)",
   "availability": "Event-only",
   "terms": "Roscosmos copyright; no published reuse licence found",
   "licence": "unclear (copyright)",
   "next_steps": [
    "none; NASA+ covers ISS events incl. Soyuz dockings when NASA carries them"
   ],
   "origin": "build"
  },
  {
   "id": "auroramax",
   "name": "AuroraMAX all-sky (Yellowknife)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://auroramax.com/live",
   "coverage": "Yellowknife, NWT, CA",
   "country": "CA",
   "stream_type": "Still image (~6 s refresh) auroramax.phys.ucalgary.ca/recent/recent_1080p.jpg; nightly MP4 replays",
   "status": "live",
   "next_steps": "Only operates Aug–May after local sunset. Still-image cam: map-only (not playlist) unless Jon makes an exception like Norcast. Fills NWT gap.",
   "notes": "Discovered from the site's own JS bundle (recent_ image path). 200 from prod. | 2026-11-10: live pending owner reply; takedown on request (readylive:auroramax, 1 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); same image as the Sky aurora channel sky-auroramax (off the map); this one is the map / Live stills pin",
   "blockers": [],
   "approx_cameras": "1",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 1,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "readylive",
   "takedown": "readylive:auroramax",
   "last_update": "2026-11-10",
   "still_cameras": 1
  },
  {
   "id": "ucalgary-arctic-live",
   "name": "UCalgary Auroral Imaging live feeds (Resolute Bay, Fort Smith)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://aurora.phys.ucalgary.ca/ucimage/live.html",
   "coverage": "Resolute Bay NU / Fort Smith NWT, CA",
   "country": "CA",
   "stream_type": "Stills (JS-loaded)",
   "status": "considered",
   "next_steps": "Page is JS-driven; inspect its live.html scripts for the image endpoints next round. Would fill Nunavut gap.",
   "notes": "Superseded by ucalgary-rt (2026-11-01): live.html is dead placeholders; the real-time API lists 34 public feeds. | 2026-11-08: RISR-C (Resolute Bay) page aurora.phys.ucalgary.ca/resu/live.html references summary_plots/resu_cams/latest_resu_cam-*.png, all 404 today.",
   "blockers": [],
   "approx_cameras": "3-4",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-08"
  },
  {
   "id": "pbi-churchill-aurora",
   "name": "Polar Bears International / explore.org Northern Lights Cam (Churchill)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://polarbearsinternational.org/education/live/northern-lights-cams/",
   "coverage": "Churchill, Manitoba, CA",
   "country": "CA",
   "stream_type": "YouTube live embed (a0i1Kg6fROg)",
   "status": "considered",
   "next_steps": "YouTube only; check whether explore.org's own player exposes a direct stream; otherwise link-out or YouTube-embed policy decision for Jon.",
   "notes": "2026-11-07: Parks Canada Wapusk NP 'polar bear webcam' page just links explore.org Cape Churchill cam 2 (explore/YouTube) - no Parks Canada still.",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-07"
  },
  {
   "id": "avo-ashcam",
   "name": "Alaska Volcano Observatory ashcam network (incl. Anchorage horizon cams)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://avo.alaska.edu/webcam/",
   "coverage": "Alaska, US",
   "country": "US",
   "stream_type": "Stills via public JSON API (ashcam-api/webcamApi/webcams: 400 cams, 234 with images, lat/lon/bearing)",
   "status": "partial",
   "next_steps": "Plugin candidate: same API the AVO page uses. Many cams are weather/horizon views (Anchorage NW/SW, Anchor Point). Stills: map only. Pair with volcview below (overlap).",
   "notes": "2026-11-01: USGS-run subset now live as usgs-volc (81, 95 after refresh). FAA weathercams and third-party mirrors excluded.",
   "blockers": [],
   "approx_cameras": "234",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-01"
  },
  {
   "id": "cbc-calgary-skyline",
   "name": "CBC Calgary Skyline Cam",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.cbc.ca/calgary/webcam/webcam.html",
   "coverage": "Calgary, Alberta, CA",
   "country": "CA",
   "stream_type": "Still image (cgy_roofcam.jpg, ~1 min)",
   "status": "down",
   "next_steps": "Check CBC terms and other CBC regional roofcams (Winnipeg, Edmonton, etc.) with the same pattern.",
   "notes": "2026-11-01: cgy_roofcam.jpg last modified 22 Oct; Edmonton edm_webcam.jpg 13 Oct; Toronto 23 Oct; other cities 404. CBC also blocks prod (HTTP/2 error). Stale.",
   "blockers": [],
   "approx_cameras": "1",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-01"
  },
  {
   "id": "spaceneedle-roundshot",
   "name": "Space Needle PanoCam (Roundshot)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://spaceneedle.roundshot.com/",
   "coverage": "Seattle, Washington, US",
   "country": "US",
   "stream_type": "Roundshot 360° panorama stills (JS app)",
   "status": "considered",
   "next_steps": "Roundshot hosts many skyline panoramas: find the vendor's public site list as a discovery source (sky/horizon panos across US/CA/NZ/AU/UK).",
   "notes": "",
   "blockers": [],
   "approx_cameras": "1",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "chasermap",
   "name": "ChaserMap live storm chasers",
   "category": "storms",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://chasermap.com/",
   "coverage": "US (mobile)",
   "country": "US",
   "stream_type": "Map of chasers with optional live streams (mostly YouTube)",
   "status": "considered",
   "next_steps": "Inspect the map's data feed for which chasers expose direct streams vs YouTube; check terms. Also look at livestormchasing.com and stormcenter.app.",
   "notes": "",
   "blockers": [
    "mostly YouTube; terms unknown"
   ],
   "approx_cameras": "varies",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "mwobs-summit",
   "name": "Mount Washington Observatory summit cams",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://mountwashington.org/webcams/",
   "coverage": "Mount Washington, New Hampshire, US",
   "country": "US",
   "stream_type": "ipcamlive (domain-locked) + YouTube live + stills",
   "status": "blocked",
   "next_steps": "ipcamlive stream is domain-locked to mountwashington.org (needs Referer = no without Jon's OK). Options: YouTube embed, or ask MWO for permission.",
   "notes": "Also in random theme 'high points'.",
   "blockers": [
    "ipcamlive domain lock"
   ],
   "approx_cameras": "9",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "pikes-peak-summit",
   "name": "Pikes Peak summit cams (City of Colorado Springs)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://coloradosprings.gov/drivepikespeak",
   "coverage": "Pikes Peak, Colorado, US",
   "country": "US",
   "stream_type": "Live stream (YouTube) + summit stills (N/NE/NW/E/W/S)",
   "status": "considered",
   "next_steps": "Find the city's own camera page/player to see the image or stream host.",
   "notes": "Random theme 'high points'.",
   "blockers": [],
   "approx_cameras": "~10",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "sdzoo-cams",
   "name": "San Diego Zoo / Safari Park live cams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://zoo.sandiegozoo.org/live-cameras",
   "coverage": "San Diego, California, US",
   "country": "US",
   "stream_type": "Embedded player (to inspect)",
   "status": "considered",
   "next_steps": "Identify the player (likely third-party) and whether a direct HLS is exposed.",
   "notes": "",
   "blockers": [],
   "approx_cameras": "14",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "natzoo-cams",
   "name": "Smithsonian National Zoo webcams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://nationalzoo.si.edu/webcams",
   "coverage": "Washington, DC, US",
   "country": "US",
   "stream_type": "Embedded player (to inspect)",
   "status": "live",
   "next_steps": "Inspect individual cam pages for the player/HLS host.",
   "notes": "2026-11-01: direct Wowza HLS on nzp-wowza01/02.si.edu (CORS *): panda live_edge_panda25/smil:panda125_01.smil, lion, elephant, cheetah, naked mole rat. Masters 200 (1080/720/360) but chunklists 404 at ~04:35 ET; retest daytime. Needs permission (outreach 'natzoo'). | 2026-11-03 daytime retest (09:20 CST): panda master + chunklists return 200 with no Referer, playlist advances (media-sequence 2 to 5 in 20 s), segment decodes as H.264; 1080/720/360/240/160 ladder; CORS *. Technically ready. Still needs Smithsonian permission (outreach 'natzoo'). | 2026-11-10: live pending owner reply; takedown on request (readylive:natzoo, 8 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); official Wowza HLS, played direct (no re-encode; player credit pill)",
   "blockers": [],
   "approx_cameras": "5",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 8,
   "mapped_cameras": 8,
   "video_cameras": 8,
   "video_up": 8,
   "video_down": 0,
   "last_update": "2026-11-10",
   "plugin": "readylive",
   "takedown": "readylive:natzoo",
   "video_unknown": 0,
   "still_cameras": 0
  },
  {
   "id": "mbayaq-cams",
   "name": "Monterey Bay Aquarium live cams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.montereybayaquarium.org/cams-videos/live-cams",
   "coverage": "Monterey, California, US",
   "country": "US",
   "stream_type": "Embedded player (likely YouTube)",
   "status": "considered",
   "next_steps": "Live 7am–7pm PT; Monterey Bay Cam is also a horizon/sky view worth checking for the sky tier.",
   "notes": "2026-11-02 audit: site answers 405 to scripted GET from box and prod (bot wall); page itself not re-read.",
   "blockers": [],
   "approx_cameras": "10",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "georgia-aq-cams",
   "name": "Georgia Aquarium webcams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.georgiaaquarium.org/webcam/",
   "coverage": "Atlanta, Georgia, US",
   "country": "US",
   "stream_type": "Embedded player (to inspect)",
   "status": "considered",
   "next_steps": "Inspect per-cam pages.",
   "notes": "",
   "blockers": [],
   "approx_cameras": "~10",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "houston-zoo-cams",
   "name": "Houston Zoo webcams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.houstonzoo.org/explore/webcams/",
   "coverage": "Houston, Texas, US",
   "country": "US",
   "stream_type": "Embedded player (to inspect)",
   "status": "considered",
   "next_steps": "Live 7am–7pm CDT; inspect player.",
   "notes": "",
   "blockers": [],
   "approx_cameras": "6",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "cornell-birdcams",
   "name": "Cornell Lab Bird Cams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.allaboutbirds.org/cams/all-cams/",
   "coverage": "Various (US, Panama)",
   "country": "US",
   "stream_type": "YouTube live (via explore.org/Cornell)",
   "status": "considered",
   "next_steps": "Site 403s the box (bot protection): don't bypass; check from prod or via YouTube channel list.",
   "notes": "2026-11-09: Ontario FeederWatch cam (Manitouwadge, ON) live for the 2026-27 season (Canada animal gap).",
   "blockers": [
    "403 to datacenter IP"
   ],
   "approx_cameras": "~10",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-09"
  },
  {
   "id": "usgs-volcview",
   "name": "USGS VolcView ashcam network (HVO, Cascades, Alaska, etc.)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://volcview.wr.usgs.gov/ashcam-gui/webcam.html",
   "coverage": "Hawaii / Pacific NW / Alaska, US",
   "country": "US",
   "stream_type": "Stills via public JSON API (ashcam-api/webcamApi/webcams: 465 cams with lat/lon)",
   "status": "partial",
   "next_steps": "Same API pattern as AVO; dedupe with avo-ashcam. Many are sky/horizon views: tag per-cam.",
   "notes": "2026-11-01: same API as avo-ashcam; live as usgs-volc.",
   "blockers": [],
   "approx_cameras": "465",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-01"
  },
  {
   "id": "hvo-kilauea-live",
   "name": "USGS HVO Kīlauea summit livestreams (V1/V2/V3)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.usgs.gov/volcanoes/kilauea/summit-webcams",
   "coverage": "Kīlauea, Hawaii, US",
   "country": "US",
   "stream_type": "YouTube live (url.usgs.gov/v2cam, v3cam) + stills",
   "status": "considered",
   "next_steps": "Episodic fountaining ongoing (ep. 55 on 2026-10-17). YouTube-only for video; stills are covered by volcview API.",
   "notes": "",
   "blockers": [
    "YouTube-only video"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "nps-oldfaithful",
   "name": "NPS Yellowstone Old Faithful live stream",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.nps.gov/media/webcam/view.htm?id=CE843A37-74A2-4408-9176-26A8DCC97294",
   "coverage": "Yellowstone NP, Wyoming, US",
   "country": "US",
   "stream_type": "NPS webcam page (player to inspect)",
   "status": "considered",
   "next_steps": "NPS has a webcam API (developer.nps.gov /webcams, key required) — evaluate as a discovery source for all park cams.",
   "notes": "2026-11-01: NPS-hosted park webcams now live as nps-webcams (120 stills, public domain). Old Faithful streaming cam stays separate.",
   "blockers": [
    "NPS API needs a key (Jon's call)"
   ],
   "approx_cameras": "1 (+NPS-wide)",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-01"
  },
  {
   "id": "cn-tower-earthcam",
   "name": "CN Tower cams (EarthCam)",
   "category": "high-points",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.earthcam.com/world/canada/toronto/cntower/?cam=cntower1",
   "coverage": "Toronto, Ontario, CA",
   "country": "CA",
   "stream_type": "EarthCam player",
   "status": "considered",
   "next_steps": "EarthCam is already 'considered' as a source; tokenised streams/ToS likely block. Link-out only.",
   "notes": "",
   "blockers": [
    "EarthCam ToS"
   ],
   "approx_cameras": "2+",
   "origin": "deepdive-20261031",
   "found": "2026-10-31",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-10-31T08:33:10-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "ucalgary-rt",
   "name": "UCalgary Space Remote Sensing real-time all-sky feeds (TREx RGB/NIR, REGO, THEMIS)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://api.phys.ucalgary.ca/api/v1/rt",
   "coverage": "Resolute Bay, Rankin Inlet, Taloyoak NU; Sachs Harbour, Fort Smith, Yellowknife NWT; Kluane YT; Gillam, Pinawa MB; Lucky Lake, Rabbit Lake SK; Kapuskasing ON; AK; NH; AB",
   "country": "CA",
   "stream_type": "Stills: public no-auth JSON list (34 streams) + /api/v1/rt/{id}/latest JPEG",
   "status": "live",
   "next_steps": "Plugin is easy (stills, map only). Waiting on the ucalgary outreach reply for live-use credit/permission (open data is acknowledged per dataset, live use unclear).",
   "notes": "Replaces ucalgary-arctic-live (that live.html page is dead placeholders). Fills NU/NWT/YT sky gaps. | 2026-11-03: theauroraguy.com lists the SMILE/TREx/REGO cams as public live links; UCalgary docs say api.phys.ucalgary.ca/api/v1/rt/{id}/latest needs no authentication. Live-use credit still unconfirmed (outreach 'ucalgary'). | 2026-11-09: live pending owner reply; takedown on request (pendinglive:ucalgary, 31 cams)",
   "blockers": [
    "live-use terms unclear: outreach 'ucalgary'"
   ],
   "approx_cameras": "34",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-03",
   "plugin": "pendinglive",
   "takedown": "pendinglive:ucalgary"
  },
  {
   "id": "alertca",
   "name": "ALERTCalifornia wildfire/horizon cameras (UC San Diego)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://cameras.alertcalifornia.org/",
   "coverage": "California (1300) + Wyoming (6), US",
   "country": "US",
   "stream_type": "Stills: public-camera-data/all_cameras-v3.json + <id>/latest-frame.jpg (1920x1080, ~15 s)",
   "status": "live",
   "next_steps": "Terms fit (noncommercial with credit). Courtesy email optional before going live (outreach 'alertca').",
   "notes": "1306 cams from the public catalogue, 2026-11-01. | 2026-11-10: live pending owner reply; takedown on request (alertca, 1278 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); CC BY-NC-ND 4.0 noncommercial with credit 'ALERTCalifornia | UC San Diego'; their info bar kept (never cropped); 30 cams in winter mode / >48 h stale left out (incl. all 6 Wyoming cams, no frames)",
   "blockers": [],
   "approx_cameras": "1306",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 1276,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "terms": "Noncommercial use with credit. Use is noncommercial: skywatch.monster is a non-profit project, donation-funded to cover server costs only (no ads, no sales, no paid access); confirmed by Jon 2026-11-01.",
   "plugin": "alertca",
   "takedown": "alertca",
   "last_update": "2026-11-10",
   "still_cameras": 1276
  },
  {
   "id": "hpwren",
   "name": "HPWREN cameras (UC San Diego)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://hpwren.ucsd.edu/cameras/",
   "coverage": "San Diego, Imperial, Orange counties, California, US",
   "country": "US",
   "stream_type": "Stills (cdn.hpwren.ucsd.edu, ~1 min)",
   "status": "blocked",
   "next_steps": "Real-time images (<24 h) need a UCSD licence or waiver; email fback@hpwren.ucsd.edu (outreach 'hpwren').",
   "notes": "Terms: hpwren.ucsd.edu/cc.html. Archived (>24 h) is CC BY-NC 4.0 only. | 2026-11-08: Mount Wilson Observatory embeds HPWREN tower cams (wilson-{n,e,s,w}-mobo-c.jpg); mtwilson.edu 403 to the box (not bypassed).",
   "blockers": [
    "real-time licence required"
   ],
   "approx_cameras": "~300",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-08"
  },
  {
   "id": "ndbc-buoycam",
   "name": "NOAA NDBC BuoyCAMs",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.ndbc.noaa.gov/buoycams.shtml",
   "coverage": "Offshore US (Atlantic, Gulf, Pacific, Great Lakes, Hawaii, Alaska)",
   "country": "US",
   "stream_type": "Stills: buoycams.php JSON (90 stations, ~74 with a frame) + buoycam.php?station=<id>",
   "status": "blocked",
   "next_steps": "Public domain and plugin already written (/workspace/swsrc/ndbc_buoycam.py), but ndbc.noaa.gov returns 403 to the prod IP (any UA). Ask NDBC to allowlist (outreach 'ndbc') or serve via an approved relay.",
   "notes": "Box egress gets 200; prod gets 403.",
   "blockers": [
    "403 from datacenter IP"
   ],
   "approx_cameras": "74",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "faa-weathercams",
   "name": "FAA Weather Cameras",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://weathercams.faa.gov/",
   "coverage": "Alaska + lower 48 airports/passes, US",
   "country": "US",
   "stream_type": "Stills via API (401 without key)",
   "status": "blocked",
   "next_steps": "API needs an FAA-issued key; signup/request (outreach 'faa-weathercams'). 130 AVO-listed cams are FAA imagery and were excluded from usgs-volc.",
   "notes": "2026-11-03: Next round (phase 2): FAA API access needs email approval.",
   "blockers": [
    "API key required"
   ],
   "approx_cameras": "~900",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "next_round": true
  },
  {
   "id": "kpno-allsky",
   "name": "Kitt Peak all-sky camera (NSF NOIRLab)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://kpasca-db.tuc.noirlab.edu/",
   "coverage": "Kitt Peak, Arizona, US",
   "country": "US",
   "stream_type": "Stills (red filter, real time)",
   "status": "considered",
   "next_steps": "NOIRLab media is usually CC BY 4.0, but the all-sky DB page states no terms; ask (outreach 'noirlab'). Arizona is a weak state.",
   "notes": "",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1-3",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "mdm-allsky",
   "name": "MDM Observatory all-sky (Kitt Peak)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "http://mdm.kpno.noirlab.edu/Allsky.html",
   "coverage": "Kitt Peak, Arizona, US",
   "country": "US",
   "stream_type": "Still (5 min) + 6 h timelapse MP4",
   "status": "considered",
   "next_steps": "Fold into the noirlab ask; HTTP-only host.",
   "notes": "",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "lick-allsky",
   "name": "Lick Observatory all-sky (Mt Hamilton)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://mthamilton.ucolick.org/hamcam/skycam/",
   "coverage": "Mount Hamilton, California, US",
   "country": "US",
   "stream_type": "Still (1 min)",
   "status": "considered",
   "next_steps": "Ask UC Observatories (outreach 'lick').",
   "notes": "",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "palomar-allsky",
   "name": "Palomar Observatory all-sky + Hale webcam (Caltech)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://sites.astro.caltech.edu/palomar/media/livecams.html",
   "coverage": "Palomar Mountain, California, US",
   "country": "US",
   "stream_type": "Stills (few min)",
   "status": "live",
   "next_steps": "Ask Caltech/Palomar (outreach 'palomar').",
   "notes": "2026-11-08: direct still http://algol.palomar.caltech.edu/instruments/allsky/AllSkyCurrentImage.JPG 200 from prod (http only); filed as palomar-allsky-direct. | 2026-11-10: already LIVE since 2026-11-09 as pendinglive:palomar (all-sky still, see palomar-allsky-direct; live pending owner reply, takedown on request). Hale webcam not added. Row fixed.",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-10T05:58:00-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-10",
   "plugin": "pendinglive"
  },
  {
   "id": "gemini-cloudcams",
   "name": "Gemini Observatory cloud cameras (Maunakea, Cerro Pachón)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.gemini.edu/observing/telescopes-and-sites/sites/cloud-cameras",
   "coverage": "Maunakea, Hawaii, US / Cerro Pachón, CL",
   "country": "US",
   "stream_type": "Stills (status pages)",
   "status": "considered",
   "next_steps": "Page links an Image Usage Policy; read it next round. Maunakea also via MKWC (000 from prod).",
   "notes": "",
   "blockers": [],
   "approx_cameras": "2-4",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "ri-ridot",
   "name": "RIDOT traffic cameras (Rhode Island)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.dot.ri.gov/travel/",
   "coverage": "Rhode Island, US",
   "country": "US",
   "stream_type": "Live HLS (cdn3.wowza.com, ~51 on the metro page) + stills",
   "status": "blocked",
   "next_steps": "Streams return 403 without the dot.ri.gov Referer (we don't send one without approval). Ask RIDOT (outreach 'ri-ridot'). Rhode Island is still a 'none' region.",
   "notes": "",
   "blockers": [
    "Referer-locked HLS"
   ],
   "approx_cameras": "51+",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "mi-midrive",
   "name": "Michigan MDOT MiDrive cameras",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://mdotjboss.state.mi.us/MiDrive/map",
   "coverage": "Michigan, US",
   "country": "US",
   "stream_type": "Stills: public /MiDrive/camera/list JSON (806) -> micamerasimages.net thumbs; lat/lon inside the county link",
   "status": "live",
   "next_steps": "Terms unstated; ask MDOT (outreach 'mi-mdot') before a stills plugin. Michigan is weak.",
   "notes": "2026-11-10: live pending owner reply; takedown on request (midrive, 791 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); 15 list rows with a duplicate image URL folded",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "806",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 791,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "midrive",
   "takedown": "midrive",
   "last_update": "2026-11-10",
   "still_cameras": 791
  },
  {
   "id": "mt-mdt",
   "name": "Montana MDT travel cameras",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.mdt.mt.gov/travinfo/cameras.aspx",
   "coverage": "Montana, US",
   "country": "US",
   "stream_type": "Stills (page to inspect)",
   "status": "considered",
   "next_steps": "No JSON endpoint found yet; inspect the map app next round.",
   "notes": "2026-11-05: public ATMS pages work without a key: app.mdt.mt.gov/atms/public/cameras (200, 1.7 MB) lists about 422 timestamped RWIS stills on mdt.mt.gov/other/WebAppData/External/RRS/RWIS/<site>-<id>-<lens>-<date>.jpg; device list at atms/public/listDeviceLocations (found via warner-wvez/Ora). Filenames rotate about every 15 min, so a plugin must re-read the page. LiveTrafficCam reports 430 MT cams, 97.7% 14-day uptime. Terms unstated; ask MDT. | 2026-11-05: MDT Terms of Use (mdt.mt.gov/mdt/terms-of-use.aspx) allow viewing/copying/distributing unmodified content 'for personal or informational use'; not explicit about a public camera directory, so left as needs-permission and a request was drafted. Note the device list also exposes internal RPU fields; do not copy those.",
   "blockers": [
    "needs permission (terms unclear for redistribution)"
   ],
   "approx_cameras": "?",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-05"
  },
  {
   "id": "nwt-highways",
   "name": "NWT highway conditions",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.dot.gov.nt.ca/Highways/Highway-Conditions",
   "coverage": "Northwest Territories, CA",
   "country": "CA",
   "stream_type": "No cameras found",
   "status": "considered",
   "next_steps": "511nwt.ca unreachable; NWT sky coverage better via ucalgary-rt / auroramax.",
   "notes": "",
   "blockers": [],
   "approx_cameras": "0",
   "origin": "deepdive-20261101",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:30:40-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "jma-volcano",
   "name": "JMA volcano surveillance cameras (Japan Meteorological Agency)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.data.jma.go.jp/vois/data/obs/volcam/volcam.php",
   "coverage": "~95 cameras on Japan's active volcanoes (Sakurajima, Aso, Asama, Fuji, Kirishima ...), JP",
   "country": "JP",
   "stream_type": "Stills, ~2 min; per-camera page volcam.php?VC=<code>, image filename is a timestamp",
   "status": "viable",
   "next_steps": "Terms fit (JMA site terms follow the Government of Japan Standard Terms of Use 2.0, CC BY 4.0-compatible, credit 気象庁/JMA). Blocker is technical: there is no fixed 'latest.jpg', so the engine needs a per-fetch still resolver (plugin hook) or the plugin must re-catalogue every few minutes. Camera coordinates must be added by hand (volcano coords from JMA list).",
   "notes": "95 VC links on the list page; sample VC=50301 serves ../camera/503_8200C418/<yyyymmddHHMMSS>.jpg.",
   "blockers": [
    "no stable image URL (engine change)",
    "coordinates by hand"
   ],
   "approx_cameras": "95",
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-01T04:59:41-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "ingv-oe",
   "name": "INGV Osservatorio Etneo volcano cams (Etna, Stromboli, Vulcano)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.ct.ingv.it/sezioniesterne/webcam/WebcamEtna.php",
   "coverage": "Etna, Stromboli, Vulcano (Sicily / Aeolian Islands), IT",
   "country": "IT",
   "stream_type": "Stills (changing filenames) + EtnaTVChn video",
   "status": "blocked",
   "next_steps": "No reuse terms on the webcam pages; ask INGV (outreach 'ingv-oe') for permission and a stable latest-image URL.",
   "notes": "",
   "blockers": [
    "terms unstated",
    "no stable image URL"
   ],
   "approx_cameras": "~10",
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-01T04:59:41-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "parks-canada-glacier",
   "name": "Parks Canada Glacier NP cams (Mt Fidelity snow board, Mt Abbott)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://parks.canada.ca/pn-np/bc/glacier/visit/meteo-weather",
   "coverage": "Rogers Pass, Glacier National Park, British Columbia, CA",
   "country": "CA",
   "stream_type": "Stills (www.pc.gc.ca/images/remotecamera/..., 30 min)",
   "status": "live",
   "next_steps": "Small (2-3 cams). Government of Canada terms allow non-commercial reproduction with credit; add as a stillspack entry or tiny plugin next round. Mt Fidelity currently 'temporarily unavailable'.",
   "notes": "Other Parks Canada live cams are explore.org (Grasslands bison, Wapusk polar bears). | 2026-11-10: live pending owner reply; takedown on request (readylive:pcglacier, 2 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [],
   "approx_cameras": "3",
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-01T04:59:41-05:00",
   "channels": 0,
   "mapped_cameras": 2,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "readylive",
   "takedown": "readylive:pcglacier",
   "last_update": "2026-11-10",
   "still_cameras": 2
  },
  {
   "id": "parks-canada-explore",
   "name": "Parks Canada wildlife cams via explore.org (Grasslands bison, Wapusk polar bears)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://parks.canada.ca/nature/science/controle-monitoring/cameras",
   "coverage": "Grasslands NP (SK), Wapusk NP (MB), CA",
   "country": "CA",
   "stream_type": "YouTube/explore.org player",
   "status": "blocked",
   "next_steps": "Covered by outreach 'explore' (merged).",
   "notes": "",
   "blockers": [
    "YouTube-only; needs embed permission"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:59:41-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "aquarium-pacific",
   "name": "Aquarium of the Pacific live cams (Long Beach)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.aquariumofpacific.org/exhibits/webcams",
   "coverage": "Long Beach, California, US",
   "country": "US",
   "stream_type": "YouTube embeds",
   "status": "blocked",
   "next_steps": "Outreach 'aquarium-pacific' (embed/credit permission).",
   "notes": "",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "6",
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:59:41-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "seattle-aq",
   "name": "Seattle Aquarium live cam",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.seattleaquarium.org/live-cams/",
   "coverage": "Seattle, Washington, US",
   "country": "US",
   "stream_type": "YouTube embed",
   "status": "blocked",
   "next_steps": "Outreach 'seattle-aq'.",
   "notes": "",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T04:59:41-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "doc-royalcam",
   "name": "DOC Royal Cam (royal albatross nest, Taiaroa Head)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.doc.govt.nz/nature/native-animals/birds/birds-a-z/albatrosses/royal-albatross-toroa/royal-albatross-webcam/",
   "coverage": "Pukekura/Taiaroa Head, Otago, NZ",
   "country": "NZ",
   "stream_type": "YouTube live",
   "status": "blocked",
   "next_steps": "Outreach 'doc-royalcam'. Seasonal nest cam.",
   "notes": "",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-01T04:59:41-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "nps-partner-cams",
   "name": "NPS park cams on partner hosts (webcam.io, pixelcaster, glacier.org, resorts)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.nps.gov/subjects/watchingwildlife/webcams.htm",
   "coverage": "Various US parks",
   "country": "US",
   "stream_type": "Stills on third-party hosts",
   "status": "considered",
   "next_steps": "Not public-domain; each host/owner would need an OK. Low priority after nps-webcams (120 live).",
   "notes": "2026-11-02 audit: old url https://www.nps.gov/media/webcam/ is 404 (box and prod); replaced with the NPS webcams index.",
   "blockers": [
    "third-party copyright"
   ],
   "approx_cameras": "~25",
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "magma-id",
   "name": "MAGMA Indonesia volcano CCTV (PVMBG/ESDM)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://magma.esdm.go.id/",
   "coverage": "Indonesia",
   "country": "ID",
   "stream_type": "Unknown (no images in static page; JS app)",
   "status": "considered",
   "next_steps": "Find the CCTV endpoint and terms next round; no contact verified yet.",
   "notes": "",
   "blockers": [
    "terms unknown"
   ],
   "approx_cameras": null,
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-01T04:59:41-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "iceland-volcano-cams",
   "name": "Iceland volcano cams (RÚV, mbl.is, Vedur)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.ruv.is/",
   "coverage": "Reykjanes peninsula, IS",
   "country": "IS",
   "stream_type": "YouTube live",
   "status": "considered",
   "next_steps": "All found are YouTube streams from broadcasters; no direct still/HLS with open terms. Skip unless a broadcaster agrees.",
   "notes": "",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": null,
   "origin": "deepdive-20261101b",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-01T04:59:41-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "nysm-cams",
   "name": "NYS Mesonet station cameras (New York State Mesonet, UAlbany)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://operations.nysmesonet.org/~nbassill/loop/index.php?map=camplot",
   "coverage": "~126 Mesonet weather stations statewide, New York, US",
   "country": "US",
   "stream_type": "Stills, ~5 min; stable URL api.nysmesonet.org/cam/index.php/image/nysm/<STID>/latest (200 image/jpeg, fresh 2026-11-01 14:08 UTC)",
   "status": "blocked",
   "next_steps": "Best new sky source: horizon views at every NY weather station with a stable latest URL. Data Access Policy says images are copyrighted and redistribution needs written consent; ask NYSM (outreach 'nysm') for non-profit reuse with credit.",
   "notes": "Site list from the NYSM station table (stid + lat/lon). Pano image per site also exists (~nbassill/live/pano/<STID>.JPG).",
   "blockers": [
    "written consent required (NYSM data access policy)"
   ],
   "approx_cameras": "~126",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "ky-mesonet-cams",
   "name": "Kentucky Mesonet station cameras (WKU)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.kymesonet.org/data/camera/FARM",
   "coverage": "Kentucky Mesonet stations, Kentucky, US",
   "country": "US",
   "stream_type": "Stills every 30 min in daylight (Next.js app; image endpoint not found yet)",
   "status": "considered",
   "next_steps": "Next round: find the camera image/JSON endpoint behind the Next.js page and the reuse terms.",
   "notes": "2026-11-03: Next.js JS chunks scanned for a camera endpoint again, nothing found; needs a browser network trace. robots.txt allows crawling. | 2026-11-04: not retested; survey of other state mesonets found no other network publishing station cams (see state-mesonet-cams-survey).",
   "blockers": [
    "endpoint unknown",
    "terms unknown"
   ],
   "approx_cameras": null,
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-04"
  },
  {
   "id": "uaf-allsky",
   "name": "UAF Geophysical Institute all-sky aurora cams (Poker Flat, Toolik Lake, Gakona)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://allsky.gi.alaska.edu/",
   "coverage": "Interior and North Slope Alaska, US",
   "country": "US",
   "stream_type": "Stills ~10-20 s; filename is a timestamp, published via SSE allsky.gi.alaska.edu/src/checkLive.php?cam=<cam> (e.g. PKR/tagged_cam/PKR_<yymmddHHMMSS>.jpg)",
   "status": "considered",
   "next_steps": "Strong aurora source. Needs a per-fetch still resolver (same engine hook as jma-volcano) and permission: no reuse terms posted; the page names the operators as contacts (outreach 'uaf-allsky'). Old optics.gi.alaska.edu/realtime/latest thumbs are 404.",
   "notes": "",
   "blockers": [
    "terms unstated",
    "no stable image URL (engine change)"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "cfht-nanaao",
   "name": "CFHT Nana ao all-sky cloud camera (Maunakea)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.cfht.hawaii.edu/en/gallery/nanaao.php",
   "coverage": "Maunakea summit, Hawaii, US",
   "country": "US",
   "stream_type": "Stills (GIF), 60 s, night only; stable URLs software.cfht.hawaii.edu/webloop/nanaao{,-vis,-ir,-diff}.gif",
   "status": "considered",
   "next_steps": "Stable URLs, fresh (Last-Modified 2026-11-01 14:06 UTC). Terms unstated; group with the noirlab/gemini asks or a CFHT row. MKWC compilation page currently returns 500.",
   "notes": "Gemini cloudcams already tracked (gemini-cloudcams).",
   "blockers": [
    "terms unstated",
    "night-only"
   ],
   "approx_cameras": "1-4",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "whiteface-summit",
   "name": "ASRC Whiteface Mountain summit cam (SUNY Albany)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://whiteface.asrc.albany.edu/",
   "coverage": "Whiteface Mountain summit, Adirondacks, New York, US",
   "country": "US",
   "stream_type": "Still, ~2 min; stable URL research.asrc.albany.edu/.../summit_data_rtmp/wfmsummit.jpg",
   "status": "considered",
   "next_steps": "Summit weather cam (rime ice in winter). No terms posted; small ask to ASRC (outreach 'asrc-whiteface'), could bundle with 'nysm' since both are UAlbany.",
   "notes": "Wild Center hosts a twin summit cam plus a base 'Whiteface Live View'.",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1-2",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "marwell-zoo",
   "name": "Marwell Zoo webcams (flamingos ...)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.marwell.org.uk/keep-in-touch/webcams/",
   "coverage": "Marwell Zoo, Hampshire, UK",
   "country": "GB",
   "stream_type": "Direct Wowza HLS stream.wildlifestreaming.io:8443/Marwell/<cam>.stream/playlist.m3u8 (prod 200)",
   "status": "live",
   "next_steps": "Technically ready (no token; port 8443 works from prod, not from the box). UK phase; needs permission (outreach 'marwell').",
   "notes": "Hosted by vendor wildlifestreaming.io, see wildlifestreaming-io. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:marwell, 1 cams)",
   "blockers": [
    "permission needed"
   ],
   "approx_cameras": "1+",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:marwell"
  },
  {
   "id": "wildlifestreaming-io",
   "name": "wildlifestreaming.io hosted zoo cams (UK vendor)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://stream.wildlifestreaming.io:8443/",
   "coverage": "UK zoos/sanctuaries using this vendor",
   "country": "GB",
   "stream_type": "Wowza HLS",
   "status": "considered",
   "next_steps": "Discovery lead: find other zoos embedding stream.wildlifestreaming.io players (mimic the vendor's client list) next round.",
   "notes": "",
   "blockers": [],
   "approx_cameras": null,
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "pgc-hdontap",
   "name": "Pennsylvania Game Commission cams (Hanover eagles, elk, snow geese)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.pa.gov/agencies/pgc/wildlife/wildlife-viewing/wildlife-cams",
   "coverage": "Pennsylvania, US",
   "country": "US",
   "stream_type": "HDOnTap player",
   "status": "blocked",
   "next_steps": "HDOnTap is a commercial host; embed/permission only.",
   "notes": "",
   "blockers": [
    "vendor-hosted (HDOnTap)"
   ],
   "approx_cameras": "3+",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "fws-nctc-eaglecam",
   "name": "USFWS NCTC Eagle Cam (Shepherdstown)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.fws.gov/nctc/eagle-cam",
   "coverage": "Shepherdstown, West Virginia, US",
   "country": "US",
   "stream_type": "Player loads by JS (not in static HTML)",
   "status": "considered",
   "next_steps": "Federal agency cam, so possibly public domain; find the stream host next round.",
   "notes": "2026-11-03: static page only links the USFWS YouTube channel; no direct stream host found.",
   "blockers": [
    "endpoint unknown"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-03"
  },
  {
   "id": "toronto-zoo-zoolife",
   "name": "Toronto Zoo live cams (Zoolife)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.torontozoo.com/livecams",
   "coverage": "Toronto, Ontario, CA",
   "country": "CA",
   "stream_type": "Zoolife platform",
   "status": "blocked",
   "next_steps": "Zoolife is a membership platform; not relayable.",
   "notes": "",
   "blockers": [
    "paid platform"
   ],
   "approx_cameras": "4+",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "edinburgh-zoo-cams",
   "name": "Edinburgh Zoo webcams (penguins ...)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.edinburghzoo.org.uk/animals/webcams",
   "coverage": "Edinburgh, Scotland, UK",
   "country": "GB",
   "stream_type": "Player by JS (not in static HTML)",
   "status": "considered",
   "next_steps": "UK phase; inspect player next round.",
   "notes": "2026-11-03: operator is RZSS (images.rzss.org.uk); the player is still not in static HTML. Koala cam is off during refit.",
   "blockers": [
    "endpoint unknown"
   ],
   "approx_cameras": null,
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-03"
  },
  {
   "id": "wildcenter-whiteface-view",
   "name": "Wild Center 'Whiteface Live View' (Lake Placid)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.wildcenter.org/our-work/whiteface-mountain/",
   "coverage": "Lake Placid, Adirondacks, New York, US",
   "country": "US",
   "stream_type": "Still, 1 min",
   "status": "considered",
   "next_steps": "Mountain-makes-its-own-clouds view; FHWA-funded byway project. Ask with whiteface-summit.",
   "notes": "",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "duluth-harbor-cam",
   "name": "Duluth Harbor Cam (lift bridge, canal, lighthouses; 19 cams)",
   "category": "lighthouses-harbours",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.duluthharborcam.com/",
   "coverage": "Duluth/Superior, Two Harbors, Split Rock, Silver Bay (Lake Superior), US",
   "country": "US",
   "stream_type": "YouTube live only",
   "status": "blocked",
   "next_steps": "YouTube-only; their notice bans commercial re-streaming without consent, so a non-profit ask may work (outreach 'duluth-harbor-cam'). Lots of sky value: sunrises and storms over Lake Superior.",
   "notes": "",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "19",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "ns-webcams",
   "name": "Nova Scotia Webcams (lighthouses, harbours, Peggy's Cove ...)",
   "category": "lighthouses-harbours",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.novascotiawebcams.com/?category=Lighthouses",
   "coverage": "60-70 cams across Nova Scotia, CA",
   "country": "CA",
   "stream_type": "Stills with timestamped filenames on images.novascotiawebcams.com (+ live player)",
   "status": "blocked",
   "next_steps": "Private company; permission needed (outreach 'ns-webcams'). Would also fill Atlantic Canada sky/horizon views.",
   "notes": "",
   "blockers": [
    "private, permission needed",
    "no stable image URL"
   ],
   "approx_cameras": "60+",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "portland-head-light",
   "name": "Portland Head Light webcam (Cape Elizabeth)",
   "category": "lighthouses-harbours",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://portlandheadlight.com/about-us/webcam/",
   "coverage": "Cape Elizabeth, Maine, US",
   "country": "US",
   "stream_type": "CamStreamer embed",
   "status": "blocked",
   "next_steps": "Embed-only via camstreamer.com; permission needed.",
   "notes": "2026-11-03: unchanged, CamStreamer embed only.",
   "blockers": [
    "embed-only"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-03"
  },
  {
   "id": "burnt-coat-harbor",
   "name": "Burnt Coat Harbor Light webcams (Swans Island)",
   "category": "lighthouses-harbours",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://burntcoatharborlight.org/webcams/",
   "coverage": "Swans Island, Maine, US",
   "country": "US",
   "stream_type": "Unknown",
   "status": "blocked",
   "next_steps": "Not inspected yet.",
   "notes": "2026-11-03: webcams page has 3 rtsp.me embeds (third-party embed host): embed-only, no direct stream.",
   "blockers": [],
   "approx_cameras": null,
   "origin": "deepdive-20261101c",
   "found": "2026-11-01",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-01T06:21:43-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-03"
  },
  {
   "id": "fi-digitraffic-weathercam",
   "name": "Fintraffic Digitraffic road-weather cameras (Finland)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.digitraffic.fi/en/road-traffic/",
   "coverage": "814 road-weather stations, 2,268 camera presets, all of Finland, FI",
   "country": "FI",
   "stream_type": "Stills ~10 min; stable URL weathercam.digitraffic.fi/<presetId>.jpg (200 image/jpeg from box and prod 2026-11-02); station list tie.digitraffic.fi/api/weathercam/v1/stations (GeoJSON, 816 features; send Accept-Encoding gzip + Digitraffic-User header)",
   "status": "partial",
   "next_steps": "Live on the map (stills). Playlist channels only if STILLS_HLS is turned back on.",
   "notes": "LIVE 2026-11-02 (build 9): engine/plugins/nordicstills.py instance fi, all 2,268 in-collection presets at 814 gathering stations, ids fi-<presetid>, map + /search as stills (stills HLS paused, so 0 playlist channels, no ffmpeg). Attribution on every camera: 'Source: Fintraffic / digitraffic.fi, license CC 4.0 BY'. Sends Digitraffic-User: skywatch.monster. Terms page: Fintraffic open data is CC BY 4.0; credit 'Fintraffic / digitraffic.fi, CC BY 4.0' and keep the copyright notice/link. Polite use: send a Digitraffic-User header naming the app.",
   "blockers": [
    "stills only"
   ],
   "approx_cameras": "~2000",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-02T14:45:00-06:00",
   "channels": 0,
   "mapped_cameras": 2268,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "CC BY 4.0 (Fintraffic)",
   "terms": "https://www.digitraffic.fi/en/terms-of-service/ (CC BY 4.0, attribution + licence link)",
   "public_api": true
  },
  {
   "id": "is-vegagerdin",
   "name": "Vegagerðin road webcams (Iceland)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.vegagerdin.is/vegagerdin/gagnasafn/vefthjonustur/vefmyndavelar",
   "coverage": "499 views at ~200 sites on Iceland's highways and mountain passes, IS",
   "country": "IS",
   "stream_type": "Stills (refreshed several times an hour); stable URL www.vegagerdin.is/vgdata/vefmyndavelar/<name>_<n>.jpg (200 from box and prod); list API gagnaveita.vegagerdin.is/api/vefmyndavelar2014_1 (JSON with lat/lon)",
   "status": "partial",
   "next_steps": "Live on the map (stills). Playlist channels only if STILLS_HLS is turned back on.",
   "notes": "LIVE 2026-11-02 (build 9): engine/plugins/nordicstills.py instance is, all 499 views, ids is-<image name>, map + /search as stills. Attribution: 'Source: Vegagerðin (IRCA), road webcams (vefmyndavélar), CC BY 4.0 (live image, obtained at view time)'. | 2026-11-05: the 499 views include Gullfoss and Dettifossvegur north and south (waterfalls), see is-vegagerdin-waterfalls.",
   "blockers": [
    "stills only"
   ],
   "approx_cameras": "~400",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-02T14:45:00-06:00",
   "channels": 0,
   "mapped_cameras": 499,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "CC BY 4.0 (IRCA / Vegagerðin open data, Act 45/2018)",
   "public_api": true,
   "terms": "https://www.vegagerdin.is/vegagerdin/gagnasafn/vefthjonustur/terms-and-conditions (CC BY 4.0: credit IRCA, dataset, date obtained, licence; no implied endorsement)",
   "last_update": "2026-11-05"
  },
  {
   "id": "no-vegvesen-datex",
   "name": "Statens vegvesen road webcams via DATEX II (Norway)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.vegvesen.no/fag/teknologi/apne-data/et-utvalg-apne-data/hva-er-datex/",
   "coverage": "Hundreds of webcams at mountain passes, ferry quays and weather-exposed spots, NO",
   "country": "NO",
   "stream_type": "Stills via DATEX II 3.1 GetCCTVSiteTable (XML; also WFS/WMS)",
   "status": "considered",
   "next_steps": "Free, NLOD licence (credit Statens vegvesen), but needs a DATEX user account (order form). Sign-up = Jon's approval (info@). Not requested.",
   "notes": "Order form terms: don't distort data, cite Statens vegvesen, credentials confidential. | 2026-11-05: Statens vegvesen also publishes 106 public HLS video cams at kamera.vegvesen.no/public/<id>/manifest.m3u8 (sample 200, 800x600); tracked separately as no-vegvesen-hls (NLOD, dataset dataut.vegvesen.no/en/dataset/webkamera). | 2026-11-05: the same cameras (stills + video) are now live via the public WFS (no DATEX account needed) in plugin vegvesen, tracked as no-vegvesen-hls; this DATEX-account row stays unused.",
   "blockers": [
    "free DATEX account (sign-up, needs Jon's OK)"
   ],
   "approx_cameras": "~400",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "NLOD (Norwegian Licence for Open Government Data)",
   "public_api": false,
   "last_update": "2026-11-05"
  },
  {
   "id": "se-trafikverket-cameras",
   "name": "Trafikverket road cameras (Sweden, Open API 'Camera')",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://data.trafikverket.se/documentation/datacache",
   "coverage": "National road-weather and traffic cameras, SE",
   "country": "SE",
   "stream_type": "Stills; Camera object type via api.trafikinfo.trafikverket.se (POST XML/JSON query with key)",
   "status": "partial",
   "next_steps": "Live. Playlist channels only if Jon turns cameras_enabled on for this plugin.",
   "notes": "2026-11-03: Signed up; trafikverket.py built (Camera objects, CC0, stills). Env TRAFIKVERKET_API_KEY. | 2026-11-10: LIVE since the 2026-11-09 10:30 UTC restart (TRAFIKVERKET_API_KEY in keys.env); catalogue 1557 cams (run 2026-11-09, ok); map + /search + on-demand Live stills; takedown on request (trafikverket).",
   "blockers": [
    "stills only: map, /search and on-demand Live stills; no playlist channels (cameras_enabled off)"
   ],
   "approx_cameras": "?",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-03T04:19:08-06:00",
   "channels": 0,
   "mapped_cameras": 1557,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "CC0 (per Trafikverket Open API docs)",
   "public_api": false,
   "plugin": "trafikverket",
   "signup": {
    "date": "2026-11-03",
    "account_email": "info@skywatch.monster",
    "status": "signed up (confirmed)"
   },
   "still_cameras": 1557,
   "video_unknown": 0,
   "takedown": "trafikverket",
   "last_update": "2026-11-10"
  },
  {
   "id": "ky-kytc-cams",
   "name": "Kentucky KYTC traffic cameras (GoKY / TRIMARC snapshots)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://kygisserver.ky.gov/arcgis/rest/services/WGS84WM_Services/Ky_WebCams_WGS84WM/MapServer/0",
   "coverage": "226 cameras (220 TRIMARC Louisville/N. KY, 6 INDOT pullover), Kentucky, US",
   "country": "US",
   "stream_type": "Stills ~2 min; 'snapshot' field = latest JPEG (www.trimarc.org/images/...; 200 from prod, 500 from box)",
   "status": "blocked",
   "next_steps": "Ask KYTC / TRIMARC for permission (or a robots exception) for the snapshot images; the ArcGIS list itself (services2.arcgis.com trafficCamerasCur_Prd) is fine. Lexington city video now covers the Lexington metro.",
   "notes": "2026-11-05: Ora uses services2.arcgis.com trafficCamerasCur_Prd FeatureServer (about 250 cams, stills on trimarc.org); an ArcGIS FeatureServer is a cleaner discovery path than scraping. Terms unstated. | 2026-11-10: NOT built in the stills batch: www.trimarc.org/robots.txt disallows all agents, and 250 of the 256 layer snapshots are on trimarc.org (6 INDOT pws.trafficwise.org pullover cams in Indiana only). Do not use GoKY's published client token.",
   "blockers": [
    "robots.txt: www.trimarc.org 'User-Agent: * Disallow: /' (250 of 256 snapshots)",
    "terms unstated",
    "stills only"
   ],
   "approx_cameras": "226",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-10T05:58:00-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "public_api": true,
   "last_update": "2026-11-10"
  },
  {
   "id": "wy-wydot-cams",
   "name": "WYDOT 511 web cameras (Wyoming)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.wyoroad.info/highway/webcameras/view?site=US141620EaglePass",
   "coverage": "Wyoming highways, US",
   "country": "US",
   "stream_type": "Stills (per-site pages); ArcGIS 'Live_View_Cameras_Updates' layer 4 has 73 planning points but no image URLs",
   "status": "considered",
   "next_steps": "No keyless image list found yet; inspect the 511 camera page/JS next round. WY is weak (8 mapped).",
   "notes": "",
   "blockers": [
    "no image list found"
   ],
   "approx_cameras": "?",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "public_api": false
  },
  {
   "id": "ar-ardot-idrive",
   "name": "ARDOT IDrive Arkansas traffic cameras",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://site.idrivearkansas.com/index.php/policies/camera-terms-of-use",
   "coverage": "Arkansas, US",
   "country": "US",
   "stream_type": "Video (CamStreamer/RTMP internally)",
   "status": "blocked",
   "next_steps": "Terms say camera images are offered to the public exclusively through IDrive Arkansas and prohibit embedding/linking in third-party sites or apps. Do not build without written permission.",
   "notes": "2026-11-05: still blocked on the iDrive camera terms; for reference, Ora reads layers.idrivearkansas.com/cameras.geojson (about 525 cams, cameras/<id>.jpg). Not probed.",
   "blockers": [
    "ToS: exclusive to IDrive Arkansas; no third-party embedding"
   ],
   "approx_cameras": "?",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-05"
  },
  {
   "id": "navcanada-metcam",
   "name": "NAV CANADA aviation weather cameras",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.metcam.navcanada.ca/help/e/index.html",
   "coverage": "Hundreds of aerodrome/remote-site weather cams (mostly northern and mountain Canada), CA",
   "country": "CA",
   "stream_type": "Stills (multi-direction per site)",
   "status": "blocked",
   "next_steps": "Big sky value for northern Canada (fills NWT/YT/NU/BC gaps), but the NAV CANADA terms forbid using site content incl. images without prior written permission. Outreach row 'navcanada-metcam' (draft needed, not contacted).",
   "notes": "Terms: https://www.navcanada.ca/en/terms-of-use.aspx",
   "blockers": [
    "ToS: prior written permission required"
   ],
   "approx_cameras": "~200",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "niu-skycams",
   "name": "NIU Skycams (Northern Illinois University, DeKalb)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://chubasco.niu.edu/cams/",
   "coverage": "14 rooftop sky cams on 3 campus buildings (Holmes, Zulauf, Davis), DeKalb, Illinois, US",
   "country": "US",
   "stream_type": "Stills ~1 min; stable URLs chubasco.niu.edu/cams/<bldg>/<Name>_000.jpg and derecho.niu.edu/cams/zulauf/... (200 from box and prod, fresh); YouTube live too",
   "status": "live",
   "next_steps": "Dedicated sky cams in a weak state (IL). No reuse terms posted; needs permission (outreach 'niu-skycams', draft needed, contact not yet found).",
   "notes": "2026-11-09: live pending owner reply; takedown on request (pendinglive:niu, 14 cams)",
   "blockers": [
    "terms unstated (permission needed)"
   ],
   "approx_cameras": "14",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:niu"
  },
  {
   "id": "utah-uunet-cams",
   "name": "UUNET weather-station cameras (University of Utah, Horel group)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://horel.chpc.utah.edu/uunet_camera_display.html",
   "coverage": "11 cams: Salt Lake campus rooftops, Great Salt Lake (Antelope Island, Gunnison Island), Bonneville Salt Flats, playa, US",
   "country": "US",
   "stream_type": "Stills ~5 min; stable URLs horel.chpc.utah.edu/data/station_cameras/<cam>/<cam>_current.jpg (200 from box and prod, fresh)",
   "status": "live",
   "next_steps": "Excellent big-sky views in a weak state (UT has 2 live). Page footer '© Horel/UUNET'; needs permission (outreach 'utah-uunet', draft needed, contact not yet found).",
   "notes": "2026-11-09: live pending owner reply; takedown on request (pendinglive:uunet, 2 cams)",
   "blockers": [
    "copyright notice, no reuse terms (permission needed)"
   ],
   "approx_cameras": "11",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:uunet"
  },
  {
   "id": "irf-kiruna-allsky",
   "name": "IRF Kiruna all-sky camera (Swedish Institute of Space Physics)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www2.irf.se/Observatory/?link=All-sky_sp_camera",
   "coverage": "Kiruna all-sky (aurora), SE",
   "country": "SE",
   "stream_type": "Stills ~1 min in dark hours; stable URL www.irf.se/alis/allsky/krn/latest.jpeg (200 from box and prod; ~4 MB, Last-Modified current)",
   "status": "live",
   "next_steps": "Licence page re-read 2026-11-02 (last modified 2026-11-02): KAGO data is now CC BY 4.0 (credit 'Data from Kiruna allsky camera provided by Kiruna Atmospheric and Geophysical Observatory at Swedish Institute of Space Physics' + licence link), no media-permission clause. Can be added in a later deploy (needs a restart). Image ~4 MB: resize/cache, fetch at most once a minute (licence: IRF may rate-limit abusive use). Courtesy note drafted (outreach row 'irf-kago'), not sent.",
   "notes": "Licence: https://www.irf.se/en/forskning/kago/license/ (CC BY 4.0) | 2026-11-10: live pending owner reply; takedown on request (readylive:irf, 1 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [],
   "approx_cameras": "1",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-02T15:10:00-06:00",
   "channels": 0,
   "mapped_cameras": 1,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "readylive",
   "takedown": "readylive:irf",
   "last_update": "2026-11-10",
   "still_cameras": 1
  },
  {
   "id": "kho-svalbard-allsky",
   "name": "Kjell Henriksen Observatory all-sky cams (UNIS, Svalbard)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://kho.unis.no/",
   "coverage": "Svalbard (polar cap; daytime aurora in polar night), NO",
   "country": "NO",
   "stream_type": "Stills; no current 'latest' URL found (old Quicklooks path 404; instrument page AllskyNCU owned by NCU Taiwan)",
   "status": "considered",
   "next_steps": "Find the live quicklook path and terms next round; kho.unis.no answered 500 on http and 200 on https.",
   "notes": "",
   "blockers": [
    "no stable image URL found",
    "terms unstated"
   ],
   "approx_cameras": "?",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "nasa-asgard-allsky",
   "name": "NASA All Sky Fireball Network (ASGARD) latest images",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://fireballs.ndc.nasa.gov/live/index.html",
   "coverage": "~18 all-sky meteor cameras, mostly SE/central US",
   "country": "US",
   "stream_type": "Stills, night-only; stable URLs fireballs.ndc.nasa.gov/live/latest-<NN>A.png (200 from box and prod; updated through the night)",
   "status": "considered",
   "next_steps": "NASA public (credit NASA Meteoroid Environment Office). Night-only and camera coordinates are not on the page (need a station list). Good /aurora or night-sky filler.",
   "notes": "2026-11-04: fireballs.ndc.nasa.gov/live/index.html still loads and lists thumb-01A.png ... thumbnails (200); night-only; station coordinates still not on the page.",
   "blockers": [
    "camera locations not published on page",
    "night-only"
   ],
   "approx_cameras": "18",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "NASA (credit NASA MEO)",
   "last_update": "2026-11-04"
  },
  {
   "id": "eso-webcams",
   "name": "ESO observatory webcams (Paranal, La Silla, Armazones/ELT, APEX)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.eso.org/public/outreach/webcams/",
   "coverage": "Atacama observatory sites, CL",
   "country": "CL",
   "stream_type": "Stills; e.g. www.eso.org/public/archive_webcams/<cam>/public/pano_PV_960x.jpg",
   "status": "considered",
   "next_steps": "ESO website media are CC BY 4.0 (credit wording unaltered), but the images checked were stale: allsky preset_101 Last-Modified 2020-06-25, Armazones pano 2026-08-10. Re-check later; only worth building if they refresh.",
   "notes": "",
   "blockers": [
    "images stale (not refreshing)"
   ],
   "approx_cameras": "~9",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "CC BY 4.0 (ESO)",
   "terms": "https://www.eso.org/public/copyright/"
  },
  {
   "id": "igepn-volcano-cams",
   "name": "IG-EPN volcano surveillance cameras (Ecuador)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.igepn.edu.ec/cotopaxi-camaras",
   "coverage": "Cotopaxi (~12 cams) and other Ecuadorian volcanoes, EC",
   "country": "EC",
   "stream_type": "Stills (loaded by page script)",
   "status": "blocked",
   "next_steps": "Page marked 'Copyright © IGEPN'; no reuse terms; images load via script. Needs permission (outreach 'igepn', draft needed, contact not yet found).",
   "notes": "",
   "blockers": [
    "copyright, no reuse terms (permission needed)",
    "no stable image URL found"
   ],
   "approx_cameras": "~12",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "mkwc-maunakea-cams",
   "name": "Maunakea Weather Center summit cams (UH IfA)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://mkwc.ifa.hawaii.edu/current/cams/",
   "coverage": "Maunakea summit, Hawaii, US",
   "country": "US",
   "stream_type": "Stills (to inspect)",
   "status": "considered",
   "next_steps": "Unreachable from both box and prod on 2026-11-02 (timeout). Overlaps cfht-nanaao / gemini-cloudcams; re-check later.",
   "notes": "",
   "blockers": [
    "site unreachable 2026-11-02"
   ],
   "approx_cameras": "?",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "athabasca-augo",
   "name": "Athabasca University Geophysical Observatory aurora cams (AUGO)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://autumn.athabascau.ca/",
   "coverage": "Athabasca, Alberta, CA",
   "country": "CA",
   "stream_type": "Stills (to inspect)",
   "status": "considered",
   "next_steps": "Unreachable from both box and prod on 2026-11-02 (timeout); re-check later.",
   "notes": "",
   "blockers": [
    "site unreachable 2026-11-02"
   ],
   "approx_cameras": "?",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "stereo-a-beacon",
   "name": "NASA STEREO-A beacon images (EUVI 195, COR2, HI1)",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://stereo-ssc.nascom.nasa.gov/beacon/beacon_secchi.shtml",
   "coverage": "Sun from STEREO-A (off the Sun-Earth line) + coronagraph/heliospheric views",
   "country": "SPACE",
   "stream_type": "Stills; stable URLs stereo-ssc.nascom.nasa.gov/beacon/latest_512/ahead_{euvi_195,cor2,hi1}_latest.jpg (200 from box and prod; minutes old)",
   "status": "live",
   "next_steps": "Live in sun.m3u8 / sun.xml after the sky catalogue refresh (13 Sun channels).",
   "notes": "Added 2026-11-02: sky-stereo-a-euvi195, sky-stereo-a-cor2 (HI1 left out: heliospheric imager, mostly star field). | 2026-11-10: LIVE, channels present in feed.skywatch.monster/sun.m3u8.",
   "blockers": [],
   "approx_cameras": "",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-02T14:45:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "NASA (credit STEREO/SECCHI)",
   "last_update": "2026-11-10"
  },
  {
   "id": "sdo-extra-channels",
   "name": "SDO extra 'latest' channels (AIA 131, 211, 1600, HMI magnetogram)",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://sdo.gsfc.nasa.gov/data/",
   "coverage": "Sun (more AIA wavelengths + HMI magnetogram)",
   "country": "SPACE",
   "stream_type": "Stills; sdo.gsfc.nasa.gov/assets/img/latest/latest_1024_{0131,0211,1600,HMIB}.jpg (200 from box and prod, minutes old)",
   "status": "live",
   "next_steps": "Live in sun.m3u8 / sun.xml after the sky catalogue refresh (13 Sun channels).",
   "notes": "Added 2026-11-02: sky-sdo-0131, sky-sdo-0211, sky-sdo-1600, sky-sdo-hmib. | 2026-11-10: LIVE, channels present in feed.skywatch.monster/sun.m3u8.",
   "blockers": [],
   "approx_cameras": "",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-02T14:45:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "NASA (credit SDO science teams)",
   "last_update": "2026-11-10"
  },
  {
   "id": "goes-ccor1",
   "name": "NOAA GOES-19 CCOR-1 coronagraph (latest)",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://services.swpc.noaa.gov/images/animations/ccor1/",
   "coverage": "Solar corona / CMEs from GOES-19 (operational successor to SOHO LASCO)",
   "country": "SPACE",
   "stream_type": "Stills ~15 min; services.swpc.noaa.gov/images/animations/ccor1/latest.jpg",
   "status": "considered",
   "next_steps": "Public domain (NOAA SWPC). 200 from the box but 403 from prod (whole services.swpc.noaa.gov/images/ path is 403 to the prod IP on 2026-11-02; /json and /products still 200). Needs the prod IP unblocked or a different mirror.",
   "notes": "2026-11-04: services.swpc.noaa.gov image URLs (LASCO C2 latest.jpg, OVATION latest.jpg) return 403 to HEAD from prod while the box gets 200, same as goes-suvi; soho.nascom.nasa.gov latest.jpg works from prod (see soho-lasco-eit-latest).",
   "blockers": [
    "services.swpc.noaa.gov/images/ 403 from prod IP"
   ],
   "approx_cameras": "",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "US Gov public domain (credit NOAA SWPC)",
   "last_update": "2026-11-04"
  },
  {
   "id": "gong-halpha",
   "name": "NSO GONG H-alpha full-disk Sun (6-site network)",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://nso.edu/data/nisp-data/h-alpha/",
   "coverage": "Sun in H-alpha (filaments, prominences, flares), 1-min cadence",
   "country": "SPACE",
   "stream_type": "Stills; timestamped files gong2.nso.edu/HA/hag/<yyyymm>/<yyyymmdd>/<yyyymmddHHMMSS><site>h.jpg (dir listing 200 from box and prod; newest file ~minutes old)",
   "status": "considered",
   "next_steps": "Visibly different from SDO (chromosphere). No fixed 'latest' file: needs the same per-fetch resolver hook as jma-volcano. Credit NSO/GONG (AURA/NSF); confirm the NSO data-use wording before build. Ignore the decoy '/secret0x2112' link in the listings.",
   "notes": "",
   "blockers": [
    "no stable image URL (engine change)",
    "credit wording to confirm"
   ],
   "approx_cameras": "",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "NSO/NSF public data (credit NSO/GONG)"
  },
  {
   "id": "gk2a-fulldisk",
   "name": "KMA GEO-KOMPSAT-2A (GK2A) full-disk true colour",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://nmsc.kma.go.kr/enhome/html/base/cmm/selectPage.do?page=satellite.gk2a.intro",
   "coverage": "Earth full disk centred on 128.2°E (East Asia / W Pacific), 10-min cadence",
   "country": "SPACE",
   "stream_type": "Stills; nmsc.kma.go.kr/IMG/GK2A/AMI/PRIMARY/L1B/COMPLETE/FD/<yyyymm>/<dd>/<HH>/gk2a_ami_le1b_rgb-true_fd010ge_<yyyymmddHHMM>.srv.png (200 from box)",
   "status": "considered",
   "next_steps": "Fills the East Asia disk beside Himawari-9. Timestamped URL is computable (no scraping). KMA copyright policy: KOGL Type 1 items are free with credit, unmarked items need prior consultation; type not confirmed for these images.",
   "notes": "",
   "blockers": [
    "KOGL type not confirmed (may need consultation)",
    "timestamped URL (resolver)"
   ],
   "approx_cameras": "",
   "origin": "deepdive-20261102",
   "found": "2026-11-02",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-02T12:20:00-06:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "licence": "KMA/NMSC (KOGL type unconfirmed)"
  },
  {
   "id": "oh-ohgo",
   "name": "OHGO (Ohio DOT) cameras",
   "plugin": "ohgo",
   "in_prod": true,
   "coverage": "Ohio, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 1116,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 1116,
   "stream_type": "still image",
   "discovery": "GET publicapi.ohgo.com/api/v1/cameras?page-all=true (Authorization: APIKEY)",
   "blockers": [
    "stills only: map, /search and on-demand Live stills; no playlist channels (cameras_enabled off)"
   ],
   "notes": "2026-11-03: Signed up; ohgo.py built (OHGO Public API, stills). Env OHGO_API_KEY. | 2026-11-10: LIVE since the 2026-11-09 10:30 UTC restart (OHGO_API_KEY in keys.env); catalogue 1116 cams (run 2026-11-09, ok); map + /search + on-demand Live stills; takedown on request (ohgo).",
   "next_steps": "Live. Playlist channels only if Jon turns cameras_enabled on for this plugin.",
   "last_audit": "2026-11-03T04:19:08-06:00",
   "phase": "p4",
   "country": "US",
   "category": "road-weather",
   "origin": "signup-20261103",
   "tier": "sky",
   "found": "2026-11-03",
   "signup": {
    "date": "2026-11-03",
    "account_email": "info@skywatch.monster",
    "status": "signed up (confirmed)"
   },
   "takedown": "ohgo",
   "last_update": "2026-11-10"
  },
  {
   "id": "wa-wsdot",
   "name": "WSDOT highway cameras (Washington)",
   "plugin": "wsdot",
   "in_prod": true,
   "coverage": "Washington, US",
   "status": "partial",
   "enabled": true,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 1633,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 1633,
   "stream_type": "still image",
   "discovery": "GetCamerasAsJson?AccessCode= (wsdot.wa.gov/traffic/api)",
   "blockers": [
    "stills only: map, /search and on-demand Live stills; no playlist channels (cameras_enabled off)"
   ],
   "notes": "2026-11-03: Signed up; wsdot.py built (HighwayCameras REST, stills). Env WSDOT_ACCESS_CODE. | 2026-11-10: LIVE since the 2026-11-09 10:30 UTC restart (WSDOT_ACCESS_CODE in keys.env); catalogue 1633 cams (run 2026-11-09, ok); map + /search + on-demand Live stills; takedown on request (wsdot).",
   "next_steps": "Live. Playlist channels only if Jon turns cameras_enabled on for this plugin.",
   "last_audit": "2026-11-03T04:19:08-06:00",
   "phase": "p4",
   "country": "US",
   "category": "road-weather",
   "origin": "signup-20261103",
   "tier": "sky",
   "found": "2026-11-03",
   "signup": {
    "date": "2026-11-03",
    "account_email": "info@skywatch.monster",
    "status": "signed up (confirmed)"
   },
   "takedown": "wsdot",
   "last_update": "2026-11-10"
  },
  {
   "id": "windy-webcams",
   "name": "Windy Webcams (embed player / link-out only)",
   "plugin": "windy_webcams",
   "in_prod": true,
   "coverage": "Worldwide",
   "status": "live",
   "enabled": true,
   "channels": 0,
   "est_new_channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "video_unknown": 0,
   "still_cameras": 0,
   "stream_type": "Windy embed player (iframe)",
   "discovery": "api.windy.com/webcams/api/v3/webcams?include=location,player,urls (x-windy-api-key)",
   "blockers": [
    "map has no embed marker type yet",
    "map CSP needs frame-src https://webcams.windy.com (Grok Bot teammate)"
   ],
   "notes": "2026-11-03: Signed up (free tier); windy_webcams.py built DISABLED: Windy embed player + link-out only per Jon 2026-11-03 (no fetching/caching of Windy images). Env WINDY_WEBCAMS_API_KEY. | 2026-11-09: live pending owner reply; takedown on request (windy_webcams, 1000 cams)",
   "next_steps": "Front-end embed marker + CSP, then enable.",
   "last_audit": "2026-11-03T04:19:08-06:00",
   "phase": "p4",
   "country": "--",
   "category": "weather-cams",
   "origin": "signup-20261103",
   "tier": "sky",
   "found": "2026-11-03",
   "signup": {
    "date": "2026-11-03",
    "account_email": "info@skywatch.monster",
    "status": "signed up (confirmed)"
   },
   "takedown": "windy_webcams"
  },
  {
   "id": "phenocam-network",
   "name": "PhenoCam Network (NAU) - public phenology cameras",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://phenocam.nau.edu/webcam/",
   "coverage": "~668 active sites (486 US, 6 Canada, 10 UK, 3 NZ, 2 AU, rest Europe/Alaska/Hawaii/other)",
   "country": "US",
   "stream_type": "Stills, ~30 min, stable URL phenocam.nau.edu/data/latest/<Sitename>.jpg (200 from box and prod, fresh); site list + lat/lon from keyless API phenocam.nau.edu/api/cameras/?format=json (1,089 cameras, 776 flagged active, 668 with data in last 33 days)",
   "status": "viable",
   "next_steps": "Biggest new sky/horizon source: landscape views with sky and weather at hundreds of sites, incl. a few in NZ/AU/UK. Licence is clear: Fair Use Statement (updated 2026-03-03) says imagery is public without restriction under CC BY 4.0 (credit PhenoCam Network plus each site's own acknowledgement text from the API). Catch: robots.txt says Disallow /data/ for generic crawlers, so ask NAU to confirm automated latest-image fetches (outreach 'phenocam') or get Jon's OK before a plugin fetches. Plugin proposal: one map-only stills plugin (API list + latest.jpg), tier sky/horizon.",
   "notes": "Light probing only (one HEAD request on the latest image, API list once).",
   "blockers": [
    "robots.txt disallows /data/ for generic bots: confirm with NAU/Jon",
    "per-site attribution text required"
   ],
   "approx_cameras": "668",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "ndawn-station-photos",
   "name": "NDAWN station photos (NDSU North Dakota Agricultural Weather Network)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://ndawn.info/station_photos.html",
   "coverage": "213 stations across North Dakota (and parts of MN/MT), US",
   "country": "US",
   "stream_type": "Stills, ~15 min, stable URLs s3.us-east-2.amazonaws.com/ndawn.info/station_photos/<Station>.jpg (200 from box and prod, fresh within 15 min)",
   "status": "blocked",
   "next_steps": "Strong ND/Plains horizon coverage that the ND DOT stills do not give; found via the aurora-guy webcam list. Page footer is 'Copyright NDSU, all rights reserved' and no reuse terms, so ask NDSU (outreach 'ndawn'). Station lat/lon from the NDAWN station explorer next round.",
   "notes": "NDAWN also runs a YouTube streams channel (@NDAgWeatherNetwork).",
   "blockers": [
    "terms unstated (copyright NDSU): permission needed"
   ],
   "approx_cameras": "213",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "iem-webcams",
   "name": "Iowa Environmental Mesonet webcam images (KCRG, KCCI, MCFC)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://mesonet.agron.iastate.edu/json/webcams.py?network=KCRG",
   "coverage": "~26 non-DOT cams (KCRG 21, KCCI 3, MCFC 1 ...), Iowa, US",
   "country": "US",
   "stream_type": "Stills ~5-15 min via keyless JSON /json/webcams.py?network=<NET> (and /geojson/webcam.php); 200 from box and prod",
   "status": "live",
   "next_steps": "TV-station and campus cameras that IEM relays. Iowa DOT cams (299) overlap cars-ia. IEM robots.txt is permissive for this path, but the images belong to the stations, so check IEM disclaimer / ask Iowa State before use. Small, so low priority.",
   "notes": "Also an ISU Campus Webcams page on the IEM site (not probed). | 2026-11-09: live pending owner reply; takedown on request (pendinglive:iem, 3 cams)",
   "blockers": [
    "image ownership: stations; terms unchecked"
   ],
   "approx_cameras": "~26",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:iem"
  },
  {
   "id": "au-airservices-weathercams",
   "name": "Airservices Australia live weather cameras (airport cams)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://weathercams.airservicesaustralia.com/",
   "coverage": "~35 airports/airfields across NSW, QLD, SA, WA, NT, VIC, TAS, Australia",
   "country": "AU",
   "stream_type": "Stills; the page loads images by a nonce-protected WordPress admin-ajax call (get_airport_modal), no static image URL found",
   "status": "considered",
   "next_steps": "Australia phase sky source with horizon views at regional airports. Image endpoint is hidden behind a nonce, which is a deliberate gate, so I did not mimic it. Ask Airservices (outreach 'airservices-au') for permission and a direct URL; their robots.txt returns 404.",
   "notes": "Found via the aurora-guy webcam list.",
   "blockers": [
    "permission needed",
    "no stable image URL"
   ],
   "approx_cameras": "~35",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "aopa-nz-webcams",
   "name": "AOPA NZ webcam directory (NZ pilots' weather cams)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://aopa.nz/webcams/",
   "coverage": "Nationwide New Zealand (5 regional pages + other)",
   "country": "NZ",
   "stream_type": "Directory of third-party webcams (council, airport, club cams), not a feed",
   "status": "considered",
   "next_steps": "Discovery source for the NZ sky phase: mimic how they list, then check each underlying publisher individually (MetService, councils, airports) rather than copying their list. They also invite suggestions of date-stamped cams.",
   "notes": "NIWA Lauder all-sky is offline since 2024-05-28 (niwa.co.nz page says transitioning to a new system). | 2026-11-06: SSI page lists many fresh public.aopa.nz/*.jpg stills (Queenstown coronet/lake/remarks, Wanaka, Haast, Balclutha, Mosgiel, etc. — several HEAD 200 and minute-fresh). Also links OnlyWeatherCams NZTI, MyAirportCams Balfour, MetData Mackinnon/Harris/Kepler. Queenstown Airport official page is JS-only; use AOPA stills as the discoverable path (see queenstown-airport-aopa-stills). AOPA is an aggregator — per-operator permission still required.",
   "blockers": [],
   "approx_cameras": "~100",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "nz-hbrc-webcams",
   "name": "Hawke's Bay Regional Council river/flood webcams",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.hbrc.govt.nz/extreme-weather-hub/webcams/",
   "coverage": "15 river-mouth and bridge cams, Hawke's Bay, New Zealand",
   "country": "NZ",
   "stream_type": "Stills, hourly (15 min in storms), URLs data.hbrc.govt.nz/webcam/<Name>.jpg",
   "status": "considered",
   "next_steps": "Council flood-monitoring cams, daylight only; terms unstated. data.hbrc.govt.nz returned HTTP 522 (origin timeout) from both the box and prod on 2026-11-03, so retest. NZ phase.",
   "notes": "2026-11-04: data.hbrc.govt.nz still returns HTTP 522 from the box (origin timeout), third day in a row; keep considered.",
   "blockers": [
    "terms unstated",
    "origin returned 522 today"
   ],
   "approx_cameras": "15",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-04"
  },
  {
   "id": "reading-atmospheric-observatory",
   "name": "University of Reading Atmospheric Observatory SkyCam/CloudCam",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.met.reading.ac.uk/~sws09a/docs/dataDocs/liveData/",
   "coverage": "Reading, England, UK",
   "country": "GB",
   "stream_type": "Stills (SkyCam/CloudCam); no public image URL found in static pages",
   "status": "considered",
   "next_steps": "UK phase: find the public SkyCam/CloudCam image URL on the observatory page, then terms (university copyright). Not yet found.",
   "notes": "2026-11-05: www.met.reading.ac.uk/observatory returned 403 from the box; endpoint still unknown.",
   "blockers": [
    "endpoint unknown",
    "terms unknown"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-05"
  },
  {
   "id": "uk-uni-allsky-dead",
   "name": "UK school and university all-sky cams (Bristol, Wheatfields/Herts)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.star.bris.ac.uk/allskycamera/index.html",
   "coverage": "Bristol and St Albans, UK",
   "country": "GB",
   "stream_type": "All-sky stills",
   "status": "down",
   "next_steps": "Bristol all-sky says 'currently out of action'; Wheatfields Skyexplorers latest.png is stale (last modified 2017-08-22) and night-only. Not worth a plugin.",
   "notes": "",
   "blockers": [
    "offline / stale"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "theauroraguy-webcam-list",
   "name": "theauroraguy.com aurora webcam list (discovery source)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://theauroraguy.com/pages/webcams",
   "coverage": "~100 aurora cams: Alaska, Yukon/NWT/NU, prairies, Great Lakes, Fennoscandia",
   "country": "US",
   "stream_type": "Curated link list (hosts: FAA weathercams 19, UCalgary 23, NDAWN 17, nlalert.fi 12, starvisor.net 36, allskycam.com 6, montiscorp panos 10, auroracam.ru 6)",
   "status": "considered",
   "next_steps": "Used as a discovery map, not a source to copy. Threads for next rounds: starvisor.net (36 cams), nlalert.fi aurora cams (Finland), allskycam.com user cams, Montis Corp panos (Alaska villages), UMN Duluth planetarium all-sky, Fairbanks Airport pano, Taloyoak/Rankin Inlet/Sachs Harbour/Kluane (UCalgary SMILE/REGO, already under ucalgary-rt).",
   "notes": "",
   "blockers": [],
   "approx_cameras": "~100",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "wildheart-sanctuary",
   "name": "Wildheart Animal Sanctuary webcams (bears, tigers, lions, lynx; 17 cams)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://wildheartanimalsanctuary.org/webcams/",
   "coverage": "Isle of Wight, UK",
   "country": "GB",
   "stream_type": "Player not found (page served a challenge to a plain fetch)",
   "status": "considered",
   "next_steps": "Charity, 24/7, free to view and asks for donations, so a non-profit credit-and-link ask may land well (outreach 'wildheart'). Inspect the player host next round with a browser.",
   "notes": "",
   "blockers": [
    "player unknown"
   ],
   "approx_cameras": "17",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "northumberland-zoo-zoolife",
   "name": "Northumberland Zoo live cameras (Zoolife)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.northumberlandzoo.co.uk/webcams",
   "coverage": "Felton, Northumberland, UK",
   "country": "GB",
   "stream_type": "Zoolife platform",
   "status": "blocked",
   "next_steps": "Same paid Zoolife platform as Toronto Zoo; not relayable.",
   "notes": "",
   "blockers": [
    "paid platform"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "dudley-zoo-cams",
   "name": "Dudley Zoo tiger and lemur cams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.dudleyzoo.org.uk/our-animals/webcams/",
   "coverage": "Dudley, West Midlands, UK",
   "country": "GB",
   "stream_type": "Unknown (site returns 403 to a plain fetch)",
   "status": "considered",
   "next_steps": "Inspect with a browser next round.",
   "notes": "",
   "blockers": [
    "403 to plain fetch"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "mackinac-bridge-cams",
   "name": "Mackinac Bridge Authority bridge cams (5 views)",
   "category": "bridges",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.mackinacbridge.org/fares-traffic/bridge-cam/",
   "coverage": "Mackinac Bridge, Michigan, US",
   "country": "US",
   "stream_type": "Stills every 60 s, stable URLs www.mackinacbridge.org/wp-content/camimages/MacBridge_image{1,3,4}_medium.jpg (200 from box and prod, fresh; image2 and 5 are 'large' variants, 404 on the medium path)",
   "status": "live",
   "next_steps": "Best bridge find: iconic Straits of Mackinac sky and storm views over Lake Michigan/Huron, stable and fresh, run by a state bridge authority. No terms posted, so ask the Authority (outreach 'mackinac-bridge').",
   "notes": "Bridge authority robots.txt does not restrict /wp-content/camimages. | 2026-11-10: live pending owner reply; takedown on request (readylive:mackinac, 5 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "5",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 5,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:mackinac",
   "last_update": "2026-11-10",
   "still_cameras": 5
  },
  {
   "id": "confederation-bridge-cam",
   "name": "Confederation Bridge webcam (PEI side)",
   "category": "bridges",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.princeedwardisland.ca/en/information/webcams",
   "coverage": "Borden-Carleton, PEI, CA",
   "country": "CA",
   "stream_type": "Listed on the PEI government webcam page; image URL not found in static HTML",
   "status": "considered",
   "next_steps": "Fills a PEI sky/bridge view. PEI government page also lists Charlottetown and a ski park cam. Find the image endpoint and terms (Government of PEI) next round.",
   "notes": "",
   "blockers": [
    "endpoint unknown"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "golden-gate-bridge-cams",
   "name": "Golden Gate National Parks Conservancy bridge webcams",
   "category": "bridges",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.parksconservancy.org/parks/golden-gate-bridge-live-webcams",
   "coverage": "Crissy Field and Golden Gate Bridge, San Francisco, US",
   "country": "US",
   "stream_type": "Player pages hosted on a third-party proxy (parksconservancy.siteproxy.net)",
   "status": "considered",
   "next_steps": "Famous sunrise/fog views. Conservancy is a non-profit partner of NPS; ask for credit-and-link permission. Image host is a vendor, so inspect next round.",
   "notes": "",
   "blockers": [
    "vendor-hosted",
    "permission needed"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "chesapeake-bay-bridge-cams",
   "name": "Chesapeake Bay Bridge cameras (MDTA, baybridge.com)",
   "category": "bridges",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://mdta.maryland.gov/traffic-cameras-by-facility",
   "coverage": "Annapolis/Kent Island, Maryland, US",
   "country": "US",
   "stream_type": "MDTA page returned HTTP 500 to a plain fetch",
   "status": "considered",
   "next_steps": "Retest next round; MDTA traffic cams may overlap the Maryland DOT feed already tracked (dotvideo-md).",
   "notes": "",
   "blockers": [
    "page error today"
   ],
   "approx_cameras": "~6",
   "origin": "deepdive-20261103",
   "found": "2026-11-03",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-03T06:02:50-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "noaa-gml-obs-cams",
   "name": "NOAA GML observatory cams (Barrow/Utqiagvik, Mauna Loa, South Pole)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.gml.noaa.gov/obop/brw/livecamera.html",
   "coverage": "Utqiagvik AK (tower, town, albedo rack, solar-rad), Mauna Loa HI (north, deck, gate, Mauna Kea, Kona, tower), South Pole (cmdl full-size); US",
   "country": "US",
   "stream_type": "Stills 5-15 min, stable URLs gml.noaa.gov/webdata/{brw,mlo,spo}/webcam/<view>.jpg (all fresh from box 2026-11-04 14:07-14:11 UTC; prod HEAD 200; MLO swcam.jpg stale since 2023-02-17)",
   "status": "viable",
   "next_steps": "US-government public-domain imagery of arctic tundra/town and the Mauna Loa summit sky, which fills AK-north and HI-summit gaps for the sky tier. Catch: robots.txt says Disallow /webdata/ for generic bots, so confirm with NOAA GML (outreach 'noaa-gml') or get Jon's OK before a plugin fetches; the same robots question as PhenoCam. NOAA also states there is currently no public access to Mauna Loa (power/infrastructure restoration uncertain), so the MLO cams can go stale. Plugin proposal: tiny map-only stills plugin (about 14 URLs, fixed coordinates).",
   "notes": "Light probing only (HEAD per image).",
   "blockers": [
    "robots.txt disallows /webdata/: confirm with NOAA/Jon",
    "MLO may go offline (no public access)"
   ],
   "approx_cameras": "14",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "nws-wfo-webcams",
   "name": "NWS forecast-office webcams (weather.gov/<wfo>/webcam)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.weather.gov/bgm/webcam",
   "coverage": "Scattered WFO rooftop/office cams: Binghamton NY, Gray ME, Albuquerque NM, Boise ID, Juneau AK, US",
   "country": "US",
   "stream_type": "Stills; stable URLs weather.gov/images/<wfo>/<name>.jpg (Binghamton southview.jpg fresh, updated about every 10 min; Gray officecam_peaks.jpg stale since 2016; Boise page lists eye-n-sky.net third-party cams; Albuquerque uses a JS viewer; Juneau PHOTO_juneau_*.jpg host arh.noaa.gov did not answer from the box)",
   "status": "considered",
   "next_steps": "Public-domain NWS imagery, no robots.txt restriction (weather.gov robots 404). Only a handful of offices run live cams and most are stale, so this is small: Binghamton is the one confirmed fresh. Find the rest by checking weather.gov/<wfo>/webcam for each WFO (pattern search) rather than copying a list.",
   "notes": "Next round: loop the 120 WFO slugs HEAD-only on /<wfo>/webcam and /<wfo>/webcams to build a real list. | 2026-11-05 sweep done: HEAD /<wfo>/webcam and /webcams across 119 WFO slugs gave only 10 pages: abq, apx, bgm, boi, btv, cys, dmx, ohx, pub, riw, sew. They mostly link to third-party cams that are now dead or odd (eye-n-sky.net 404, UW cambots 500, wlxonline 404, cograilway 500, forkswa TLS error, instacam bad certificate) or to CDOT (already covered), WSDOT (covered) and radar loops. The only fresh new image was Kalaloch (Pixelcaster), filed as pixelcaster-kalaloch. Thread closed: the WFO webcam pages are not a source worth building. | 2026-11-07: NWS Midland towercam image frozen since 2021-06-13 (filed as nws-maf-towercam, down).",
   "blockers": [
    "most office cams stale or JS-viewer"
   ],
   "approx_cameras": "3-8",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-07"
  },
  {
   "id": "plymouth-state-vortex-cam",
   "name": "Plymouth State University Weather Center webcam (Vortex)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://vortex.plymouth.edu/webcam.html",
   "coverage": "Plymouth, New Hampshire (White Mountains), US",
   "country": "US",
   "stream_type": "Stills, fresh (last modified 14:10 UTC), stable URL vortex.plymouth.edu/webcam/1/latest.jpeg (200 from box and prod); /webcam/2-5 are 404",
   "status": "live",
   "next_steps": "One stable, fresh White Mountains horizon image from a university weather center that also runs the Vortex map site; no robots.txt (404). Terms unstated, so ask Plymouth State (bundle with other university asks).",
   "notes": "2026-11-10: live pending owner reply; takedown on request (readylive:plymouth, 1 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 1,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:plymouth",
   "last_update": "2026-11-10",
   "still_cameras": 1
  },
  {
   "id": "uw-atmos-webcam",
   "name": "University of Washington Atmospheric Sciences rooftop webcam (Mt Rainier view)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://atmos.uw.edu/images/webcam2/",
   "coverage": "Seattle, Washington, US",
   "country": "US",
   "stream_type": "Stills every 5 min via cron; stable URL atmos.uw.edu/data/images/webcam2_latest.jpg (302 to a.atmos.washington.edu/data/images/..., then 200 fresh); page also links /roof-west/ cam and time-lapse movies",
   "status": "live",
   "next_steps": "Seattle skyline/Mt Rainier sky view from a dept rooftop. robots.txt only disallows /images/ (the data path is not listed), terms unstated, so ask UW Atmospheric Sciences before use. Prod HEAD returns the 302 (follow redirects).",
   "notes": "Time-lapse movies at /cgi-bin/listnew.cgi?webcam2_movies are a possible later extra. | 2026-11-06: webcam2_latest.jpg redirects to a.atmos.washington.edu/data/images/webcam2_latest.jpg (200, fresh). Roof-west uses dated files under /roof-west/YYYYMMDD/roof_west_*.jpg (also 200). Still terms-unstated. | 2026-11-10: live pending owner reply; takedown on request (readylive:uwatmos, 1 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); webcam2 only; roof-west uses dated file names",
   "blockers": [
    "terms unstated",
    "redirect hop"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 1,
   "video_cameras": 0,
   "last_update": "2026-11-10",
   "plugin": "readylive",
   "takedown": "readylive:uwatmos",
   "still_cameras": 1
  },
  {
   "id": "ubc-eos-weather-cams",
   "name": "UBC Earth, Ocean & Atmospheric Sciences weather webcams (4 views)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://weather.eos.ubc.ca/wxfcst/current/cameras/index.html",
   "coverage": "Vancouver, British Columbia, CA",
   "country": "CA",
   "stream_type": "Stills about every minute, stable URLs weather.eos.ubc.ca/wxfcst/current/cameras/UBC_cam{1_north,2_east,3_west,4_south}.jpg (200 and fresh from box)",
   "status": "blocked",
   "next_steps": "Four fresh 360-degree sky views for the BC coast, but robots.txt is 'User-agent: * Disallow: /', so not fetchable without UBC's say-so. Ask UBC EOAS (outreach 'ubc-eos') for permission; do not fetch until answered.",
   "notes": "",
   "blockers": [
    "robots.txt Disallow: / (explicit block)"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "nz-metservice-webcam-api",
   "name": "MetService NZ WebCam Observations API (airport and AWS cams)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://api.metservice.com/observations/nz/webcam",
   "coverage": "Airports, aerodromes and other automatic weather stations across New Zealand (list via /webcam, /webcam/aerodrome, /webcam/other)",
   "country": "NZ",
   "stream_type": "REST JSON + images, a new image every 4 min per camera, 24 h retention (documented on MetService's MuleSoft Anypoint portal); box GET without a key returns 401 {'message':'Unauthorized'}",
   "status": "blocked",
   "next_steps": "Best NZ sky-phase find: official horizon cams at aerodromes, with lat/lon, orientation and elevation in the list response, so the discovery pattern is built in. Needs an API key from MetService's developer portal, which I did NOT sign up for (needs Jon's OK). Check the API terms for attribution and non-commercial use once he agrees.",
   "notes": "",
   "blockers": [
    "API key required (not requested)"
   ],
   "approx_cameras": "~40",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "state-mesonet-cams-survey",
   "name": "State mesonets with station cameras (OK, NJ, DE, West Texas, Nebraska) - survey",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://stateclimate.org/mesonets-directory/",
   "coverage": "OK, NJ, DE, W. Texas, NE mesonets",
   "country": "US",
   "stream_type": "No public station cameras found",
   "status": "considered",
   "next_steps": "Checked the NYSM/KY pattern against other mesonets: Oklahoma Mesonet (robots Disallow /data/, no site cameras documented), NJ Weather Network (only links to unrelated third-party webcams), West Texas Mesonet (no cameras documented, TTU robots disallows its mesonet pages), Nebraska and Delaware DEOS (no camera pages found). Only NYSM and Kentucky publish station cams, so this thread is done unless someone adds cams.",
   "notes": "",
   "blockers": [
    "no camera feeds"
   ],
   "approx_cameras": "0",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "storm-chaser-streams",
   "name": "Storm chaser live streams (Tornado Titans, Live Storm Chasers, Pecos Hank, StormDig, Severe Studios)",
   "category": "storms",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://livestormchasers.com/info/",
   "coverage": "US Plains, spring-season streams",
   "country": "US",
   "stream_type": "Branded streaming platforms; no open HLS",
   "status": "blocked",
   "next_steps": "Searched for relayable storm feeds: none publish open streams or embed terms; StormDig requires a broadcast licence and Severe Studios (Radar Omega3) prohibits rebroadcast without a licence. Only worth pursuing as a deliberate outreach/licence ask in storm season; not a technical source.",
   "notes": "",
   "blockers": [
    "licence or permission required",
    "no open stream"
   ],
   "approx_cameras": "n/a",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "swpc-ovation-aurora-oval",
   "name": "NOAA SWPC OVATION aurora oval (north/south) and SWPC LASCO coronagraph stills",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://services.swpc.noaa.gov/images/animations/ovation/north/latest.jpg",
   "coverage": "Northern/southern hemisphere aurora forecast map and SOHO coronagraph (C2/C3) images",
   "country": "SPACE",
   "stream_type": "Stills about every 5 min, stable latest.jpg URLs (200 fresh from box; prod HEAD 403 as with goes-suvi)",
   "status": "considered",
   "next_steps": "Public domain, but these are forecast graphics, not cameras, and the existing aurora map already uses SWPC /json/ products, so low priority. Prod IP gets 403 on services.swpc.noaa.gov images (same as goes-suvi frames).",
   "notes": "",
   "blockers": [
    "prod IP 403",
    "largely redundant"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "soho-lasco-eit-latest",
   "name": "SOHO LASCO C2/C3 and EIT 304 latest images (NASA)",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://soho.nascom.nasa.gov/data/realtime/c2/512/latest.jpg",
   "coverage": "Sun corona and EUV, from SOHO (L1)",
   "country": "SPACE",
   "stream_type": "Stills; stable URLs soho.nascom.nasa.gov/data/realtime/{c2,c3,eit_304}/512/latest.jpg (200 from box AND prod; EIT 304 fresh to the minute, LASCO C2/C3 about hourly)",
   "status": "live",
   "next_steps": "Public-domain NASA/ESA solar images from a host that works from prod (unlike services.swpc.noaa.gov, 403 from prod), good fill for the off-map space playlist alongside sdo-nrt-movies. Credit SOHO (ESA & NASA). No robots.txt.",
   "notes": "Pairs with goes-ccor1 (SWPC host blocked from prod). | 2026-11-10: already LIVE in the Sun list (sky.m3u8 / sun.m3u8) as sky-soho-lasco-c2 and sky-soho-lasco-c3 (soho.nascom.nasa.gov 1024 latest.jpg); EIT 304 not used (SDO covers EUV). Row fixed (Jon: 'fix the SOHO tracker row').",
   "blockers": [],
   "approx_cameras": "3",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-10T05:58:00-05:00",
   "channels": 2,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "sky",
   "last_update": "2026-11-10"
  },
  {
   "id": "gmn-global-meteor-network",
   "name": "Global Meteor Network camera status (nightly stacks, 1,891 stations)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://globalmeteornetwork.org/status/",
   "coverage": "Worldwide night-sky meteor cameras (locations blurred for privacy)",
   "country": "SPACE",
   "stream_type": "Station list at /data/kml_fov/GMN_station_coordinates_public.json (1,891); images are nightly captured stacks, not live",
   "status": "considered",
   "next_steps": "Interesting night-sky data but not a live feed (one stacked image per night, per camera), so filed as discovery only. robots.txt is open (crawl-delay 10). Could feed a 'last night's sky' view later.",
   "notes": "2026-11-08: weblog status page lists 49 countries; station folders per country CA 104, US 253, NZ 216, AU 110, UK 334; each station latest/ has nightly captured_stack.jpg + meteor stack; data CC BY 4.0 (globalmeteornetwork.org/data). Wellington Astro Society cams NZ000X/NZ002Y feed it. Proposed gmn-nightly plugin (not built).",
   "blockers": [
    "nightly stacks, not live"
   ],
   "approx_cameras": "1891",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-08"
  },
  {
   "id": "starvisor-net",
   "name": "STARVISOR.net night-sky and aurora cameras (36 cams)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://starvisor.net/",
   "coverage": "Worldwide all-sky and aurora cams (Kaliningrad, Leningrad Oblast, Fennoscandia ...); image about every minute",
   "country": "RU",
   "stream_type": "Per-camera pages starvisor.net/<code>/; image endpoint not seen",
   "status": "considered",
   "next_steps": "Listed in theauroraguy's webcam list as a major aurora source. starvisor.net returned TLS EOF / timeouts from both the box and prod on 2026-11-04 (likely a network or geo block), so I could not read robots.txt, terms or image URLs. Retest; terms unknown (site is a hobby network, ask).",
   "notes": "2026-11-05 retest: starvisor.net still unreachable from the box (TLS connect error).",
   "blockers": [
    "unreachable from box and prod",
    "terms unknown"
   ],
   "approx_cameras": "36",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-05"
  },
  {
   "id": "nlalert-fi",
   "name": "nlalert.fi aurora cameras (Lapland, Finland)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://nlalert.fi/forecast/aurora-cameras",
   "coverage": "Rovaniemi, Apukka, Levi, Muonio, Yllas, Ivalo, Ruka, Pyha, Saariselka",
   "country": "FI",
   "stream_type": "JS-rendered page; no image URLs in static HTML",
   "status": "considered",
   "next_steps": "Aurora forecast service that aggregates resort/tour-operator cams; robots.txt has crawl-delay 10 and does not block /forecast. Underlying cams belong to the tour operators (commercial), so each would need its own permission. Not worth more time unless a camera host is found.",
   "notes": "",
   "blockers": [
    "JS-only",
    "third-party commercial cams"
   ],
   "approx_cameras": "~12",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "wild-windows-directory",
   "name": "Wild Windows (The Legacy Foundation) live-animal-cam directory, powered by Wildlife Streaming",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://supportlegacy.org/wild-windows/places",
   "coverage": "~283 institutions: North America 186, Europe 47, Africa 43, Asia 9, Oceania 8 (about 94 other); e.g. Canada: OrcaLab, Ripley's Aquarium, Vancouver Aquarium, Grasslands NP; AU: Taronga (5), Melbourne Zoo (3), Werribee, Phillip Island, CSU FalconCam; NZ: Oamaru Penguins, Royal Albatross Centre; UK: Chester, Edinburgh, Rutland Ospreys, Scottish Wildlife Trust",
   "country": "US",
   "stream_type": "Curated directory (Supabase backend); each facility profile names the source and its camera count; most underlying cams are YouTube",
   "status": "considered",
   "next_steps": "Discovery source for animals: same Wildlife Streaming vendor as marwell-zoo. Use to mimic how a list is built (institution - camera count - source type) and check each operator individually; do not copy the list. robots.txt allows search bots.",
   "notes": "Next: pick the non-YouTube operators from the AU/NZ/CA lists (Taronga, OrcaLab, Oamaru, Royal Albatross, Phillip Island). | 2026-11-05: AU/NZ/CA penguin entries resolved: Phillip Island (CamStreamer + YouTube), Oamaru (YouTube), NZ Penguin Initiative (7 YouTube embeds), Taronga (player unknown), OrcaLab (403 from box, explore.org). None is a direct stream. Remaining unresolved: Royal Albatross (doc-royalcam), Scotford Peregrine, Grasslands NP.",
   "blockers": [],
   "approx_cameras": "~500",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-05"
  },
  {
   "id": "zoos-victoria-live-cams",
   "name": "Zoos Victoria live cams (Melbourne Zoo, Werribee, Healesville)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.zoo.org.au/member-zone/zoo-news-tv/live-cams-at-the-zoo/",
   "coverage": "Parkville, Werribee, Victoria, AU",
   "country": "AU",
   "stream_type": "Official YouTube embeds (4) on zoo.org.au; youtube-nocookie on skywatch",
   "status": "live",
   "next_steps": "Live since the 2026-11-09 09:07 UTC restart: wildlife.m3u / wildlife.xml (170001+) and map embeds.",
   "notes": "2026-11-09: Snow Leopards, Lion (Werribee), Giraffe, Penguin cams; oEmbed author Zoos Victoria. | 2026-11-10: LIVE, 4 official YouTube embeds (yt_wildlife/zoosvictoria); embeds are not stream-probed (video_unknown).",
   "blockers": [],
   "approx_cameras": "4",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": "au-za",
   "last_audit": "2026-11-09T03:48:29-05:00",
   "channels": 4,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 4,
   "video_cameras": 4,
   "plugin": "yt_wildlife",
   "video_unknown": 4,
   "takedown": "yt_wildlife:zoosvictoria",
   "last_update": "2026-11-10"
  },
  {
   "id": "cochrane-polar-bear-habitat",
   "name": "Cochrane Polar Bear Habitat live cams (Arctic, Baffin, Chukchi, Davis enclosures)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.polarbearhabitat.ca/watch-live",
   "coverage": "Cochrane, Northern Ontario, CA",
   "country": "CA",
   "stream_type": "Daytime enclosure cams; player not in the static HTML (1.4 MB JS-heavy page)",
   "status": "considered",
   "next_steps": "Non-profit habitat in Ontario; a good Canada animals fit. Inspect the player host with a browser next round, then ask for permission and credit.",
   "notes": "",
   "blockers": [
    "player unknown"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "conserve-wildlife-nj-cam-guide",
   "name": "Conserve Wildlife Foundation of NJ live wildlife camera guide (eagle/osprey/falcon nest cams)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://conservewildlifenj.org/resources/live-wildlife-camera-guide/",
   "coverage": "New Jersey nest cams (bald eagle, osprey, peregrine) and others",
   "country": "US",
   "stream_type": "Directory page; players not in the static HTML",
   "status": "considered",
   "next_steps": "Discovery source for raptor nest cams (nearly all non-profit raptor cams run on YouTube or embedded players; the only open direct HLS I found was Estonia's eenet merikotkas.m3u8, unreachable from the box). Check the individual operators for stream hosts.",
   "notes": "",
   "blockers": [
    "players unknown"
   ],
   "approx_cameras": "~10",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "ovpf-reunion-volcano",
   "name": "OVPF-IPGP Piton de la Fournaise volcano cams (La Reunion)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.ipgp.fr/volcanoweb/reunion/html_static_webcam/cameras-ovpf.html",
   "coverage": "9 cameras at one of the world's most active volcanoes: Bory, Cascades, Basalte, BERT3, CFNC, DOEC, ENCC, HDLC, PARC; Reunion (France)",
   "country": "FR",
   "stream_type": "Stills about every 1-2 min, stable URLs ipgp.fr/volcanoweb/reunion/Cameras/Camera<ID>.jpg (all 9 fresh within 6 min from box, prod HEAD 200)",
   "status": "viable",
   "next_steps": "Official volcano-observatory stills from an Indian Ocean volcano, with stable URLs and no robots.txt restrictions (User-agent * Disallow empty). Terms unstated, so ask OVPF-IPGP for credit-and-link permission (outreach 'ovpf'). Camera coordinates must be entered by hand (not in the page); coverage is a new region for the volcano set alongside geonet-volcano and jma-volcano.",
   "notes": "2026-11-10 ready-live: skipped, www.ipgp.fr unreachable from prod (connect timeout x3)",
   "blockers": [
    "terms unstated",
    "coordinates not in feed"
   ],
   "approx_cameras": "9",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-10"
  },
  {
   "id": "lake-louise-cams",
   "name": "Lake Louise Ski Resort webcams (documented public image API)",
   "category": "ski-resorts",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://api.skilouise.com/docs/CAMS-API-DOC.php",
   "coverage": "Lake Louise, Banff National Park, Alberta, CA",
   "country": "CA",
   "stream_type": "Stills every minute, stable URLs cams.skilouise.com/camN.jpg (N = 1 Gondola Top, 2 and 6 Base Area, 3 Ptarmigan towards Larch, 5 Chateau, 7 Whitehorn Lodge, 8 Paradise towards Summit, 9 Lake Louise [stale since 2025-09-30]); 'tv' variants have no watermark; Authentication: None (200 from box and prod, all fresh 14:11 UTC)",
   "status": "live",
   "next_steps": "Best ski find: the resort itself publishes an API doc for downloading its webcams with 'Authentication: None', so it is meant for reuse; 7 fresh cams at 24 h or 5am-5pm MDT, up to 3840x2160, in Banff NP (sky-rich mountain views too). robots.txt allows (only /archives/ disallowed). Still ask the resort for credit-and-link confirmation (outreach 'lake-louise'). Canada gap filler for Alberta mountains.",
   "notes": "Prefer the 'tv' (watermark-free) variants if permission allows. | 2026-11-10: live pending owner reply; takedown on request (readylive:louise, 7 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); watermark-free 'tv' variants (1024x576); cam9 stale since 2025-09-30 left out",
   "blockers": [],
   "approx_cameras": "7",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 7,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:louise",
   "last_update": "2026-11-10",
   "still_cameras": 7
  },
  {
   "id": "nzski-cams",
   "name": "NZSki webcams (Mt Hutt, Coronet Peak, The Remarkables)",
   "category": "ski-resorts",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.mthutt.co.nz/weather-report",
   "coverage": "Mt Hutt (Base, Summit), Coronet Peak (Express, Express Top), The Remarkables, New Zealand",
   "country": "NZ",
   "stream_type": "JSON index webcams-json/{MtHutt,CoronetPeak,TheRemarkables}.json on a shared Azure Front Door host (webcams-awb2e0ceg7cccsba.a02.azurefd.net), 3 angles per cam, last 24 h of timestamped frames; image URL = /webcams-frames/<path>_1280.jpg (200 from box and prod); needs a per-fetch resolver (take the last JSON entry)",
   "status": "live",
   "next_steps": "NZ phase: the NZSki resort pages themselves load these public JSON files (no key, no Referer, no nonce), cams update about every 11 minutes; same site shows the three NZSki resorts. Winter season ended in October but cams still update. Terms unstated: ask NZSki (outreach 'nzski'). Another case for the generic 'timestamped still resolver' plugin hook proposed in Round 8.",
   "notes": "2026-11-10: live pending owner reply; takedown on request (readylive:nzski, 15 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); newest frame per angle via the new engine still_resolve hook (resolve_still in readylive.py)",
   "blockers": [
    "terms unstated",
    "needs resolver hook"
   ],
   "approx_cameras": "~15",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 15,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:nzski",
   "last_update": "2026-11-10",
   "still_cameras": 15
  },
  {
   "id": "mt-bachelor-cams",
   "name": "Mt Bachelor webcams (api.mtbachelor.com cams API)",
   "category": "ski-resorts",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.mtbachelor.com/the-mountain/webcams",
   "coverage": "Mt Bachelor, Oregon, US",
   "country": "US",
   "stream_type": "Live JPEG at api.mtbachelor.com/api/v1/cams/mtn/{1,2,3,5,9,11,12,13,14,16} (Content-Type image, no-store; 200 from box and prod)",
   "status": "live",
   "next_steps": "10 cam ids discovered from the resort's own webcams page; stable URLs and fresh on every request. robots.txt allows everything. Terms unstated, so ask Mt Bachelor; the API sends no last-modified (cache-control no-store), so freshness is only visible in the image itself.",
   "notes": "2026-11-10: live pending owner reply; takedown on request (readylive:bachelor, 8 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); cams 1 and 3 left out (frames ~45 h old)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "10",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 8,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:bachelor",
   "last_update": "2026-11-10",
   "still_cameras": 8
  },
  {
   "id": "silverstar-cams",
   "name": "SilverStar Mountain Resort webcams (S3 stills)",
   "category": "ski-resorts",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.skisilverstar.com/the-mountain/mountain-cams",
   "coverage": "Vernon, British Columbia, CA",
   "country": "CA",
   "stream_type": "Stills about every minute at s3-us-west-2.amazonaws.com/skisilverstar.webcams/webcams/{webcam,SnowCam,brewers,comet1,comet2,meadow,silverwoods,tubetown}.jpg (7 verified fresh at 14:15 UTC; 200 from box and prod)",
   "status": "live",
   "next_steps": "BC Interior gap, fresh stable S3 stills; the page itself references these URLs. robots.txt allows. Terms unstated, so ask SilverStar for credit-and-link permission.",
   "notes": "2026-11-10: live pending owner reply; takedown on request (readylive:silverstar, 8 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "8",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 8,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:silverstar",
   "last_update": "2026-11-10",
   "still_cameras": 8
  },
  {
   "id": "red-mountain-cams",
   "name": "RED Mountain Resort webcams (Rossland, BC)",
   "category": "ski-resorts",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.redresort.com/",
   "coverage": "Rossland, British Columbia, CA",
   "country": "CA",
   "stream_type": "Stills about every 2 min at weather-redresort-com.b-cdn.net/cams/<name>700.jpg (cleast, granitecam, greycam, paradisecam, pldeck, redbasecam, redcam, topping: all 8 fresh at 14:15 UTC); also listed on bcweathercams.ca",
   "status": "live",
   "next_steps": "8 fresh resort cams on a CDN; found through the bcweathercams.ca directory. resort robots.txt allows (only /wp-content/uploads/wpforms/ and a crawl-delay of 10); the CDN host has no robots.txt. Terms unstated: ask RED.",
   "notes": "2026-11-10: live pending owner reply; takedown on request (readylive:red, 8 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "8",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 8,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:red",
   "last_update": "2026-11-10",
   "still_cameras": 8
  },
  {
   "id": "cairngorm-mountain-cams",
   "name": "Cairngorm Mountain webcams (Base Station, Ptarmigan, Fiacaill Ridge, Sunkid)",
   "category": "ski-resorts",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.cairngormmountain.co.uk/webcams/",
   "coverage": "Cairngorms National Park, Scotland, UK",
   "country": "GB",
   "stream_type": "Stills, stable URLs cairngormmountain.co.uk/wp-content/uploads/webcams/{BaseStation,PtarmiganStation,fiacaillridge,sunkid}-full.jpg (all fresh within 3 min, 200 from box and prod)",
   "status": "viable",
   "next_steps": "UK phase: four fresh Scottish mountain views; robots.txt has a Cloudflare Content-Signal (search=yes, ai-train=no, use=reference) and allows *, so a map thumbnail is not AI training, but confirm. Ask Cairngorm Mountain for credit-and-link permission.",
   "notes": "",
   "blockers": [
    "Content-Signal use=reference; confirm"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "thredbo-cams",
   "name": "Thredbo webcams (Thredbo Live Cams XML)",
   "category": "ski-resorts",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.thredbo.com.au/the-mountain/webcams/",
   "coverage": "Thredbo, Kosciuszko National Park, NSW, AU",
   "country": "AU",
   "stream_type": "XML gallery feed thredbo.com.au/feeds/webcams/ (LivePass format) pointing to 4 S3 stills thredbo-services-prod-s3-sftp-server-public.s3.ap-southeast-2.amazonaws.com/webcams/{Coaster01,EaglesNest01,EaglesNest02,FridayFlat01}.jpg (200 from box and prod; last frame 05:55 UTC)",
   "status": "live",
   "next_steps": "AU phase: official XML feed with direct S3 URLs (the resort page links the same images); robots.txt allows all. The feed 'updated' attribute shows 2026-09-13, so off-season cams may update rarely. Terms unstated; ask Thredbo.",
   "notes": "2026-11-08: nationalparkcam.com lists Thredbo Eagles Nest stills on a public S3 bucket (thredbo-services-prod-s3-sftp-server-public .../webcams/EaglesNest01.jpg). | 2026-11-10: live pending owner reply; takedown on request (readylive:thredbo, 4 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [
    "terms unstated",
    "off-season cadence"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 4,
   "video_cameras": 0,
   "last_update": "2026-11-10",
   "plugin": "readylive",
   "takedown": "readylive:thredbo",
   "still_cameras": 4
  },
  {
   "id": "mt-buller-cams",
   "name": "Mt Buller webcams (idnetwork stills)",
   "category": "ski-resorts",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.mtbuller.com.au/winter/webcams",
   "coverage": "Mt Buller, Victoria, AU",
   "country": "AU",
   "stream_type": "Stills at mtbuller.idnetwork.com.au/cams-mt-buller/{BurntHutCam,LBSCam,VillageCam,VillageTobogganCam}.jpg (fresh at 14:10 UTC, 200 from box and prod); idnetwork.com.au is a vendor host",
   "status": "live",
   "next_steps": "AU phase: stable fresh stills from the resort's webcam vendor host. The vendor host has no robots.txt (404); the resort robots.txt (HubSpot) only disallows preview/preference paths. Ask Mt Buller for permission and credit.",
   "notes": "2026-11-10: live pending owner reply; takedown on request (readylive:buller, 4 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [
    "terms unstated",
    "vendor-hosted"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 4,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:buller",
   "last_update": "2026-11-10",
   "still_cameras": 4
  },
  {
   "id": "bcweathercams-ski-directory",
   "name": "bcweathercams.ca Ski & Mountain WebCams directory (discovery source)",
   "category": "ski-resorts",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://bcweathercams.ca/ski.html",
   "coverage": "BC ski hills and mountain areas (Whistler/Blackcomb, Revelstoke, Valemount, SFU, Mount Washington, Apex, Big White, Red, Silver Star ...); 138 image links",
   "country": "CA",
   "stream_type": "Hobbyist directory of direct image URLs; many are stale or moved (Apex and Big White paths now 404)",
   "status": "considered",
   "next_steps": "Not an official BC government page despite the name. Used as a discovery source (found SilverStar S3 and RED CDN hosts); verify each URL, because a good fraction of the listed images have moved. Remaining leads: Whistler/Blackcomb (Vail Resorts, vendor), Revelstoke, Big White (new image paths), Apex, Panorama, Sun Peaks.",
   "notes": "",
   "blockers": [
    "stale links"
   ],
   "approx_cameras": "138",
   "origin": "deepdive-20261104",
   "found": "2026-11-04",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-04T06:05:44-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "fi-fmi-miracle-allsky",
   "name": "FMI MIRACLE all-sky cameras (Kevo, Kilpisjarvi, Muonio)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://rwc-finland.fmi.fi/index.php/all-sky-camera-images/",
   "coverage": "Kevo, Kilpisjarvi and Muonio, Finnish Lapland, FI",
   "country": "FI",
   "stream_type": "Stills, stable URLs space.fmi.fi/MIRACLE/RWC/latest_{KEV,KIL,MUO}.jpg (KEV 200 image/jpeg from box, last-modified 12:08 UTC 2026-11-05)",
   "status": "live",
   "next_steps": "Official research-grade auroral all-sky imagers from the Finnish Meteorological Institute, with fixed station coordinates. space.fmi.fi robots.txt only disallows /cgi-bin/. FMI open data is generally CC BY 4.0, but this page does not state terms, so confirm with FMI space weather (rwc-finland) before a plugin fetches. Night-only and seasonal.",
   "notes": "Light probing only (1 HEAD per image). | 2026-11-10: live pending owner reply; takedown on request (readylive:fmi, 2 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); Kilpisjarvi + Muonio; Kevo latest_KEV.jpg is 0 bytes today (left out). Muonio image is also the Sky channel sky-fmi-muonio (off the map)",
   "blockers": [
    "terms not stated on page; confirm CC BY"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 2,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:fmi",
   "last_update": "2026-11-10",
   "still_cameras": 2
  },
  {
   "id": "fi-sgo-allsky",
   "name": "Sodankyla Geophysical Observatory real-time all-sky cameras (Sodankyla, Abisko)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://sgo.fi/Data/RealTime/allsky.php",
   "coverage": "Sodankyla FI and Abisko SE",
   "country": "FI",
   "stream_type": "Stills, stable URLs sgo.fi/Data/RealTime/Kuvat/skyi_SOD_latest.jpg and sgo.fi/pub_asc/requests/skyi_test/skyi_AAK_latest.jpg (both 200 from box, 144-167 KB, last-modified 05:13 and 06:59 UTC)",
   "status": "live",
   "next_steps": "University of Oulu observatory all-sky imagers; complements irf-kiruna-allsky. Terms unstated: ask SGO (bundle with the FMI ask).",
   "notes": "2026-11-10: live pending owner reply; takedown on request (readylive:sgo, 2 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 2,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:sgo",
   "last_update": "2026-11-10",
   "still_cameras": 2
  },
  {
   "id": "allsky-map-network",
   "name": "Allsky Map (Thomas Jacquin): registered hobbyist all-sky cameras worldwide",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.thomasjacquin.com/allsky-map/",
   "coverage": "Worldwide; owners opt in via 'Show On Map' in the Allsky WebUI (AllskyTeam/allsky, MIT software)",
   "country": "",
   "stream_type": "Map page embeds about 330 camera records (664 lat fields) with links to each owner's own Allsky web page; images are self-hosted by each owner",
   "status": "considered",
   "next_steps": "Biggest sky-tier discovery source this round: hundreds of night-sky/aurora cams, each on an owner-run Raspberry Pi site. The software licence (MIT) does not cover the images. Each camera owner must be asked (or an opt-in programme run with the Allsky team). robots.txt allows the map. Idea: ask the AllskyTeam whether they would add an opt-in 'share with skywatch.monster' flag.",
   "notes": "Do not bulk-fetch owner sites; at most sample a few to count fresh ones. | 2026-11-07: Borealis Monitor (similar project) uses fmi aurorasnow, SGO, IRF, KHO, AuroraMAX, foto-webcam.eu, UiT fox.phys.uit.no (new: uit-tromso-allsky) and allsky.tv (AllSky7 AMS archive; sampled LATEST image stale since 2026-01).",
   "blockers": [
    "per-owner permission",
    "home-hosted, unstable"
   ],
   "approx_cameras": "~330",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-07"
  },
  {
   "id": "foto-webcam-eu",
   "name": "Foto-Webcam.eu alpine high-resolution webcam network",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.foto-webcam.eu/",
   "coverage": "Bavarian/Austrian/Swiss/Italian Alps and Munich area (Zugspitze, Wendelstein ...), DE/AT/IT/CH",
   "country": "DE",
   "stream_type": "Stills every 10 min, stable URLs foto-webcam.eu/webcam/<cam>/current/<width>.jpg (zugspitze 1200.jpg 200, 290 KB, fresh 12:00 UTC); about 321 cams listed on /webcam/infos/",
   "status": "viable",
   "next_steps": "Very high quality mountain horizon/sky views. The site's published terms allow linking, live embedding and publishing images on the internet if the source is credited as a clickable link to www.foto-webcam.eu, shown 16:9 and not stretched or cropped. robots.txt only blocks Googlebot-Image from /webcam/ and some backlink bots. Viable as a map stills plugin with a visible credit link; send a courtesy note first (via Jon). Pre-built 1200/1920 widths, so pick 1200 to stay light.",
   "notes": "Build: list from /webcam/infos/, one stills URL per cam, credit link on every card. | 2026-11-05 build attempt: www.foto-webcam.eu (148.251.96.215) times out on 80 and 443 from prod (stats.lat) while it answers from the box, so the engine cannot fetch the list or the stills; not added. Courtesy note drafted (asks whether the server is blocked). Map card will need a clickable credit link + forced 'contain' (no Fit/Fill) when it goes in.",
   "blockers": [
    "origin unreachable from prod",
    "credit link + 16:9 uncropped required"
   ],
   "approx_cameras": "321",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "last_update": "2026-11-05",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "hko-weather-photos",
   "name": "Hong Kong Observatory latest weather photos (about 37 views)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.hko.gov.hk/en/wxinfo/ts/index_webcam.htm",
   "coverage": "Hong Kong (Victoria Peak, Tsim Sha Tsui, Waglan Island, Tai Mo Shan ...), HK",
   "country": "HK",
   "stream_type": "Stills every 5 min, stable URLs hko.gov.hk/wxinfo/aws/hko_mica/<code>/latest_<CODE>.jpg (VPB 200, 72 KB)",
   "status": "blocked",
   "next_steps": "Ideal sky-tier set (harbour, peaks, islands, horizon), but robots.txt has 'Disallow: /wxinfo/' for all agents and HKO's app-link terms are non-commercial with conditions. Ask HKO for permission before any fetch. Not part of the DATA.GOV.HK open-data API.",
   "notes": "",
   "blockers": [
    "robots.txt Disallow /wxinfo/",
    "HKO non-commercial conditions"
   ],
   "approx_cameras": "37",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "ee-transpordiamet-road-cams",
   "name": "Estonia Transpordiamet road-weather cameras (Tark Tee ArcGIS layer)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://tarktee.transpordiamet.ee/tarktee/rest/services/road_cameras/MapServer",
   "coverage": "Estonian national roads, EE",
   "country": "EE",
   "stream_type": "ArcGIS MapServer layer with 179 cameras + nearest weather station air/road temp, image_time and image_path (<site>/<site>_YYYYMMDDHHMM.jpg); open-data dataset 'teekaamerate pildid' on andmed.eesti.ee; DATEX II feed needs registration",
   "status": "down",
   "next_steps": "New country, road-weather cameras with weather readings built in. The keyless ArcGIS layer answers (count 179); the image base URL still needs confirming, and the first records were stale (June 2026). Check the andmed.eesti.ee licence (likely CC BY 4.0) next round.",
   "notes": "2026-11-05 (second look): the ArcGIS layer is stale, not just partly old: the newest records have image_time 2026-06-04 (about five months ago) and weather_time 2026-05-04, so the feed has not updated since early June. Do not build until Estonia revives it; check again in a month.",
   "blockers": [
    "image base URL unconfirmed",
    "licence to confirm"
   ],
   "approx_cameras": "179",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "last_update": "2026-11-05",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "sd-iteris-rwis-cams",
   "name": "South Dakota 511 RWIS + road cameras (Iteris CDN GeoJSON)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://sd.cdn.iteris-atis.com/geojson/icons/metadata/icons.rwis.geojson",
   "coverage": "South Dakota statewide (140 RWIS sites + 40 camera-only sites), US",
   "country": "US",
   "stream_type": "Stills, stable URLs sd.cdn.iteris-atis.com/camera_images/<site>/<lens>/latest.jpg; 729 lens images in total across 180 sites (both GeoJSON files 200 from box)",
   "status": "live",
   "next_steps": "Found via warner-wvez/Ora. Road-weather station cameras (sky + road surface views) with per-lens updateTime. CDN robots.txt is an S3 AccessDenied (no robots). Terms unstated on SD511; ask SDDOT. LiveTrafficCam reports 99.9% live and 96.5% 14-day uptime for SD.",
   "notes": "2026-11-10: live pending owner reply; takedown on request (sd511, 709 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); RWIS + camera-only sites, lenses >48 h stale left out; no SD road cams were in prod before",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "729",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 706,
   "video_cameras": 0,
   "plugin": "sd511",
   "takedown": "sd511",
   "last_update": "2026-11-10",
   "still_cameras": 706
  },
  {
   "id": "es-dgt-nap-cameras",
   "name": "Spain DGT National Access Point traffic cameras (DATEX II v3.7)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://nap.dgt.es/es/dataset/camaras-dgt-datex2-v3-7",
   "coverage": "Spanish state road network except Basque Country and Catalonia, ES",
   "country": "ES",
   "stream_type": "DATEX II XML (hourly) at nap.dgt.es/datex2/v3/dgt/DevicePublication/camaras_datex2_v37.xml with coordinates, road, km point and deviceUrl stills etraffic.dgt.es/camarasEtraffic/<id>.jpg; at least 1,583 cameras in the first 3 MB of the file",
   "status": "partial",
   "next_steps": "Official open data, resource licence 'Creative Commons Attribution' (terms dgt.es/contenido/aviso-legal). Stills only (DGT publishes no public video). Biggest clean new-country road network this round. Similar projects already use it (datoclaro.live, AlvaroRF250/mirador-datos, pavece/es-trafficams).",
   "notes": "Fetch the XML once per day; credit DGT. | 2026-11-05: LIVE as engine plugin dgt (Jon [pt113u]); credited on /credits.",
   "blockers": [
    "no public video; stills HLS paused"
   ],
   "approx_cameras": "~1900",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "plugin": "dgt",
   "channels": 0,
   "mapped_cameras": 1974,
   "video_cameras": 0,
   "still_cameras": 1974,
   "last_update": "2026-11-05",
   "licence": "Creative Commons Attribution (CC BY), DGT National Access Point open data",
   "discovery": "nap.dgt.es DATEX II v3.7 DevicePublication XML, daily",
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "hk-td-traffic-snapshots",
   "name": "Hong Kong Transport Department traffic snapshot images (DATA.GOV.HK)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://data.gov.hk/en-data/dataset/hk-td-tis_2-traffic-snapshot-images",
   "coverage": "Hong Kong SAR, HK",
   "country": "HK",
   "stream_type": "Stills 320x240 every 2 min at tdcctv.data.one.gov.hk/<KEY>.JPG; location XML/CSV static.data.gov.hk/td/traffic-snapshot-images/code/Traffic_Camera_Locations_En.xml lists 1,013 cameras with lat/lon (both 200 from box)",
   "status": "partial",
   "next_steps": "Official open data under DATA.GOV.HK terms (free reuse including commercial, with attribution). Low-res but stable and complete. Pair with hko-weather-photos if HKO agrees.",
   "notes": "2026-11-05: LIVE as engine plugin hktd (Jon [pt113u]); credited on /credits.",
   "blockers": [
    "no public video; stills HLS paused"
   ],
   "approx_cameras": "1013",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "plugin": "hktd",
   "channels": 0,
   "mapped_cameras": 1013,
   "video_cameras": 0,
   "still_cameras": 1013,
   "last_update": "2026-11-05",
   "licence": "DATA.GOV.HK Terms and Conditions of Use",
   "discovery": "static.data.gov.hk Traffic_Camera_Locations_En.xml, daily",
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "sg-lta-traffic-images",
   "name": "Singapore LTA traffic images (data.gov.sg API)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://data.gov.sg/datasets/d_6cdb6b405b25aaaacbaf7689bcc6fae0/view",
   "coverage": "Singapore expressways, SG",
   "country": "SG",
   "stream_type": "JSON api.data.gov.sg/v1/transport/traffic-images (keyless, 200) with 1920x1080 stills on images.data.gov.sg and lat/lon; returned only 8 cameras at 12:05 UTC (historically about 87); LTA DataMall has the full set behind a free key",
   "status": "viable",
   "next_steps": "Singapore Open Data Licence 1.0: free commercial and non-commercial use with a conspicuous attribution notice and licence link. Image URLs change every minute, so a plugin must re-read the JSON. Recheck the camera count; if it stays at 8, the DataMall key (sign-up needs Jon's OK) is the way to the full set.",
   "notes": "2026-11-06 recheck: api.data.gov.sg/v1/transport/traffic-images still returns exactly 8 cameras from box and from prod. Full set still needs LTA DataMall key (Jon's OK).",
   "blockers": [
    "image URLs rotate",
    "count dropped to 8 in v1"
   ],
   "approx_cameras": "8-87",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "ca-toronto-traffic-cams",
   "name": "City of Toronto traffic cameras (open data)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://open.toronto.ca/dataset/traffic-cameras/",
   "coverage": "City of Toronto arterials and expressways, Ontario, CA",
   "country": "CA",
   "stream_type": "Stills at opendata.toronto.ca/transportation/tmc/rescucameraimages/CameraImages/loc<N>.jpg (loc8001 200, 127 KB) plus direction views ComparisonImages/loc<N><D>.jpg; list tmcearthcameras.json (JSONP) has 336 locations with lat/lon",
   "status": "partial",
   "next_steps": "Open Government Licence - Toronto (commercial use OK with attribution). City cameras on top of what 511 Ontario has. Strip the JSONP wrapper when reading the list.",
   "notes": "2026-11-05: LIVE as engine plugin toronto (Jon [pt113u]); credited on /credits. At deploy (12:25 UTC) opendata.toronto.ca reset every connection from both prod and the box; the plugin retries with back-off.",
   "blockers": [
    "no public video; stills HLS paused"
   ],
   "approx_cameras": "336",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "plugin": "toronto",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "still_cameras": 0,
   "last_update": "2026-11-05",
   "licence": "Open Government Licence – Toronto",
   "discovery": "opendata.toronto.ca tmcearthcameras.json (JSONP), daily",
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "us-il-idot-gateway-cams",
   "name": "Illinois IDOT 'Illinois Gateway Traffic Cameras' (ArcGIS open data)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://gis-idot.opendata.arcgis.com/",
   "coverage": "Illinois statewide, US",
   "country": "US",
   "stream_type": "ArcGIS open-data layer, about 1,328 cameras; stills on cctv.travelmidwest.com (per Ora: host blocks requests that send a Referer)",
   "status": "considered",
   "next_steps": "Found via warner-wvez/Ora. Official open-data listing; image host terms unstated and it rejects browser embeds with a Referer, so direct hotlinking from the web map will not work; server-side stills fetch only. Ask IDOT. (We do not spoof or strip referrers to get around it.)",
   "notes": "",
   "blockers": [
    "image host rejects Referer; terms unstated"
   ],
   "approx_cameras": "1328",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "no-vegvesen-hls",
   "name": "Statens vegvesen road webcams: public HLS video + stills (kamera.vegvesen.no)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://dataut.vegvesen.no/en/dataset/webkamera",
   "coverage": "Norway national roads, NO",
   "country": "NO",
   "stream_type": "HLS video (direct) for 144 + stills kamera.atlas.vegvesen.no/api/images/<id> for all 900",
   "status": "live",
   "next_steps": "Separate from the DATEX stills (no-vegvesen-datex). NLOD licence per the dataset; credit Statens vegvesen. Real video in a new country for the playlist tier.",
   "notes": "2026-11-05: LIVE as engine plugin vegvesen (Jon [pt113u]); credited on /credits.",
   "blockers": [],
   "approx_cameras": "900",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "plugin": "vegvesen",
   "channels": 144,
   "mapped_cameras": 900,
   "video_cameras": 144,
   "still_cameras": 900,
   "last_update": "2026-11-05",
   "licence": "Norwegian Licence for Open Government Data (NLOD) 2.0",
   "discovery": "public DATEX II 3.1 WFS datex_3_1:CctvSimple (ogckart-sn1.atlas.vegvesen.no, no account), every 12 h",
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "tw-keelung-tdx-cctv",
   "name": "Keelung City traffic CCTV via Taiwan TDX (MJPEG)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://data.gov.tw/en/datasets/161157",
   "coverage": "Keelung City, TW",
   "country": "TW",
   "stream_type": "MJPEG video (multipart/x-mixed-replace) at CCTV.KLCG.GOV.TW/<id> (sample 200 from box); 63 cams",
   "status": "viable",
   "next_steps": "Open Government Data License Taiwan 1.0 (CC BY compatible). MJPEG needs a relay or transcode for the playlist; map can show it directly.",
   "notes": " | 2026-11-05 build attempt: the stream is endless multipart MJPEG; the engine's still fetchers (Runner.fetch, /map/snap, pv_check) read whole bodies and the runners take JPEG stills, so it needs a first-frame grab path first. Not added (no extra runners used).",
   "blockers": [
    "MJPEG needs transcode"
   ],
   "approx_cameras": "63",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "last_update": "2026-11-05",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "tw-freeway-cctv",
   "name": "Taiwan Freeway Bureau CCTV (tisvcloud CCTV.xml + cctvc.freeway.gov.tw MJPEG)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://data.gov.tw/dataset/37665",
   "coverage": "Taiwan national freeways, TW",
   "country": "TW",
   "stream_type": "Static CCTV.xml (tisvcloud.freeway.gov.tw/history/motc20/CCTV.xml) with VideoStreamURL; MJPEG at cctvc.freeway.gov.tw/abs2mjpg/bmjpg?camera=<n>",
   "status": "considered",
   "next_steps": "Open Government Data License Taiwan 1.0, likely 1,000+ freeway cams with video. tisvcloud timed out from both box and prod and the sample MJPEG returned 404 from prod, so it may be geo-restricted to Taiwan. Retry from a different region or via TDX (TDX needs a free account; ask Jon first).",
   "notes": "2026-11-06: 1968.freeway.gov.tw timed out from prod (15s); data.gov.tw dataset page loads. Still unreachable from our hosts.",
   "blockers": [
    "unreachable from our hosts (geo?)",
    "TDX needs an account"
   ],
   "approx_cameras": "~1500",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "th-doh-trafficvision",
   "name": "Thailand Department of Highways traffic vision HLS",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.highwaytraffic.go.th/",
   "coverage": "Thai national highways, TH",
   "country": "TH",
   "stream_type": "HLS streaming1/2.highwaytraffic.go.th/<phase>/<cam>.stream/playlist.m3u8; 155 listed in Live-Environment-Streams",
   "status": "considered",
   "next_steps": "Government HLS video in a new country, but no terms found and the stream host timed out from both box and prod (likely geo-restricted). Needs DOH permission and a reachable route.",
   "notes": "2026-11-06: highwaytraffic.go.th returns a 135-byte stub HTML (Last-Modified 2023-07-18) from box and prod — not a live portal anymore. Keep considered/unreachable until a new official URL appears.",
   "blockers": [
    "unreachable from our hosts",
    "terms unknown"
   ],
   "approx_cameras": "155",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "id-dishub-atcs-cams",
   "name": "Indonesian city transport agency (Dishub/ATCS) CCTV HLS (13 cities)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://cctvjss.jogjakota.go.id/",
   "coverage": "Denpasar, Yogyakarta, Pekanbaru, Cianjur, Magelang, Wonosobo, Bandung, Salatiga, Palembang, Kebumen, Cirebon, Tasikmalaya, Padang, ID",
   "country": "ID",
   "stream_type": "HLS on municipal .go.id hosts (Jogja and Pekanbaru 200 from box, 1280x720 H.264; Denpasar 403); about 623 streams listed in Live-Environment-Streams",
   "status": "considered",
   "next_steps": "Real video from municipal governments, published on their public CCTV portals, but no terms anywhere and each city is a separate operator. Needs per-city permission; several hosts use odd ports or restreamer UUID paths that may rotate.",
   "notes": "",
   "blockers": [
    "terms unknown; per-city permission",
    "some hosts 403"
   ],
   "approx_cameras": "~623",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "tr-ibb-traffic-hls",
   "name": "Istanbul IBB traffic cameras (UYM / CepTrafik HLS)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://uym.ibb.gov.tr/hizmetler/trafik-olcum-ve-gozlem",
   "coverage": "Istanbul, TR",
   "country": "TR",
   "stream_type": "HLS on ibb-media2.ibb.gov.tr:1935/live/<n>.stream/playlist.m3u8 (as listed in the HasBahCa IPTV m3u); sample returned 500 from box and timed out from prod",
   "status": "blocked",
   "next_steps": "Municipal cams that show up in community IPTV lists, but there is no IBB open-data camera dataset (data.ibb.gov.tr has counts and indices only), streams are an app back end on a bare port, and the sample did not play. Needs IBB permission; don't copy from the IPTV lists.",
   "notes": "",
   "blockers": [
    "no open dataset",
    "app back end",
    "not reachable"
   ],
   "approx_cameras": "~147",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "de-hessen-mobil-video",
   "name": "Hessen Mobil traffic video clips (verkehrsservice.hessen.de)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://verkehrsservice.hessen.de/",
   "coverage": "Hessen motorways (A3, A5, A66 ...), DE",
   "country": "DE",
   "stream_type": "Short MP4 clips refreshed in place at verkehrsservice.hessen.de/syncdata/video/k<id>.mp4 (k3001 200 video/mp4 584 KB); 8 cams",
   "status": "considered",
   "next_steps": "Small but real moving images in Germany. Terms unstated; ask Hessen Mobil. Germany-wide Autobahn webcams are gone (see de-autobahn-api).",
   "notes": "",
   "blockers": [
    "terms unstated",
    "MP4 loop, not live"
   ],
   "approx_cameras": "8",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "de-autobahn-api",
   "name": "Autobahn GmbH App API webcams (verkehr.autobahn.de)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://autobahn.api.bund.dev/",
   "coverage": "German Autobahns, DE",
   "country": "DE",
   "stream_type": "JSON /o/autobahn/<road>/services/webcam: returns {'webcam':[]} for A1, A2, A3, A7, A8, A9, A99 (2026-11-05)",
   "status": "down",
   "next_steps": "The documented webcam endpoint still answers but lists no cams any more, so the GitHub clients (bundesAPI, autobahn-cli) that show webcams are out of date. Recheck occasionally.",
   "notes": "",
   "blockers": [
    "webcam lists empty"
   ],
   "approx_cameras": "0",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "kr-its-cctv",
   "name": "Korea ITS National Transport Information Center CCTV OpenAPI",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.its.go.kr/opendata/opendataList?service=cctv",
   "coverage": "Korean expressways (ex) and national roads (its), KR",
   "country": "KR",
   "stream_type": "JSON openapi.its.go.kr:9443/cctvInfo returning HLS URLs (cctvType=1) by bounding box; URLs expire",
   "status": "blocked",
   "next_steps": "Large official HLS network in a new country, but needs an API key from its.go.kr (sign-up, not done: needs Jon's OK) and the stream URLs are short-lived, so it would be a resolver plugin. Check the ITS reuse terms when a key is requested.",
   "notes": "",
   "blockers": [
    "API key sign-up required",
    "expiring URLs"
   ],
   "approx_cameras": "~3000+",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "jp-mlit-road-cams",
   "name": "Japan road cameras (MLIT regional bureaus, NEXCO, prefectures) - livecam-jp ledger",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://kotopapa.github.io/livecam-jp/v1/manifest.json",
   "coverage": "All 47 prefectures, JP",
   "country": "JP",
   "stream_type": "Mostly stills; ledger lists 4,536 'road' cams (1,145 mlit_roadinfo feeds, 257 NEXCO iHighway) plus 162 volcano (95 JMA, which we have as jma-volcano)",
   "status": "considered",
   "next_steps": "Discovery via kotopapa/livecam-jp (ledger itself has no licence; use it only to find upstream official pages). Licences vary per operator: 8,061 ledger entries are tagged public_data_1.0 (Japanese government standard terms, CC BY 4.0 compatible) but most prefecture road cams are 'unknown'. Pick MLIT bureaus first.",
   "notes": "2026-11-06: no third-party livecam-jp scripts run. Still waiting to pick public_data_1.0 upstream bureau pages only in a later round.",
   "blockers": [
    "licence varies per operator"
   ],
   "approx_cameras": "4536",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "de-dk-ie-eu-road-survey",
   "name": "Road-camera survey: Denmark, Ireland, Slovenia, Lithuania, Czechia (no open feed)",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.nap.si/en/datasets",
   "coverage": "DK, IE, SI, LT, CZ",
   "country": "",
   "stream_type": "No keyless camera feed",
   "status": "considered",
   "next_steps": "Denmark: Vejdirektoratet removed public webcam access in 2024 (security), so nothing to do. Ireland: TII shows snapshots on traffic.tii.ie but has no camera dataset on data.gov.ie; would need TII permission. Slovenia: promet.si B2B GeoJSON (b2b.kamere.geojson) needs OAuth2 registration (not done). Lithuania: eismoinfo.lt has a camera map and an ArcGIS REST server but no camera layer found. Czechia: NDIC/RSD mobilitydata needs Basic-Auth registration and documents no camera images.",
   "notes": "",
   "blockers": [
    "registration or permission needed"
   ],
   "approx_cameras": "0",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "jp-mlit-river-cams",
   "name": "Japan MLIT river and dam cameras (river.go.jp 'Kawabou')",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.river.go.jp/",
   "coverage": "Rivers and dams in all 47 prefectures, JP",
   "country": "JP",
   "stream_type": "Stills on cam.river.go.jp; per-camera JSON /kawabou/file/files/master/obs/scam/<id>.json; livecam-jp lists 13,497 river + 680 dam cams",
   "status": "considered",
   "next_steps": "Huge official network (river views double as weather/sky views in heavy rain). Content licence is the government standard terms (CC BY 4.0 compatible, commercial OK with 'source: MLIT river.go.jp' credit), BUT the same page asks people not to collect data periodically with tools and offers paid data distribution via river.or.jp; it may block heavy access. So: needs MLIT/FRICS permission for regular polling. Do not poll.",
   "notes": "",
   "blockers": [
    "periodic tool collection discouraged; permission needed"
   ],
   "approx_cameras": "~14000",
   "origin": "deepdive-20261105",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:12:27-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "yosemite-conservancy-webcams",
   "name": "Yosemite Conservancy webcams (Half Dome/Ahwahnee, Sentinel Dome, Turtleback Dome, Wawona, El Capitan video)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://yosemite.org/webcams/half-dome/",
   "coverage": "Yosemite Valley and High Sierra, California, US",
   "country": "US",
   "stream_type": "Stills at pixelcaster.com/yosemite/webcams/{ahwahnee2,sentinel,turtleback,wawona}.jpg (all 200 from box, last-modified 14:10 UTC 2026-11-05, so fresh to the minute); El Capitan is a live video player; NPS lists them as 'courtesy of Yosemite Conservancy'",
   "status": "live",
   "next_steps": "Jon to OK an email asking for the usage agreement (non-profit, donation-funded, credit link). Outreach row proposed only.",
   "notes": "Long-running (since 1998) horizon and weather views of Yosemite Valley and the high country, run for the Conservancy by Pixelcaster. The Conservancy asks anyone featuring its webcams to agree to a Webcam Usage Agreement first (the NPS page repeats this), so this is a permission ask, not an open feed. yosemite.org robots.txt only blocks /wp-admin/. Stills URLs are plain and stable. Best fit for the map as stills with credit to Yosemite Conservancy / Pixelcaster once they say yes. | 2026-11-07: Pixelcaster portfolio also shows CDN snapshot slug yosemite-yosfalls (latest_640x.jpg). | 2026-11-09: live pending owner reply; takedown on request (pendinglive:yosemite, 4 cams)",
   "blockers": [
    "Conservancy webcam usage agreement required"
   ],
   "approx_cameras": "5",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-07",
   "plugin": "pendinglive",
   "takedown": "pendinglive:yosemite"
  },
  {
   "id": "pixelcaster-kalaloch",
   "name": "Kalaloch beach cam, Olympic National Park (Pixelcaster)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://pixelcaster.com/dnc-kalaloch/kalaloch.jpg",
   "coverage": "Kalaloch, Olympic National Park coast, Washington, US",
   "country": "US",
   "stream_type": "Still, stable URL pixelcaster.com/dnc-kalaloch/kalaloch.jpg (200 image/jpeg, 62 KB, last-modified 14:12 UTC 2026-11-05)",
   "status": "live",
   "next_steps": "",
   "notes": "Found on the NWS Seattle (sew) webcams page. Pacific coast weather and sunset view, hosted by Pixelcaster for the concession operator (path 'dnc' suggests Delaware North). Owner and terms unstated: ask via Pixelcaster or the operator. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:kalaloch, 1 cams)",
   "blockers": [
    "terms unstated; operator unconfirmed"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:kalaloch"
  },
  {
   "id": "pixelcaster-vendor",
   "name": "Pixelcaster (managed live-camera vendor for parks, conservancies, beaches, universities)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://pixelcaster.com/portfolio.html",
   "coverage": "Customers include Yosemite, Yellowstone Old Faithful, Grand Canyon (Bright Angel), Huntington Beach, Clearwater Beach, Marblehead Lighthouse and Crane Creek (Lake Erie), Camp Hale CO, USC, Saint Louis University",
   "country": "US",
   "stream_type": "Vendor with fixed-URL stills under pixelcaster.com/<customer>/webcams/<cam>.jpg (confirmed for yosemite and dnc-kalaloch); the site has no camera index (sitemap lists 4 marketing pages)",
   "status": "considered",
   "next_steps": "Resolve customer image paths from each customer's own webcam page, not by guessing.",
   "notes": "Vendor lead, like wildlifestreaming-io. robots.txt allows everything (the /live/ disallow line is commented out). Each camera belongs to its customer, so permission is per customer, but one friendly note to Pixelcaster (founder Vance Kozik) could open several at once. Yosemite and Kalaloch are already filed on their own rows. Ideas to resolve next: Huntington Beach pier, Marblehead Lighthouse, Crane Creek and Clearwater Beach stills (surf, weather, lighthouse theme). | 2026-11-06: Marblehead Lighthouse still resolved at cs1.pixelcaster.com/live/erie/lesi-lighthouse.jpg (filed as pixelcaster-marblehead-lighthouse). Crane Creek and Clearwater Beach stills still unknown (guessed cs1 paths 404; customer pages not yielding paths without browser). Huntington Beach city pier is YouTube now, not Pixelcaster. | 2026-11-07: pixelcaster.com/portfolio.html exposes the public snapshot CDN pattern https://cdn.pixelcaster.com/public.pixelcaster.com/snapshots/<slug>/latest_640x.jpg (slugs seen: dn-camphale, grandcanyon-1, hb-harbour-2, hb-innocean, lesi-crane-creek, lesi-lighthouse, slu-1, tks-harbor-lights-resort, usc-tommy, wyndham-grand-clearwater, yellowstone-old-faithful, yosemite-yosfalls). Crane Creek + Clearwater resolved (new rows). Also cs9.pixelcaster.com HLS for Friends of Ottawa NWR. Per-customer permission still applies.",
   "blockers": [
    "per-customer permission"
   ],
   "approx_cameras": "10+",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-07"
  },
  {
   "id": "alertwest-wildfire-cams",
   "name": "ALERTWest / ALERTWildfire cameras (Oregon Hazards Lab, Nevada, Washington, Idaho, Utah) - wildfire lookout cams",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.alertwildfire.org/",
   "coverage": "Mountain-top lookout cameras across the western US (ALERTCalifornia is filed separately as alertca)",
   "country": "US",
   "stream_type": "Live pan-tilt-zoom stills and video via alertwest.live/cam-console/<id>; image endpoints not probed",
   "status": "considered",
   "next_steps": "Find the stills endpoint via the console page; ask OHAZ and UNR (Nevada Seismological Lab) via Jon.",
   "notes": "Big gap-filler for OR, NV, WA, ID (alertca covers CA only). Public viewing is open and alertwest.live robots.txt allows crawling. Reuse rules differ per network: Oregon Hazards Lab allows media/public use with attribution; ALERTWest's crediting page says keep the black information bar and partner logos on any screenshot or video. Needs per-network permission before a plugin fetches, and we would have to keep the info bar. Compare with the alertca noncommercial terms. | 2026-11-06: OHAZ media toolkit (ohaz.uoregon.edu/media-toolkit/) documents stills as https://alertwest.live/api/firecams/v0/currentimage?name=Axis-<CameraName> and lists ~138 Axis-* names. From box and from prod those URLs return 404 HTML; cam-console/Axis-MarysPeak redirects to /cam-console/11126 and loads from the box (200) but returns CloudFront 403 from prod. OHAZ invites journalists to use screenshots/timelapse with attribution and to point audiences at Watch Duty / ALERTWest. API path looks retired or gated — needs a fresh console/network look (no bypass) plus Jon OK before any outreach to OHAZ / UNR Nevada Seismological Lab. www.seismo.unr.edu has a cert name mismatch (not probed further).",
   "blockers": [
    "per-network terms; info bar must stay"
   ],
   "approx_cameras": "~1000",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "ncar-foothills-webcam",
   "name": "NCAR/EOL Foothills Lab roof webcam (Boulder, Colorado)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.eol.ucar.edu/instruments/foothills-lab-webcam",
   "coverage": "Boulder, Colorado, looking north along the Front Range, US",
   "country": "US",
   "stream_type": "Image at archive.eol.ucar.edu/webcam returned 500; /webcam/latest.jpg guess 500 (2026-11-05)",
   "status": "down",
   "next_steps": "",
   "notes": "Research-lab roof camera with a matching Mesa Lab weather station, a good sky view of the Front Range. The EOL page loads but the image host answers 500, so retest later. Terms unstated. | 2026-11-06 retest: archive.eol.ucar.edu/webcam/latest.jpg returns 404 (was 500). Page itself 200. Still down.",
   "blockers": [
    "image host returns 500"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "yosemite-falls-cam",
   "name": "Yosemite Falls webcam (Upper Yosemite Fall)",
   "category": "waterfalls",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://yosemite.org/webcams/yosemite-falls/",
   "coverage": "Upper Yosemite Fall, Yosemite NP, California, US",
   "country": "US",
   "stream_type": "Still pixelcaster.com/yosemite/webcams/yosfalls.jpg (200, 33 KB, last-modified 14:10 UTC 2026-11-05) plus the Conservancy's live-stream player",
   "status": "live",
   "next_steps": "",
   "notes": "One of the tallest waterfalls in North America (2,425 ft). Peak flow in early summer, a trickle or dry in autumn, so the view changes a lot by season. Same Webcam Usage Agreement as yosemite-conservancy-webcams; ask once for all of them. NPS also publishes a Yosemite Falls image page crediting the Conservancy. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:yosfalls, 1 cams)",
   "blockers": [
    "Conservancy webcam usage agreement required"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:yosfalls"
  },
  {
   "id": "is-vegagerdin-waterfalls",
   "name": "Iceland waterfall views already in the Vegagerdin set (Gullfoss, Dettifossvegur north and south)",
   "category": "waterfalls",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.vegagerdin.is/vgdata/webcam/",
   "coverage": "Gullfoss, Dettifoss (north and south views), Iceland",
   "country": "IS",
   "stream_type": "Already live as part of is-vegagerdin (499 stills, CC BY 4.0); index lists 'gullfoss', 'dettifossvegurnordur', 'dettifossvegursudur' as road-camera views",
   "status": "live",
   "next_steps": "",
   "notes": "Nothing to build: these are already in the map through is-vegagerdin. Worth giving them a waterfalls tag/category so the theme shows up. Direct guessed file names (gullfoss.jpg) 404, so the nordicstills plugin's own naming (webcam/<Name>_N.jpg) is the right path.",
   "blockers": [],
   "approx_cameras": "3",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": true,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "shoshone-falls-twin-falls",
   "name": "Shoshone Falls live video (City of Twin Falls, Idaho)",
   "category": "waterfalls",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://shoshonefalls.tfid.org/view.htm?mode=l",
   "coverage": "Shoshone Falls, Snake River Canyon, Idaho, US",
   "country": "US",
   "stream_type": "City-run camera since 2014 with three options (Stream 1, Stream 2, M-JPEG); not embeddable per local reports",
   "status": "blocked",
   "next_steps": "",
   "notes": "Useful flow-check cam run by the City of Twin Falls. The camera host did not resolve (DNS failure from prod) and TLS closed from the box, while www.tfid.org works, so the camera site may have moved. Retest, and find the new address from the city's Shoshone Falls page. Terms unstated. | 2026-11-06: City page www.tfid.org/309/Shoshone-Falls now points Live Stream to /543/Live, which embeds YouTube https://www.youtube.com/live/-Y7P-WfeXuE (and embed/-Y7P-WfeXuE). Old shoshonefalls.tfid.org host is gone. No open still/HLS — YouTube only, so blocked by policy.",
   "blockers": [
    "host not resolving 2026-11-05",
    "terms unstated"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "niagara-falls-cams",
   "name": "Niagara Falls live cams (Hilton Fallsview, EarthCam, Fallsview Casino stream)",
   "category": "waterfalls",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://niagarafallshilton.com/webcam",
   "coverage": "Horseshoe Falls, Niagara Falls, Ontario, CA",
   "country": "CA",
   "stream_type": "Hilton North Tower stream (billed 'official falls webcam'), EarthCam feed on visitniagarafalls.com, Fallsview Casino Instagram live; Niagara Parks itself lists no live falls cam",
   "status": "blocked",
   "next_steps": "",
   "notes": "The most famous waterfall, but every live feed belongs to a private company (hotel, EarthCam, casino). EarthCam is commercial; Niagara Falls Tourism shares media only via its library and YouTube. Needs the hotel or Niagara Falls Tourism to agree; nothing is fetchable openly.",
   "blockers": [
    "commercial owners; no open feed"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "waterfalls-survey",
   "name": "Waterfall cam survey (Multnomah, Snoqualmie, Palouse, Cumberland, Montmorency, Huka, Skogafoss, Paterson Great Falls)",
   "category": "waterfalls",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.nps.gov/pagr/learn/photosmultimedia/webcams.htm",
   "coverage": "US, CA, NZ, IS",
   "country": "",
   "stream_type": "No keyless feed found for most",
   "status": "considered",
   "next_steps": "",
   "notes": "Multnomah Falls: only ODOT's I-84 Exit 31 parking-lot cam (already in or-tripcheck, not the falls). Snoqualmie Falls: the Puget Sound Energy cam was removed. Palouse and Cumberland Falls: only aggregator listings (Skyline, WebcamTaxi), no operator feed. Montmorency Falls Park: cam offline. Taupo/Huka Falls: council lists lake cams only. Skogafoss: an iBaby feed whose latest image is dated 2026-08-02 (stale). Paterson Great Falls NHP: NPS page plus an EarthCam feed (NPS page not probed, may already be in the NPS webcams API). Victoria Falls and Iguazu not searched (search error); do next round. | 2026-11-06: Victoria Falls / Iguazu / Kaieteur surveyed (see victoria-iguazu-kaieteur-survey). Paterson Great Falls NHP is EarthCam-only (paterson-great-falls-earthcam). Shoshone moved to YouTube.",
   "blockers": [],
   "approx_cameras": "0",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "phillip-island-penguin-cams",
   "name": "Phillip Island Nature Parks Little Penguin burrow camera",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.penguins.org.au/attractions/penguin-parade/penguin-burrow-camera/",
   "coverage": "Phillip Island, Victoria, AU",
   "country": "AU",
   "stream_type": "Page embeds a CamStreamer player (camstreamer.com/embed/...) and a YouTube embed",
   "status": "blocked",
   "next_steps": "",
   "notes": "Wild little penguins in a burrow, night-vision, from an official park operator. Both embeds are third-party players (YouTube, CamStreamer), so no direct stream; YouTube is excluded by policy. CamStreamer embeds are the same pattern as portland-head-light. Ask Phillip Island Nature Parks for a direct HLS if we ever want it.",
   "blockers": [
    "YouTube/CamStreamer embeds only"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "oamaru-blue-penguin-cams",
   "name": "Oamaru Blue Penguin Colony live cams (Urban Wildlife Trust)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.urbanwildlifetrust.org/oamaru-blue-penguin-colony-cams/",
   "coverage": "Oamaru, Otago, NZ",
   "country": "NZ",
   "stream_type": "YouTube channel streams only (@oamarubluepenguincolony9655)",
   "status": "blocked",
   "next_steps": "",
   "notes": "Official colony nest and colony cams for NZ phase. YouTube only, so excluded; ask for a direct stream.",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "nz-penguin-initiative-livecams",
   "name": "NZ Penguin Initiative korora / little penguin live cams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.penguininitiative.nz/kororalittlepenguin-livecams",
   "coverage": "Several NZ nest sites",
   "country": "NZ",
   "stream_type": "Seven YouTube embeds on one page",
   "status": "blocked",
   "next_steps": "",
   "notes": "Directory of NZ penguin cams, all YouTube. Discovery list only.",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "7",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "orcalab-live-streams",
   "name": "OrcaLab live cameras and hydrophones (Johnstone Strait, BC)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://orcalab.org/live-streams/",
   "coverage": "Johnstone Strait / Hanson Island, British Columbia, CA",
   "country": "CA",
   "stream_type": "orcalab.org/live-streams returned 403 from the box; the camera feed is also carried by explore.org (explore.org/livecams/orcas/johnstone-strait-orcas)",
   "status": "blocked",
   "next_steps": "",
   "notes": "A non-profit research station with orca cams and hydrophones, strong fit for the Canada animals tier. Page blocks our box (403, we do not work around it) and the explore.org copy is a player. Ask OrcaLab for permission and a direct stream; check a browser view later for the stream type.",
   "blockers": [
    "403 from box",
    "player/explore.org only"
   ],
   "approx_cameras": "3+",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "taronga-penguin-cam",
   "name": "Taronga Zoo Sydney penguin cam (via Wild Windows)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://supportlegacy.org/wild-windows/cams/taronga-sydney-penguin-cam",
   "coverage": "Taronga Zoo Sydney, NSW, AU",
   "country": "AU",
   "stream_type": "Listing on Wild Windows; the player URL is not visible in the page HTML",
   "status": "considered",
   "next_steps": "",
   "notes": "Listed in Wild Windows as an always-on official cam that is sometimes offline. Player type unknown (probably YouTube). Needs a browser trace. | 2026-11-06: www.taronga.org.au/sydney-zoo/webcam returns 404. Wild Windows listing remains; official path moved or removed. Still needs a browser/Wild Windows trace, no contact.",
   "blockers": [
    "player unknown"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-06"
  },
  {
   "id": "mvo-montserrat-cams",
   "name": "Montserrat Volcano Observatory live remote cameras (Soufriere Hills)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.mvo.ms/resources/live-remote-camera/",
   "coverage": "Soufriere Hills Volcano, Montserrat",
   "country": "MS",
   "stream_type": "Observatory page lists a live remote camera (incl. thermal view); not probed because mvo.ms serves an incomplete TLS certificate chain (curl error 60)",
   "status": "considered",
   "next_steps": "",
   "notes": "Official observatory feed for another volcano. The certificate fault means a plugin would need to trust a broken chain, which we will not do; ask MVO to fix it or find another route.",
   "blockers": [
    "incomplete TLS chain"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "cenapred-popocatepetl",
   "name": "CENAPRED Popocatepetl cameras (Mexico) and UNAM CARDI Altzomoni",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://cenapred.gob.mx/",
   "coverage": "Popocatepetl, Mexico",
   "country": "MX",
   "stream_type": "CENAPRED live monitoring page; UNAM CARDI webcams page (cardi.geofisica.unam.mx) returned 500",
   "status": "considered",
   "next_steps": "",
   "notes": "Official civil-protection and university volcano cams. Image endpoints not found; the UNAM page was down. Needs a browser trace; other Mexico volcano cam sites are aggregators.",
   "blockers": [
    "image endpoint unknown",
    "CARDI 500"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261105b",
   "found": "2026-11-05",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-05T06:28:33-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "uw-madison-aoss-webcams",
   "name": "UW-Madison AOSS rooftop cameras (N/S/E/W/NW)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.aos.wisc.edu/weather/wx_obs/WebCam.html",
   "coverage": "AOSS building roof, Madison, Wisconsin, US",
   "country": "US",
   "stream_type": "Fixed stills at f5.aos.wisc.edu/webcam_movies/latest_{north,south,east,west,northwest}_1024x768.jpg (all 200 from box 2026-11-06, Last-Modified within the minute); also 15/60-min and sunrise-sunset MP4s; archive under metobs.ssec.wisc.edu/aoss/cameras/",
   "status": "live",
   "next_steps": "Courtesy note to AOSS / SSEC before enabling; then a tiny stills plugin.",
   "notes": "Five cardinal rooftop views from the Atmospheric and Oceanic Sciences building — strong sky/horizon set for the Upper Midwest and a natural pair with the already-live UW-Madison SSEC cams. robots.txt is empty. Terms unstated on the page; academic noncommercial reuse is likely fine for a donation-funded project but confirm with the department before going live. | 2026-11-10: live pending owner reply; takedown on request (readylive:aoss, 5 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "5",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 5,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:aoss",
   "last_update": "2026-11-10",
   "still_cameras": 5
  },
  {
   "id": "kao-koyama-allsky",
   "name": "Koyama Astronomical Observatory all-sky camera (Kyoto Sangyo University)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.cc.kyoto-su.ac.jp/~kao/skymon/skymon.html",
   "coverage": "Koyama Astronomical Observatory rooftop, Kyoto, Japan",
   "country": "JP",
   "stream_type": "Stable still https://www.cc.kyoto-su.ac.jp/~kao/skymon/skymon.jpg (200 image/jpeg, refreshed about every 5 minutes; Last-Modified matched page). Directory index of ~kao/skymon/ returns 403 (do not probe further).",
   "status": "live",
   "next_steps": "Outreach note to KAO (credit + non-profit wording).",
   "notes": "Long-running (since 2010) university all-sky with weather table on the same page. Good Japan-phase sky/aurora fill. Terms unstated; ask KAO for noncommercial credit before enabling. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:kao, 1 cams)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:kao"
  },
  {
   "id": "wsu-penrith-allsky",
   "name": "Western Sydney University Penrith Observatory all-sky camera",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.westernsydney.edu.au/penrith-observatory/all-sky-camera",
   "coverage": "Penrith Observatory, Western Sydney, NSW, AU",
   "country": "AU",
   "stream_type": "Page og:image points at http://spacescience.westernsydney.edu.au/observatory/AllSky/latest.jpg; HEAD http returned 500 and https returned 403 from the box (2026-11-06).",
   "status": "down",
   "next_steps": "",
   "notes": "AU-phase all-sky candidate. Image host is broken or blocking from our egress; retest later. Terms unstated.",
   "blockers": [
    "image host 500/403"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "umd-chikwauk-allsky",
   "name": "UMD / Chik-Wauk AllSky Camera (Gunflint Trail, Minnesota)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://scse.d.umn.edu/marshall-w-alworth-planetarium/asc",
   "coverage": "Chik-Wauk Museum and Nature Center, Gunflint Trail, Grand Marais, Minnesota, US",
   "country": "US",
   "stream_type": "Night-only Alcor OMEA all-sky (sunset-30 to sunrise+30); page has no plain still URL in HTML (Drupal). Archives and timelapse mentioned; Facebook page cwallskycam.",
   "status": "considered",
   "next_steps": "Browser trace or email the planetarium for a stable still.",
   "notes": "Excellent northern-Minnesota aurora site (dark skies). Needs a browser network trace or an ask to planet@d.umn.edu for a stable latest.jpg. Strong sky fit once the still path is known.",
   "blockers": [
    "still URL not in HTML"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "nz-metdata-mackinnon-pass",
   "name": "MetData Mackinnon Pass weather cam (Fiordland)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://metdata.net.nz/doc/mackinnon/cam1/image.php",
   "coverage": "Mackinnon Pass / Milford Track area, Fiordland, NZ",
   "country": "NZ",
   "stream_type": "Direct still image.php returns 200 image/jpeg (~327 KB) from the box; sibling cams linked from AOPA NZ SSI page (harris, kepler, stanne).",
   "status": "live",
   "next_steps": "Confirm operator contact and reuse terms; survey sibling MetData cams.",
   "notes": "Mountain-pass weather/horizon view useful for NZ sky and for trampers. Operator appears to be MetData.net.nz (private weather network). Terms unstated; treat as permission-needed. Listed via AOPA NZ webcam directory. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:mackinnon, 1 cams)",
   "blockers": [
    "terms unstated",
    "private network"
   ],
   "approx_cameras": "1+",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:mackinnon"
  },
  {
   "id": "cos-airport-east-ramp",
   "name": "Colorado Springs Airport (COS) East Ramp webcam",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://coloradosprings.gov/flycos/airport-webcam",
   "coverage": "Colorado Springs Airport, Colorado, US",
   "country": "US",
   "stream_type": "Official city portal still https://web3.coloradosprings.gov/airportalpublic/DestImg/COS_CAM_East_Ramp_c1.jpg (200 image/jpeg, Last-Modified live to the minute). Page says a new image about every five seconds. Only East Ramp exposed in the prerendered Blazor HTML (other guessed names 404).",
   "status": "live",
   "next_steps": "Courtesy note to FlyCOS / City of Colorado Springs.",
   "notes": "Airport-authority still that is also a decent Front Range sky/weather view. Dual-use for airports theme and sky. Terms unstated on the page; city open-data / noncommercial ask likely. robots.txt is AI-bot-heavy but does not call out this path specifically. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:cos, 1 cams)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:cos"
  },
  {
   "id": "painefield-snoco-webcam",
   "name": "Paine Field (PAE) / Snohomish County airport webcam",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.painefield.com/133/Webcam",
   "coverage": "Paine Field / Snohomish County Airport, Everett, Washington, US",
   "country": "US",
   "stream_type": "Official county page embeds Axis still https://www.snoco.org/axis-cgi/jpg/image.cgi?resolution=800x600 (200 image/jpeg from box). robots.txt does not Disallow /axis-cgi.",
   "status": "live",
   "next_steps": "",
   "notes": "Stable Axis JPEG from the county, not a YouTube embed. Good PNW airport + sky/weather candidate (Boeing field views). Terms unstated; ask Snohomish County / Paine Field before enabling. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:paine, 1 cams)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:paine"
  },
  {
   "id": "malta-airport-apron",
   "name": "Malta International Airport Apron 9 webcam",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://maltairport.com/webcam/",
   "coverage": "Apron 9, Malta International Airport (MLA), Luqa, MT",
   "country": "MT",
   "stream_type": "Official page uses WP ajax action webcam_images_action at https://maltairport.com/wp/wp-admin/admin-ajax.php (robots Allow for admin-ajax.php). POST returns ~10 dated JPEGs under /app/uploads/webcam_images/imageYY-MM-DD_HH-MM-SS-*.jpg (200, fresh). Filenames rotate; ajax is the stable entry.",
   "status": "viable",
   "next_steps": "Ask Malta Airport for noncommercial credit; then small ajax+stills plugin.",
   "notes": "Clean airport-authority stills with an open ajax list. Terms unstated; Mediterranean airport for later EU coverage. Plugin would poll ajax then pick newest storage_url. | 2026-11-10 ready-live: skipped, maltairport.com answers 403 (CloudFront block) to the prod IP; rotating file names",
   "blockers": [
    "terms unstated",
    "rotating filenames"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-10"
  },
  {
   "id": "queenstown-airport-aopa-stills",
   "name": "Queenstown Airport (ZQN) webcams via AOPA NZ stills",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.queenstownairport.co.nz/webcams-weather/",
   "coverage": "Queenstown Airport / Frankton, Otago, NZ",
   "country": "NZ",
   "stream_type": "Official ZQN page is JS-rendered (no image URLs in HTML). Fresh stills also published on AOPA NZ as https://public.aopa.nz/queenstown-{coronet,lake,remarks}.jpg?dt=latest (all 200, Last-Modified within minutes). Wanaka siblings wanaka-cardrona/hawea/tarras also 200.",
   "status": "viable",
   "next_steps": "Ask Queenstown Airport (and courtesy to AOPA NZ) for reuse.",
   "notes": "Best NZ airport find of the round: Remarkables / Coronet Peak / Lake Wakatipu backdrop, so airports + sky. Dedup note: aopa-nz-webcams already covers the directory; this row is the ZQN-specific set. Terms: AOPA NZ aggregates operator cams — confirm with Queenstown Airport Company before fetching from public.aopa.nz.",
   "blockers": [
    "confirm operator permission; AOPA is aggregator"
   ],
   "approx_cameras": "3+",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "nzti-te-anau-weathercams",
   "name": "Te Anau aerodrome cams (NZTI) via OnlyWeatherCams",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://view.onlyweathercams.com/engine/airports/NZTI/camera1.jpg",
   "coverage": "Te Anau Airport (NZTI), Fiordland, NZ",
   "country": "NZ",
   "stream_type": "camera1.jpg and camera2.jpg both 200 image/jpeg and fresh. Linked from the AOPA NZ SSI webcam page.",
   "status": "live",
   "next_steps": "",
   "notes": "Small NZ aerodrome stills useful for Fiordland weather. Vendor host onlyweathercams.com — permission and terms unknown. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:nzti, 1 cams)",
   "blockers": [
    "vendor host; terms unknown"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:nzti"
  },
  {
   "id": "nz-balfour-myairportcams",
   "name": "Balfour aerodrome cams via MyAirportCams",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://view.myairportcams.com/Balfour/showimagecamera1.php",
   "coverage": "Balfour, Southland, NZ",
   "country": "NZ",
   "stream_type": "showimagecamera{1,2,3}.php return 200 image/jpeg. Linked from AOPA NZ SSI.",
   "status": "live",
   "next_steps": "",
   "notes": "Another NZ aerodrome set on a vendor host (myairportcams.com). Permission needed per operator/vendor. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:balfour, 1 cams)",
   "blockers": [
    "vendor host; terms unknown"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:balfour"
  },
  {
   "id": "dus-airport-1000eyes",
   "name": "Düsseldorf Airport (DUS) apron/taxiway webcams (1000eyes)",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.dus.com/en/enjoy/webcams",
   "coverage": "Düsseldorf Airport, Germany",
   "country": "DE",
   "stream_type": "Official page embeds HLS from stream-5gw.1000eyes.de/cupertino/dus*.stream/playlist.m3u8 (five streams visible in HTML).",
   "status": "blocked",
   "next_steps": "",
   "notes": "Commercial 1000eyes vendor streams, not open stills. Same vendor family already treated as commercial elsewhere. File as discovery only unless DUS offers a noncommercial still.",
   "blockers": [
    "commercial 1000eyes HLS"
   ],
   "approx_cameras": "5",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "gdansk-airport-webcams",
   "name": "Gdańsk Lech Wałęsa Airport webcams",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.airport.gdansk.pl/en/airport/webcams",
   "coverage": "Gdańsk Airport (GDN), Poland",
   "country": "PL",
   "stream_type": "Official webcam page 200 but no m3u8/jpg endpoints in static HTML (JS app). Airport reserves right to disable cams.",
   "status": "considered",
   "next_steps": "Browser trace only; do not guess paths.",
   "notes": "Needs a browser network trace for the real stream/still URLs. Terms unstated.",
   "blockers": [
    "endpoints not in HTML"
   ],
   "approx_cameras": "2+",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "port-pa-clm-youtube",
   "name": "Port of Port Angeles / Fairchild (CLM) airport & harbour cams",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://portofpa.com/air/webcams/",
   "coverage": "William R. Fairchild Intl (CLM), John Wayne Marina, Port Angeles Harbor, Washington, US",
   "country": "US",
   "stream_type": "Official port page; all live views are YouTube livestream links (no direct still).",
   "status": "blocked",
   "next_steps": "",
   "notes": "YouTube-only, excluded by policy. Ask the Port for a direct still/HLS if wanted later.",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "5",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "pixelcaster-marblehead-lighthouse",
   "name": "Marblehead Lighthouse (Lake Erie) Pixelcaster still",
   "category": "lighthouses-harbours",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.shoresandislands.com/plan-your-visit/webcams/",
   "coverage": "Marblehead Lighthouse State Park, Lake Erie, Ohio, US",
   "country": "US",
   "stream_type": "Stable still https://cs1.pixelcaster.com/live/erie/lesi-lighthouse.jpg (200 image/jpeg ~143 KB, Last-Modified fresh, Access-Control-Allow-Origin *). Crane Creek and Clearwater Beach paths still unresolved (guessed cs1 paths 404). Huntington Beach city pier is YouTube now, not Pixelcaster.",
   "status": "live",
   "next_steps": "Bundle with Yosemite Conservancy / Pixelcaster outreach.",
   "notes": "Resolved from Round 12 Pixelcaster customer queue. Lake Erie lighthouse + weather/horizon view. Same per-customer permission model as Yosemite/Kalaloch; Shores & Islands Ohio promotes it. cs1 robots comments out Disallow /live/. | 2026-11-07: CDN snapshot alternative https://cdn.pixelcaster.com/public.pixelcaster.com/snapshots/lesi-lighthouse/latest_640x.jpg (portfolio). | 2026-11-09: live pending owner reply; takedown on request (pendinglive:marblehead, 1 cams)",
   "blockers": [
    "per-customer permission (Pixelcaster / ODNR / Shores & Islands)"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-07",
   "plugin": "pendinglive",
   "takedown": "pendinglive:marblehead"
  },
  {
   "id": "edinburgh-rzss-webcams",
   "name": "Edinburgh Zoo / RZSS live webcams (penguin, giraffe, lion, tiger, koala)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.edinburghzoo.org.uk/animals/webcams",
   "coverage": "Edinburgh Zoo, Scotland, UK",
   "country": "GB",
   "stream_type": "HTML exposes live.streamdays.com/<id> embeds for penguin (xb1u3eln), giraffe (mlhwz7bt), lion (2ej7o9e5), tiger (y4trtxbp); koala page had no streamdays link. Streamdays returned 403 from the box (do not bypass). YouTube channel also linked.",
   "status": "blocked",
   "next_steps": "Outreach to RZSS (non-profit project, credit).",
   "notes": "Official RZSS cams for UK-phase animals. Endpoints are discoverable in HTML (not pure JS-only) but the player host blocks our box and is a third-party embed. Ask RZSS for a direct HLS/still for noncommercial use.",
   "blockers": [
    "streamdays 403 from box",
    "third-party player"
   ],
   "approx_cameras": "5",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "africam-victoria-falls-lodge",
   "name": "Africam / Victoria Falls Safari Lodge waterhole cam",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://africam.com/lodge/victoria-falls-safari-lodge/",
   "coverage": "Victoria Falls Safari Lodge waterhole, Zimbabwe",
   "country": "ZW",
   "stream_type": "Lodge page is Africam YouTube/player embeds plus S3 highlight thumbnails; not a direct falls view.",
   "status": "viable",
   "next_steps": "Covered by africam-youtube / yt_wildlife (Hwange and other ZA/ZW waterholes). Victoria Falls Safari Lodge specifically may rotate on the channel.",
   "notes": "2026-11-09: Africam YouTube embeds now allowed as official embeds (HANDSHAKE). Broader Africam set staged. | 2026-11-10: Africam set is LIVE as africam-youtube (30 embeds, incl. 3 ZW: Deteema Springs, The Hide, Linkwasha); Victoria Falls Safari Lodge's own cam is not among today's channel streams, so this row stays viable.",
   "blockers": [],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": "au-za",
   "last_audit": "2026-11-09T03:48:29-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-10"
  },
  {
   "id": "victoria-iguazu-kaieteur-survey",
   "name": "Victoria Falls / Iguazu / Kaieteur waterfall cam survey",
   "category": "waterfalls",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://victoria-falls-safari-collection.com/en-US/webcam",
   "coverage": "Zimbabwe/Zambia, Argentina/Brazil, Guyana",
   "country": "",
   "stream_type": "Victoria Falls Safari Collection webcam page is YouTube (@victoriafallssafarilodge) / Africam waterhole, not the falls. Iguazu Parque Nacional live is YouTube-only (Parque Nacional Iguazú Oficial, Aug 2026). Kaieteur: no live cam found on kaieteurfalls.com (access by air only).",
   "status": "blocked",
   "next_steps": "",
   "notes": "Queued Round 12 waterfall thread closed for these three: no open operator still/HLS for the falls themselves.",
   "blockers": [
    "YouTube/player only or no cam"
   ],
   "approx_cameras": "0",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "paterson-great-falls-earthcam",
   "name": "Paterson Great Falls NHP webcam (EarthCam)",
   "category": "waterfalls",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.nps.gov/pagr/learn/photosmultimedia/webcams.htm",
   "coverage": "Paterson Great Falls National Historical Park, New Jersey, US",
   "country": "US",
   "stream_type": "NPS page links to EarthCam (earthcam.com/usa/newjersey/paterson/). No NPS-hosted still.",
   "status": "blocked",
   "next_steps": "",
   "notes": "EarthCam commercial feed. NPS itself does not publish a fetchable still. Same pattern as Niagara.",
   "blockers": [
    "EarthCam commercial"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "yorku-physics-sky-camera",
   "name": "York University Physics sky camera page",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.yorku.ca/science/physics/observatory/sky-camera/",
   "coverage": "York University, Toronto, Ontario, CA",
   "country": "CA",
   "stream_type": "Page 200 but HTML has no img/still/stream URL (GTM only). Endpoint unknown without a browser trace.",
   "status": "considered",
   "next_steps": "Browser trace or email York Physics.",
   "notes": "Canada-gap university sky candidate. Needs browser trace or a department ask for the image URL.",
   "blockers": [
    "endpoint not in HTML"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261106",
   "found": "2026-11-06",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-06T06:12:05-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "uit-tromso-allsky",
   "name": "UiT Tromsø all-sky camera (ASC01)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://site.uit.no/spaceweather/2015/01/13/all-sky-camera/",
   "coverage": "Ramfjordmoen / Tromsø, Norway",
   "country": "NO",
   "stream_type": "Stable still https://fox.phys.uit.no/ASC/Latest_ASC01.png (200 image/png, Last-Modified within the minute on 2026-11-07). Found by reading the source list of Borealis Monitor (similar project).",
   "status": "live",
   "next_steps": "Courtesy note to UiT; then a stills plugin (same shape as kho/irf).",
   "notes": "University auroral-zone all-sky right under the oval; complements kho-svalbard-allsky and irf-kiruna-allsky. Terms unstated; academic, ask UiT Space Physics for noncommercial credit. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:uit, 1 cams)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:uit"
  },
  {
   "id": "anu-mt-stromlo-skycam",
   "name": "ANU Mount Stromlo sky cameras (fish-eye + panorama)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://rsaa.anu.edu.au/observers/mt-stromlo-fish-eye-camera",
   "coverage": "Mount Stromlo Observatory, Canberra, ACT, AU",
   "country": "AU",
   "stream_type": "Stills https://www.mso.anu.edu.au/msoallsky/msoskycam.jpg and /msoallsky/panorama.jpg (both 200, Last-Modified within the minute); also ~brad/brightsky/reynolds/latest.jpg + latest.mp4 (west view / nightly movie).",
   "status": "live",
   "next_steps": "Ask ANU RSAA; Siding Spring retest later.",
   "notes": "Best AU-phase sky find this round: fresh all-sky + horizon panorama from ANU. Pairs with the down WSU Penrith row. Terms unstated; ask RSAA. Siding Spring 'last hour' page (aat-ops.anu.edu.au) returned 500 from the box. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:stromlo, 1 cams)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "2-4",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:stromlo"
  },
  {
   "id": "lee-stream-allsky",
   "name": "Lee Stream Observatory all-sky camera (Otago)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://grant.co.nz/",
   "coverage": "Lee Stream, Otago, NZ",
   "country": "NZ",
   "stream_type": "Still https://grant.co.nz/allsky/image.jpg (200 image/jpeg, no Last-Modified header). Private dark-sky observatory with cloud/weather data.",
   "status": "live",
   "next_steps": "",
   "notes": "NZ-phase aurora australis candidate near Dunedin. Private hobby site, so permission needed. Otago University auroraalert.otago.ac.nz/quicklooks/ also lists Dunedin/Swampy Summit/Halfway Bush/Scott Base folders (daily PNG quicklooks, not live stills) - lead only. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:leestream, 1 cams)",
   "blockers": [
    "private operator; ask"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:leestream"
  },
  {
   "id": "whitehorse-jacquin-allsky",
   "name": "Thomas Jacquin AllSky camera, Whitehorse (Yukon)",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.thomasjacquin.com/allsky/",
   "coverage": "Whitehorse, Yukon, CA",
   "country": "CA",
   "stream_type": "Still https://www.thomasjacquin.com/allsky/image.jpg (200, Last-Modified 2026-11-04 - stale 3 days; may pause on cloud/daylight). Author of the open-source AllSky software used by allsky-map-network.",
   "status": "considered",
   "next_steps": "",
   "notes": "Canada-gap aurora cam from the AllSky software author. Private; ask before use. Recheck freshness next round.",
   "blockers": [
    "private operator",
    "stale 3 days"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "proba2-swap-latest",
   "name": "PROBA2 SWAP latest EUV image (ROB / SIDC)",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://proba2.sidc.be/data/SWAP",
   "coverage": "Sun (174 Å EUV), ESA PROBA2",
   "country": "BE",
   "stream_type": "Stable still https://proba2.sidc.be/swap/data/qlviewer/SWAPlatestHighQuality.jpg (200, ~620 KB, Last-Modified 2026-11-07 14:05 UTC).",
   "status": "live",
   "next_steps": "",
   "notes": "Wide-field solar corona view that complements sdo-nrt-movies / goes-suvi. ESA/ROB science data with acknowledgement wording on the data page (no explicit licence found in a single read); credit 'PROBA2/SWAP, ROB' like other ESA data. | LIVE 2026-11-07: sky plugin sun instance, id sky-proba2-swap (The Sun list), 30 min cadence; acknowledgement per proba2.sidc.be/data/termsOfUse on credits.",
   "blockers": [],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-07T14:58:45-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "sky"
  },
  {
   "id": "kso-halpha-latest",
   "name": "Kanzelhöhe Observatory H-alpha full disk (Uni Graz)",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://cesar.kso.ac.at/main/last_Ha.php",
   "coverage": "Kanzelhöhe Observatory, Carinthia, AT",
   "country": "AT",
   "stream_type": "Still https://cesar.kso.ac.at/halpha3s/JPEG/recent/last.jpg (200, Last-Modified 2026-11-07 05:55 UTC; daylight/dome-open only).",
   "status": "blocked",
   "next_steps": "Ask KSO (Uni Graz) for permission / a robots exception before building.",
   "notes": "Second ground H-alpha sun view alongside gong-halpha. Terms unstated; ask KSO. Daytime-only Europe hours. | 2026-11-10: NOT built in the stills batch: robots.txt on cesar.kso.ac.at (and www.kso.ac.at) disallows everything except *.php, so the halpha3s/JPEG/recent/last.jpg still is off limits for an automated poller.",
   "blockers": [
    "robots.txt disallows the image (cesar.kso.ac.at: 'User-Agent: * Disallow: /', only *.php allowed)",
    "terms unstated",
    "daylight only"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-10T05:58:00-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-10"
  },
  {
   "id": "usap-antarctic-webcams",
   "name": "US Antarctic Program station webcams (McMurdo, South Pole, Palmer)",
   "category": "horizon-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.usap.gov/videoclipsandmaps/mcmwebcam.cfm",
   "coverage": "McMurdo (Arrival Heights, Bore Site, AIMS, mobile), Amundsen-Scott South Pole, Palmer Station, Antarctica",
   "country": "AQ",
   "stream_type": "Page JS (webcams.js) calls /components/webcams.cfc?method=outputCurrentCamImage&cameraLocation=McMurdo&camera=arrivalHeights -> filename (e.g. McM00035.jpg); image at https://www.usap.gov/videoclipsandmaps/SouthPoleWebcam/<file> (200, Last-Modified within the minute). Refresh 30 s per page config. spWebCam.cfm / palWebCam.cfm use the same component.",
   "status": "viable",
   "next_steps": "Plugin proposal: usap cfc+still fetch; credit NSF USAP.",
   "notes": "NSF/USAP federal site - Antarctic sky/horizon (polar night aurora australis from Arrival Heights and South Pole) and ice-shelf views, also counts for the glaciers & icefields theme. US-government work is generally public domain; credit NSF/USAP. Plugin needs a 2-step fetch (cfc -> filename). | 2026-11-07: NOT put live - usap.gov robots.txt disallows /components/ (webcams.cfc), the images rotate through numbered files, no fixed latest URL found. Outreach draft usap-webcams (websupport@usap.gov) asks for a latest URL or OK.",
   "blockers": [
    "robots.txt Disallow: /components/ covers webcams.cfc (filename step)",
    "2-step fetch"
   ],
   "approx_cameras": "6+",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-07T14:58:45-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "umanitoba-glenlea-allsky",
   "name": "University of Manitoba Glenlea Live Allsky Portal",
   "category": "aurora",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://astro.physics.umanitoba.ca/",
   "coverage": "Glenlea Astronomical Observatory, south of Winnipeg, Manitoba, CA",
   "country": "CA",
   "stream_type": "Page shows allsky.physics.umanitoba.ca/outdoor.png and indoor.png; outdoor.png is a 3 KB placeholder Last-Modified 2021-12-27. SQM plots under /sqm/ return 500. Sky camera marked 'coming soon'.",
   "status": "down",
   "next_steps": "",
   "notes": "Local (Winnipeg) university sky site worth watching; nothing live yet.",
   "blockers": [
    "placeholder image since 2021"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "nws-maf-towercam",
   "name": "NWS Midland (MAF) tower cam",
   "category": "storms",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.weather.gov/maf/towercam",
   "coverage": "NWS WFO Midland, Texas, US",
   "country": "US",
   "stream_type": "Page's 'latest 5-minute image' link /images/maf/towercam/full_towercam00015.jpg returns 200 but Last-Modified 2021-06-13 (frozen); HAniS loop config at /source/maf/hanis/towercam_config.txt.",
   "status": "down",
   "next_steps": "",
   "notes": "West Texas storm/sky view from a federal office would be ideal (public domain) but the image is frozen since 2021. Recheck later.",
   "blockers": [
    "frozen since 2021"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "usgs-hivis-glacier-cams",
   "name": "USGS HIVIS glacier cameras (Kahiltna, Wolverine, Lemon Creek, Mendenhall / Suicide Basin)",
   "category": "glaciers-icefields",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://apps.usgs.gov/hivis/?lat=58.4256&lng=-134.5441&text=Mendenhall&zoom=12",
   "coverage": "Alaska Range (Kahiltna Glacier from Mt Foraker SE ridge), Kenai (Wolverine Glacier), Juneau Icefield (Lemon Creek, Mendenhall/Suicide Basin), Girdwood, AK, US",
   "country": "US",
   "stream_type": "From the HIVIS camera list (see usgs-hivis-nims): newest stills at https://usgs-nims-images.s3.amazonaws.com/{overlay|720|thumbnail}/<camId>/<camId>_newest.jpg. Fresh 2026-11-07: AK_Kahiltna_Glacier_from_the_southeast_ridge_of_Mount_Foraker, AK_Wolverine_Glacier_24_MI_NE_of_Seward, AK_Lemon_Creek_Glacier_Met_Station_nr_Juneau, AK_Glacier_Creek_at_Alyeska_Highway_at_Girdwood; Suicide Basin / glacial-lake views seasonal (last Oct). AK_Wolverine_Glacier_Terminus is hidden (2012).",
   "status": "live",
   "next_steps": "Include in usgs-hivis plugin proposal (filter glacier camIds).",
   "notes": "Top glaciers-theme find: federal USGS images (public domain, credit USGS), stable _newest.jpg, real glacier/icefield views including Denali-area Kahiltna. Same plugin as usgs-hivis-nims, filtered. | LIVE 2026-11-07 via usgs_hivis; Glaciers & icefields theme list (themelists.is_glacier, hidden while empty).",
   "blockers": [],
   "approx_cameras": "6-10",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-07T14:58:45-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "usgs_hivis"
  },
  {
   "id": "eth-vaw-glamos-glacier-cams",
   "name": "ETH Zürich VAW / GLAMOS glacier cameras (Rhone, Aletsch, Gries, Silvretta)",
   "category": "glaciers-icefields",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://people.ee.ethz.ch/~glacier/acam.html",
   "coverage": "Rhonegletscher, Grosser Aletschgletscher, Griesgletscher, Silvrettagletscher, Claridenfirn, CH",
   "country": "CH",
   "stream_type": "Stills under https://people.ee.ethz.ch/~glacier/images/<cam>.jpg (remaba2/4/6/8/10, doerr1/3/4). doerr4 (Rhone RC1) 200 Last-Modified 2026-11-07 10:03 UTC; remaba8 (Rhone RC2) last 2026-10-20. http:// variant returned 500, https works.",
   "status": "live",
   "next_steps": "",
   "notes": "Research glacier-monitoring cams from the Swiss glacier monitoring network (GLAMOS). Daily-ish refresh, some seasonal. Terms unstated; ask VAW glaciology. Europe, so later phase. | 2026-11-10: live pending owner reply; takedown on request (readylive:glamos, 7 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); 7 fresh cams (incl. Findelen remaba7, Vadret Pers remaba9); remaba2 (May 2026) and remaba8 (2026-10-20) stale, remaba4 404: left out",
   "blockers": [
    "terms unstated",
    "some cams seasonal"
   ],
   "approx_cameras": "8",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 7,
   "video_cameras": 0,
   "plugin": "readylive",
   "takedown": "readylive:glamos",
   "last_update": "2026-11-10",
   "still_cameras": 7
  },
  {
   "id": "snowgrass-franz-josef-fox-glacier",
   "name": "Franz Josef & Fox Glacier cams (Snowgrass Solutions / Glacier Guides / DOC)",
   "category": "glaciers-icefields",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://snowgrass.nz/franz/",
   "coverage": "Franz Josef / Kā Roimata o Hine Hukatere and Fox / Te Moeka o Tuawe glaciers, Westland Tai Poutini NP, NZ",
   "country": "NZ",
   "stream_type": "Franz Josef stills https://snowgrass.nz/cust/franz/images/cam1..cam9.jpg (cam1 200, ~250 KB, last 05:01 UTC = NZ evening; daylight only). Fox: https://snowgrass.nz/cust/fox_glacier/images/webcam.jpg, webcam_zm.jpg, webcam_vf1..3.jpg (Victoria Flats high camera) - 200 and fresh today. robots.txt 404.",
   "status": "live",
   "next_steps": "Outreach to Snowgrass Solutions / Franz Josef Glacier Guides.",
   "notes": "Best NZ glacier set: 9 Franz Josef + 5 Fox views, helicopter-access cliff cams. Vendor Snowgrass Solutions hosts for Franz Josef Glacier Guides with DOC logos. Ask Snowgrass / Glacier Guides (and DOC courtesy). | 2026-11-09: live pending owner reply; takedown on request (pendinglive:snowgrass, 10 cams)",
   "blockers": [
    "terms unstated; operator = Glacier Guides + DOC"
   ],
   "approx_cameras": "14",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:snowgrass"
  },
  {
   "id": "akwx-juneau-icefield-cams",
   "name": "AKWX Juneau Ice Field Cameras",
   "category": "glaciers-icefields",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://akwxcams.com/",
   "coverage": "Juneau Icefield, Alaska, US",
   "country": "US",
   "stream_type": "Site shows 'Closed for the season - cameras taken offline for the winter; archives and account access unavailable'.",
   "status": "off",
   "next_steps": "",
   "notes": "Seasonal private network on the Juneau Icefield. Recheck in spring 2027; permission needed (account-based).",
   "blockers": [
    "seasonal (winter closure)",
    "private"
   ],
   "approx_cameras": null,
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "pursuit-columbia-icefield-cams",
   "name": "Pursuit Columbia Icefield / Glacier Skywalk webcams",
   "category": "glaciers-icefields",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.banffjaspercollection.com/attractions/columbia-icefield/",
   "coverage": "Columbia Icefield / Athabasca Glacier, Jasper NP, Alberta, CA",
   "country": "CA",
   "stream_type": "Operator Pursuit takes both cams out of service in winter (attraction closed until May 2027). Third-party listings point at Skaping (commercial panorama vendor).",
   "status": "considered",
   "next_steps": "",
   "notes": "Canada glacier icon. Commercial tour operator + Skaping vendor; likely blocked for reuse. Parks Canada has no own cam here. Recheck in May 2027.",
   "blockers": [
    "seasonal",
    "commercial operator / Skaping"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "mendenhall-glacier-explore",
   "name": "Mendenhall Glacier & mountain goat cam (explore.org / Tongass NF)",
   "category": "glaciers-icefields",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://explore.org/livecams",
   "coverage": "Mendenhall Glacier Recreation Area, Juneau, Alaska, US",
   "country": "US",
   "stream_type": "explore.org PTZ cam distributed via YouTube.",
   "status": "blocked",
   "next_steps": "",
   "notes": "YouTube-only by policy. USGS HIVIS covers Mendenhall/Suicide Basin with stills instead.",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "jokulsarlon-skyline",
   "name": "Jökulsárlón glacier lagoon webcam (Vatnajökull NP links SkylineWebcams)",
   "category": "glaciers-icefields",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.vatnajokulsthjodgardur.is/en/vatnajokull-national-park/webcams",
   "coverage": "Jökulsárlón, Vatnajökull NP, Iceland",
   "country": "IS",
   "stream_type": "National park webcam page links SkylineWebcams (commercial) and the Icelandic glacier portal islenskirjoklar.is.",
   "status": "blocked",
   "next_steps": "",
   "notes": "Commercial vendor. Icelandic road cams in is-vegagerdin may already cover the Jökulsárlón bridge area - check next round.",
   "blockers": [
    "SkylineWebcams commercial"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "vuw-southern-alps-glacier-timelapse",
   "name": "VUW Antarctic Research Centre glacier time-lapse cameras (Tasman, Franz Josef)",
   "category": "glaciers-icefields",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.wgtn.ac.nz/antarctic/research/glacial-modelling/glacier-monitoring",
   "coverage": "Haupapa/Tasman and Franz Josef glaciers, NZ",
   "country": "NZ",
   "stream_type": "Hourly research time-lapse cameras at four glaciers; only example stills on the page, no live endpoint.",
   "status": "considered",
   "next_steps": "",
   "notes": "Research archive, not live. Ask VUW only if they publish a latest image.",
   "blockers": [
    "no live endpoint"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "usgs-hivis-nims",
   "name": "USGS HIVIS river & stream cameras (NIMS, nationwide)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://apps.usgs.gov/hivis/",
   "coverage": "USA-wide streamgage cameras (WI 278, NY 147, MN 88, TX/AK/CO 65, CA 58, NJ 58, ... plus HI, PR, GU)",
   "country": "US",
   "stream_type": "Public JSON list https://api.waterdata.usgs.gov/nims/v0/cameras?enabled=true returned 200 with 1416 cameras WITHOUT any key (one GET, 2026-11-07); 1178 not hidden, ~817 with an image in the last 6 h. Each row has camId, lat/lng, tz, newestImageDT and S3 dirs; still = https://usgs-nims-images.s3.amazonaws.com/720/<camId>/<camId>_newest.jpg (200, fresh to the 15-min interval). Also overlay/thumbnail/timelapse dirs. NOTE: the HIVIS front-end bundle embeds its own api.data.gov key - we did NOT use it.",
   "status": "live",
   "next_steps": "Plugin proposal: usgs-hivis (list once/hour, stills per cam); Jon decides on own api.data.gov key.",
   "notes": "Biggest find of the round: ~1,200 federal river/stream cameras with coordinates, many showing open sky, floods and storms (good storm/flood companion for the sky tier). USGS imagery is public domain; credit 'USGS HIVIS'. Fits the map + Live stills playlists directly. If rate limits bite, request our own free api.data.gov key (Jon's decision - not signed up). | LIVE 2026-11-07: plugin usgs_hivis (list once an hour, no key; hideCam and images > 6 h old skipped, listed cams kept to 48 h), map pins + Live stills (feed_type weathercam), credit USGS HIVIS.",
   "blockers": [],
   "approx_cameras": "1178",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-07T14:58:45-06:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "usgs_hivis"
  },
  {
   "id": "eryri-np-webcams",
   "name": "Eryri (Snowdonia) National Park Authority webcams",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://eryri.gov.wales/discover/webcams/",
   "coverage": "Llyn Tegid (Bala) and park HQ area, Eryri NP, Wales, UK",
   "country": "GB",
   "stream_type": "Stills https://eryri.gov.wales/cam-images/llyntegidcam.jpg and /cam-images/webcam1.jpg (both 200, Last-Modified within 5 minutes).",
   "status": "live",
   "next_steps": "",
   "notes": "Official UK national park authority stills, lake + mountain sky. Terms unstated (public body; ask, OGL possible). UK phase. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:eryri, 1 cams)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:eryri"
  },
  {
   "id": "lake-district-camsecure",
   "name": "Lake District National Park live webcams (CamSecure hosted)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://lakedistrict.gov.uk/explore/webcams-videos-and-photos/live-webcams/",
   "coverage": "Coniston and other Lake District NP sites, Cumbria, UK",
   "country": "GB",
   "stream_type": "Park page links camsecure.uk/httpswebcam/lakedistrict/ldconiston.html which plays HLS https://camsecure.uk/HLS/ldconiston.m3u8 (200, live segments). Other sites likely follow /HLS/ld<name>.m3u8 (not guessed).",
   "status": "live",
   "next_steps": "Read the park page list for all ld* names (no guessing); ask LDNPA.",
   "notes": "Official UK NP authority via UK webcam host CamSecure (vendor lead: camsecure.co.uk hosts many UK council/harbour cams). Needs park + vendor permission. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:lakedistrict, 1 cams)",
   "blockers": [
    "vendor-hosted; terms unstated"
   ],
   "approx_cameras": "1+",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:lakedistrict"
  },
  {
   "id": "algonquin-park-webcam",
   "name": "Algonquin Park Visitor Centre webcam (Friends of Algonquin Park)",
   "category": "nature",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://algonquinpark.on.ca/virtual/webcam/index.php",
   "coverage": "Algonquin Provincial Park Visitor Centre deck, Ontario, CA",
   "country": "CA",
   "stream_type": "CamStreamer embed (camstreamer.com/embed/<token>); also a wild-bird cam page. No direct still/HLS in HTML.",
   "status": "considered",
   "next_steps": "",
   "notes": "Canada-gap park + sky/boreal view, 4K with DVR. Player is a third-party embed; ask Friends of Algonquin for a still/HLS. | 2026-11-09: Wild Bird Cam offline until mid-December 2026 per search snippet.",
   "blockers": [
    "CamStreamer embed only"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-09"
  },
  {
   "id": "fonwr-pixelcaster-cams",
   "name": "Friends of Ottawa NWR cams (Lake Erie overlook N/S, barn owl nest) - Pixelcaster",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.friendsofottawanwr.org/live-cameras.html",
   "coverage": "Ottawa National Wildlife Refuge, Oak Harbor, Ohio, US",
   "country": "US",
   "stream_type": "HLS https://cs9.pixelcaster.com/live/fonwr-overlook-north.stream/playlist.m3u8 (200, 2688x1520) and fonwr-overlook-south; barn owl via pixelcaster.com/live/fonwr/barnowl-fonwr.html. Overlook view has an active bald-eagle nest and beaver lodge.",
   "status": "live",
   "next_steps": "",
   "notes": "Wildlife (eagles, waterfowl, pelicans) + Lake Erie marsh sky. Pixelcaster customer, so bundle into the Pixelcaster/Yosemite permission ask (Friends group + USFWS refuge). | 2026-11-09: live pending owner reply; takedown on request (pendinglive:fonwr, 2 cams)",
   "blockers": [
    "per-customer permission (Pixelcaster / FONWR)"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:fonwr"
  },
  {
   "id": "pixelcaster-crane-creek",
   "name": "Crane Creek (Lake Erie) Pixelcaster still",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://cdn.pixelcaster.com/public.pixelcaster.com/snapshots/lesi-crane-creek/latest_640x.jpg",
   "coverage": "Crane Creek / Magee Marsh area, Lake Erie, Ohio, US",
   "country": "US",
   "stream_type": "Resolved via Pixelcaster portfolio: https://cdn.pixelcaster.com/public.pixelcaster.com/snapshots/lesi-crane-creek/latest_640x.jpg (200, Last-Modified within the minute).",
   "status": "live",
   "next_steps": "",
   "notes": "Lake Erie shoreline/sky view (spring warbler migration hotspot). Same customer as Marblehead (Shores & Islands Ohio). | 2026-11-09: live pending owner reply; takedown on request (pendinglive:cranecreek, 1 cams)",
   "blockers": [
    "per-customer permission"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:cranecreek"
  },
  {
   "id": "pixelcaster-clearwater-beach",
   "name": "Clearwater Beach (Wyndham Grand) Pixelcaster still",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.beachtourism.com/pier.htm",
   "coverage": "Clearwater Beach / Pier 60, Florida, US",
   "country": "US",
   "stream_type": "Resolved via Pixelcaster portfolio: https://cdn.pixelcaster.com/public.pixelcaster.com/snapshots/wyndham-grand-clearwater/latest_640x.jpg (200, fresh).",
   "status": "live",
   "next_steps": "",
   "notes": "Gulf sunset/beach sky view, but customer is a hotel (Wyndham Grand) - commercial owner, so lower priority; also a beaches/surf theme lead. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:clearwater, 1 cams)",
   "blockers": [
    "hotel-owned; permission"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:clearwater"
  },
  {
   "id": "mtu-webcams",
   "name": "Michigan Tech webcams (peregrine falcon nest, Keweenaw Waterway, lift bridge, campus aerial)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.mtu.edu/webcams/",
   "coverage": "Houghton, Michigan (Keweenaw / Lake Superior), US",
   "country": "US",
   "stream_type": "~18 cached stills at https://www.mtu.edu/mtu_resources/php/webcams/cache/<name>.jpg (peregrine-falcon, keweenaw-waterway-east/west-via-glrc, lift-bridge, campus-aerial, mont-ripley ... all 200, Last-Modified within the minute). robots.txt Disallows /mtu_resources/php/.",
   "status": "considered",
   "next_steps": "",
   "notes": "Falcon nest (animals) plus Keweenaw/Lake Superior sky views. robots.txt disallows the cache path, so permission first (ask MTU University Marketing).",
   "blockers": [
    "robots.txt disallows cache path"
   ],
   "approx_cameras": "18",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "ntu-falcon-cams",
   "name": "Nottingham Trent University peregrine falcon cams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://services.ntu.ac.uk/live/falcons/",
   "coverage": "Newton Building, Nottingham, England, UK",
   "country": "GB",
   "stream_type": "Direct HLS https://video.ntu.ac.uk/falconcam1/camera.stream/playlist.m3u8 and /falconcam2/camera2.stream/playlist.m3u8 (200 application/vnd.apple.mpegurl). 360 cam with sound.",
   "status": "viable",
   "next_steps": "",
   "notes": "UK-phase animals: university-hosted open HLS (not YouTube). Ask NTU for noncommercial credit. Nesting season Mar-Jun. | 2026-11-10 ready-live: skipped, video.ntu.ac.uk still unreachable from prod",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-10"
  },
  {
   "id": "orokonui-ecosanctuary-cams",
   "name": "Orokonui Ecosanctuary live cams (Valley cam, Kākā cam)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://orokonui.nz/orokonui-live-cams/",
   "coverage": "Orokonui Ecosanctuary, Dunedin, NZ",
   "country": "NZ",
   "stream_type": "YouTube embeds only.",
   "status": "blocked",
   "next_steps": "",
   "notes": "NZ animals; YouTube-only by policy. Ask for a still if wanted.",
   "blockers": [
    "YouTube-only"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "raptor-resource-decorah",
   "name": "Raptor Resource Project nest cams (Decorah eagles etc.)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.raptorresource.org/birdcams/decorah-eagles/",
   "coverage": "Decorah, Iowa and Upper Mississippi flyway, US",
   "country": "US",
   "stream_type": "Legacy stream page raptorresource.org/raptorresource/falcon_cams/decorah_eagle_xcel.html returned 403 to the box (not bypassed). Public cams are distributed via explore.org/YouTube.",
   "status": "blocked",
   "next_steps": "",
   "notes": "Famous US nest cams; YouTube/explore only, 403 on own page. Ask RRP only if they offer a still.",
   "blockers": [
    "403 from box",
    "YouTube/explore"
   ],
   "approx_cameras": "5+",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "shetland-webcams-sumburgh",
   "name": "Shetland Webcams (Sumburgh Airport runways, Lerwick harbour, cliffs)",
   "category": "airports",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.shetlandwebcams.com/webcams/",
   "coverage": "Sumburgh Airport and Shetland sites, Scotland, UK",
   "country": "GB",
   "stream_type": "Site uses a licensed web player (licence key in page JS) and DatoCMS thumbnails; no open still/HLS in HTML. Has a Terms & Conditions page.",
   "status": "considered",
   "next_steps": "",
   "notes": "UK airport thread: Sumburgh runway cams + subarctic sky (aurora at times). Player is licensed; permission needed. HIAL official site lists no webcams.",
   "blockers": [
    "licensed player; T&C"
   ],
   "approx_cameras": "10+",
   "origin": "deepdive-20261107",
   "found": "2026-11-07",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-07T06:11:33-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "apo-omea-allsky",
   "name": "Apache Point Observatory Omea all-sky camera (NMSU)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.apo.nmsu.edu/mainpage/allskycamera/",
   "coverage": "Apache Point Observatory, Sunspot, New Mexico, US",
   "country": "US",
   "stream_type": "Stills https://www.apo.nmsu.edu/media/skywatcher/result_thumb.png and animated pillow_imagedraw.gif (both 200, Last-Modified within the minute 2026-11-08 14:06 UTC); daily 24 h webm archive.",
   "status": "live",
   "next_steps": "Courtesy ask to APO; fixed-still plugin.",
   "notes": "Research-observatory all-sky with day/night sky; APO has a /mainpage/mediapolicy/ page (no reuse wording found in one read). Ask APO for noncommercial credit. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:apo, 1 cams)",
   "blockers": [
    "terms unclear; ask"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:apo"
  },
  {
   "id": "mcdonald-neos360-pano",
   "name": "McDonald Observatory NEOS-360 live panorama (UT Austin)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://mcdonaldobservatory.org/live-cameras/",
   "coverage": "Mount Locke, Davis Mountains, Texas, US",
   "country": "US",
   "stream_type": "Hourly 360-degree 450 MP panorama by Apical NEOS-360; latest flat still https://live.neos360.com/MCD/VisitorCenter/img/latest/pano_PV.jpg (200, Last-Modified 2026-11-08 13:35 UTC) + pano_thumb.jpg; krpano viewer.",
   "status": "live",
   "next_steps": "Ask McDonald; check other NEOS-360 customers as a vendor lead.",
   "notes": "Dark-sky horizon + full-sky panorama (Milky Way at night). Vendor-hosted (neos360.com), so ask McDonald Observatory. Old UT locke-n-view.jpg now returns an HTML page. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:mcdonald, 1 cams)",
   "blockers": [
    "ask observatory; vendor host"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:mcdonald"
  },
  {
   "id": "mt-lemmon-skycenter-allsky",
   "name": "Mt. Lemmon SkyCenter all-sky camera (Univ. of Arizona / Catalina Sky Survey)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://neofixer.arizona.edu/css/lemmon/",
   "coverage": "Mount Lemmon, Santa Catalina Mountains, Arizona, US",
   "country": "US",
   "stream_type": "Stills https://neofixer.arizona.edu/css/lemmon/allsky.jpg and unwrap.jpg (panorama) (both 200, Last-Modified 2026-11-08 14:06 UTC); movie.gif + wind plots.",
   "status": "live",
   "next_steps": "Ask UA SkyCenter.",
   "notes": "Fresh all-sky + unwrapped horizon from a public-outreach observatory. Terms unstated; ask UA SkyCenter / CSS. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:lemmon, 1 cams)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:lemmon"
  },
  {
   "id": "smu-burke-gaffney-cams",
   "name": "Burke-Gaffney Observatory cameras (Saint Mary's University, Halifax)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://observatory.smu.ca/bgo-weather-and-sky-info/bgo-cameras",
   "coverage": "Halifax, Nova Scotia, CA",
   "country": "CA",
   "stream_type": "Stills https://observatory.smu.ca/~bgo/sm/webcamimage.php?image=1..4 (northwest cam, all-sky, dome; 200 image/jpeg, no Last-Modified). All-sky updates every 15 s at night only.",
   "status": "live",
   "next_steps": "Ask SMU BGO.",
   "notes": "Canada-gap find (Nova Scotia had no sky cam). University outreach observatory; ask SMU. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:bgo, 4 cams)",
   "blockers": [
    "terms unstated",
    "all-sky night only"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:bgo"
  },
  {
   "id": "rao-ucalgary-skywatch",
   "name": "Rothney Astrophysical Observatory SkyWatch all-sky (Univ. of Calgary)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://cam01.sci.ucalgary.ca/RAOSkyWatch/cameras.html",
   "coverage": "Foothills County near Calgary, Alberta, CA",
   "country": "CA",
   "stream_type": "JSF/PrimeFaces page; latest image is inlined as base64 in the HTML (no stable image URL), updated every minute; aurora visible at times.",
   "status": "considered",
   "next_steps": "",
   "notes": "Good southern-Alberta all-sky but no clean endpoint; would need an image URL from UCalgary. Ask RAO.",
   "blockers": [
    "no stable image URL"
   ],
   "approx_cameras": "2+",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "omm-megantic-allsky",
   "name": "Observatoire du Mont-Mégantic all-sky camera (OMM / Sépaq)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://omm-astro.ca/en/the-observatory/catwalk-cameras/allsky-camera/",
   "coverage": "Mont-Mégantic Dark Sky Reserve, Quebec, CA",
   "country": "CA",
   "stream_type": "omm-astro.ca TLS error from box and no connection from prod; Sépaq webcam page 403 to the box (not bypassed). Search snippet shows sample frames from 2025-04.",
   "status": "considered",
   "next_steps": "",
   "notes": "First International Dark Sky Reserve; Quebec gap. Retest later; ask OMM if it stays unreachable. | 2026-11-09: Sépaq webcam pages (jac, mme) still 403 to box (not bypassed); Avalanche Québec embeds a Sépaq Gaspésie still (filed as avalanche-quebec-chic-chocs).",
   "blockers": [
    "TLS error",
    "403 (not bypassed)"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "last_update": "2026-11-09"
  },
  {
   "id": "starlight-cascade-allsky",
   "name": "Starlight Cascade Observatory AllSky1 (Yarker, Ontario)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://starlightcascade.ca/allsky1/",
   "coverage": "Yarker, Ontario, CA",
   "country": "CA",
   "stream_type": "Still https://starlightcascade.ca/allsky1/scgo-allsky1.jpg (200, Last-Modified 2026-11-08 14:05 UTC).",
   "status": "live",
   "next_steps": "",
   "notes": "Private observatory, fresh. Ask owner before use. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:starlight, 1 cams)",
   "blockers": [
    "private operator"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:starlight"
  },
  {
   "id": "unisq-mt-kent-cams",
   "name": "Mount Kent Observatory cameras (Univ. of Southern Queensland, Minerva-Australis)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://astroweb.unisq.edu.au/site/cams.html",
   "coverage": "Mount Kent, Darling Downs, Queensland, AU",
   "country": "AU",
   "stream_type": "All-sky https://astroweb.unisq.edu.au/ops/Allsky/image_29.jpg (200, 14:04 UTC) + site cams /ops/Ext1Cam.jpg, Ext2Cam.jpg (fresh) + dome interiors T1-T5Cam.jpg.",
   "status": "live",
   "next_steps": "Ask UniSQ.",
   "notes": "AU-phase all-sky + horizon. Terms unstated; ask UniSQ CAS. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:mtkent, 1 cams)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:mtkent"
  },
  {
   "id": "jodrell-bank-webcam",
   "name": "Jodrell Bank Lovell Telescope webcam (Univ. of Manchester)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.jb.man.ac.uk/webcam/",
   "coverage": "Jodrell Bank, Cheshire, UK",
   "country": "GB",
   "stream_type": "Still https://www.jb.man.ac.uk/common/webcam.jpg (200, Last-Modified 2026-11-08 14:06 UTC). Page has a copyright notice link.",
   "status": "live",
   "next_steps": "Ask Jodrell Bank.",
   "notes": "UK-phase landmark + sky (Lovell Telescope, UNESCO site). Ask Jodrell Bank / UoM. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:jodrell, 1 cams)",
   "blockers": [
    "copyright notice; ask"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:jodrell"
  },
  {
   "id": "palomar-allsky-direct",
   "name": "Palomar Observatory all-sky current image (direct endpoint)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://sites.astro.caltech.edu/palomar/media/livecams.html",
   "coverage": "Palomar Mountain, California, US",
   "country": "US",
   "stream_type": "http://algol.palomar.caltech.edu/instruments/allsky/AllSkyCurrentImage.JPG: 200 image/jpeg from prod (box has no plain-http egress). Found via Canarias Vista observatory list.",
   "status": "live",
   "next_steps": "",
   "notes": "Endpoint detail for existing palomar-allsky row; http-only. Same ask as palomar-allsky. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:palomar, 1 cams)",
   "blockers": [
    "http only",
    "ask Caltech"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:palomar"
  },
  {
   "id": "was-nz-sky-cameras",
   "name": "Wellington Astronomical Society sky cams (Gifford + Cretney obs., GMN NZ000X/NZ002Y)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.was.org.nz/sky-cameras/",
   "coverage": "Wellington and Wairarapa, NZ",
   "country": "NZ",
   "stream_type": "live.jpg stills on was.org.nz (200 but Last-Modified 2026-08-19, stale). Cameras feed the Global Meteor Network (see gmn-global-meteor-network).",
   "status": "down",
   "next_steps": "",
   "notes": "Stale since August; GMN weblog has their nightly stacks instead.",
   "blockers": [
    "stale since 2026-08-19"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "lcogt-saao-sutherland",
   "name": "LCO Live View, SAAO Sutherland site webcam",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://lcogt.saao.ac.za/",
   "coverage": "Sutherland, Northern Cape, ZA",
   "country": "ZA",
   "stream_type": "TLS error from box, no connection from prod. Page says it updates every ~30 min with a 3 h timelapse.",
   "status": "considered",
   "next_steps": "",
   "notes": "Outside phases; retest later.",
   "blockers": [
    "unreachable"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "brno-hvezdarna-cams",
   "name": "Brno Observatory and Planetarium live cams",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.hvezdarna.cz/en/live/",
   "coverage": "Brno, CZ",
   "country": "CZ",
   "stream_type": "Rooftop all-sky (once a minute per page) behind 4 CamStreamer embeds; https://www.hvezdarna.cz/ryba/day_latest.jpg 200 but dated 2026-11-07 (daily frame).",
   "status": "considered",
   "next_steps": "",
   "notes": "Planetarium theme example; outside phases, CamStreamer vendor. Lead only.",
   "blockers": [
    "vendor embed",
    "outside phases"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "teplice-planetarium-webcams",
   "name": "Teplice Observatory and Planetarium rooftop webcams",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://hapteplice.cz/live/",
   "coverage": "Teplice, CZ",
   "country": "CZ",
   "stream_type": "Stills https://webcam.hapteplice.cz/KAM01/webcam.jpg (200, fresh 14:09 UTC) and KAM02/webcam.jpg.",
   "status": "live",
   "next_steps": "",
   "notes": "Fresh but outside the phase order; ask if Europe opens up. | 2026-11-09: live pending owner reply; takedown on request (pendinglive:teplice, 1 cams)",
   "blockers": [
    "outside phases",
    "ask"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "plugin": "pendinglive",
   "takedown": "pendinglive:teplice"
  },
  {
   "id": "kake-weathernow-cams",
   "name": "KAKE WeatherNOW camera network (Wichita, Kansas)",
   "category": "storms",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.kake.com/weather/weathernow-camera-network/",
   "coverage": "Wichita, Hays, Hutchinson, Garden City, Kansas, US",
   "country": "US",
   "stream_type": "9 still JPGs under kake.com/app/weather/*.jpg; returned 429 to the box (not retried).",
   "status": "considered",
   "next_steps": "",
   "notes": "Tornado Alley TV-station cams; rate-limited and commercial station. Ask KAKE only if we want Kansas storm stills.",
   "blockers": [
    "429 rate limit",
    "TV station; ask"
   ],
   "approx_cameras": "9",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "fobwr-blackwater-osprey",
   "name": "Friends of Blackwater NWR osprey and waterfowl cams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.friendsofblackwater.org/river-osprey-cam.html",
   "coverage": "Blackwater NWR, Maryland, US",
   "country": "US",
   "stream_type": "Uses HDOnTap snapshot portal (portal.hdontap.com/snapshot/fobwr_river-cam_ptz-CUST) plus YouTube archives.",
   "status": "considered",
   "next_steps": "",
   "notes": "HDOnTap vendor (same as pgc-hdontap). Ask Friends + HDOnTap if we pursue.",
   "blockers": [
    "HDOnTap vendor"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "ferris-osprey-cam",
   "name": "Ferris State University campus osprey cam",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://osprey.ferris.edu/",
   "coverage": "Big Rapids, Michigan, US",
   "country": "US",
   "stream_type": "Stills https://osprey.ferris.edu/image.jpg (200, last 2026-10-09) and image1.jpg (empty); live video moved to Twitch.",
   "status": "considered",
   "next_steps": "",
   "notes": "Seasonal (ospreys gone for winter). Recheck in April; ask Ferris.",
   "blockers": [
    "seasonal",
    "Twitch for video"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "essex-wt-badger-cam",
   "name": "Essex Wildlife Trust badger webcam (Fingringhoe Wick)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.essexwt.org.uk/wildlife/webcams/badger",
   "coverage": "Fingringhoe Wick, Essex, UK",
   "country": "GB",
   "stream_type": "No stream or still endpoint in page HTML (JS-loaded); wildlifetrusts.org/webcams index 403 to the box.",
   "status": "considered",
   "next_steps": "",
   "notes": "UK-phase animal lead; needs a browser trace.",
   "blockers": [
    "no endpoint in HTML"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "swt-loch-of-the-lowes-osprey",
   "name": "Scottish Wildlife Trust Loch of the Lowes osprey cam",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://scottishwildlifetrust.org.uk/things-to-do/watch-wildlife-online/loch-of-the-lowes-webcam/",
   "coverage": "Dunkeld, Perthshire, UK",
   "country": "GB",
   "stream_type": "YouTube live_stream embed only.",
   "status": "blocked",
   "next_steps": "",
   "notes": "YouTube only.",
   "blockers": [
    "YouTube"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "malheur-osprey-cam",
   "name": "Friends of Malheur NWR osprey nest cam",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://malheurfriends.org/visit/osprey-nest-cam/",
   "coverage": "Malheur NWR, Oregon, US",
   "country": "US",
   "stream_type": "Legacy ustream.tv embed (service gone).",
   "status": "down",
   "next_steps": "",
   "notes": "Dead embed.",
   "blockers": [
    "dead ustream embed"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261108",
   "found": "2026-11-08",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-08T06:15:41-05:00",
   "channels": 0,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 0,
   "video_cameras": 0
  },
  {
   "id": "africam-youtube",
   "name": "Africam official YouTube live wildlife cams (@Africamvideos)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.youtube.com/@Africamvideos/streams",
   "coverage": "South Africa, Botswana, Kenya, Tanzania, Zimbabwe lodge/waterhole cams",
   "country": "ZA",
   "stream_type": "Official YouTube live embeds (youtube-nocookie); never re-streamed",
   "status": "live",
   "next_steps": "Live since the 2026-11-09 09:07 UTC restart: wildlife.m3u / wildlife.xml (170001+) and map embeds.",
   "notes": "2026-11-09: 30 LIVE streams matched from the channel /streams page; place-level lat/lon; wildlife.m3u + map F_EMBED. | 2026-11-10: LIVE, 30 official YouTube embeds (yt_wildlife/africam); embeds are not stream-probed (video_unknown).",
   "blockers": [],
   "approx_cameras": "30",
   "origin": "au-za-youtube-20261109",
   "found": "2026-11-09",
   "in_prod": true,
   "enabled": true,
   "phase": "au-za",
   "last_audit": "2026-11-09T03:48:29-05:00",
   "channels": 30,
   "video_up": 0,
   "video_down": 0,
   "mapped_cameras": 30,
   "video_cameras": 30,
   "plugin": "yt_wildlife",
   "video_unknown": 30,
   "takedown": "yt_wildlife:africam",
   "last_update": "2026-11-10"
  },
  {
   "id": "estes-park-webcams",
   "name": "Estes Park Webcams (downtown Elkhorn Ave / Bond Park)",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.estesparkwebcams.com/",
   "coverage": "Estes Park, Colorado, US (Rocky Mountain NP east gate)",
   "country": "US",
   "stream_type": "Private webcam network; page still mayocam-dl.jpg 404, live player not in HTML. Visit Estes Park page hotlinks NPS ROMO stills (nps.gov/webcams-romo/*.jpg, fresh).",
   "status": "considered",
   "next_steps": "",
   "notes": "Gateway town for RMNP. Private operator (owner named per cam); needs browser trace + ask.",
   "blockers": [
    "no endpoint in HTML",
    "private operator"
   ],
   "approx_cameras": "2+",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "moab-perpetual-images-netcam",
   "name": "Moab netcam (perpetual-images.com)",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://cnha.org/webcams/",
   "coverage": "Moab, Utah, US (Arches / Canyonlands gateway)",
   "country": "US",
   "stream_type": "Still http://www.perpetual-images.com/weather/netcam.jpg (200 from prod, fresh 2026-11-09 14:15 UTC; http only); /weather/ index 403.",
   "status": "considered",
   "next_steps": "",
   "notes": "Linked from the Canyonlands Natural History Association webcam page. Operator unclear; ask before use.",
   "blockers": [
    "operator unclear",
    "http only"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "seejh-gateway-cams",
   "name": "SeeJH live cams (Jackson Town Square, Gardiner / Roosevelt Arch)",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://seejh.ai/live/gardiner/",
   "coverage": "Jackson, Wyoming + Gardiner, Montana, US (Grand Teton / Yellowstone gateways)",
   "country": "US",
   "stream_type": "Vendor-hosted live video (SeeJH); Jackson Hole Chamber Town Square page credits SeeJH. No stream URL in HTML.",
   "status": "considered",
   "next_steps": "",
   "notes": "Site says personal use only / not commercial. NPS North Entrance arch still is already in nps-webcams. Ask SeeJH if wanted.",
   "blockers": [
    "vendor terms: personal use only"
   ],
   "approx_cameras": "10+",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "banff-gondola-360",
   "name": "Banff Gondola 360° webcam (Sulphur Mountain, Pursuit)",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.banffjaspercollection.com/attractions/banff-gondola/webcam/",
   "coverage": "Banff, Alberta, CA",
   "country": "CA",
   "stream_type": "360° panorama viewer (JS app, timelapse/compare tools); no plain still URL in HTML.",
   "status": "considered",
   "next_steps": "",
   "notes": "Town + Bow Valley + night sky (aurora at times). Pursuit is a commercial operator (same as pursuit-columbia-icefield-cams); ask.",
   "blockers": [
    "vendor viewer",
    "commercial operator"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "banff-lake-louise-tourism-cams",
   "name": "Banff & Lake Louise Tourism webcam list (13 cams)",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.banfflakelouise.com/weather-webcams",
   "coverage": "Banff and Lake Louise, Alberta, CA",
   "country": "CA",
   "stream_type": "JS-rendered list of 13 cams (town, lakes, ski resorts) with map view; endpoints not in HTML.",
   "status": "considered",
   "next_steps": "",
   "notes": "DMO list = good map of who runs Banff cams; follow each operator rather than the list. Browser trace next round.",
   "blockers": [
    "no endpoint in HTML"
   ],
   "approx_cameras": "13",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "jasper-skytram-roundshot",
   "name": "Jasper SkyTram Roundshot livecam",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://jasperskytram.roundshot.com/",
   "coverage": "Jasper, Alberta, CA",
   "country": "CA",
   "stream_type": "Roundshot 360° panorama (JS app); visit-jasper.com webcam page 403 to box (not bypassed).",
   "status": "considered",
   "next_steps": "",
   "notes": "Same Roundshot vendor pattern as spaceneedle-roundshot; one Roundshot ask could cover several.",
   "blockers": [
    "vendor viewer"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "gatlinburg-space-needle-cam",
   "name": "Gatlinburg Space Needle webcam",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.gatlinburgspaceneedle.com/webcam/",
   "coverage": "Gatlinburg, Tennessee, US (Great Smoky Mountains gateway)",
   "country": "US",
   "stream_type": "PTZ live cam 407 ft above town; player not in HTML. Gatlinburg CVB page also lists Anakeesta, SkyPark, Ober, WVLT cam.",
   "status": "considered",
   "next_steps": "",
   "notes": "Commercial attraction; ask.",
   "blockers": [
    "no endpoint in HTML"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "anakeesta-roundshot",
   "name": "Anakeesta AnaVista Tower Roundshot 360°",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://anakeesta.com/live-cameras-at-anakeesta/",
   "coverage": "Gatlinburg, Tennessee, US",
   "country": "US",
   "stream_type": "Roundshot backend thumbnail 302 -> storage2.roundshot.com .../2026-07-28 (stale since July); Black Bear Village cam is a SkylineWebcams embed (id 1016).",
   "status": "considered",
   "next_steps": "",
   "notes": "Roundshot frame stale; SkylineWebcams is a commercial aggregator (no).",
   "blockers": [
    "stale since 2026-07-28",
    "SkylineWebcams"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "hermitage-aoraki-cams",
   "name": "The Hermitage Hotel webcams (Aoraki/Mount Cook Village)",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.hermitage.co.nz/webcam",
   "coverage": "Aoraki/Mount Cook Village, Canterbury, NZ",
   "country": "NZ",
   "stream_type": "4 angles (Aoraki/Mt Cook, Entrance & Mt Wakefield, Sir Edmund Hillary, Wide View) listed in webcams-awb2e0ceg7cccsba.a02.azurefd.net/webcams-json/Hermitage.json (98 frames each, ~11 min cadence, latest 23:55 NZ); image host for the /Webcams/... paths not resolved (404 on the Azure host, 403 on hermitage.co.nz).",
   "status": "considered",
   "next_steps": "",
   "notes": "NZ phase: iconic peak view. Needs the image base from the player JS (browser trace) and an ask to the Hermitage.",
   "blockers": [
    "image base unresolved",
    "commercial operator"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "keswick-h264cam",
   "name": "Keswick / Derwentwater cams (h264.cam: Derwent Water Marina, Keswick Tourism)",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://visitkeswick.com/webcams",
   "coverage": "Keswick, Lake District, UK",
   "country": "GB",
   "stream_type": "view.h264.cam/ref/dwm/live and /ref/kta/live (video.js HLS player; manifest built in JS) + a Nest embed.",
   "status": "considered",
   "next_steps": "",
   "notes": "UK phase. h264.cam is a UK webcam host (vendor lead, like CamSecure). Ask operators.",
   "blockers": [
    "vendor player"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "tofino-cams",
   "name": "Tourism Tofino / Pacific Sands Cox Bay cams",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://tourismtofino.com/plan-your-trip/weather-webcams/",
   "coverage": "Tofino, BC, CA (Pacific Rim NP Reserve gateway)",
   "country": "CA",
   "stream_type": "YouTube live embeds only.",
   "status": "blocked",
   "next_steps": "",
   "notes": "YouTube only.",
   "blockers": [
    "YouTube"
   ],
   "approx_cameras": "3",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "barharborcam",
   "name": "BarHarborCam (Bar Harbor / Acadia)",
   "category": "park-gateways",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://barharborcam.com/",
   "coverage": "Bar Harbor, Maine, US (Acadia NP gateway)",
   "country": "US",
   "stream_type": "Old still barharborcam.com/webcams/barharborinn/canon/camera1.jpg Last-Modified 2020-11-26 (stale); live players JS.",
   "status": "considered",
   "next_steps": "",
   "notes": "Search lists an 'Acadia Sunrise' east-facing cam here; needs browser trace for the current endpoint.",
   "blockers": [
    "legacy still stale"
   ],
   "approx_cameras": "3+",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "eldesierto-dust-cams",
   "name": "eldesierto.org Regional Dust and Environmental Observation Cameras",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "http://eldesierto.org/",
   "coverage": "Moab / Canyonlands / Abajo Mtns UT, Mesa Verde CO, Zzyzx CA, US",
   "country": "US",
   "stream_type": "Stills http://eldesierto.org/{Isky,AbajoPeak,BaldMesa,RpeakUT}.jpg (200 from prod; Isky 14:11 UTC, Abajo/BaldMesa 14:01 UTC, RpeakUT stale 2026-11-08 22:45); also SixShooter, MesaVerde, Zzyzx. http only. Found via Canyonlands NHA webcam page.",
   "status": "live",
   "next_steps": "Identify operator (CNHA contact); courtesy ask.",
   "notes": "Big-sky desert horizon cams (dust/air-quality research) around Canyonlands/Island in the Sky. Operator unnamed on the page; ask via CNHA. | 2026-11-10: live pending owner reply; takedown on request (readylive:eldesierto, 5 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); Zzyzx stale (2024) left out; coordinates approximate (operator page has none)",
   "blockers": [
    "http only",
    "operator unnamed"
   ],
   "approx_cameras": "6",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 5,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "readylive",
   "takedown": "readylive:eldesierto",
   "last_update": "2026-11-10",
   "still_cameras": 5
  },
  {
   "id": "nwr-weather-regina",
   "name": "NWR Weather webcam (Regina, Saskatchewan)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://nwrweather.com/wxwebcam.php",
   "coverage": "Regina, Saskatchewan, CA",
   "country": "CA",
   "stream_type": "Still https://nwrweather.com/webcam/webcam32.jpg (200, Last-Modified 2026-11-09 14:17 UTC).",
   "status": "viable",
   "next_steps": "Courtesy ask.",
   "notes": "Saskatchewan gap: prairie sky cam from a private weather station. Ask owner. | 2026-11-10 ready-live: skipped, webcam32.jpg is a GIF (engine stills path decodes JPEG/PNG only)",
   "blockers": [
    "private operator"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "last_update": "2026-11-10"
  },
  {
   "id": "cbc-regina-webcam",
   "name": "CBC Saskatchewan webcam (Regina)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.cbc.ca/sask/webcam/webcam_regina.html",
   "coverage": "Regina, Saskatchewan, CA",
   "country": "CA",
   "stream_type": "Still https://www.cbc.ca/sask/webcam/webcam.jpg Last-Modified 2026-07-24 (stale).",
   "status": "down",
   "next_steps": "",
   "notes": "Frozen since July; same family as cbc-calgary-skyline.",
   "blockers": [
    "stale"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "avalanche-quebec-chic-chocs",
   "name": "Avalanche Québec webcams (Chic-Chocs, Gaspésie)",
   "category": "weather-cams",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://avalanchequebec.ca/en/webcam/",
   "coverage": "Chic-Chocs Mountains, Parc national de la Gaspésie, Quebec, CA",
   "country": "CA",
   "stream_type": "Stills https://avalanchequebec.ca/wp-content/uploads/webcam/sepaq/en/0.jpg (200, 14:20 UTC) and webcam/mm/en/0..3.jpg (200, 14:05 UTC); plus a Skaping embed (no).",
   "status": "live",
   "next_steps": "Courtesy ask.",
   "notes": "Quebec gap: mountain weather/horizon from the avalanche centre (non-profit). Sépaq's own park webcam pages 403 to box (not bypassed). Ask Avalanche Québec. | 2026-11-10: live pending owner reply; takedown on request (readylive:avq, 5 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); listed as park (Parc national de la Gaspesie); coordinates approximate",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "5",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 5,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "readylive",
   "takedown": "readylive:avq",
   "last_update": "2026-11-10",
   "still_cameras": 5
  },
  {
   "id": "mmto-mt-hopkins-cams",
   "name": "MMT Observatory webcams + all-sky (Mt Hopkins / Whipple)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.mmto.org/webcams/",
   "coverage": "Mount Hopkins, Santa Rita Mtns, Arizona, US",
   "country": "US",
   "stream_type": "Stills https://webcam-images.mmto.arizona.edu/webcam_images/latest_webcam{1,2,3,4,8}.jpg etc. (200, 14:17 UTC) + all-sky https://skycam.mmto.arizona.edu/skycam/latest_image.jpg (200, 14:18 UTC).",
   "status": "live",
   "next_steps": "Ask MMTO; add to observatory stills pack.",
   "notes": "hodar-list thread: replaces the stale Whipple VERITAS all-sky (2021). Ask MMTO (Smithsonian/UA). | 2026-11-10: live pending owner reply; takedown on request (readylive:mmto, 10 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); webcam 9_* frames stale (March 2026) left out",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "10",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 10,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "readylive",
   "takedown": "readylive:mmto",
   "last_update": "2026-11-10",
   "still_cameras": 10
  },
  {
   "id": "lbto-mt-graham-cams",
   "name": "Large Binocular Telescope Observatory feeds (Mt Graham)",
   "category": "observatories-planetariums",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.lbto.org/lbto-feeds/",
   "coverage": "Mount Graham, Arizona, US",
   "country": "US",
   "stream_type": "Stills https://info.lbto.org/pub/images/allsky and webcam_{roof,accessroad,llfront,urfront,utilbldg,...} (image/jpeg, 14:18 UTC); last_night video.",
   "status": "live",
   "next_steps": "Ask LBTO.",
   "notes": "hodar-list thread (MGIO points here). All-sky + mountaintop horizon. Ask LBTO. | 2026-11-10: live pending owner reply; takedown on request (readylive:lbto, 6 cams; LIVE since the 2026-11-10 09:54:47 UTC restart)",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "8",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 6,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "readylive",
   "takedown": "readylive:lbto",
   "last_update": "2026-11-10",
   "still_cameras": 6
  },
  {
   "id": "nasa-dscovr-epic",
   "name": "NASA EPIC (DSCOVR) whole-Earth images",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://epic.gsfc.nasa.gov/",
   "coverage": "L1 view of the sunlit Earth (global)",
   "country": "US",
   "stream_type": "Keyless JSON https://epic.gsfc.nasa.gov/api/natural (13 frames, latest 2026-11-07 22:17 UTC) -> https://epic.gsfc.nasa.gov/archive/natural/YYYY/MM/DD/jpg/<image>.jpg (200).",
   "status": "live",
   "next_steps": "Propose small epic plugin (latest natural-colour frame).",
   "notes": "Public domain (NASA). About 1-2 days behind, so a 'latest Earth from a million miles' still, not live. No ask needed; credit NASA EPIC team / NOAA DSCOVR. | 2026-11-10: already LIVE as sky-epic-natural (Space list, Earth from space, ch 914; off the map; newest natural-colour frame from the EPIC API). Row fixed.",
   "blockers": [
    "~1-2 day lag"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": true,
   "enabled": true,
   "phase": "p1",
   "last_audit": "2026-11-10T05:58:00-05:00",
   "channels": 1,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "plugin": "sky",
   "last_update": "2026-11-10"
  },
  {
   "id": "bbso-halpha-fulldisk",
   "name": "Big Bear Solar Observatory H-alpha full disk (NJIT)",
   "category": "space",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.bbso.njit.edu/cgi-bin/LatestImages",
   "coverage": "Big Bear Lake, California, US",
   "country": "US",
   "stream_type": "https://www.bbso.njit.edu/Images/daily/images/hfull.jpg / hfullc.jpg (200, Last-Modified 2026-11-07 01:45 UTC); GONG mirrors stale (2024).",
   "status": "considered",
   "next_steps": "",
   "notes": "Daily-ish sun image; gong-halpha already covers H-alpha better. Keep as backup.",
   "blockers": [
    "daily, not live"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "wibw-topeka-cams",
   "name": "WIBW 13 weather cams (Topeka, Gray TV)",
   "category": "storms",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.wibw.com/weather/cams/",
   "coverage": "Topeka / NE Kansas, US",
   "country": "US",
   "stream_type": "Page references Gray FTP stills (gray.ftp.clickability.com/.../kalbcam1.jpg pattern; no answer from prod) and radar graphics.",
   "status": "considered",
   "next_steps": "",
   "notes": "Storm-country TV cams; Gray TV station, ask needed like kake-weathernow-cams.",
   "blockers": [
    "TV station; ask"
   ],
   "approx_cameras": "3+",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "newson6-skycam-network",
   "name": "News On 6 / News 9 SkyCam Network (Griffin Media, Oklahoma)",
   "category": "storms",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://www.newson6.com/skycam-network",
   "coverage": "Tulsa + Oklahoma City, Oklahoma, US",
   "country": "US",
   "stream_type": "JS player; only marketing images in HTML. KFOR SkyCam page 403 to box (not bypassed).",
   "status": "considered",
   "next_steps": "",
   "notes": "Classic tornado-alley tower cams; commercial TV, ask.",
   "blockers": [
    "no endpoint in HTML",
    "TV station"
   ],
   "approx_cameras": "20+",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "jcu-orpheus-reef-cams",
   "name": "JCU Classroom on the Reef live cams (Orpheus Island, Great Barrier Reef)",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.jcu.edu.au/classroom-on-the-reef/livecams",
   "coverage": "Orpheus Island Research Station, Queensland, AU",
   "country": "AU",
   "stream_type": "HLS https://streamvdr-cns01.jcu.edu.au/eResearch/BeachCam.stream/playlist.m3u8 (200, 1080p h264, live chunklist) and UW_Pioneer_Bay.stream (200, 1080p, underwater); ORS-Farside 404 today; 4 cams total (2 above / 2 underwater).",
   "status": "live",
   "next_steps": "Courtesy ask to JCU; plain HLS so no plugin needed beyond config.",
   "notes": "AU phase: real underwater reef + beach video straight from a university (reef sharks, turtles, coral). Ask JCU eResearch for noncommercial use. | 2026-11-10: live pending owner reply; takedown on request (readylive:jcu, 2 cams; LIVE since the 2026-11-10 09:54:47 UTC restart); BeachCam + UW_Pioneer_Bay HLS; ORS-Farside 404",
   "blockers": [
    "terms unstated"
   ],
   "approx_cameras": "4",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": true,
   "enabled": true,
   "phase": null,
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 2,
   "mapped_cameras": 2,
   "video_cameras": 2,
   "video_up": 2,
   "video_down": 0,
   "plugin": "readylive",
   "takedown": "readylive:jcu",
   "last_update": "2026-11-10",
   "video_unknown": 0,
   "still_cameras": 0
  },
  {
   "id": "qubs-feeder-cam",
   "name": "Queen's University Biological Station feeder + aquarium cams",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://www.qubs.ca/resources/live-streams",
   "coverage": "Elgin, Ontario, CA",
   "country": "CA",
   "stream_type": "video.qubs.ca shaka player builds https://video.qubs.ca/hls/<stream>.m3u8; feeder-1 / aqua-1 404 today (offline or other names). PhenoCam queens.jpg also on page (PhenoCam robots note).",
   "status": "considered",
   "next_steps": "",
   "notes": "Retest when feeder season starts.",
   "blockers": [
    "stream offline"
   ],
   "approx_cameras": "2",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": "p1",
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "taranaki-mounga-penguin-cam",
   "name": "Taranaki Mounga kororā penguin nest-box cam",
   "category": "animals",
   "tier": "+more",
   "tier_locked": true,
   "url": "https://taranakimounga.nz/get-involved/penguin-cam/",
   "coverage": "Ngāmotu Beach, New Plymouth, NZ",
   "country": "NZ",
   "stream_type": "Page 502 to the box today.",
   "status": "considered",
   "next_steps": "",
   "notes": "NZ phase; joins nz-penguin-initiative-livecams / oamaru set. Retest.",
   "blockers": [
    "page 502"
   ],
   "approx_cameras": "1",
   "origin": "deepdive-20261109",
   "found": "2026-11-09",
   "in_prod": false,
   "enabled": false,
   "phase": null,
   "last_audit": "2026-11-09T06:05:49-05:00",
   "channels": 0,
   "mapped_cameras": 0,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0
  },
  {
   "id": "lexington-lfucg-cams",
   "name": "Lexington KY traffic cameras (LFUCG Traffic Engineering)",
   "plugin": "lexington",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://trafficvid.lexingtonky.gov/publicmap/",
   "coverage": "City of Lexington (Fayette County), Kentucky, US",
   "country": "US",
   "stream_type": "HLS (/s/ 302 redirect to the tokenised Wowza link the public map page prints; 15-min SecureToken, not IP-bound) + Wowza thumbnail stills",
   "discovery": "trafficvid.lexingtonky.gov/publicmap/ HTML (one JS object per camera), re-read <=300 s with a cache-buster",
   "status": "live",
   "enabled": true,
   "in_prod": true,
   "channels": 113,
   "mapped_cameras": 113,
   "video_cameras": 113,
   "video_up": 75,
   "video_down": 38,
   "video_unknown": 0,
   "still_cameras": 0,
   "approx_cameras": "113",
   "blockers": [
    "terms unstated (live pending owner reply, takedown on request)"
   ],
   "next_steps": "Courtesy note to LFUCG Traffic Engineering when Jon wants (draft only). 38 cameras 404 at the source (offline); health check hides them.",
   "notes": "2026-11-10: LIVE since the 2026-11-10 10:49:44 UTC restart (5:49 AM Winnipeg); Jon: 'Use Lexington's page-published video links like Texas'. Channels 294001-294113 (sticky block 294000). One record per camera (thumbnail on the map + video), no duplicate pins. Verified: plays with no Referer/cookie, 1920x1440 / 2560x1920 H.264; ffprobe via /s/ OK. Takedown token 'lexington' or 'lexington-lfucg-cams'.",
   "origin": "build",
   "found": "2026-11-10",
   "phase": "p1",
   "last_audit": "2026-11-10T05:58:00-05:00",
   "last_update": "2026-11-10",
   "public_api": false
  },
  {
   "id": "calgary-city-traffic-cams",
   "name": "City of Calgary traffic cameras (open data)",
   "plugin": "calgary",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://data.calgary.ca/Transportation-Transit/Traffic-Cameras/k7p9-kppz",
   "coverage": "City of Calgary, Alberta, CA",
   "country": "CA",
   "stream_type": "Stills https://trafficcam.calgary.ca/loc<N>.jpg (fresh to the minute); list data.calgary.ca/resource/k7p9-kppz.json",
   "status": "partial",
   "enabled": true,
   "in_prod": true,
   "channels": 0,
   "mapped_cameras": 216,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "still_cameras": 216,
   "approx_cameras": "216",
   "blockers": [
    "no public video; stills only (map, search, Live cameras list)"
   ],
   "next_steps": "",
   "notes": "2026-11-10: LIVE since the 2026-11-10 10:49:44 UTC restart (5:49 AM Winnipeg) as plugin calgary (Jon: 'Build the stills batch'). Open Government Licence – City of Calgary; credited on /credits. Takedown token 'calgary'.",
   "origin": "build",
   "found": "2026-11-10",
   "phase": "p1",
   "last_audit": "2026-11-10T05:58:00-05:00",
   "last_update": "2026-11-10",
   "public_api": true
  },
  {
   "id": "vancouver-city-traffic-cams",
   "name": "City of Vancouver traffic cameras (open data)",
   "plugin": "vancouver",
   "category": "road-weather",
   "tier": "sky",
   "tier_locked": true,
   "url": "https://opendata.vancouver.ca/explore/dataset/web-cam-url-links/",
   "coverage": "City of Vancouver, British Columbia, CA (220 intersections, 846 direction views)",
   "country": "CA",
   "stream_type": "Stills trafficcams.vancouver.ca/cameraimages/<view>.jpg (updated every ~10-15 min); list from the open-data portal, views read from each camera page once a day",
   "status": "partial",
   "enabled": true,
   "in_prod": true,
   "channels": 0,
   "mapped_cameras": 846,
   "video_cameras": 0,
   "video_up": 0,
   "video_down": 0,
   "still_cameras": 846,
   "approx_cameras": "846",
   "blockers": [
    "no public video; stills only (map, search, Live cameras list)"
   ],
   "next_steps": "",
   "notes": "2026-11-10: LIVE since the 2026-11-10 10:49:44 UTC restart (5:49 AM Winnipeg) as plugin vancouver (Jon: 'Build the stills batch'). Open Government Licence – Vancouver; credited on /credits. Takedown token 'vancouver'.",
   "origin": "build",
   "found": "2026-11-10",
   "phase": "p1",
   "last_audit": "2026-11-10T05:58:00-05:00",
   "last_update": "2026-11-10",
   "public_api": true
  }
 ],
 "extras": [
  {
   "name": "Monterey Bay Aquarium 'Krill Waves Radio' lo-fi stream",
   "url": "https://www.montereybayaquarium.org/cams-videos/live-cams",
   "type": "YouTube lo-fi music + ocean visuals",
   "useful_for": "Radio/ambient channel ideas for Jon's other projects",
   "found": "2026-10-31",
   "origin": "deepdive-20261031"
  },
  {
   "name": "UW-Madison 'Mendota Today' lake cams",
   "url": "https://uwcfl.github.io/mendota_live/",
   "type": "live lake cams (to inspect)",
   "useful_for": "Lake/horizon views; could also move into sky tier after probing",
   "found": "2026-10-31",
   "origin": "deepdive-20261031"
  },
  {
   "name": "NOAA NDBC BuoyCAM plugin (written, not deployed: prod IP 403)",
   "url": "https://www.ndbc.noaa.gov/buoycams.shtml",
   "type": "stills plugin ready",
   "useful_for": "Go live as soon as NDBC allowlists the prod IP",
   "found": "2026-11-01",
   "origin": "deepdive-20261101"
  },
  {
   "name": "NOAA SPC convective outlooks (Day 1-3 GeoJSON) + today's storm reports CSV",
   "url": "https://www.spc.noaa.gov/products/outlook/day1otlk_cat.lyr.geojson",
   "type": "keyless map data feed (GeoJSON/CSV, US public domain)",
   "useful_for": "LIVE 2026-11-02: /map 'Severe' button = day 1 categorical outlook (gateway /map/ov/spc.json, 30 min cache). Storm reports CSV NOT used: www.spc.noaa.gov/climo/reports/* answers 403 (CloudFront 'Request blocked') to the prod IP. Storms overlay: severe-risk polygons + tornado/hail/wind reports (also climo/reports/today.csv). 200 from box and prod.",
   "found": "2026-11-02",
   "origin": "deepdive-20261102",
   "status": "live"
  },
  {
   "name": "USGS HANS elevated volcanoes (alert level / aviation colour)",
   "url": "https://volcanoes.usgs.gov/hans-public/api/volcano/getElevatedVolcanoes",
   "type": "keyless map data feed (JSON, US public domain)",
   "useful_for": "LIVE 2026-11-02: /map 'Volcanoes' button, using the USGS VSC volcanoApi GeoJSON (has coordinates; HANS elevated list has none), 66 monitored volcanoes coloured by alert level (/map/ov/volcanoes.json). Colour the existing volcano cams/markers by current USGS alert level (e.g. Great Sitkin ORANGE/WATCH on 2026-11-01). 200 from box and prod.",
   "found": "2026-11-02",
   "origin": "deepdive-20261102",
   "status": "live"
  },
  {
   "name": "NASA GIBS WMTS (VIIRS true colour, Black Marble night lights, etc.)",
   "url": "https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/1.0.0/WMTSCapabilities.xml",
   "type": "keyless map tiles (WMTS, NASA open data; credit NASA EOSDIS GIBS)",
   "useful_for": "2026-11-03: NASA api.data.gov key signed up (info@skywatch.monster, env NASA_API_KEY); GIBS itself needs no key, still blocked only on the /map CSP. Not built: needs gibs.earthdata.nasa.gov in the /map CSP. That CSP is set by the gateway (server/index.ts mapCsp + OVERLAY_TILE_HOSTS), not nginx; Jon asked to leave GIBS for Grok Bot. Global daily satellite imagery outside nowCOAST's GOES coverage (Europe/Asia/Oceania). 200 from box and prod. CSP would need the GIBS host (root/nginx: report, don't do).",
   "found": "2026-11-02",
   "origin": "deepdive-20261102"
  },
  {
   "name": "Canadian Wildland Fire Information System (CWFIS) WMS",
   "url": "https://cwfis.cfs.nrcan.gc.ca/geoserver/public/wms?service=WMS&request=GetCapabilities",
   "type": "keyless map layers (WMS, Open Government Licence - Canada)",
   "useful_for": "LIVE 2026-11-02: CWFIS WFS m3_polygons_current, perimeters updated in the last 7 days, on the Fires button (/map/ov/cafires.json, 60 min cache; credit + OGL-Canada on the map). Canada fire danger / hotspots / fire perimeters to complement the US-centric Fires overlay. 200 from box and prod.",
   "found": "2026-11-02",
   "origin": "deepdive-20261102",
   "status": "live"
  },
  {
   "name": "NOAA tsunami.gov message feeds (Atom)",
   "url": "https://www.tsunami.gov/events/xml/PAAQAtom.xml",
   "type": "keyless alert feed (Atom/XML, US public domain)",
   "useful_for": "LIVE 2026-11-02: NTWC PAAQ + PTWC PHEB Atom, bulletins from the last 72 h as blue rings on the Quakes button (/map/ov/tsunami.json). Tsunami bulletins (NTWC PAAQ; PTWC PHEB too) as map pins/banners. 200 from box and prod.",
   "found": "2026-11-02",
   "origin": "deepdive-20261102",
   "status": "live"
  },
  {
   "name": "Smithsonian GVP weekly volcanic activity report (CAP XML)",
   "url": "https://volcano.si.edu/news/WeeklyVolcanoCAP.xml",
   "type": "keyless feed (CAP XML; credit Smithsonian GVP / USGS VHP)",
   "useful_for": "Global weekly volcano activity for the volcano layer. Note: newest item dated 2026-10-15 (stale on 2026-11-02); terms page answered 403 to the box.",
   "found": "2026-11-02",
   "origin": "deepdive-20261102"
  },
  {
   "name": "AuroraX real-time viewer and Keogramist (UCalgary SRS)",
   "url": "https://aurorax.space/",
   "type": "3D-globe viewer of live all-sky cameras + data tools",
   "useful_for": "Idea for an aurora view in skywatch; not a feed",
   "found": "2026-11-03",
   "origin": "deepdive-20261103"
  },
  {
   "name": "Queenstown.com embeddable Coronet Peak panorama (free iframe)",
   "url": "https://www.queenstown.com/webcams/embed",
   "type": "Free webcam embed (iframe) offered by Queenstown tourism",
   "useful_for": "NZ ski/mountain view via an embed the publisher explicitly offers; embed-only, not a feed",
   "found": "2026-11-04",
   "origin": "deepdive-20261104"
  },
  {
   "name": "VolcanoDiscovery volcano webcam viewer",
   "url": "https://webcams.volcanodiscovery.com/",
   "type": "Aggregator viewer of observatory volcano cams (Popocatepetl, Piton de la Fournaise ...)",
   "useful_for": "Discovery map for volcano cams; go to the observatory (CENAPRED, OVPF, MVO) instead of relaying the aggregator",
   "found": "2026-11-04",
   "origin": "deepdive-20261104"
  },
  {
   "name": "Live-Environment-Streams (william-ricchiuti)",
   "url": "https://github.com/willytop8/Live-Environment-Streams",
   "type": "Similar project: CC-BY-4.0 GeoJSON of about 6,900 road-authority streams, per-source licence review",
   "useful_for": "Best peer dataset: source_family + quality_tier + coordinates_quality fields, per-source licence allowlist and exclusion list (opencctv, 511NY, ALDOT DRM, skyline/youtube) worth copying",
   "found": "2026-11-05",
   "origin": "deepdive-20261105"
  },
  {
   "name": "Ora (warner-wvez)",
   "url": "https://github.com/warner-wvez/Ora",
   "type": "Similar project: 46,853 US cams map (MapLibre + hls.js), PolyForm Noncommercial code",
   "useful_for": "Ideas: 6-hour health sweep with 1 KB range-request fingerprints, placeholder detection (same image on 3+ cams), frozen-frame detection, route view; endpoint notes for MT, SD, IL, KY, AR, NM, OK",
   "found": "2026-11-05",
   "origin": "deepdive-20261105"
  },
  {
   "name": "OpenTrafficCamMap (AidanWelch)",
   "url": "https://github.com/AidanWelch/OpenTrafficCamMap",
   "type": "Similar project: crowdsourced US camera JSON (about 7,500), MIT",
   "useful_for": "Cross-check for US state coverage gaps",
   "found": "2026-11-05",
   "origin": "deepdive-20261105"
  },
  {
   "name": "cam-depot (takwerx)",
   "url": "https://github.com/takwerx/cam-depot",
   "type": "Similar project: ATAK plugin with about 43k cams incl. FAA WeatherCams and wildfire lookouts, AGPL-3.0",
   "useful_for": "Idea: wildfire lookout networks (ALERTWildfire/ALERTCalifornia) and FAA cams as sky layers",
   "found": "2026-11-05",
   "origin": "deepdive-20261105"
  },
  {
   "name": "livecam-jp (kotopapa)",
   "url": "https://kotopapa.github.io/livecam-jp/v1/manifest.json",
   "type": "Similar project: Japanese public live-cam ledger (22,943 cams, per-entry licence tags)",
   "useful_for": "Discovery for Japan river/road/volcano cams; ledger licence unstated, so go to upstream operators",
   "found": "2026-11-05",
   "origin": "deepdive-20261105"
  },
  {
   "name": "traffic-camera-sources / LiveTrafficCam (bzsasson)",
   "url": "https://github.com/bzsasson/traffic-camera-sources",
   "type": "Similar project: CC BY 4.0 US source registry + per-state uptime summary",
   "useful_for": "Uptime benchmarks per state (SD 96.5%, MT 97.7% 14-day) and terms URLs per source",
   "found": "2026-11-05",
   "origin": "deepdive-20261105"
  },
  {
   "name": "Dato Claro (datoclaro.live)",
   "url": "https://datoclaro.live/como-funciona/",
   "type": "Similar project: Spain DGT camera viewer",
   "useful_for": "Shows the DGT NAP XML is reused openly; refresh list every 6 h, image every 45 s",
   "found": "2026-11-05",
   "origin": "deepdive-20261105"
  },
  {
   "name": "iptv-org / community webcam m3u lists (HasBahCa, jrgmayo, UzunMuhalefet)",
   "url": "https://github.com/iptv-org/iptv",
   "type": "Similar projects: IPTV playlists with webcam groups",
   "useful_for": "Lead source only: most webcam entries are commercial (skyline, webcamera.pl, 1000eyes, livecameras.gr) or app back ends; never copy URLs without the operator's terms",
   "found": "2026-11-05",
   "origin": "deepdive-20261105"
  },
  {
   "name": "Borealis Monitor (fotofanatic.nl) aurora all-sky webcam dashboard",
   "url": "https://borealismonitor.fotofanatic.nl/webcams",
   "type": "Similar project: aurora webcam + Kp dashboard",
   "useful_for": "Lead source only: webcams.js lists FMI aurorasnow, SGO, IRF Kiruna, KHO Svalbard, AuroraMAX, foto-webcam.eu, UiT Tromsø ASC01, allsky.tv. Gave us uit-tromso-allsky. Do not copy its list; go to each operator.",
   "found": "2026-11-07",
   "origin": "deepdive-20261107"
  },
  {
   "name": "aurorawebcams.com / seetheaurora.com / SpaceWeatherLive webcams",
   "url": "https://www.aurorawebcams.com/",
   "type": "Similar projects: aurora webcam aggregators (lists + maps)",
   "useful_for": "Lead sources for aurora/all-sky operators to audit next rounds; mostly link-outs or embeds, not open feeds.",
   "found": "2026-11-07",
   "origin": "deepdive-20261107"
  },
  {
   "name": "USGS HIVIS front end (apps.usgs.gov/hivis)",
   "url": "https://apps.usgs.gov/hivis/",
   "type": "Similar project: federal camera map (river cams)",
   "useful_for": "Shows how USGS builds a camera map from one JSON list + S3 newest stills; model for our stills plugins. The JS bundle embeds its own api.data.gov key - never reuse it.",
   "found": "2026-11-07",
   "origin": "deepdive-20261107"
  },
  {
   "name": "observatories.hodar.com (observatory weather + webcam pages)",
   "url": "https://observatories.hodar.com/",
   "type": "Similar project: per-observatory weather/sky/webcam dashboards",
   "useful_for": "Lead list of observatories with cams (Apache Pt, Big Bear, Kitt Pk, Lick, Lowell, McDonald, Mt Graham, Mt Lemmon, Mt Wilson, Palomar, Whipple, WIRO, Mauna Kea, AAO, CASLEO). Go to each operator.",
   "found": "2026-11-08",
   "origin": "deepdive-20261108"
  },
  {
   "name": "Canarias Vista: Webcams en Observatorios Astronómicos (janubio.com)",
   "url": "https://janubio.com/canariasvista/especial/observatorios-webcams.html",
   "type": "Similar project: observatory webcam list (hotlinked images)",
   "useful_for": "Shows how a list is built by hotlinking observatory stills (Palomar, CFHT, HPWREN Mt Laguna/Mt Wilson, ESA Cebreros, Ondřejov, San Pedro Mártir). Leads only; many links are http-only or stale.",
   "found": "2026-11-08",
   "origin": "deepdive-20261108"
  },
  {
   "name": "nationalparkcam.com (National Parks Webcams)",
   "url": "https://www.nationalparkcam.com/",
   "type": "Similar project: national park webcam aggregator (US + world)",
   "useful_for": "Lead source for park cams (e.g. Kosciuszko via Thredbo S3 stills). Do not copy; go to operators.",
   "found": "2026-11-08",
   "origin": "deepdive-20261108"
  },
  {
   "name": "aurorawebcam.watch (aurora webcam directory incl. SMILE all-sky imagers)",
   "url": "https://aurorawebcam.watch/",
   "type": "Similar project: aurora webcam directory",
   "useful_for": "Lists SMILE ASI sites (Lucky Lake SK, etc.) and other aurora cams; leads only, go to UCalgary/AuroraX.",
   "found": "2026-11-09",
   "origin": "deepdive-20261109"
  },
  {
   "name": "LiveSunrise (livesunrise.io)",
   "url": "https://www.livesunrise.io/locations",
   "type": "Similar project: sunrise cams in 57 locations (mostly YouTube)",
   "useful_for": "Idea model for a 'sunrise now' rotation by longitude; their sources are mostly YouTube (not usable).",
   "found": "2026-11-09",
   "origin": "deepdive-20261109"
  },
  {
   "name": "Port of Cams / USA Travel Cams",
   "url": "https://portofcams.com/tags/wyoming/",
   "type": "Similar projects: curated US travel/park cam directories",
   "useful_for": "Gateway-town cam leads (Jackson, Yellowstone gates, Estes Park). Go to operators.",
   "found": "2026-11-09",
   "origin": "deepdive-20261109"
  },
  {
   "name": "Te Anau Town live cameras page",
   "url": "https://www.teanautown.nz/cameras",
   "type": "Similar project: town page hotlinking NZTA road cams",
   "useful_for": "Shows the gateway-town pattern: DMO/town pages reuse public road cams. Fiordland list for nz-nzta.",
   "found": "2026-11-09",
   "origin": "deepdive-20261109"
  }
 ],
 "coverage_gaps": {
  "method": "Prod /map.json camera lat/lon (all mapped cams incl. stills). playlist_channels = cams whose id is in streams.m3u8. Per-phase method in phases.<id>.method.",
  "rating": {
   "region": "none = 0 mapped; weak = <50 playlist channels; ok = >=50",
   "metro": "none = 0 mapped; weak = <10 playlist channels; ok = >=10"
  },
  "phases": {
   "p1": {
    "countries": [
     "US",
     "CA"
    ],
    "regions": [
     {
      "name": "Alabama",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 598,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Alaska",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 517,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Arizona",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 699,
      "video_cameras": 1,
      "playlist_channels": 1,
      "rating": "weak"
     },
     {
      "name": "Arkansas",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 13,
      "video_cameras": 13,
      "playlist_channels": 13,
      "rating": "weak"
     },
     {
      "name": "California",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 3602,
      "video_cameras": 2199,
      "playlist_channels": 758,
      "rating": "ok"
     },
     {
      "name": "Colorado",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 1299,
      "video_cameras": 823,
      "playlist_channels": 819,
      "rating": "ok"
     },
     {
      "name": "Connecticut",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 348,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Delaware",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 357,
      "video_cameras": 357,
      "playlist_channels": 355,
      "rating": "ok"
     },
     {
      "name": "District of Columbia",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 158,
      "video_cameras": 157,
      "playlist_channels": 137,
      "rating": "ok"
     },
     {
      "name": "Florida",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 5351,
      "video_cameras": 448,
      "playlist_channels": 429,
      "rating": "ok"
     },
     {
      "name": "Georgia",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 4337,
      "video_cameras": 3,
      "playlist_channels": 3,
      "rating": "weak"
     },
     {
      "name": "Hawaii",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 316,
      "video_cameras": 291,
      "playlist_channels": 105,
      "rating": "ok"
     },
     {
      "name": "Idaho",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 679,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Illinois",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 36,
      "video_cameras": 12,
      "playlist_channels": 12,
      "rating": "weak"
     },
     {
      "name": "Indiana",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 762,
      "video_cameras": 745,
      "playlist_channels": 743,
      "rating": "ok"
     },
     {
      "name": "Iowa",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 1258,
      "video_cameras": 684,
      "playlist_channels": 583,
      "rating": "ok"
     },
     {
      "name": "Kansas",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 416,
      "video_cameras": 200,
      "playlist_channels": 200,
      "rating": "ok"
     },
     {
      "name": "Kentucky",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 28,
      "video_cameras": 12,
      "playlist_channels": 12,
      "rating": "weak"
     },
     {
      "name": "Louisiana",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 490,
      "video_cameras": 490,
      "playlist_channels": 469,
      "rating": "ok"
     },
     {
      "name": "Maine",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 97,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Maryland",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 537,
      "video_cameras": 535,
      "playlist_channels": 519,
      "rating": "ok"
     },
     {
      "name": "Massachusetts",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 16,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Michigan",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 25,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Minnesota",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 1952,
      "video_cameras": 1250,
      "playlist_channels": 1100,
      "rating": "ok"
     },
     {
      "name": "Mississippi",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 922,
      "video_cameras": 922,
      "playlist_channels": 921,
      "rating": "ok"
     },
     {
      "name": "Missouri",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 742,
      "video_cameras": 554,
      "playlist_channels": 382,
      "rating": "ok"
     },
     {
      "name": "Montana",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 27,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Nebraska",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 1020,
      "video_cameras": 3,
      "playlist_channels": 2,
      "rating": "weak"
     },
     {
      "name": "Nevada",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 662,
      "video_cameras": 626,
      "playlist_channels": 519,
      "rating": "ok"
     },
     {
      "name": "New Hampshire",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 179,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "New Jersey",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 295,
      "video_cameras": 39,
      "playlist_channels": 41,
      "rating": "weak"
     },
     {
      "name": "New Mexico",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 8,
      "video_cameras": 1,
      "playlist_channels": 1,
      "rating": "weak"
     },
     {
      "name": "New York",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 3592,
      "video_cameras": 1701,
      "playlist_channels": 1485,
      "rating": "ok"
     },
     {
      "name": "North Carolina",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 975,
      "video_cameras": 965,
      "playlist_channels": 965,
      "rating": "ok"
     },
     {
      "name": "North Dakota",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 582,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Ohio",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 1124,
      "video_cameras": 3,
      "playlist_channels": 3,
      "rating": "weak"
     },
     {
      "name": "Oklahoma",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 470,
      "video_cameras": 469,
      "playlist_channels": 469,
      "rating": "ok"
     },
     {
      "name": "Oregon",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 48,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Pennsylvania",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 1458,
      "video_cameras": 4,
      "playlist_channels": 4,
      "rating": "weak"
     },
     {
      "name": "Rhode Island",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "South Carolina",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 799,
      "video_cameras": 792,
      "playlist_channels": 779,
      "rating": "ok"
     },
     {
      "name": "South Dakota",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 13,
      "video_cameras": 3,
      "playlist_channels": 3,
      "rating": "weak"
     },
     {
      "name": "Tennessee",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 12,
      "video_cameras": 11,
      "playlist_channels": 11,
      "rating": "weak"
     },
     {
      "name": "Texas",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 3609,
      "video_cameras": 3554,
      "playlist_channels": 3350,
      "rating": "ok"
     },
     {
      "name": "Utah",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 2091,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Vermont",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 86,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Virginia",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 1854,
      "video_cameras": 1842,
      "playlist_channels": 1759,
      "rating": "ok"
     },
     {
      "name": "Washington",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 2472,
      "video_cameras": 724,
      "playlist_channels": 654,
      "rating": "ok"
     },
     {
      "name": "West Virginia",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 161,
      "video_cameras": 151,
      "playlist_channels": 135,
      "rating": "ok"
     },
     {
      "name": "Wisconsin",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 574,
      "video_cameras": 463,
      "playlist_channels": 456,
      "rating": "ok"
     },
     {
      "name": "Wyoming",
      "country": "US",
      "kind": "state",
      "mapped_cameras": 30,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Alberta",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 645,
      "video_cameras": 58,
      "playlist_channels": 56,
      "rating": "ok"
     },
     {
      "name": "British Columbia",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 1075,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Manitoba",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 55,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "New Brunswick",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 66,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Newfoundland and Labrador",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 48,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Northwest Territories",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 7,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Nova Scotia",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 61,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Nunavut",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 4,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Ontario",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 2041,
      "video_cameras": 2,
      "playlist_channels": 2,
      "rating": "weak"
     },
     {
      "name": "Prince Edward Island",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 7,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Quebec",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 2,
      "video_cameras": 2,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Saskatchewan",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 72,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Yukon",
      "country": "CA",
      "kind": "province/territory",
      "mapped_cameras": 18,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     }
    ],
    "metros": [
     {
      "name": "New York",
      "country": "US",
      "pop_millions": 19.5,
      "radius_km": 50,
      "mapped_cameras": 2775,
      "video_cameras": 689,
      "playlist_channels": 603,
      "rating": "ok"
     },
     {
      "name": "Los Angeles",
      "country": "US",
      "pop_millions": 12.8,
      "radius_km": 50,
      "mapped_cameras": 673,
      "video_cameras": 518,
      "playlist_channels": 63,
      "rating": "ok"
     },
     {
      "name": "Chicago",
      "country": "US",
      "pop_millions": 9.3,
      "radius_km": 50,
      "mapped_cameras": 58,
      "video_cameras": 56,
      "playlist_channels": 56,
      "rating": "ok"
     },
     {
      "name": "Dallas-Fort Worth",
      "country": "US",
      "pop_millions": 8.1,
      "radius_km": 50,
      "mapped_cameras": 933,
      "video_cameras": 926,
      "playlist_channels": 864,
      "rating": "ok"
     },
     {
      "name": "Houston",
      "country": "US",
      "pop_millions": 7.5,
      "radius_km": 50,
      "mapped_cameras": 702,
      "video_cameras": 693,
      "playlist_channels": 670,
      "rating": "ok"
     },
     {
      "name": "Washington DC",
      "country": "US",
      "pop_millions": 6.3,
      "radius_km": 50,
      "mapped_cameras": 1040,
      "video_cameras": 1029,
      "playlist_channels": 970,
      "rating": "ok"
     },
     {
      "name": "Philadelphia",
      "country": "US",
      "pop_millions": 6.2,
      "radius_km": 50,
      "mapped_cameras": 606,
      "video_cameras": 98,
      "playlist_channels": 98,
      "rating": "ok"
     },
     {
      "name": "Atlanta",
      "country": "US",
      "pop_millions": 6.3,
      "radius_km": 50,
      "mapped_cameras": 2822,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Miami",
      "country": "US",
      "pop_millions": 6.1,
      "radius_km": 50,
      "mapped_cameras": 843,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Phoenix",
      "country": "US",
      "pop_millions": 5.1,
      "radius_km": 50,
      "mapped_cameras": 389,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Boston",
      "country": "US",
      "pop_millions": 4.9,
      "radius_km": 50,
      "mapped_cameras": 21,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Riverside-San Bernardino",
      "country": "US",
      "pop_millions": 4.7,
      "radius_km": 50,
      "mapped_cameras": 457,
      "video_cameras": 407,
      "playlist_channels": 183,
      "rating": "ok"
     },
     {
      "name": "San Francisco-Oakland",
      "country": "US",
      "pop_millions": 4.6,
      "radius_km": 50,
      "mapped_cameras": 522,
      "video_cameras": 134,
      "playlist_channels": 41,
      "rating": "ok"
     },
     {
      "name": "Detroit",
      "country": "US",
      "pop_millions": 4.3,
      "radius_km": 50,
      "mapped_cameras": 60,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Seattle",
      "country": "US",
      "pop_millions": 4.0,
      "radius_km": 50,
      "mapped_cameras": 1391,
      "video_cameras": 602,
      "playlist_channels": 537,
      "rating": "ok"
     },
     {
      "name": "Minneapolis-St Paul",
      "country": "US",
      "pop_millions": 3.7,
      "radius_km": 50,
      "mapped_cameras": 1057,
      "video_cameras": 976,
      "playlist_channels": 873,
      "rating": "ok"
     },
     {
      "name": "Tampa",
      "country": "US",
      "pop_millions": 3.3,
      "radius_km": 50,
      "mapped_cameras": 762,
      "video_cameras": 34,
      "playlist_channels": 32,
      "rating": "ok"
     },
     {
      "name": "San Diego",
      "country": "US",
      "pop_millions": 3.3,
      "radius_km": 50,
      "mapped_cameras": 401,
      "video_cameras": 212,
      "playlist_channels": 70,
      "rating": "ok"
     },
     {
      "name": "Denver",
      "country": "US",
      "pop_millions": 3.0,
      "radius_km": 50,
      "mapped_cameras": 610,
      "video_cameras": 477,
      "playlist_channels": 475,
      "rating": "ok"
     },
     {
      "name": "Baltimore",
      "country": "US",
      "pop_millions": 2.8,
      "radius_km": 50,
      "mapped_cameras": 338,
      "video_cameras": 335,
      "playlist_channels": 324,
      "rating": "ok"
     },
     {
      "name": "Orlando",
      "country": "US",
      "pop_millions": 2.8,
      "radius_km": 50,
      "mapped_cameras": 783,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "St. Louis",
      "country": "US",
      "pop_millions": 2.8,
      "radius_km": 50,
      "mapped_cameras": 285,
      "video_cameras": 285,
      "playlist_channels": 182,
      "rating": "ok"
     },
     {
      "name": "Charlotte",
      "country": "US",
      "pop_millions": 2.8,
      "radius_km": 50,
      "mapped_cameras": 246,
      "video_cameras": 241,
      "playlist_channels": 238,
      "rating": "ok"
     },
     {
      "name": "San Antonio",
      "country": "US",
      "pop_millions": 2.7,
      "radius_km": 50,
      "mapped_cameras": 288,
      "video_cameras": 284,
      "playlist_channels": 277,
      "rating": "ok"
     },
     {
      "name": "Portland OR",
      "country": "US",
      "pop_millions": 2.5,
      "radius_km": 50,
      "mapped_cameras": 158,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Austin",
      "country": "US",
      "pop_millions": 2.5,
      "radius_km": 50,
      "mapped_cameras": 257,
      "video_cameras": 255,
      "playlist_channels": 205,
      "rating": "ok"
     },
     {
      "name": "Sacramento",
      "country": "US",
      "pop_millions": 2.4,
      "radius_km": 50,
      "mapped_cameras": 187,
      "video_cameras": 175,
      "playlist_channels": 94,
      "rating": "ok"
     },
     {
      "name": "Pittsburgh",
      "country": "US",
      "pop_millions": 2.4,
      "radius_km": 50,
      "mapped_cameras": 286,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Las Vegas",
      "country": "US",
      "pop_millions": 2.3,
      "radius_km": 50,
      "mapped_cameras": 359,
      "video_cameras": 345,
      "playlist_channels": 261,
      "rating": "ok"
     },
     {
      "name": "Cincinnati",
      "country": "US",
      "pop_millions": 2.3,
      "radius_km": 50,
      "mapped_cameras": 232,
      "video_cameras": 2,
      "playlist_channels": 2,
      "rating": "weak"
     },
     {
      "name": "Kansas City",
      "country": "US",
      "pop_millions": 2.2,
      "radius_km": 50,
      "mapped_cameras": 341,
      "video_cameras": 1,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Columbus OH",
      "country": "US",
      "pop_millions": 2.1,
      "radius_km": 50,
      "mapped_cameras": 364,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Indianapolis",
      "country": "US",
      "pop_millions": 2.1,
      "radius_km": 50,
      "mapped_cameras": 346,
      "video_cameras": 346,
      "playlist_channels": 344,
      "rating": "ok"
     },
     {
      "name": "Cleveland",
      "country": "US",
      "pop_millions": 2.2,
      "radius_km": 50,
      "mapped_cameras": 148,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Nashville",
      "country": "US",
      "pop_millions": 2.0,
      "radius_km": 50,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "San Jose",
      "country": "US",
      "pop_millions": 2.0,
      "radius_km": 50,
      "mapped_cameras": 324,
      "video_cameras": 83,
      "playlist_channels": 26,
      "rating": "ok"
     },
     {
      "name": "Virginia Beach-Norfolk",
      "country": "US",
      "pop_millions": 1.8,
      "radius_km": 35,
      "mapped_cameras": 407,
      "video_cameras": 404,
      "playlist_channels": 378,
      "rating": "ok"
     },
     {
      "name": "Jacksonville",
      "country": "US",
      "pop_millions": 1.7,
      "radius_km": 35,
      "mapped_cameras": 277,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Providence",
      "country": "US",
      "pop_millions": 1.7,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Raleigh",
      "country": "US",
      "pop_millions": 1.5,
      "radius_km": 35,
      "mapped_cameras": 208,
      "video_cameras": 206,
      "playlist_channels": 206,
      "rating": "ok"
     },
     {
      "name": "Milwaukee",
      "country": "US",
      "pop_millions": 1.6,
      "radius_km": 35,
      "mapped_cameras": 206,
      "video_cameras": 191,
      "playlist_channels": 187,
      "rating": "ok"
     },
     {
      "name": "Oklahoma City",
      "country": "US",
      "pop_millions": 1.4,
      "radius_km": 35,
      "mapped_cameras": 289,
      "video_cameras": 289,
      "playlist_channels": 289,
      "rating": "ok"
     },
     {
      "name": "Memphis",
      "country": "US",
      "pop_millions": 1.3,
      "radius_km": 35,
      "mapped_cameras": 182,
      "video_cameras": 182,
      "playlist_channels": 181,
      "rating": "ok"
     },
     {
      "name": "Louisville",
      "country": "US",
      "pop_millions": 1.3,
      "radius_km": 35,
      "mapped_cameras": 65,
      "video_cameras": 63,
      "playlist_channels": 63,
      "rating": "ok"
     },
     {
      "name": "Richmond VA",
      "country": "US",
      "pop_millions": 1.3,
      "radius_km": 35,
      "mapped_cameras": 120,
      "video_cameras": 120,
      "playlist_channels": 108,
      "rating": "ok"
     },
     {
      "name": "Salt Lake City",
      "country": "US",
      "pop_millions": 1.3,
      "radius_km": 35,
      "mapped_cameras": 756,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "New Orleans",
      "country": "US",
      "pop_millions": 1.0,
      "radius_km": 35,
      "mapped_cameras": 73,
      "video_cameras": 73,
      "playlist_channels": 70,
      "rating": "ok"
     },
     {
      "name": "Birmingham AL",
      "country": "US",
      "pop_millions": 1.1,
      "radius_km": 35,
      "mapped_cameras": 141,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Hartford",
      "country": "US",
      "pop_millions": 1.2,
      "radius_km": 35,
      "mapped_cameras": 198,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Buffalo",
      "country": "US",
      "pop_millions": 1.2,
      "radius_km": 35,
      "mapped_cameras": 200,
      "video_cameras": 163,
      "playlist_channels": 146,
      "rating": "ok"
     },
     {
      "name": "Rochester NY",
      "country": "US",
      "pop_millions": 1.1,
      "radius_km": 35,
      "mapped_cameras": 198,
      "video_cameras": 197,
      "playlist_channels": 185,
      "rating": "ok"
     },
     {
      "name": "Grand Rapids",
      "country": "US",
      "pop_millions": 1.1,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Tucson",
      "country": "US",
      "pop_millions": 1.1,
      "radius_km": 35,
      "mapped_cameras": 41,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Honolulu",
      "country": "US",
      "pop_millions": 1.0,
      "radius_km": 35,
      "mapped_cameras": 304,
      "video_cameras": 302,
      "playlist_channels": 115,
      "rating": "ok"
     },
     {
      "name": "Tulsa",
      "country": "US",
      "pop_millions": 1.0,
      "radius_km": 35,
      "mapped_cameras": 156,
      "video_cameras": 156,
      "playlist_channels": 156,
      "rating": "ok"
     },
     {
      "name": "Fresno",
      "country": "US",
      "pop_millions": 1.0,
      "radius_km": 35,
      "mapped_cameras": 61,
      "video_cameras": 56,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Worcester",
      "country": "US",
      "pop_millions": 0.98,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Omaha",
      "country": "US",
      "pop_millions": 0.97,
      "radius_km": 35,
      "mapped_cameras": 164,
      "video_cameras": 74,
      "playlist_channels": 72,
      "rating": "ok"
     },
     {
      "name": "Bridgeport-Stamford",
      "country": "US",
      "pop_millions": 0.95,
      "radius_km": 35,
      "mapped_cameras": 84,
      "video_cameras": 7,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Greenville SC",
      "country": "US",
      "pop_millions": 0.95,
      "radius_km": 35,
      "mapped_cameras": 83,
      "video_cameras": 83,
      "playlist_channels": 83,
      "rating": "ok"
     },
     {
      "name": "Albuquerque",
      "country": "US",
      "pop_millions": 0.92,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Bakersfield",
      "country": "US",
      "pop_millions": 0.91,
      "radius_km": 35,
      "mapped_cameras": 25,
      "video_cameras": 25,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Albany NY",
      "country": "US",
      "pop_millions": 0.9,
      "radius_km": 35,
      "mapped_cameras": 99,
      "video_cameras": 90,
      "playlist_channels": 85,
      "rating": "ok"
     },
     {
      "name": "Knoxville",
      "country": "US",
      "pop_millions": 0.9,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "El Paso",
      "country": "US",
      "pop_millions": 0.87,
      "radius_km": 35,
      "mapped_cameras": 182,
      "video_cameras": 182,
      "playlist_channels": 166,
      "rating": "ok"
     },
     {
      "name": "Baton Rouge",
      "country": "US",
      "pop_millions": 0.87,
      "radius_km": 35,
      "mapped_cameras": 133,
      "video_cameras": 133,
      "playlist_channels": 125,
      "rating": "ok"
     },
     {
      "name": "McAllen",
      "country": "US",
      "pop_millions": 0.88,
      "radius_km": 35,
      "mapped_cameras": 6,
      "video_cameras": 6,
      "playlist_channels": 6,
      "rating": "weak"
     },
     {
      "name": "New Haven",
      "country": "US",
      "pop_millions": 0.86,
      "radius_km": 35,
      "mapped_cameras": 131,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Allentown",
      "country": "US",
      "pop_millions": 0.86,
      "radius_km": 35,
      "mapped_cameras": 54,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Oxnard-Ventura",
      "country": "US",
      "pop_millions": 0.84,
      "radius_km": 35,
      "mapped_cameras": 14,
      "video_cameras": 11,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Columbia SC",
      "country": "US",
      "pop_millions": 0.84,
      "radius_km": 35,
      "mapped_cameras": 173,
      "video_cameras": 172,
      "playlist_channels": 170,
      "rating": "ok"
     },
     {
      "name": "North Port-Sarasota",
      "country": "US",
      "pop_millions": 0.88,
      "radius_km": 35,
      "mapped_cameras": 502,
      "video_cameras": 243,
      "playlist_channels": 241,
      "rating": "ok"
     },
     {
      "name": "Dayton",
      "country": "US",
      "pop_millions": 0.81,
      "radius_km": 35,
      "mapped_cameras": 85,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Charleston SC",
      "country": "US",
      "pop_millions": 0.83,
      "radius_km": 35,
      "mapped_cameras": 85,
      "video_cameras": 85,
      "playlist_channels": 83,
      "rating": "ok"
     },
     {
      "name": "Greensboro",
      "country": "US",
      "pop_millions": 0.78,
      "radius_km": 35,
      "mapped_cameras": 122,
      "video_cameras": 121,
      "playlist_channels": 121,
      "rating": "ok"
     },
     {
      "name": "Stockton",
      "country": "US",
      "pop_millions": 0.79,
      "radius_km": 35,
      "mapped_cameras": 81,
      "video_cameras": 76,
      "playlist_channels": 39,
      "rating": "ok"
     },
     {
      "name": "Cape Coral-Fort Myers",
      "country": "US",
      "pop_millions": 0.82,
      "radius_km": 35,
      "mapped_cameras": 63,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Boise",
      "country": "US",
      "pop_millions": 0.8,
      "radius_km": 35,
      "mapped_cameras": 247,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Colorado Springs",
      "country": "US",
      "pop_millions": 0.76,
      "radius_km": 35,
      "mapped_cameras": 53,
      "video_cameras": 40,
      "playlist_channels": 39,
      "rating": "ok"
     },
     {
      "name": "Little Rock",
      "country": "US",
      "pop_millions": 0.76,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Lakeland",
      "country": "US",
      "pop_millions": 0.79,
      "radius_km": 35,
      "mapped_cameras": 72,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Akron",
      "country": "US",
      "pop_millions": 0.7,
      "radius_km": 35,
      "mapped_cameras": 95,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Des Moines",
      "country": "US",
      "pop_millions": 0.72,
      "radius_km": 35,
      "mapped_cameras": 192,
      "video_cameras": 152,
      "playlist_channels": 137,
      "rating": "ok"
     },
     {
      "name": "Springfield MA",
      "country": "US",
      "pop_millions": 0.7,
      "radius_km": 35,
      "mapped_cameras": 27,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Ogden",
      "country": "US",
      "pop_millions": 0.7,
      "radius_km": 35,
      "mapped_cameras": 254,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Poughkeepsie",
      "country": "US",
      "pop_millions": 0.7,
      "radius_km": 35,
      "mapped_cameras": 31,
      "video_cameras": 31,
      "playlist_channels": 30,
      "rating": "ok"
     },
     {
      "name": "Madison",
      "country": "US",
      "pop_millions": 0.68,
      "radius_km": 35,
      "mapped_cameras": 73,
      "video_cameras": 53,
      "playlist_channels": 58,
      "rating": "ok"
     },
     {
      "name": "Winston-Salem",
      "country": "US",
      "pop_millions": 0.68,
      "radius_km": 35,
      "mapped_cameras": 125,
      "video_cameras": 125,
      "playlist_channels": 125,
      "rating": "ok"
     },
     {
      "name": "Deltona-Daytona Beach",
      "country": "US",
      "pop_millions": 0.7,
      "radius_km": 35,
      "mapped_cameras": 103,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Syracuse",
      "country": "US",
      "pop_millions": 0.66,
      "radius_km": 35,
      "mapped_cameras": 83,
      "video_cameras": 82,
      "playlist_channels": 67,
      "rating": "ok"
     },
     {
      "name": "Provo-Orem",
      "country": "US",
      "pop_millions": 0.7,
      "radius_km": 35,
      "mapped_cameras": 494,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Toledo",
      "country": "US",
      "pop_millions": 0.64,
      "radius_km": 35,
      "mapped_cameras": 79,
      "video_cameras": 2,
      "playlist_channels": 2,
      "rating": "weak"
     },
     {
      "name": "Wichita",
      "country": "US",
      "pop_millions": 0.65,
      "radius_km": 35,
      "mapped_cameras": 102,
      "video_cameras": 100,
      "playlist_channels": 100,
      "rating": "ok"
     },
     {
      "name": "Durham-Chapel Hill",
      "country": "US",
      "pop_millions": 0.65,
      "radius_km": 35,
      "mapped_cameras": 144,
      "video_cameras": 143,
      "playlist_channels": 143,
      "rating": "ok"
     },
     {
      "name": "Augusta GA",
      "country": "US",
      "pop_millions": 0.62,
      "radius_km": 35,
      "mapped_cameras": 20,
      "video_cameras": 5,
      "playlist_channels": 5,
      "rating": "weak"
     },
     {
      "name": "Palm Bay-Melbourne",
      "country": "US",
      "pop_millions": 0.63,
      "radius_km": 35,
      "mapped_cameras": 58,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Jackson MS",
      "country": "US",
      "pop_millions": 0.59,
      "radius_km": 35,
      "mapped_cameras": 211,
      "video_cameras": 211,
      "playlist_channels": 211,
      "rating": "ok"
     },
     {
      "name": "Harrisburg",
      "country": "US",
      "pop_millions": 0.6,
      "radius_km": 35,
      "mapped_cameras": 122,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Spokane",
      "country": "US",
      "pop_millions": 0.6,
      "radius_km": 35,
      "mapped_cameras": 245,
      "video_cameras": 122,
      "playlist_channels": 117,
      "rating": "ok"
     },
     {
      "name": "Scranton-Wilkes-Barre",
      "country": "US",
      "pop_millions": 0.57,
      "radius_km": 35,
      "mapped_cameras": 42,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Chattanooga",
      "country": "US",
      "pop_millions": 0.57,
      "radius_km": 35,
      "mapped_cameras": 60,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Lancaster PA",
      "country": "US",
      "pop_millions": 0.55,
      "radius_km": 35,
      "mapped_cameras": 53,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Modesto",
      "country": "US",
      "pop_millions": 0.55,
      "radius_km": 35,
      "mapped_cameras": 69,
      "video_cameras": 69,
      "playlist_channels": 32,
      "rating": "ok"
     },
     {
      "name": "Portland ME",
      "country": "US",
      "pop_millions": 0.55,
      "radius_km": 35,
      "mapped_cameras": 11,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Fayetteville AR",
      "country": "US",
      "pop_millions": 0.56,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Lansing",
      "country": "US",
      "pop_millions": 0.54,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Youngstown",
      "country": "US",
      "pop_millions": 0.54,
      "radius_km": 35,
      "mapped_cameras": 25,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Pensacola",
      "country": "US",
      "pop_millions": 0.52,
      "radius_km": 35,
      "mapped_cameras": 67,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Lexington KY",
      "country": "US",
      "pop_millions": 0.52,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Reno",
      "country": "US",
      "pop_millions": 0.5,
      "radius_km": 35,
      "mapped_cameras": 130,
      "video_cameras": 123,
      "playlist_channels": 112,
      "rating": "ok"
     },
     {
      "name": "Huntsville",
      "country": "US",
      "pop_millions": 0.51,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Myrtle Beach",
      "country": "US",
      "pop_millions": 0.53,
      "radius_km": 35,
      "mapped_cameras": 42,
      "video_cameras": 41,
      "playlist_channels": 40,
      "rating": "ok"
     },
     {
      "name": "Port St. Lucie",
      "country": "US",
      "pop_millions": 0.51,
      "radius_km": 35,
      "mapped_cameras": 117,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Killeen-Temple",
      "country": "US",
      "pop_millions": 0.5,
      "radius_km": 35,
      "mapped_cameras": 40,
      "video_cameras": 38,
      "playlist_channels": 37,
      "rating": "ok"
     },
     {
      "name": "Toronto",
      "country": "CA",
      "pop_millions": 6.2,
      "radius_km": 50,
      "mapped_cameras": 715,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Montréal",
      "country": "CA",
      "pop_millions": 4.3,
      "radius_km": 50,
      "mapped_cameras": 2,
      "video_cameras": 2,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Vancouver",
      "country": "CA",
      "pop_millions": 2.6,
      "radius_km": 50,
      "mapped_cameras": 290,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Ottawa-Gatineau",
      "country": "CA",
      "pop_millions": 1.5,
      "radius_km": 35,
      "mapped_cameras": 36,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Calgary",
      "country": "CA",
      "pop_millions": 1.5,
      "radius_km": 35,
      "mapped_cameras": 252,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Edmonton",
      "country": "CA",
      "pop_millions": 1.4,
      "radius_km": 35,
      "mapped_cameras": 115,
      "video_cameras": 58,
      "playlist_channels": 56,
      "rating": "ok"
     },
     {
      "name": "Québec City",
      "country": "CA",
      "pop_millions": 0.84,
      "radius_km": 35,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Winnipeg",
      "country": "CA",
      "pop_millions": 0.83,
      "radius_km": 35,
      "mapped_cameras": 11,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Hamilton",
      "country": "CA",
      "pop_millions": 0.79,
      "radius_km": 35,
      "mapped_cameras": 107,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Kitchener-Cambridge-Waterloo",
      "country": "CA",
      "pop_millions": 0.58,
      "radius_km": 35,
      "mapped_cameras": 59,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "London ON",
      "country": "CA",
      "pop_millions": 0.54,
      "radius_km": 35,
      "mapped_cameras": 72,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Halifax",
      "country": "CA",
      "pop_millions": 0.47,
      "radius_km": 35,
      "mapped_cameras": 13,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "St. Catharines-Niagara",
      "country": "CA",
      "pop_millions": 0.43,
      "radius_km": 35,
      "mapped_cameras": 125,
      "video_cameras": 26,
      "playlist_channels": 25,
      "rating": "ok"
     },
     {
      "name": "Windsor",
      "country": "CA",
      "pop_millions": 0.42,
      "radius_km": 35,
      "mapped_cameras": 50,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Oshawa",
      "country": "CA",
      "pop_millions": 0.42,
      "radius_km": 35,
      "mapped_cameras": 108,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Victoria",
      "country": "CA",
      "pop_millions": 0.4,
      "radius_km": 35,
      "mapped_cameras": 96,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Saskatoon",
      "country": "CA",
      "pop_millions": 0.32,
      "radius_km": 35,
      "mapped_cameras": 5,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     }
    ],
    "method": "point-in-polygon (states/provinces); metros by radius 50 km if pop>=2M else 35 km; US metros >=0.5M, CA CMAs >=0.25M"
   },
   "p2": {
    "countries": [
     "NZ"
    ],
    "regions": [
     {
      "name": "Northland",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Auckland",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 2,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Waikato",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Bay of Plenty",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Gisborne",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Hawke's Bay",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Taranaki",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Manawatū-Whanganui",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 7,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Wellington",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Tasman",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Nelson",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Marlborough",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "West Coast",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Canterbury",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 11,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Otago",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 3,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Southland",
      "country": "NZ",
      "kind": "region",
      "mapped_cameras": 8,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     }
    ],
    "metros": [
     {
      "name": "Auckland",
      "country": "NZ",
      "pop_millions": 1.73,
      "radius_km": 30,
      "mapped_cameras": 2,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Wellington",
      "country": "NZ",
      "pop_millions": 0.44,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Christchurch",
      "country": "NZ",
      "pop_millions": 0.4,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Hamilton",
      "country": "NZ",
      "pop_millions": 0.19,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Tauranga",
      "country": "NZ",
      "pop_millions": 0.16,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Dunedin",
      "country": "NZ",
      "pop_millions": 0.13,
      "radius_km": 30,
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     }
    ],
    "method": "cams in country bbox assigned to nearest region centroid (approx; no polygons yet); cities by radius 50 km if pop>=2M else 30 km"
   },
   "p3": {
    "countries": [
     "AU"
    ],
    "regions": [
     {
      "name": "New South Wales",
      "country": "AU",
      "kind": "state/territory",
      "mapped_cameras": 2,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Victoria",
      "country": "AU",
      "kind": "state/territory",
      "mapped_cameras": 4,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Queensland",
      "country": "AU",
      "kind": "state/territory",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Western Australia",
      "country": "AU",
      "kind": "state/territory",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "South Australia",
      "country": "AU",
      "kind": "state/territory",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Tasmania",
      "country": "AU",
      "kind": "state/territory",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Northern Territory",
      "country": "AU",
      "kind": "state/territory",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Australian Capital Territory",
      "country": "AU",
      "kind": "state/territory",
      "mapped_cameras": 3,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     }
    ],
    "metros": [
     {
      "name": "Sydney",
      "country": "AU",
      "pop_millions": 5.45,
      "radius_km": 50,
      "mapped_cameras": 2,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Melbourne",
      "country": "AU",
      "pop_millions": 5.2,
      "radius_km": 50,
      "mapped_cameras": 4,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Brisbane",
      "country": "AU",
      "pop_millions": 2.7,
      "radius_km": 50,
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Perth",
      "country": "AU",
      "pop_millions": 2.3,
      "radius_km": 50,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Adelaide",
      "country": "AU",
      "pop_millions": 1.45,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Gold Coast–Tweed Heads",
      "country": "AU",
      "pop_millions": 0.73,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Newcastle–Maitland",
      "country": "AU",
      "pop_millions": 0.53,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Canberra",
      "country": "AU",
      "pop_millions": 0.47,
      "radius_km": 30,
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Sunshine Coast",
      "country": "AU",
      "pop_millions": 0.38,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Wollongong",
      "country": "AU",
      "pop_millions": 0.31,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Geelong",
      "country": "AU",
      "pop_millions": 0.3,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Hobart",
      "country": "AU",
      "pop_millions": 0.25,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Darwin",
      "country": "AU",
      "pop_millions": 0.15,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     }
    ],
    "method": "cams in country bbox assigned to nearest region centroid (approx; no polygons yet); cities by radius 50 km if pop>=2M else 30 km"
   },
   "p4": {
    "countries": [
     "GB"
    ],
    "regions": [
     {
      "name": "England",
      "country": "GB",
      "kind": "nation",
      "mapped_cameras": 849,
      "video_cameras": 2,
      "playlist_channels": 2,
      "rating": "weak"
     },
     {
      "name": "North East",
      "country": "GB",
      "kind": "English region",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "North West",
      "country": "GB",
      "kind": "English region",
      "mapped_cameras": 1,
      "video_cameras": 1,
      "playlist_channels": 1,
      "rating": "weak"
     },
     {
      "name": "Yorkshire and the Humber",
      "country": "GB",
      "kind": "English region",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "East Midlands",
      "country": "GB",
      "kind": "English region",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "West Midlands",
      "country": "GB",
      "kind": "English region",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "East of England",
      "country": "GB",
      "kind": "English region",
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "London",
      "country": "GB",
      "kind": "English region",
      "mapped_cameras": 834,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "South East",
      "country": "GB",
      "kind": "English region",
      "mapped_cameras": 6,
      "video_cameras": 1,
      "playlist_channels": 1,
      "rating": "weak"
     },
     {
      "name": "South West",
      "country": "GB",
      "kind": "English region",
      "mapped_cameras": 5,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Scotland",
      "country": "GB",
      "kind": "nation",
      "mapped_cameras": 13,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Wales",
      "country": "GB",
      "kind": "nation",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Northern Ireland",
      "country": "GB",
      "kind": "nation",
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     }
    ],
    "metros": [
     {
      "name": "London",
      "country": "GB",
      "pop_millions": 9.0,
      "radius_km": 50,
      "mapped_cameras": 836,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Birmingham",
      "country": "GB",
      "pop_millions": 1.14,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Leeds",
      "country": "GB",
      "pop_millions": 0.81,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Glasgow",
      "country": "GB",
      "pop_millions": 0.63,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Sheffield",
      "country": "GB",
      "pop_millions": 0.56,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Manchester",
      "country": "GB",
      "pop_millions": 0.55,
      "radius_km": 30,
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Bradford",
      "country": "GB",
      "pop_millions": 0.55,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Edinburgh",
      "country": "GB",
      "pop_millions": 0.51,
      "radius_km": 30,
      "mapped_cameras": 2,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Liverpool",
      "country": "GB",
      "pop_millions": 0.49,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Bristol",
      "country": "GB",
      "pop_millions": 0.47,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Leicester",
      "country": "GB",
      "pop_millions": 0.37,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Cardiff",
      "country": "GB",
      "pop_millions": 0.36,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Coventry",
      "country": "GB",
      "pop_millions": 0.35,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Belfast",
      "country": "GB",
      "pop_millions": 0.35,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Nottingham",
      "country": "GB",
      "pop_millions": 0.32,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Newcastle upon Tyne",
      "country": "GB",
      "pop_millions": 0.3,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Brighton and Hove",
      "country": "GB",
      "pop_millions": 0.28,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Kingston upon Hull",
      "country": "GB",
      "pop_millions": 0.27,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Plymouth",
      "country": "GB",
      "pop_millions": 0.26,
      "radius_km": 30,
      "mapped_cameras": 3,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Stoke-on-Trent",
      "country": "GB",
      "pop_millions": 0.26,
      "radius_km": 30,
      "mapped_cameras": 1,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "weak"
     },
     {
      "name": "Wolverhampton",
      "country": "GB",
      "pop_millions": 0.26,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Derby",
      "country": "GB",
      "pop_millions": 0.26,
      "radius_km": 30,
      "mapped_cameras": 0,
      "video_cameras": 0,
      "playlist_channels": 0,
      "rating": "none"
     },
     {
      "name": "Southampton",
      "country": "GB",
      "pop_millions": 0.25,
      "radius_km": 30,
      "mapped_cameras": 1,
      "video_cameras": 1,
      "playlist_channels": 1,
      "rating": "weak"
     }
    ],
    "method": "cams in country bbox assigned to nearest region centroid (approx; no polygons yet); cities by radius 50 km if pop>=2M else 30 km"
   }
  },
  "regions": [
   {
    "name": "Alabama",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 598,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Alaska",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 517,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Arizona",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 699,
    "video_cameras": 1,
    "playlist_channels": 1,
    "rating": "weak"
   },
   {
    "name": "Arkansas",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 13,
    "video_cameras": 13,
    "playlist_channels": 13,
    "rating": "weak"
   },
   {
    "name": "California",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 3602,
    "video_cameras": 2199,
    "playlist_channels": 758,
    "rating": "ok"
   },
   {
    "name": "Colorado",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 1299,
    "video_cameras": 823,
    "playlist_channels": 819,
    "rating": "ok"
   },
   {
    "name": "Connecticut",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 348,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Delaware",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 357,
    "video_cameras": 357,
    "playlist_channels": 355,
    "rating": "ok"
   },
   {
    "name": "District of Columbia",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 158,
    "video_cameras": 157,
    "playlist_channels": 137,
    "rating": "ok"
   },
   {
    "name": "Florida",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 5351,
    "video_cameras": 448,
    "playlist_channels": 429,
    "rating": "ok"
   },
   {
    "name": "Georgia",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 4337,
    "video_cameras": 3,
    "playlist_channels": 3,
    "rating": "weak"
   },
   {
    "name": "Hawaii",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 316,
    "video_cameras": 291,
    "playlist_channels": 105,
    "rating": "ok"
   },
   {
    "name": "Idaho",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 679,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Illinois",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 36,
    "video_cameras": 12,
    "playlist_channels": 12,
    "rating": "weak"
   },
   {
    "name": "Indiana",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 762,
    "video_cameras": 745,
    "playlist_channels": 743,
    "rating": "ok"
   },
   {
    "name": "Iowa",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 1258,
    "video_cameras": 684,
    "playlist_channels": 583,
    "rating": "ok"
   },
   {
    "name": "Kansas",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 416,
    "video_cameras": 200,
    "playlist_channels": 200,
    "rating": "ok"
   },
   {
    "name": "Kentucky",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 28,
    "video_cameras": 12,
    "playlist_channels": 12,
    "rating": "weak"
   },
   {
    "name": "Louisiana",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 490,
    "video_cameras": 490,
    "playlist_channels": 469,
    "rating": "ok"
   },
   {
    "name": "Maine",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 97,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Maryland",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 537,
    "video_cameras": 535,
    "playlist_channels": 519,
    "rating": "ok"
   },
   {
    "name": "Massachusetts",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 16,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Michigan",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 25,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Minnesota",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 1952,
    "video_cameras": 1250,
    "playlist_channels": 1100,
    "rating": "ok"
   },
   {
    "name": "Mississippi",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 922,
    "video_cameras": 922,
    "playlist_channels": 921,
    "rating": "ok"
   },
   {
    "name": "Missouri",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 742,
    "video_cameras": 554,
    "playlist_channels": 382,
    "rating": "ok"
   },
   {
    "name": "Montana",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 27,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Nebraska",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 1020,
    "video_cameras": 3,
    "playlist_channels": 2,
    "rating": "weak"
   },
   {
    "name": "Nevada",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 662,
    "video_cameras": 626,
    "playlist_channels": 519,
    "rating": "ok"
   },
   {
    "name": "New Hampshire",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 179,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "New Jersey",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 295,
    "video_cameras": 39,
    "playlist_channels": 41,
    "rating": "weak"
   },
   {
    "name": "New Mexico",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 8,
    "video_cameras": 1,
    "playlist_channels": 1,
    "rating": "weak"
   },
   {
    "name": "New York",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 3592,
    "video_cameras": 1701,
    "playlist_channels": 1485,
    "rating": "ok"
   },
   {
    "name": "North Carolina",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 975,
    "video_cameras": 965,
    "playlist_channels": 965,
    "rating": "ok"
   },
   {
    "name": "North Dakota",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 582,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Ohio",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 1124,
    "video_cameras": 3,
    "playlist_channels": 3,
    "rating": "weak"
   },
   {
    "name": "Oklahoma",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 470,
    "video_cameras": 469,
    "playlist_channels": 469,
    "rating": "ok"
   },
   {
    "name": "Oregon",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 48,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Pennsylvania",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 1458,
    "video_cameras": 4,
    "playlist_channels": 4,
    "rating": "weak"
   },
   {
    "name": "Rhode Island",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "South Carolina",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 799,
    "video_cameras": 792,
    "playlist_channels": 779,
    "rating": "ok"
   },
   {
    "name": "South Dakota",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 13,
    "video_cameras": 3,
    "playlist_channels": 3,
    "rating": "weak"
   },
   {
    "name": "Tennessee",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 12,
    "video_cameras": 11,
    "playlist_channels": 11,
    "rating": "weak"
   },
   {
    "name": "Texas",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 3609,
    "video_cameras": 3554,
    "playlist_channels": 3350,
    "rating": "ok"
   },
   {
    "name": "Utah",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 2091,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Vermont",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 86,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Virginia",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 1854,
    "video_cameras": 1842,
    "playlist_channels": 1759,
    "rating": "ok"
   },
   {
    "name": "Washington",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 2472,
    "video_cameras": 724,
    "playlist_channels": 654,
    "rating": "ok"
   },
   {
    "name": "West Virginia",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 161,
    "video_cameras": 151,
    "playlist_channels": 135,
    "rating": "ok"
   },
   {
    "name": "Wisconsin",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 574,
    "video_cameras": 463,
    "playlist_channels": 456,
    "rating": "ok"
   },
   {
    "name": "Wyoming",
    "country": "US",
    "kind": "state",
    "mapped_cameras": 30,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Alberta",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 645,
    "video_cameras": 58,
    "playlist_channels": 56,
    "rating": "ok"
   },
   {
    "name": "British Columbia",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 1075,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Manitoba",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 55,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "New Brunswick",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 66,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Newfoundland and Labrador",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 48,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Northwest Territories",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 7,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Nova Scotia",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 61,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Nunavut",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 4,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Ontario",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 2041,
    "video_cameras": 2,
    "playlist_channels": 2,
    "rating": "weak"
   },
   {
    "name": "Prince Edward Island",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 7,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Quebec",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 2,
    "video_cameras": 2,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Saskatchewan",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 72,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Yukon",
    "country": "CA",
    "kind": "province/territory",
    "mapped_cameras": 18,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   }
  ],
  "metros": [
   {
    "name": "New York",
    "country": "US",
    "pop_millions": 19.5,
    "radius_km": 50,
    "mapped_cameras": 2775,
    "video_cameras": 689,
    "playlist_channels": 603,
    "rating": "ok"
   },
   {
    "name": "Los Angeles",
    "country": "US",
    "pop_millions": 12.8,
    "radius_km": 50,
    "mapped_cameras": 673,
    "video_cameras": 518,
    "playlist_channels": 63,
    "rating": "ok"
   },
   {
    "name": "Chicago",
    "country": "US",
    "pop_millions": 9.3,
    "radius_km": 50,
    "mapped_cameras": 58,
    "video_cameras": 56,
    "playlist_channels": 56,
    "rating": "ok"
   },
   {
    "name": "Dallas-Fort Worth",
    "country": "US",
    "pop_millions": 8.1,
    "radius_km": 50,
    "mapped_cameras": 933,
    "video_cameras": 926,
    "playlist_channels": 864,
    "rating": "ok"
   },
   {
    "name": "Houston",
    "country": "US",
    "pop_millions": 7.5,
    "radius_km": 50,
    "mapped_cameras": 702,
    "video_cameras": 693,
    "playlist_channels": 670,
    "rating": "ok"
   },
   {
    "name": "Washington DC",
    "country": "US",
    "pop_millions": 6.3,
    "radius_km": 50,
    "mapped_cameras": 1040,
    "video_cameras": 1029,
    "playlist_channels": 970,
    "rating": "ok"
   },
   {
    "name": "Philadelphia",
    "country": "US",
    "pop_millions": 6.2,
    "radius_km": 50,
    "mapped_cameras": 606,
    "video_cameras": 98,
    "playlist_channels": 98,
    "rating": "ok"
   },
   {
    "name": "Atlanta",
    "country": "US",
    "pop_millions": 6.3,
    "radius_km": 50,
    "mapped_cameras": 2822,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Miami",
    "country": "US",
    "pop_millions": 6.1,
    "radius_km": 50,
    "mapped_cameras": 843,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Phoenix",
    "country": "US",
    "pop_millions": 5.1,
    "radius_km": 50,
    "mapped_cameras": 389,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Boston",
    "country": "US",
    "pop_millions": 4.9,
    "radius_km": 50,
    "mapped_cameras": 21,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Riverside-San Bernardino",
    "country": "US",
    "pop_millions": 4.7,
    "radius_km": 50,
    "mapped_cameras": 457,
    "video_cameras": 407,
    "playlist_channels": 183,
    "rating": "ok"
   },
   {
    "name": "San Francisco-Oakland",
    "country": "US",
    "pop_millions": 4.6,
    "radius_km": 50,
    "mapped_cameras": 522,
    "video_cameras": 134,
    "playlist_channels": 41,
    "rating": "ok"
   },
   {
    "name": "Detroit",
    "country": "US",
    "pop_millions": 4.3,
    "radius_km": 50,
    "mapped_cameras": 60,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Seattle",
    "country": "US",
    "pop_millions": 4.0,
    "radius_km": 50,
    "mapped_cameras": 1391,
    "video_cameras": 602,
    "playlist_channels": 537,
    "rating": "ok"
   },
   {
    "name": "Minneapolis-St Paul",
    "country": "US",
    "pop_millions": 3.7,
    "radius_km": 50,
    "mapped_cameras": 1057,
    "video_cameras": 976,
    "playlist_channels": 873,
    "rating": "ok"
   },
   {
    "name": "Tampa",
    "country": "US",
    "pop_millions": 3.3,
    "radius_km": 50,
    "mapped_cameras": 762,
    "video_cameras": 34,
    "playlist_channels": 32,
    "rating": "ok"
   },
   {
    "name": "San Diego",
    "country": "US",
    "pop_millions": 3.3,
    "radius_km": 50,
    "mapped_cameras": 401,
    "video_cameras": 212,
    "playlist_channels": 70,
    "rating": "ok"
   },
   {
    "name": "Denver",
    "country": "US",
    "pop_millions": 3.0,
    "radius_km": 50,
    "mapped_cameras": 610,
    "video_cameras": 477,
    "playlist_channels": 475,
    "rating": "ok"
   },
   {
    "name": "Baltimore",
    "country": "US",
    "pop_millions": 2.8,
    "radius_km": 50,
    "mapped_cameras": 338,
    "video_cameras": 335,
    "playlist_channels": 324,
    "rating": "ok"
   },
   {
    "name": "Orlando",
    "country": "US",
    "pop_millions": 2.8,
    "radius_km": 50,
    "mapped_cameras": 783,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "St. Louis",
    "country": "US",
    "pop_millions": 2.8,
    "radius_km": 50,
    "mapped_cameras": 285,
    "video_cameras": 285,
    "playlist_channels": 182,
    "rating": "ok"
   },
   {
    "name": "Charlotte",
    "country": "US",
    "pop_millions": 2.8,
    "radius_km": 50,
    "mapped_cameras": 246,
    "video_cameras": 241,
    "playlist_channels": 238,
    "rating": "ok"
   },
   {
    "name": "San Antonio",
    "country": "US",
    "pop_millions": 2.7,
    "radius_km": 50,
    "mapped_cameras": 288,
    "video_cameras": 284,
    "playlist_channels": 277,
    "rating": "ok"
   },
   {
    "name": "Portland OR",
    "country": "US",
    "pop_millions": 2.5,
    "radius_km": 50,
    "mapped_cameras": 158,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Austin",
    "country": "US",
    "pop_millions": 2.5,
    "radius_km": 50,
    "mapped_cameras": 257,
    "video_cameras": 255,
    "playlist_channels": 205,
    "rating": "ok"
   },
   {
    "name": "Sacramento",
    "country": "US",
    "pop_millions": 2.4,
    "radius_km": 50,
    "mapped_cameras": 187,
    "video_cameras": 175,
    "playlist_channels": 94,
    "rating": "ok"
   },
   {
    "name": "Pittsburgh",
    "country": "US",
    "pop_millions": 2.4,
    "radius_km": 50,
    "mapped_cameras": 286,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Las Vegas",
    "country": "US",
    "pop_millions": 2.3,
    "radius_km": 50,
    "mapped_cameras": 359,
    "video_cameras": 345,
    "playlist_channels": 261,
    "rating": "ok"
   },
   {
    "name": "Cincinnati",
    "country": "US",
    "pop_millions": 2.3,
    "radius_km": 50,
    "mapped_cameras": 232,
    "video_cameras": 2,
    "playlist_channels": 2,
    "rating": "weak"
   },
   {
    "name": "Kansas City",
    "country": "US",
    "pop_millions": 2.2,
    "radius_km": 50,
    "mapped_cameras": 341,
    "video_cameras": 1,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Columbus OH",
    "country": "US",
    "pop_millions": 2.1,
    "radius_km": 50,
    "mapped_cameras": 364,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Indianapolis",
    "country": "US",
    "pop_millions": 2.1,
    "radius_km": 50,
    "mapped_cameras": 346,
    "video_cameras": 346,
    "playlist_channels": 344,
    "rating": "ok"
   },
   {
    "name": "Cleveland",
    "country": "US",
    "pop_millions": 2.2,
    "radius_km": 50,
    "mapped_cameras": 148,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Nashville",
    "country": "US",
    "pop_millions": 2.0,
    "radius_km": 50,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "San Jose",
    "country": "US",
    "pop_millions": 2.0,
    "radius_km": 50,
    "mapped_cameras": 324,
    "video_cameras": 83,
    "playlist_channels": 26,
    "rating": "ok"
   },
   {
    "name": "Virginia Beach-Norfolk",
    "country": "US",
    "pop_millions": 1.8,
    "radius_km": 35,
    "mapped_cameras": 407,
    "video_cameras": 404,
    "playlist_channels": 378,
    "rating": "ok"
   },
   {
    "name": "Jacksonville",
    "country": "US",
    "pop_millions": 1.7,
    "radius_km": 35,
    "mapped_cameras": 277,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Providence",
    "country": "US",
    "pop_millions": 1.7,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Raleigh",
    "country": "US",
    "pop_millions": 1.5,
    "radius_km": 35,
    "mapped_cameras": 208,
    "video_cameras": 206,
    "playlist_channels": 206,
    "rating": "ok"
   },
   {
    "name": "Milwaukee",
    "country": "US",
    "pop_millions": 1.6,
    "radius_km": 35,
    "mapped_cameras": 206,
    "video_cameras": 191,
    "playlist_channels": 187,
    "rating": "ok"
   },
   {
    "name": "Oklahoma City",
    "country": "US",
    "pop_millions": 1.4,
    "radius_km": 35,
    "mapped_cameras": 289,
    "video_cameras": 289,
    "playlist_channels": 289,
    "rating": "ok"
   },
   {
    "name": "Memphis",
    "country": "US",
    "pop_millions": 1.3,
    "radius_km": 35,
    "mapped_cameras": 182,
    "video_cameras": 182,
    "playlist_channels": 181,
    "rating": "ok"
   },
   {
    "name": "Louisville",
    "country": "US",
    "pop_millions": 1.3,
    "radius_km": 35,
    "mapped_cameras": 65,
    "video_cameras": 63,
    "playlist_channels": 63,
    "rating": "ok"
   },
   {
    "name": "Richmond VA",
    "country": "US",
    "pop_millions": 1.3,
    "radius_km": 35,
    "mapped_cameras": 120,
    "video_cameras": 120,
    "playlist_channels": 108,
    "rating": "ok"
   },
   {
    "name": "Salt Lake City",
    "country": "US",
    "pop_millions": 1.3,
    "radius_km": 35,
    "mapped_cameras": 756,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "New Orleans",
    "country": "US",
    "pop_millions": 1.0,
    "radius_km": 35,
    "mapped_cameras": 73,
    "video_cameras": 73,
    "playlist_channels": 70,
    "rating": "ok"
   },
   {
    "name": "Birmingham AL",
    "country": "US",
    "pop_millions": 1.1,
    "radius_km": 35,
    "mapped_cameras": 141,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Hartford",
    "country": "US",
    "pop_millions": 1.2,
    "radius_km": 35,
    "mapped_cameras": 198,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Buffalo",
    "country": "US",
    "pop_millions": 1.2,
    "radius_km": 35,
    "mapped_cameras": 200,
    "video_cameras": 163,
    "playlist_channels": 146,
    "rating": "ok"
   },
   {
    "name": "Rochester NY",
    "country": "US",
    "pop_millions": 1.1,
    "radius_km": 35,
    "mapped_cameras": 198,
    "video_cameras": 197,
    "playlist_channels": 185,
    "rating": "ok"
   },
   {
    "name": "Grand Rapids",
    "country": "US",
    "pop_millions": 1.1,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Tucson",
    "country": "US",
    "pop_millions": 1.1,
    "radius_km": 35,
    "mapped_cameras": 41,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Honolulu",
    "country": "US",
    "pop_millions": 1.0,
    "radius_km": 35,
    "mapped_cameras": 304,
    "video_cameras": 302,
    "playlist_channels": 115,
    "rating": "ok"
   },
   {
    "name": "Tulsa",
    "country": "US",
    "pop_millions": 1.0,
    "radius_km": 35,
    "mapped_cameras": 156,
    "video_cameras": 156,
    "playlist_channels": 156,
    "rating": "ok"
   },
   {
    "name": "Fresno",
    "country": "US",
    "pop_millions": 1.0,
    "radius_km": 35,
    "mapped_cameras": 61,
    "video_cameras": 56,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Worcester",
    "country": "US",
    "pop_millions": 0.98,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Omaha",
    "country": "US",
    "pop_millions": 0.97,
    "radius_km": 35,
    "mapped_cameras": 164,
    "video_cameras": 74,
    "playlist_channels": 72,
    "rating": "ok"
   },
   {
    "name": "Bridgeport-Stamford",
    "country": "US",
    "pop_millions": 0.95,
    "radius_km": 35,
    "mapped_cameras": 84,
    "video_cameras": 7,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Greenville SC",
    "country": "US",
    "pop_millions": 0.95,
    "radius_km": 35,
    "mapped_cameras": 83,
    "video_cameras": 83,
    "playlist_channels": 83,
    "rating": "ok"
   },
   {
    "name": "Albuquerque",
    "country": "US",
    "pop_millions": 0.92,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Bakersfield",
    "country": "US",
    "pop_millions": 0.91,
    "radius_km": 35,
    "mapped_cameras": 25,
    "video_cameras": 25,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Albany NY",
    "country": "US",
    "pop_millions": 0.9,
    "radius_km": 35,
    "mapped_cameras": 99,
    "video_cameras": 90,
    "playlist_channels": 85,
    "rating": "ok"
   },
   {
    "name": "Knoxville",
    "country": "US",
    "pop_millions": 0.9,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "El Paso",
    "country": "US",
    "pop_millions": 0.87,
    "radius_km": 35,
    "mapped_cameras": 182,
    "video_cameras": 182,
    "playlist_channels": 166,
    "rating": "ok"
   },
   {
    "name": "Baton Rouge",
    "country": "US",
    "pop_millions": 0.87,
    "radius_km": 35,
    "mapped_cameras": 133,
    "video_cameras": 133,
    "playlist_channels": 125,
    "rating": "ok"
   },
   {
    "name": "McAllen",
    "country": "US",
    "pop_millions": 0.88,
    "radius_km": 35,
    "mapped_cameras": 6,
    "video_cameras": 6,
    "playlist_channels": 6,
    "rating": "weak"
   },
   {
    "name": "New Haven",
    "country": "US",
    "pop_millions": 0.86,
    "radius_km": 35,
    "mapped_cameras": 131,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Allentown",
    "country": "US",
    "pop_millions": 0.86,
    "radius_km": 35,
    "mapped_cameras": 54,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Oxnard-Ventura",
    "country": "US",
    "pop_millions": 0.84,
    "radius_km": 35,
    "mapped_cameras": 14,
    "video_cameras": 11,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Columbia SC",
    "country": "US",
    "pop_millions": 0.84,
    "radius_km": 35,
    "mapped_cameras": 173,
    "video_cameras": 172,
    "playlist_channels": 170,
    "rating": "ok"
   },
   {
    "name": "North Port-Sarasota",
    "country": "US",
    "pop_millions": 0.88,
    "radius_km": 35,
    "mapped_cameras": 502,
    "video_cameras": 243,
    "playlist_channels": 241,
    "rating": "ok"
   },
   {
    "name": "Dayton",
    "country": "US",
    "pop_millions": 0.81,
    "radius_km": 35,
    "mapped_cameras": 85,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Charleston SC",
    "country": "US",
    "pop_millions": 0.83,
    "radius_km": 35,
    "mapped_cameras": 85,
    "video_cameras": 85,
    "playlist_channels": 83,
    "rating": "ok"
   },
   {
    "name": "Greensboro",
    "country": "US",
    "pop_millions": 0.78,
    "radius_km": 35,
    "mapped_cameras": 122,
    "video_cameras": 121,
    "playlist_channels": 121,
    "rating": "ok"
   },
   {
    "name": "Stockton",
    "country": "US",
    "pop_millions": 0.79,
    "radius_km": 35,
    "mapped_cameras": 81,
    "video_cameras": 76,
    "playlist_channels": 39,
    "rating": "ok"
   },
   {
    "name": "Cape Coral-Fort Myers",
    "country": "US",
    "pop_millions": 0.82,
    "radius_km": 35,
    "mapped_cameras": 63,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Boise",
    "country": "US",
    "pop_millions": 0.8,
    "radius_km": 35,
    "mapped_cameras": 247,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Colorado Springs",
    "country": "US",
    "pop_millions": 0.76,
    "radius_km": 35,
    "mapped_cameras": 53,
    "video_cameras": 40,
    "playlist_channels": 39,
    "rating": "ok"
   },
   {
    "name": "Little Rock",
    "country": "US",
    "pop_millions": 0.76,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Lakeland",
    "country": "US",
    "pop_millions": 0.79,
    "radius_km": 35,
    "mapped_cameras": 72,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Akron",
    "country": "US",
    "pop_millions": 0.7,
    "radius_km": 35,
    "mapped_cameras": 95,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Des Moines",
    "country": "US",
    "pop_millions": 0.72,
    "radius_km": 35,
    "mapped_cameras": 192,
    "video_cameras": 152,
    "playlist_channels": 137,
    "rating": "ok"
   },
   {
    "name": "Springfield MA",
    "country": "US",
    "pop_millions": 0.7,
    "radius_km": 35,
    "mapped_cameras": 27,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Ogden",
    "country": "US",
    "pop_millions": 0.7,
    "radius_km": 35,
    "mapped_cameras": 254,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Poughkeepsie",
    "country": "US",
    "pop_millions": 0.7,
    "radius_km": 35,
    "mapped_cameras": 31,
    "video_cameras": 31,
    "playlist_channels": 30,
    "rating": "ok"
   },
   {
    "name": "Madison",
    "country": "US",
    "pop_millions": 0.68,
    "radius_km": 35,
    "mapped_cameras": 73,
    "video_cameras": 53,
    "playlist_channels": 58,
    "rating": "ok"
   },
   {
    "name": "Winston-Salem",
    "country": "US",
    "pop_millions": 0.68,
    "radius_km": 35,
    "mapped_cameras": 125,
    "video_cameras": 125,
    "playlist_channels": 125,
    "rating": "ok"
   },
   {
    "name": "Deltona-Daytona Beach",
    "country": "US",
    "pop_millions": 0.7,
    "radius_km": 35,
    "mapped_cameras": 103,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Syracuse",
    "country": "US",
    "pop_millions": 0.66,
    "radius_km": 35,
    "mapped_cameras": 83,
    "video_cameras": 82,
    "playlist_channels": 67,
    "rating": "ok"
   },
   {
    "name": "Provo-Orem",
    "country": "US",
    "pop_millions": 0.7,
    "radius_km": 35,
    "mapped_cameras": 494,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Toledo",
    "country": "US",
    "pop_millions": 0.64,
    "radius_km": 35,
    "mapped_cameras": 79,
    "video_cameras": 2,
    "playlist_channels": 2,
    "rating": "weak"
   },
   {
    "name": "Wichita",
    "country": "US",
    "pop_millions": 0.65,
    "radius_km": 35,
    "mapped_cameras": 102,
    "video_cameras": 100,
    "playlist_channels": 100,
    "rating": "ok"
   },
   {
    "name": "Durham-Chapel Hill",
    "country": "US",
    "pop_millions": 0.65,
    "radius_km": 35,
    "mapped_cameras": 144,
    "video_cameras": 143,
    "playlist_channels": 143,
    "rating": "ok"
   },
   {
    "name": "Augusta GA",
    "country": "US",
    "pop_millions": 0.62,
    "radius_km": 35,
    "mapped_cameras": 20,
    "video_cameras": 5,
    "playlist_channels": 5,
    "rating": "weak"
   },
   {
    "name": "Palm Bay-Melbourne",
    "country": "US",
    "pop_millions": 0.63,
    "radius_km": 35,
    "mapped_cameras": 58,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Jackson MS",
    "country": "US",
    "pop_millions": 0.59,
    "radius_km": 35,
    "mapped_cameras": 211,
    "video_cameras": 211,
    "playlist_channels": 211,
    "rating": "ok"
   },
   {
    "name": "Harrisburg",
    "country": "US",
    "pop_millions": 0.6,
    "radius_km": 35,
    "mapped_cameras": 122,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Spokane",
    "country": "US",
    "pop_millions": 0.6,
    "radius_km": 35,
    "mapped_cameras": 245,
    "video_cameras": 122,
    "playlist_channels": 117,
    "rating": "ok"
   },
   {
    "name": "Scranton-Wilkes-Barre",
    "country": "US",
    "pop_millions": 0.57,
    "radius_km": 35,
    "mapped_cameras": 42,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Chattanooga",
    "country": "US",
    "pop_millions": 0.57,
    "radius_km": 35,
    "mapped_cameras": 60,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Lancaster PA",
    "country": "US",
    "pop_millions": 0.55,
    "radius_km": 35,
    "mapped_cameras": 53,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Modesto",
    "country": "US",
    "pop_millions": 0.55,
    "radius_km": 35,
    "mapped_cameras": 69,
    "video_cameras": 69,
    "playlist_channels": 32,
    "rating": "ok"
   },
   {
    "name": "Portland ME",
    "country": "US",
    "pop_millions": 0.55,
    "radius_km": 35,
    "mapped_cameras": 11,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Fayetteville AR",
    "country": "US",
    "pop_millions": 0.56,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Lansing",
    "country": "US",
    "pop_millions": 0.54,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Youngstown",
    "country": "US",
    "pop_millions": 0.54,
    "radius_km": 35,
    "mapped_cameras": 25,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Pensacola",
    "country": "US",
    "pop_millions": 0.52,
    "radius_km": 35,
    "mapped_cameras": 67,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Lexington KY",
    "country": "US",
    "pop_millions": 0.52,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Reno",
    "country": "US",
    "pop_millions": 0.5,
    "radius_km": 35,
    "mapped_cameras": 130,
    "video_cameras": 123,
    "playlist_channels": 112,
    "rating": "ok"
   },
   {
    "name": "Huntsville",
    "country": "US",
    "pop_millions": 0.51,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Myrtle Beach",
    "country": "US",
    "pop_millions": 0.53,
    "radius_km": 35,
    "mapped_cameras": 42,
    "video_cameras": 41,
    "playlist_channels": 40,
    "rating": "ok"
   },
   {
    "name": "Port St. Lucie",
    "country": "US",
    "pop_millions": 0.51,
    "radius_km": 35,
    "mapped_cameras": 117,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Killeen-Temple",
    "country": "US",
    "pop_millions": 0.5,
    "radius_km": 35,
    "mapped_cameras": 40,
    "video_cameras": 38,
    "playlist_channels": 37,
    "rating": "ok"
   },
   {
    "name": "Toronto",
    "country": "CA",
    "pop_millions": 6.2,
    "radius_km": 50,
    "mapped_cameras": 715,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Montréal",
    "country": "CA",
    "pop_millions": 4.3,
    "radius_km": 50,
    "mapped_cameras": 2,
    "video_cameras": 2,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Vancouver",
    "country": "CA",
    "pop_millions": 2.6,
    "radius_km": 50,
    "mapped_cameras": 290,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Ottawa-Gatineau",
    "country": "CA",
    "pop_millions": 1.5,
    "radius_km": 35,
    "mapped_cameras": 36,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Calgary",
    "country": "CA",
    "pop_millions": 1.5,
    "radius_km": 35,
    "mapped_cameras": 252,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Edmonton",
    "country": "CA",
    "pop_millions": 1.4,
    "radius_km": 35,
    "mapped_cameras": 115,
    "video_cameras": 58,
    "playlist_channels": 56,
    "rating": "ok"
   },
   {
    "name": "Québec City",
    "country": "CA",
    "pop_millions": 0.84,
    "radius_km": 35,
    "mapped_cameras": 0,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "none"
   },
   {
    "name": "Winnipeg",
    "country": "CA",
    "pop_millions": 0.83,
    "radius_km": 35,
    "mapped_cameras": 11,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Hamilton",
    "country": "CA",
    "pop_millions": 0.79,
    "radius_km": 35,
    "mapped_cameras": 107,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Kitchener-Cambridge-Waterloo",
    "country": "CA",
    "pop_millions": 0.58,
    "radius_km": 35,
    "mapped_cameras": 59,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "London ON",
    "country": "CA",
    "pop_millions": 0.54,
    "radius_km": 35,
    "mapped_cameras": 72,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Halifax",
    "country": "CA",
    "pop_millions": 0.47,
    "radius_km": 35,
    "mapped_cameras": 13,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "St. Catharines-Niagara",
    "country": "CA",
    "pop_millions": 0.43,
    "radius_km": 35,
    "mapped_cameras": 125,
    "video_cameras": 26,
    "playlist_channels": 25,
    "rating": "ok"
   },
   {
    "name": "Windsor",
    "country": "CA",
    "pop_millions": 0.42,
    "radius_km": 35,
    "mapped_cameras": 50,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Oshawa",
    "country": "CA",
    "pop_millions": 0.42,
    "radius_km": 35,
    "mapped_cameras": 108,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Victoria",
    "country": "CA",
    "pop_millions": 0.4,
    "radius_km": 35,
    "mapped_cameras": 96,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   },
   {
    "name": "Saskatoon",
    "country": "CA",
    "pop_millions": 0.32,
    "radius_km": 35,
    "mapped_cameras": 5,
    "video_cameras": 0,
    "playlist_channels": 0,
    "rating": "weak"
   }
  ],
  "_compat": "regions/metros = phase p1 (US/CA), kept for schema/1 readers; prefer phases.p1"
 }
}