{"adoption": {"forks": 108, "observed_at": "2026-09-03T02:15:12.122318+00:00", "stars": 1153}, "canonical_url": "https://ross.abutalabs.com/products/mytube", "card": {"archived": false, "artifact_type": "application", "description": "Self-hosted downloader and player for YouTube, Bilibili, Twitch, MissAV, and yt-dlp sites. Features channel subscriptions, auto-downloads, and local storage for media. Organize your library into collections with a sleek UI. Includes built-in Cloudflare Tunnel support for secure remote access without port forwarding. Docker-ready deployment.", "domain": ["media", "self-hosted", "web-development", "developer-tools", "files"], "enriched": true, "function": ["http-server", "web-framework", "video-processing", "web-scraping", "search-engine", "auth", "file-system", "database", "workflow-automation", "webhook", "browser-extension", "self-hosted"], "health_score": 80, "homepage": "https://franklioxygen.github.io/mytube/", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["franklioxygen/MyTube"], "name": "franklioxygen/MyTube", "platform": ["self-hosted", "cross-platform", "browser-extension", "cli"], "pushed_at": "2026-09-03T02:01:24+00:00", "repo": "franklioxygen/MyTube", "stars": 1153, "tags": ["yt-dlp", "youtube-downloader", "bilibili", "twitch", "missav", "video-library", "nas", "media-server", "rss-feed", "cloudflare-tunnel", "tmdb", "telegram-notifications", "sqlite", "expressjs", "mui", "tanstack-query", "typescript", "channel-subscriptions", "auto-download", "collections", "passkeys", "chrome-extension", "openlist", "alist", "plex", "live-translation", "subtitles", "rss", "notification", "downloader", "player", "subscription", "metadata", "cloud-storage", "tunneling", "automation", "video", "docker", "web-server", "nodejs"], "topics": ["bilibili", "bilibili-download", "docker", "nas", "video-hosting", "video-player", "youtube", "youtube-downloader", "mui", "typescript", "expressjs", "missav", "sqlite", "tanstack-query", "downloader", "yt-dlp", "cloudflare-tunnel", "twitch", "live-translation"], "urls": [], "use_cases": ["self-host a personal youtube video library", "automatically download new uploads from subscribed youtube channels", "download bilibili videos and organize them into collections", "build a private media server on a nas with docker", "access my home media library remotely without port forwarding", "generate private rss feeds of my downloaded videos for plex", "batch download twitch vods and missav videos", "get telegram notifications when downloads finish"], "what_it_is": "MyTube is a self-hosted web application that downloads videos from YouTube, Bilibili, Twitch, MissAV, and any yt-dlp-supported site, storing them in a personal media library. It provides a sleek web UI for playback, channel subscriptions with auto-downloads, collections, private RSS feeds, and secure remote access via built-in Cloudflare Tunnel, deployable with Docker.", "when_to_avoid": ["you only need a bare CLI downloader without a web UI or library management - plain yt-dlp is lighter", "you want a full-featured media server with transcoding and multi-user streaming like Jellyfin or Plex", "you cannot run Docker or a Node.js server on your hardware", "you need live streaming or real-time playback of content rather than downloading it first", "you require official support or enterprise-grade SLAs - this is a community MIT-licensed project"], "when_to_choose": ["you want full ownership of downloaded videos on your own disk with no algorithmic feed or account lock-in", "you need multi-site downloading (yt-dlp sites) plus a polished web player in one self-hosted app", "you want subscription automation that auto-fetches new uploads from channels", "you need secure remote access without exposing ports, via built-in Cloudflare Tunnel", "you want extras like TMDB metadata, auto subtitles, RSS feeds, and Telegram hooks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mytube", "repo": "franklioxygen/MyTube", "role": "main", "score": 65}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.122318+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:34:44.600606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "157f5942a9b9c59c434be55d3dfeddf5c8b2103c7e5fea0f31a46e4943ff27b7", "fetched_at": "2026-09-03T02:15:12.122318+00:00", "kind": "readme", "missing": false, "url": "https://github.com/franklioxygen/MyTube"}, {"content_hash": "3d2826655c129f6029b69a311b585b467ba3255f6a484429d67bc2c277088063", "fetched_at": "2026-08-29T12:40:04.516337+00:00", "kind": "homepage", "missing": false, "url": "https://franklioxygen.github.io/mytube/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 38, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 542, "days_push": 0, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 65, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 3, "stale_scrape": false}}