{"adoption": {"forks": 2855, "observed_at": "2026-08-28T04:07:41.465091+00:00", "stars": 3070}, "canonical_url": "https://ross.abutalabs.com/products/moontvplus", "card": {"archived": false, "artifact_type": "application", "description": "MoonTVPlus 是基于 MoonTV v100 二次开发的增强版影视聚合播放器。它在原版基础上新增了外部播放器支持、视频超分、弹幕系统、评论抓取等实用功能，提供更强大的观影体验。", "domain": ["media", "web-development", "self-hosted", "entertainment"], "enriched": true, "function": ["video-processing", "search-engine", "web-scraping", "self-hosted", "chat-interface"], "health_score": 79, "homepage": null, "language": "TypeScript", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["mtvpls/MoonTVPlus"], "name": "mtvpls/MoonTVPlus", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-08-21T07:12:03+00:00", "repo": "mtvpls/MoonTVPlus", "stars": 3070, "tags": ["video-streaming", "video-aggregator", "danmaku", "anime4k", "external-players", "pwa", "nextjs", "media-server", "douban", "m3u8", "web-server", "docker", "nodejs"], "topics": [], "urls": [], "use_cases": ["aggregate multiple video sources into one searchable streaming site", "watch shows with danmaku bullet comments overlaid", "play videos in external players like VLC, MPV, or PotPlayer", "enhance video quality with real-time Anime4K upscaling", "self-host a personal movie library with watch progress sync", "download m3u8 streams and play them locally", "host a synchronized watch party with chat and voice"], "what_it_is": "MoonTVPlus is a self-hosted, enhanced fork of MoonTV that aggregates video from multiple sources into a web-based streaming player built with Next.js, ArtPlayer, and HLS.js. It adds external player support, WebGPU-based video super-resolution (Anime4K), a danmaku (bullet comment) system, Douban review scraping, offline downloads, and a synchronized watch-party room.", "when_to_avoid": ["you need a legal, content-provided streaming service - it ships with no sources and you must supply your own", "you want a simple media server for your own local files (use Jellyfin or Plex instead)", "you cannot self-host or configure storage backends like Redis/Kvrocks"], "when_to_choose": ["you want a self-hosted multi-source video aggregation player with extra features like danmaku and super-resolution", "you need external player handoff, offline downloads, or a private media library integration", "you want to deploy on Docker, Vercel, Cloudflare Workers, or similar platforms"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/moontvplus", "repo": "mtvpls/MoonTVPlus", "role": "main", "score": 60}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "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:07:41.465091+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:41.465091+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:46:37.803733+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fa47ac1d891597bd0056759e2c672c639552e6a17a3f2266429916ea15b9acd9", "fetched_at": "2026-08-28T04:07:41.465091+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mtvpls/MoonTVPlus"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 19, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 274, "days_push": 12, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 60, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}