{"adoption": {"forks": 154, "observed_at": "2026-08-28T04:06:37.663499+00:00", "stars": 2330}, "canonical_url": "https://ross.abutalabs.com/products/freyr-js", "card": {"archived": false, "artifact_type": "cli-tool", "description": "A tool for downloading songs from music streaming services like Spotify and Apple Music.", "domain": ["media", "developer-tools"], "enriched": true, "function": ["cli", "audio-processing", "web-scraping", "file-system"], "health_score": 84, "homepage": "https://git.io/freyr-js", "language": "JavaScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["miraclx/freyr-js"], "name": "miraclx/freyr-js", "platform": ["cli", "cross-platform"], "pushed_at": "2026-08-26T18:51:20+00:00", "repo": "miraclx/freyr-js", "stars": 2330, "tags": ["music-downloader", "spotify", "apple-music", "deezer", "youtube-audio", "m4a", "aac-encoding", "id3-metadata", "album-art", "playlist-download", "audio", "command-line", "nodejs", "docker"], "topics": ["spotify", "spotify-api", "spotify-web-api", "music-streaming", "music", "audio", "download", "youtube", "track", "album", "playlist", "artist", "itunes", "mpeg-4", "m4a", "m4a-format", "apple-music", "album-art", "nodejs", "deezer"], "urls": [], "use_cases": ["download songs from spotify playlists", "rip apple music tracks to m4a", "download a full album with metadata and album art", "build an organized local music library from streaming urls", "convert spotify playlist to offline audio files", "download music from deezer via command line", "batch download tracks from a streaming service link"], "what_it_is": "Freyr is a Node.js CLI tool that downloads songs from music streaming services like Spotify, Apple Music, and Deezer. It extracts track metadata, fetches the best matching audio from sources like YouTube, encodes it to AAC (.m4a) at 320kbps, embeds metadata and album art, and organizes files into a structured music library.", "when_to_avoid": ["you need to stream or play music rather than download it", "you require lossless or original-quality audio from the streaming service itself", "downloading copyrighted music is not permitted in your jurisdiction or use case"], "when_to_choose": ["you want a command-line tool to turn streaming service URLs into tagged, organized audio files", "you need metadata and album art embedded automatically", "you want cross-platform availability including Docker and npm"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/freyr-js", "repo": "miraclx/freyr-js", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "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:06:37.663499+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.663499+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:38:06.450439+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e98f0be8a8ca95c887f401f5de58d1ee125cd87e9774bd5b927a47280667c2e0", "fetched_at": "2026-08-28T04:06:37.663499+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miraclx/freyr-js"}, {"content_hash": "883f18a4b54c54b67c71d2a84eb8ee5c77f017f81b6878856e42da94bcda6959", "fetched_at": "2026-08-29T10:18:42.727023+00:00", "kind": "homepage", "missing": false, "url": "https://git.io/freyr-js"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 8}, "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": 2381, "days_push": 7, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}