{"adoption": {"forks": 94, "observed_at": "2026-08-28T04:04:49.606869+00:00", "stars": 1473}, "canonical_url": "https://ross.abutalabs.com/products/viewtube", "card": {"archived": false, "artifact_type": "application", "description": "▶️ ViewTube: The open source, privacy-conscious way to enjoy your favorite YouTube content. Docs: https://viewtube.wiki", "domain": ["web-development", "media", "privacy", "self-hosted"], "enriched": true, "function": ["web-framework", "http-server", "video-processing", "web-scraping", "self-hosted"], "health_score": 88, "homepage": "https://viewtube.io", "language": "TypeScript", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["ViewTube/viewtube"], "name": "ViewTube/viewtube", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-08-26T19:20:18+00:00", "repo": "ViewTube/viewtube", "stars": 1473, "tags": ["youtube-frontend", "ad-blocking", "sponsorblock", "nuxt", "nestjs", "video-streaming", "subscriptions", "web-server", "docker", "nodejs"], "topics": ["viewtube", "youtube", "youtube-player", "docker", "subscriptions", "video", "streaming", "vuejs", "typescript", "nuxt"], "urls": [], "use_cases": ["watch youtube videos without ads", "private youtube frontend without tracking", "self-hosted youtube alternative frontend", "subscribe to youtube channels without a google account", "read youtube comments and playlists anonymously", "get push notifications for new channel uploads", "skip sponsor segments in youtube videos"], "what_it_is": "ViewTube is an open-source, privacy-conscious alternative frontend for YouTube that lets users watch, search, and discover videos without ads or tracking. It is built with Nuxt (Vue) and NestJS, scrapes YouTube data via open-source libraries, and is deployable via Docker.", "when_to_avoid": ["you need official YouTube API compliance or guaranteed uptime, since scraping can break", "you want to upload or manage your own YouTube content", "you need offline video downloads or full YouTube feature parity"], "when_to_choose": ["you want a self-hosted, ad-free YouTube viewing experience", "you need a privacy-focused frontend that avoids Google accounts and tracking", "you want SponsorBlock integration and a touch-friendly mobile player", "you want to subscribe to channels and get notifications without a YouTube account"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/viewtube", "repo": "ViewTube/viewtube", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "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:49.606869+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:49.606869+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:34:36.057327+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f40b9572b8a419af1f057e4f0d2b1826d9f4f25b834c3f16b7ecca44e8f1b3f8", "fetched_at": "2026-08-28T04:04:49.606869+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ViewTube/viewtube"}], "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": 2603, "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}}