{"adoption": {"forks": 104, "observed_at": "2026-08-28T04:07:30.460917+00:00", "stars": 2927}, "canonical_url": "https://ross.abutalabs.com/products/ytdl-sub", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Lightweight tool to automate downloading and metadata generation with yt-dlp", "domain": ["media", "self-hosted", "developer-tools"], "enriched": true, "function": ["cli", "workflow-automation", "file-system"], "health_score": 100, "homepage": "https://ytdl-sub.readthedocs.io", "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["jmbannon/ytdl-sub"], "name": "jmbannon/ytdl-sub", "platform": ["cli", "python", "cross-platform"], "pushed_at": "2026-08-26T03:04:20+00:00", "repo": "jmbannon/ytdl-sub", "stars": 2927, "tags": ["yt-dlp", "plex", "jellyfin", "kodi", "emby", "youtube-downloader", "media-server", "subscriptions", "nfo-metadata", "servarr", "metadata", "automation", "docker", "linux"], "topics": ["emby", "jellyfin", "kodi", "plex", "yt-dlp", "yt-dlp-wrapper", "ytdl", "youtube", "lidarr", "nfo", "radarr", "servarr", "sonarr"], "urls": [], "use_cases": ["automatically download youtube channels as tv shows for plex", "download youtube subscriptions and generate nfo metadata for jellyfin", "archive soundcloud or bandcamp discographies with proper music tags", "schedule automated youtube downloads into a media server library", "prepare downloaded videos with correct folder structure for kodi", "wrap yt-dlp with presets for plex emby jellyfin"], "what_it_is": "A Python command-line tool that automates downloading media via yt-dlp and generates metadata and file structures for media servers like Plex, Jellyfin, Kodi, and Emby. Subscriptions are defined in YAML with prebuilt presets, and it can write proper music tags via the beets API.", "when_to_avoid": ["you need a GUI-based downloader rather than a CLI tool", "you only need occasional one-off video downloads without metadata organization", "you need a web interface or integration with *arr apps' download pipelines"], "when_to_choose": ["you want hands-off, scheduled downloads from YouTube or other yt-dlp-supported sites", "you use Plex, Jellyfin, Kodi, or Emby and want files organized with metadata automatically", "you prefer declarative YAML subscriptions with prebuilt presets over manual yt-dlp commands"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ytdl-sub", "repo": "jmbannon/ytdl-sub", "role": "main", "score": 95}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "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:07:30.460917+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:30.460917+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:33:35.736303+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5bb23775d43cf96cbd60859bff996dcf3093978355496a64c471e585729aa1c5", "fetched_at": "2026-08-28T04:07:30.460917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jmbannon/ytdl-sub"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 87}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1819, "days_push": 7, "days_rel": 7, "gap_med": 1.5, "n_releases_24m": 143}, "score": 95, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}