{"adoption": {"forks": 208, "observed_at": "2026-08-28T04:05:06.929376+00:00", "stars": 1581}, "canonical_url": "https://ross.abutalabs.com/products/doubanfm", "card": {"archived": false, "artifact_type": "cli-tool", "description": "a tiny and smart cli player of douban.fm in Node.js", "domain": ["media", "entertainment", "audio"], "enriched": true, "function": ["cli", "audio-processing", "gui"], "health_score": 20, "homepage": null, "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "abandoned", "member_repos": ["guo-yu/douban.fm"], "name": "guo-yu/douban.fm", "platform": ["cli"], "pushed_at": "2015-09-15T13:05:38+00:00", "repo": "guo-yu/douban.fm", "stars": 1581, "tags": ["douban-fm", "music-player", "terminal-ui", "streaming-audio", "lyrics", "nodejs", "command-line", "macos", "linux"], "topics": [], "urls": [], "use_cases": ["listen to douban fm radio from the terminal", "play music in the command line without a browser", "favorite and share songs while listening to douban radio", "show scrolling lyrics for the currently playing song", "download and play local offline radio stations", "listen to high bitrate audio as a douban pro user"], "what_it_is": "A tiny command-line music player for Douban FM built on Node.js, letting users stream radio channels, favorite songs, and view scrolling lyrics directly in the terminal. It supports personal and hearted-radio channels, offline local playback, high-bitrate audio for Pro users, and HTTP proxy configuration.", "when_to_avoid": ["you need a maintained tool - the last release was in 2015 and the ES6 rewrite is unfinished", "you are on Windows, where native dependencies are poorly supported", "you need customizable audio bitrate or reliable lyric synchronization", "douban fm APIs have changed since the project was abandoned"], "when_to_choose": []}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/doubanfm", "repo": "guo-yu/douban.fm", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "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:06.929376+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:06.929376+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:56:33.537206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7e3e40bd2748bcae56ee5c9c32eecaea9343fb4c5512164a71138964dddbac9d", "fetched_at": "2026-08-28T04:05:06.929376+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guo-yu/douban.fm"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "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": 4807, "days_push": 4005, "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}}