{"adoption": {"forks": 100, "observed_at": "2026-08-28T04:03:44.869563+00:00", "stars": 1142}, "canonical_url": "https://ross.abutalabs.com/products/spotify-dedup", "card": {"archived": false, "artifact_type": "application", "description": "Remove duplicates from your Spotify Playlists", "domain": ["web-development", "media", "apis"], "enriched": true, "function": ["web-framework", "http-client", "developer-tools"], "health_score": 72, "homepage": "https://spotify-dedup.com", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["JMPerez/spotify-dedup"], "name": "JMPerez/spotify-dedup", "platform": [], "pushed_at": "2026-06-12T15:42:51+00:00", "repo": "JMPerez/spotify-dedup", "stars": 1142, "tags": ["spotify", "spotify-web-api", "deduplication", "music-library", "playlist-cleaner", "open-source-web-app", "automation", "web-server", "nodejs", "typescript"], "topics": ["spotify", "music-library", "spotify-playlist", "remove-duplicates", "spotify-dedup", "spotify-web-api", "spotify-library"], "urls": [], "use_cases": ["remove duplicate songs from my spotify playlists", "clean up duplicated liked songs in my spotify library", "dedupe a huge playlist with thousands of tracks", "find repeated tracks across my spotify account", "alternative to spotify's built-in duplicate remover", "bulk remove duplicates without recreating playlists"], "what_it_is": "Spotify Dedup is an open-source web application that scans a user's Spotify playlists and liked songs to find and remove duplicate tracks via the Spotify Web API. It preserves playlist metadata like creation date and subscribers, and offers advanced deduplication options with user review before deletion.", "when_to_avoid": ["you need deduplication for other music services like Apple Music or YouTube Music", "you want an offline tool that works without connecting to Spotify's API", "you need to deduplicate by audio fingerprint rather than Spotify URI matching"], "when_to_choose": ["you want a free, open-source tool to clean duplicates from Spotify playlists and liked songs", "you need to process very large playlists (thousands of tracks) that other tools struggle with", "you want to keep playlist metadata like creation date and followers while deduplicating", "you want to review duplicates before anything is deleted"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/spotify-dedup", "repo": "JMPerez/spotify-dedup", "role": "main", "score": 71}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "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:03:44.869563+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:44.869563+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:35:01.552811+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f3d0b2410bb8b1b1815fd750595c3c1fb7bcda3e2b2e01dd21956705f19c976", "fetched_at": "2026-08-28T04:03:44.869563+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JMPerez/spotify-dedup"}, {"content_hash": "b1271a2efa2a59b8cee4b3a6c6d69449f36b16c1b30c01497a893619ed8f6648", "fetched_at": "2026-08-29T12:40:25.526850+00:00", "kind": "homepage", "missing": false, "url": "https://spotify-dedup.com"}, {"content_hash": "9f4dfcf471af3ff1dd66a8da3c75a904e55010706cc66f89117d580433ef1f07", "fetched_at": "2026-08-29T12:40:25.529851+00:00", "kind": "site_page", "missing": false, "url": "https://spotify-dedup.com/changelog"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 87, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4402, "days_push": 82, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 71, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}