{"adoption": {"forks": 175, "observed_at": "2026-08-28T04:04:38.304986+00:00", "stars": 1406}, "canonical_url": "https://ross.abutalabs.com/products/shinobi", "card": {"archived": false, "artifact_type": "application", "description": ":peace_symbol: :palestinian_territories: Shinobi CE - The Free Open Source CCTV platform written in Node.JS (Camera Recorder - Security Surveillance Software - Restreamer", "domain": ["security", "self-hosted", "computer-vision", "monitoring", "web-development"], "enriched": true, "function": ["video-processing", "streaming", "http-server", "websocket", "machine-learning", "monitoring", "self-hosted"], "health_score": 20, "homepage": "http://shinobi.video", "language": "JavaScript", "license": "NOASSERTION", "license_family": "other", "maturity": "maintenance", "member_repos": ["moeiscool/Shinobi"], "name": "moeiscool/Shinobi", "platform": ["windows", "self-hosted"], "pushed_at": "2020-09-07T16:14:56+00:00", "repo": "moeiscool/Shinobi", "stars": 1406, "tags": ["cctv", "nvr", "ip-camera", "rtsp", "onvif", "surveillance", "motion-detection", "object-detection", "hls", "restreaming", "camera-recording", "video", "linux", "macos", "nodejs", "docker", "web-server"], "topics": ["websockets", "webm", "mp4", "ip-camera", "stream", "local-cameras", "shinobi", "hls", "camera-recorder", "monitor", "nodejs", "cctv", "cctv-cameras", "nvr", "mjpeg", "base64", "onvif", "zoneminder", "storageareas", "shinobicctv"], "urls": [], "use_cases": ["record footage from IP security cameras", "self-hosted NVR to replace ZoneMinder", "view live camera streams in a web browser", "motion detection alerts for home surveillance", "object detection with TensorFlow or Yolo on camera feeds", "baby monitor or store camera DVR", "restream RTSP cameras via HLS or MJPEG", "manage multi-tenant camera accounts with limited privileges"], "what_it_is": "Shinobi CE is a free, open-source CCTV/NVR platform written in Node.js for recording and managing IP security cameras. It supports RTSP/ONVIF cameras, live web streaming (HLS, MJPEG, WebM, MP4), motion and object detection plugins, and a multi-tier user system.", "when_to_avoid": ["you need a commercially licensed or fully maintained product with guaranteed support", "you require a simple plug-and-play appliance without server administration", "you need guaranteed long-term upstream development on GitHub, since the project moved to GitLab"], "when_to_choose": ["you want a lightweight, fast self-hosted CCTV recorder on Linux, Mac, or Windows", "you need RTSP/ONVIF camera support with a web dashboard", "you want plugin-based motion or object detection", "ZoneMinder or other NVRs have been unreliable for you"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/shinobi", "repo": "moeiscool/Shinobi", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:38.304986+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:38:43.239468+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d11b7a90ae2efdfbd82a958e15d42fa38bcda072f7054221f4b9dd4f1636aa1d", "fetched_at": "2026-08-28T04:04:38.304986+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moeiscool/Shinobi"}, {"content_hash": "cf4aa829153adf5cf345eb772f9499298653c120aa56ad26d4acafa4608f0af7", "fetched_at": "2026-08-29T11:52:36.331569+00:00", "kind": "homepage", "missing": false, "url": "http://shinobi.video"}, {"content_hash": "e61c395500237f9c2f7ea32d091646cb66f7f963337ccb288f5c918072b1270d", "fetched_at": "2026-08-29T11:52:36.334196+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video"}, {"content_hash": "2733d1a780e27821b14cc20a5fd58183db54fcc4fc36cec09be7b46c245524e1", "fetched_at": "2026-08-29T11:52:36.336903+00:00", "kind": "site_page", "missing": false, "url": "http://shinobi.video/features"}, {"content_hash": "f0b184294d522b0074223fc204f3df27d60dc8c047a0d5b13abb72720882e7c7", "fetched_at": "2026-08-29T11:52:36.338736+00:00", "kind": "site_page", "missing": false, "url": "https://docs.shinobi.video/installation"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3561, "days_push": 2186, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}