{"adoption": {"forks": 57, "observed_at": "2026-08-28T04:04:57.768593+00:00", "stars": 1520}, "canonical_url": "https://ross.abutalabs.com/products/yubal", "card": {"archived": false, "artifact_type": "application", "description": "Self-hosted YouTube Music downloader. Tags, organizes, and keeps playlists in sync.", "domain": ["media", "self-hosted", "files"], "enriched": true, "function": ["http-server", "file-system", "audio-processing", "workflow-automation", "scheduling"], "health_score": 100, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["guillevc/yubal"], "name": "guillevc/yubal", "platform": ["self-hosted", "browser-extension", "python"], "pushed_at": "2026-08-24T05:55:09+00:00", "repo": "guillevc/yubal", "stars": 1520, "tags": ["youtube-music", "yt-dlp", "music-downloader", "playlist-sync", "metadata-tagging", "lyrics", "homelab", "fastapi", "media-server", "automation", "docker", "web-server"], "topics": ["docker", "fastapi", "homelab", "metadata", "music-downloader", "playlist", "python", "self-hosted", "youtube-music", "yt-dlp", "sync"], "urls": [], "use_cases": ["download youtube music playlists with proper tags", "self-hosted music downloader for navidrome", "keep youtube music playlists in sync with local library", "download songs with lyrics and cover art", "organize downloaded music into album folders", "deduplicate tracks across playlists", "download music via browser extension"], "what_it_is": "yubal is a self-hosted YouTube Music downloader that turns pasted links into a tagged, organized music library with albums, playlists, lyrics, and ReplayGain tags. It offers a web UI, scheduled playlist syncing, smart deduplication, and a companion browser extension.", "when_to_avoid": ["you need video downloads, not just audio", "you don't want to run a Docker service or server", "you need downloads from platforms other than YouTube Music"], "when_to_choose": ["you want a self-hosted alternative to streaming for your homelab media server", "you need automatic tagging, lyrics, and playlist m3u generation", "you want scheduled syncing of YouTube Music playlists"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/yubal", "repo": "guillevc/yubal", "role": "main", "score": 82}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "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:04:57.768593+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.768593+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:31:54.631730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "66136edde08cfa43c516cfeb651c53fc45558aa309e08f9cc6054bf1d05a618a", "fetched_at": "2026-08-28T04:04:57.768593+00:00", "kind": "readme", "missing": false, "url": "https://github.com/guillevc/yubal"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 17, "rhythm": 98}, "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": 247, "days_push": 9, "days_rel": 15, "gap_med": 3.5, "n_releases_24m": 27}, "score": 82, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}