{"adoption": {"forks": 197, "observed_at": "2026-08-28T04:07:52.963679+00:00", "stars": 3267}, "canonical_url": "https://ross.abutalabs.com/products/ghosten-player", "card": {"archived": false, "artifact_type": "application", "description": "一个视频播放器，支持网盘直连、元数据刮削、IPTV、文件管理等 /   A video player that supports direct connection to network disk, metadata scraping, IPTV, file management, etc.", "domain": ["media", "entertainment", "cross-platform"], "enriched": true, "function": ["video-processing", "file-upload", "gui"], "health_score": 93, "homepage": "https://ghosteneditor.github.io/Ghosten-Player", "language": "Dart", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["GhostenEditor/Ghosten-Player"], "name": "GhostenEditor/Ghosten-Player", "platform": [], "pushed_at": "2026-07-03T16:33:00+00:00", "repo": "GhostenEditor/Ghosten-Player", "stars": 3267, "tags": ["video-player", "iptv", "android-tv", "cloud-drive", "emby", "jellyfin", "metadata-scraping", "webdav", "dlna", "flutter", "video", "android", "mobile", "desktop"], "topics": ["android-tv", "video-player", "iptv", "quark", "aliyundrive", "player", "tv", "flutter", "flutter-apps", "jellyfin", "emby"], "urls": [], "use_cases": ["play videos from aliyun drive or quark cloud drive on android tv", "build a personal media library with automatic metadata scraping", "watch iptv channels with epg on tv", "stream from emby or jellyfin on android phone", "play local video files with subtitle support and gesture controls", "cast video to tv via dlna", "manage and browse cloud drive video files"], "what_it_is": "Ghosten Player is a Flutter-based video player for Android phones and Android TV that aggregates media from cloud drives (Aliyun Drive, Quark, WebDAV), Emby/Jellyfin servers, IPTV streams, and local files. It automatically scrapes metadata from TMDB or NFO files to build a personal media library, entirely locally with no backend required.", "when_to_avoid": ["you need iOS, Windows, or macOS support today (still in development)", "you need a server-side media library like Plex or Kodi's full ecosystem", "you require platforms outside the Android/Flutter ecosystem"], "when_to_choose": ["you want a lightweight, no-backend video player for Android phone and TV", "you need cloud drive direct-play with multi-threaded acceleration and download-while-playing", "you want IPTV with channel switching and EPG built into your media player", "you prefer a fully local app with no server component"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ghosten-player", "repo": "GhostenEditor/Ghosten-Player", "role": "main", "score": 81}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "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:52.963679+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:52.963679+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:23:10.061883+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e72e29176fa9de7c3f0b2eb999549159f79d49a09da49124ad645daff2927fd4", "fetched_at": "2026-08-28T04:07:52.963679+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GhostenEditor/Ghosten-Player"}, {"content_hash": "23cf262d20ca9b2ad7f58a310034528481679a16ed33a002c3d5e893e7c400be", "fetched_at": "2026-08-29T09:36:30.195248+00:00", "kind": "homepage", "missing": false, "url": "https://ghosteneditor.github.io/Ghosten-Player"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 90, "longevity": 50, "rhythm": 87}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 708, "days_push": 61, "days_rel": 88, "gap_med": 11, "n_releases_24m": 36}, "score": 81, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}