{"adoption": {"forks": 165, "observed_at": "2026-08-28T04:05:59.659812+00:00", "stars": 1964}, "canonical_url": "https://ross.abutalabs.com/products/tgtodrive", "card": {"archived": false, "artifact_type": "application", "description": "一条龙网盘媒体自动化平台：从找资源、自动转存、智能整理、挂载 STRM、到 Emby 302 直链播放，全流程打通；重点强化 115 / 123 / 光鸭云盘整理与转存、115 / 123 /光鸭云盘 STRM 全量与增量生成、以及 Emby 反向代理 302 播放能力。", "domain": ["media", "self-hosted", "files", "web-development"], "enriched": true, "function": ["workflow-automation", "web-scraping", "file-system", "proxy", "monitoring", "scheduling", "self-hosted"], "health_score": 97, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["walkingddd/TgtoDrive"], "name": "walkingddd/TgtoDrive", "platform": ["python"], "pushed_at": "2026-07-29T15:04:28+00:00", "repo": "walkingddd/TgtoDrive", "stars": 1964, "tags": ["cloud-drive", "strm", "emby", "115", "123pan", "telegram", "media-library", "tmdb", "302-redirect", "media-automation", "automation", "docker", "linux", "web-server"], "topics": [], "urls": [], "use_cases": ["automatically save telegram channel resources to my cloud drive", "organize and rename movies and tv shows on 115 cloud drive with tmdb metadata", "generate strm files for emby from 123pan and 115", "set up emby 302 direct link playback through a reverse proxy", "auto transfer and dedupe media shares into a personal media library", "incrementally sync strm files after library reorganization", "build a hands-off pipeline from resource discovery to emby playback"], "what_it_is": "TgtoDrive is a self-hosted, Docker-deployed media automation platform that chains resource discovery (Telegram channel monitoring, search sources), auto-transfer to cloud drives (115, 123, Guangya, Tianyi), intelligent library organization with TMDB scraping, STRM file generation, and Emby 302 direct-link playback via reverse proxy. It is a Python web application with a Web UI for configuration and monitoring.", "when_to_avoid": ["you do not use Chinese cloud drives like 115, 123, or Guangya", "you need a fully offline local media server without cloud-drive dependency", "you only need simple file syncing without media library organization"], "when_to_choose": ["you use 115, 123, or Guangya cloud drives and want an automated transfer-organize-stream pipeline", "you run Emby (or Jellyfin/Plex) and want lightweight 302 direct-link playback without local storage", "you want Telegram-based resource monitoring with keyword filtering and auto-saving"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/tgtodrive", "repo": "walkingddd/TgtoDrive", "role": "main", "score": 75}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "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:05:59.659812+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.659812+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:05:31.771258+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7fd6045d84044bd317fd9b9439595927ea70540ca43161c5d94ab289cbe893f7", "fetched_at": "2026-08-28T04:05:59.659812+00:00", "kind": "readme", "missing": false, "url": "https://github.com/walkingddd/TgtoDrive"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 18, "rhythm": 83}, "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": 255, "days_push": 35, "days_rel": 35, "gap_med": 0, "n_releases_24m": 82}, "score": 75, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}