{"id":37228605,"url":"https://github.com/rangermix/twitchdropsminer","last_synced_at":"2026-07-28T01:00:21.414Z","repository":{"id":319081287,"uuid":"1074567120","full_name":"rangermix/TwitchDropsMiner","owner":"rangermix","description":"An app that allows you to AFK mine timed Twitch drops, with automatic drop claiming and channel switching. Web GUI, dockerised.","archived":false,"fork":false,"pushed_at":"2026-04-29T05:13:31.000Z","size":2465,"stargazers_count":118,"open_issues_count":13,"forks_count":28,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-04-29T07:09:08.304Z","etag":null,"topics":["automation","bot","docker","drop","game","gaming","gaming-tools","miner","self-hosted","twitch","twitch-drops"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/rangermix/twitch-drops-miner","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"DevilXD/TwitchDropsMiner","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rangermix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"custom":"https://buymeacoffee.com/rangermix","github":"rangermix"}},"created_at":"2025-10-12T03:29:33.000Z","updated_at":"2026-04-29T05:13:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"f713fc46-595c-40d2-b036-4907d1025332","html_url":"https://github.com/rangermix/TwitchDropsMiner","commit_stats":null,"previous_names":["rangermix/twitchdropsminer"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/rangermix/TwitchDropsMiner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rangermix%2FTwitchDropsMiner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rangermix%2FTwitchDropsMiner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rangermix%2FTwitchDropsMiner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rangermix%2FTwitchDropsMiner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rangermix","download_url":"https://codeload.github.com/rangermix/TwitchDropsMiner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rangermix%2FTwitchDropsMiner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35970843,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-27T02:00:06.776Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","bot","docker","drop","game","gaming","gaming-tools","miner","self-hosted","twitch","twitch-drops"],"created_at":"2026-01-15T03:28:29.043Z","updated_at":"2026-07-28T01:00:21.305Z","avatar_url":"https://github.com/rangermix.png","language":"Python","funding_links":["https://buymeacoffee.com/rangermix","https://github.com/sponsors/rangermix","https://www.buymeacoffee.com/DevilXD","https://www.patreon.com/bePatron?u=26937862"],"categories":[],"sub_categories":[],"readme":"# Twitch Drops Miner\n\n\u003e Automatically mine timed Twitch Drops without streaming video or audio.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/rangermix/TwitchDropsMiner/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/rangermix/TwitchDropsMiner?style=for-the-badge\u0026color=yellow\" alt=\"GitHub stars\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/rangermix/TwitchDropsMiner/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/rangermix/TwitchDropsMiner?style=for-the-badge\u0026color=brightgreen\" alt=\"Latest release\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/rangermix/twitch-drops-miner\"\u003e\u003cimg src=\"https://img.shields.io/docker/pulls/rangermix/twitch-drops-miner?style=for-the-badge\u0026color=blue\" alt=\"Docker pulls\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/rangermix/TwitchDropsMiner/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/rangermix/TwitchDropsMiner?style=for-the-badge\u0026color=orange\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.python.org/downloads/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Python-3.12+-blue?style=for-the-badge\u0026logo=python\" alt=\"Python 3.12 or newer\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nTwitch Drops Miner is a low-bandwidth, headless application that discovers eligible\ncampaigns, selects an appropriate live channel, and tracks drop progress from a web\ndashboard. It sends Twitch watch events without downloading the stream itself.\n\n![Twitch Drops Miner web dashboard showing campaign progress, output, and channels](./screenshot.png)\n\n## Features\n\n- **Low-bandwidth mining** — progresses timed drops without downloading video or audio\n- **Automatic campaign discovery** — detects active and upcoming drop campaigns\n- **Smart channel selection** — prioritizes eligible channels, preferred games, and viewers\n- **Persistent sessions** — saves OAuth login state between runs\n- **Web dashboard** — manages campaigns, channels, inventory, settings, and login status\n- **Headless deployment** — runs locally, remotely, or in Docker without a desktop GUI\n- **Safe rendering** — builds dynamic translated content with DOM APIs instead of raw HTML\n\n## Quick start\n\n### Docker (recommended)\n\nDocker stores persistent application data in `/app/data`. The command below binds that\ndirectory to `./data` on the host:\n\n```bash\ndocker run -d \\\n  --name twitch-drops-miner \\\n  -p 8080:8080 \\\n  -v \"${PWD}/data:/app/data\" \\\n  --restart unless-stopped \\\n  rangermix/twitch-drops-miner:latest\n```\n\nOpen \u003chttp://localhost:8080\u003e.\n\n### Docker Compose\n\nFrom the repository root, build and start the included\n[`docker-compose.yml`](./docker-compose.yml):\n\n```bash\ndocker compose up -d --build\n```\n\n### From source\n\nSource installations require Python 3.12 or newer and\n[`uv`](https://docs.astral.sh/uv/):\n\n```bash\nuv sync\nuv run main.py\n```\n\nThen open \u003chttp://localhost:8080\u003e.\n\n## Using the web app\n\n1. Log in with your Twitch account through the OAuth device flow.\n2. Wait for the miner to discover available campaigns.\n3. Choose the games you want to prioritize. You can also search for a game, select\n   **Add Game**, and then select **Reload**.\n4. Leave the miner running while it selects eligible channels and tracks drop progress.\n\n\u003e [!NOTE]\n\u003e Your Twitch account must be linked to the relevant game accounts. Review your\n\u003e [Twitch Drops campaigns](https://www.twitch.tv/drops/campaigns) before mining.\n\n## Important notes\n\n\u003e [!WARNING]\n\u003e Avoid watching Twitch manually with the same account while the miner is running.\n\u003e Simultaneous viewing can cause drop-progress desynchronization.\n\n- Docker data is stored inside the container at `/app/data`; the examples persist it\n  to `./data` on the host.\n- Source installations store persistent data in the repository's `data/` directory.\n- Logs can be persisted separately by mounting `./logs:/app/logs`.\n\n## Contributors\n\nContributors are credited automatically when their pull requests are merged into `main`.\n\n\u003c!-- contributors:start --\u003e\n| Contributor | Merged pull requests |\n| --- | --- |\n| [@birdhimself](https://github.com/birdhimself) | [#41](https://github.com/rangermix/TwitchDropsMiner/pull/41) |\n| [@capkz](https://github.com/capkz) | [#70](https://github.com/rangermix/TwitchDropsMiner/pull/70) |\n| [@EthanBlazkowicz](https://github.com/EthanBlazkowicz) | [#33](https://github.com/rangermix/TwitchDropsMiner/pull/33) |\n| [@Knight-sys](https://github.com/Knight-sys) | [#3](https://github.com/rangermix/TwitchDropsMiner/pull/3) |\n| [@rangermix](https://github.com/rangermix) | [#1](https://github.com/rangermix/TwitchDropsMiner/pull/1) · [#2](https://github.com/rangermix/TwitchDropsMiner/pull/2) · [#7](https://github.com/rangermix/TwitchDropsMiner/pull/7) · [#8](https://github.com/rangermix/TwitchDropsMiner/pull/8) · [#9](https://github.com/rangermix/TwitchDropsMiner/pull/9) · [#13](https://github.com/rangermix/TwitchDropsMiner/pull/13) · [#20](https://github.com/rangermix/TwitchDropsMiner/pull/20) · [#24](https://github.com/rangermix/TwitchDropsMiner/pull/24) · [#29](https://github.com/rangermix/TwitchDropsMiner/pull/29) · [#32](https://github.com/rangermix/TwitchDropsMiner/pull/32) · [#45](https://github.com/rangermix/TwitchDropsMiner/pull/45) · [#74](https://github.com/rangermix/TwitchDropsMiner/pull/74) |\n| [@Sean-Destefano](https://github.com/Sean-Destefano) | [#49](https://github.com/rangermix/TwitchDropsMiner/pull/49) |\n| [@SimpliAj](https://github.com/SimpliAj) | [#72](https://github.com/rangermix/TwitchDropsMiner/pull/72) |\n| [@Stein-N](https://github.com/Stein-N) | [#71](https://github.com/rangermix/TwitchDropsMiner/pull/71) |\n| [@vurmil](https://github.com/vurmil) | [#12](https://github.com/rangermix/TwitchDropsMiner/pull/12) · [#17](https://github.com/rangermix/TwitchDropsMiner/pull/17) |\n\u003c!-- contributors:end --\u003e\n\n## Support\n\nIf Twitch Drops Miner saves you time or bandwidth, you can support the project by:\n\n- [starring the repository](https://github.com/rangermix/TwitchDropsMiner)\n- [reporting an issue](https://github.com/rangermix/TwitchDropsMiner/issues) or\n  [submitting a pull request](https://github.com/rangermix/TwitchDropsMiner/pulls)\n- [buying the maintainer a coffee](https://buymeacoffee.com/rangermix)\n\n## Credits\n\nThis project is a modern fork of\n[DevilXD/TwitchDropsMiner](https://github.com/DevilXD/TwitchDropsMiner), created by\n[@DevilXD](https://github.com/DevilXD). You can support the original author through\n[Buy Me a Coffee](https://www.buymeacoffee.com/DevilXD) or\n[Patreon](https://www.patreon.com/bePatron?u=26937862).\n\n\u003cdetails\u003e\n\u003csummary\u003eOriginal project and translation credits\u003c/summary\u003e\n\n### Original project contributions\n\n- [@guihkx](https://github.com/guihkx) — CI scripts, CI maintenance, and Linux builds\n- [@kWAYTV](https://github.com/kWAYTV) — dark mode theme\n\n### Translation credits\n\n- **Arabic** — [@Bamboozul](https://github.com/Bamboozul)\n- **Chinese (Simplified)** — [@Suz1e](https://github.com/Suz1e),\n  [@wwj010](https://github.com/wwj010), and\n  [@zhangminghao1989](https://github.com/zhangminghao1989)\n- **Chinese (Traditional)** — [@Ricky103403](https://github.com/Ricky103403) and\n  [@LusTerCsI](https://github.com/LusTerCsI)\n- **Czech** — [@nwvh](https://github.com/nwvh)\n- **Danish** — [@Kjerne](https://github.com/Kjerne)\n- **French** — [@roobini-gamer](https://github.com/roobini-gamer) and\n  [@Calvineries](https://github.com/Calvineries)\n- **German** — [@ThisIsCyreX](https://github.com/ThisIsCyreX)\n- **Indonesian** — [@Eriza-Z](https://github.com/Eriza-Z)\n- **Italian** — [@casungo](https://github.com/casungo)\n- **Japanese** — [@ShimadaNanaki](https://github.com/ShimadaNanaki)\n- **Polish** — [@Patriot99](https://github.com/Patriot99), co-authored with\n  [@DevilXD](https://github.com/DevilXD)\n- **Portuguese** — [@zarigata](https://github.com/zarigata)\n- **Russian** — [@Sergo1217](https://github.com/Sergo1217) and\n  [@kilroy98](https://github.com/kilroy98)\n- **Spanish** — [@Shofuu](https://github.com/Shofuu)\n- **Turkish** — [@alikdb](https://github.com/alikdb)\n- **Ukrainian** — [@Nollasko](https://github.com/Nollasko) and\n  [@kilroy98](https://github.com/kilroy98)\n\n\u003c/details\u003e\n\n## Development disclosure\n\nThis fork is maintained with AI-assisted development tools. Changes are validated through\nautomated tests and code-quality checks, but users should still review updates before\ndeploying them. The validation suite includes GraphQL watch events and batched channel\ndiscovery, alongside settings, translation, and frontend safety checks. Use the software\nresponsibly.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frangermix%2Ftwitchdropsminer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frangermix%2Ftwitchdropsminer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frangermix%2Ftwitchdropsminer/lists"}