{"adoption": {"forks": 188, "observed_at": "2026-08-28T04:05:29.795731+00:00", "stars": 1736}, "canonical_url": "https://ross.abutalabs.com/products/moonfire-nvr", "card": {"archived": false, "artifact_type": "application", "description": "Moonfire NVR, a security camera network video recorder", "domain": ["security", "self-hosted", "media"], "enriched": true, "function": ["video-processing", "http-server", "database", "self-hosted"], "health_score": 99, "homepage": null, "language": "Rust", "license": "NOASSERTION", "license_family": "other", "maturity": "experimental", "member_repos": ["scottlamb/moonfire-nvr"], "name": "scottlamb/moonfire-nvr", "platform": ["rust", "self-hosted"], "pushed_at": "2026-08-15T01:19:00+00:00", "repo": "scottlamb/moonfire-nvr", "stars": 1736, "tags": ["nvr", "ip-camera", "rtsp", "h264", "surveillance", "sqlite", "raspberry-pi", "video", "linux"], "topics": ["nvr", "ip-camera", "rtsp", "video", "security-camera", "rust", "javascript", "camera"], "urls": [], "use_cases": ["record RTSP streams from IP cameras to disk", "self-hosted NVR for security cameras on a Raspberry Pi", "build mp4 clips from recorded camera footage for arbitrary time ranges", "store weeks of 1080p camera footage on a cheap machine with a big hard drive", "review and trim recorded video segments through a web interface", "run a low-CPU multi-camera recording server"], "what_it_is": "Moonfire NVR is an open-source security camera network video recorder written in Rust. It records H.264-over-RTSP streams from IP cameras to disk with minimal CPU usage, storing frames on disk and metadata in SQLite, and can generate .mp4 files for arbitrary time ranges on the fly.", "when_to_avoid": ["you need motion detection, which is not yet supported", "you need built-in HTTPS/TLS without setting up a proxy server", "you need a polished web UI with a scrub bar or web-based configuration", "you need stable storage/config formats across versions, since it is pre-1.0 with no compatibility guarantees"], "when_to_choose": ["you want a lightweight, self-hosted NVR that records pre-encoded H.264 without re-encoding", "you run cameras on low-power hardware like a Raspberry Pi", "you prefer open-source software with a simple SQLite-backed storage format", "you need on-the-fly mp4 export of arbitrary time ranges"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/moonfire-nvr", "repo": "scottlamb/moonfire-nvr", "role": "main", "score": 98}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "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:05:29.795731+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.795731+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:30:42.874289+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "960e3f3329d7634de43b0a90dbbd652e48aa9e5882e67950d023ffcbcbbb38c8", "fetched_at": "2026-08-28T04:05:29.795731+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scottlamb/moonfire-nvr"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 98}, "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": 3896, "days_push": 19, "days_rel": 19, "gap_med": 12.0, "n_releases_24m": 13}, "score": 98, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}