{"adoption": {"forks": 113, "observed_at": "2026-08-28T04:05:26.764741+00:00", "stars": 1720}, "canonical_url": "https://ross.abutalabs.com/products/lddc", "card": {"archived": false, "artifact_type": "application", "description": "简单易用的精准歌词(逐字歌词/卡拉OK歌词)下载匹配工具|A simple and user-friendly tool for downloading and matching precise lyrics (word-by-word lyrics/Karaoke lyrics)", "domain": ["media", "desktop-applications", "audio"], "enriched": true, "function": ["search-engine", "gui", "file-system", "nlp"], "health_score": 93, "homepage": null, "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["chenmozhijin/LDDC"], "name": "chenmozhijin/LDDC", "platform": ["windows", "python", "cross-platform"], "pushed_at": "2026-08-26T13:58:27+00:00", "repo": "chenmozhijin/LDDC", "stars": 1720, "tags": ["lyrics-downloader", "karaoke-lyrics", "lrc", "srt", "ass", "pyside6", "desktop-lyrics", "music-metadata", "lyrics-translation", "automation", "macos", "linux"], "topics": ["lyrics", "lrc", "lyrics-fetcher", "lyrics-search", "lyrics-finder", "pyside", "pyside6", "python3", "decryptor", "lyric", "lyrics-downloader", "lyrics-download", "requests", "ass", "srt", "all-platforms", "qt6", "mutagen", "desktop-lyrics", "multi-platform"], "urls": [], "use_cases": ["download word-by-word karaoke lyrics for songs", "batch match lyrics to local music files", "convert lyrics between lrc srt and ass formats", "search lyrics across qq music kugou and netease", "write lyrics into mp3 tags automatically", "translate lyrics with bing google or openai", "display karaoke-style desktop lyrics while playing music"], "what_it_is": "LDDC is a cross-platform desktop application for searching, downloading, and matching precise word-by-word (karaoke-style) lyrics from music platforms like QQ Music, Kugou, NetEase, and Lrclib. It supports saving lyrics in multiple formats (LRC, enhanced LRC, SRT, ASS), writing them into audio tags, translating lyrics, and batch format conversion.", "when_to_avoid": ["you only need a library/API to embed lyrics fetching into your own code", "you need a mobile or web-based lyrics tool", "you want to download audio files rather than lyrics"], "when_to_choose": ["you need precise per-character synced lyrics rather than line-level LRC", "you want to batch-tag or batch-convert lyrics for a local music library", "you need lyrics in subtitle formats like SRT or ASS for video editing"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/lddc", "repo": "chenmozhijin/LDDC", "role": "main", "score": 68}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "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:26.764741+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:26.764741+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:34:04.448436+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e388564d965f3011e56452d266d4b371ddd35d836b684a6da45ab6e44d517ecb", "fetched_at": "2026-08-28T04:05:26.764741+00:00", "kind": "readme", "missing": false, "url": "https://github.com/chenmozhijin/LDDC"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 67, "rhythm": 28}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 943, "days_push": 7, "days_rel": 436, "gap_med": 63.5, "n_releases_24m": 5}, "score": 68, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}