Add visual indicators showing account linking status for each campaign in the inventory tab. Campaigns now display either a "LINKED" (green) or "NOT LINKED" (orange) badge in the top right corner of each card. For unlinked campaigns, both the badge and a "Link Account" button provide direct access to the Twitch account linking page. Backend changes: - Add campaign_url property to DropsCampaign model - Include both campaign_url and link_url in inventory API response Frontend changes: - Add LINKED/NOT LINKED badges positioned at top right of campaign cards - Add "Link Account" button for unlinked campaigns - Style badges with subtle green for linked and prominent orange for not linked - Make NOT LINKED badge clickable to open account linking page 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
🌟 Twitch Drops Miner (TDM)
🎮 Automate Twitch Drop Farming — Effortlessly, Headlessly, and Bandwidth-Free
A modern, AI-assisted fork of DevilXD/TwitchDropsMiner — rebuilt for reliability, simplicity, and automation.
Twitch Drops Miner lets you automatically farm Twitch drops without ever opening a stream.
No more tab juggling, channel switching, or missing rewards — just set it, forget it, and collect.
✨ Features
- 🚀 Streamless Mining — Earn drops without streaming video (save bandwidth)
- 🔍 Automatic Campaign Discovery — Detects new drop events automatically
- ⚙️ Auto Channel Switching — Always mines the best available stream
- 💾 Persistent Login — OAuth login saved via cookies
- 🕹️ Simple Web UI — Manage everything from your browser
- 🧩 Docker-Ready — One command to deploy anywhere
🧰 Quick Start (Docker Recommended)
🐳 Using Pre-Built Image
docker pull rangermix/twitch-drops-miner:latest
docker run -d -p 8080:8080 -v $(pwd)/data:/app/data rangermix/twitch-drops-miner:latest
📦 Using Docker Compose
services:
twitch-drops-miner:
image: rangermix/twitch-drops-miner:latest
ports:
- "8080:8080"
volumes:
- ./data:/app/data
restart: unless-stopped
🧑💻 From Source (for Developers)
# Python 3.10+
pip install -e .
python main.py
Visit 👉 http://localhost:8080
🌈 Using the Web App
- Open
http://localhost:8080 - Login with your Twitch account (OAuth device flow)
- The miner auto-fetches available campaigns
- Select games you want to farm → click Reload
- TDM starts mining drops automatically 🎉
📝 Tip:
Make sure your Twitch account is linked to your game accounts →
👉 https://www.twitch.tv/drops/campaigns
⚠️ Notes & Warnings
⚠️ Avoid Watching on the Same Account
Watching Twitch manually while the miner runs can cause progress desync.
Use a different account if you want to watch live streams while mining.
💡 Requirements
Python 3.10+
Docker optional but recommended
Persistent data stored in/data
🖼️ Screenshot
A clean, modern web UI lets you control everything from your browser.
💖 Support the Project
If TwitchDropsMiner saves you time or bandwidth, please consider supporting continued development:
⭐ Star this repo → it really helps visibility!
💬 Open an issue or submit a PR if you want to contribute.
You can also support the original author @DevilXD:
👉 buymeacoffee.com/DevilXD or Patreon.
🎯 Project Goals
| Goal | Description |
|---|---|
| 🎯 Focus | Twitch Drops automation |
| 🧩 Ease of Use | Simple web UI |
| 🛡️ Reliability | Designed for continuous operation |
| ⚙️ Efficiency | Minimal API calls, Twitch-friendly |
| 🐳 Deployment | Docker-first, headless operation |
🙏 Acknowledgments
This project is a fork of the brilliant TwitchDropsMiner by @DevilXD.
Huge thanks to DevilXD and all contributors who built the foundation.
For detailed translation and contribution credits, see Acknowledgments below.
🧾 Disclaimer
⚙️ This fork is heavily maintained and developed using AI-assisted coding (Claude Code).
While stable, the codebase reflects “vibe coding” patterns — always review changes before deployment.
Use responsibly.
🧑💻 Original Project Credits
@guihkx - For the CI script, CI maintenance, and everything related to Linux builds.
@kWAYTV - For the implementation of the dark mode theme.
@Bamboozul - For the entirety of the Arabic (العربية) translation.
@Suz1e - For the entirety of the Chinese (简体中文) translation and revisions.
@wwj010 - For the Chinese (简体中文) translation corrections and revisions.
@zhangminghao1989 - For the Chinese (简体中文) translation corrections and revisions.
@Ricky103403 - For the entirety of the Traditional Chinese (繁體中文) translation.
@LusTerCsI - For the Traditional Chinese (繁體中文) translation corrections and revisions.
@nwvh - For the entirety of the Czech (Čeština) translation.
@Kjerne - For the entirety of the Danish (Dansk) translation.
@roobini-gamer - For the entirety of the French (Français) translation.
@Calvineries - For the French (Français) translation revisions.
@ThisIsCyreX - For the entirety of the German (Deutsch) translation.
@Eriza-Z - For the entirety of the Indonesian translation.
@casungo - For the entirety of the Italian (Italiano) translation.
@ShimadaNanaki - For the entirety of the Japanese (日本語) translation.
@Patriot99 - For the Polish (Polski) translation and revisions (co-authored with @DevilXD).
@zarigata - For the entirety of the Portuguese (Português) translation.
@Sergo1217 - For the entirety of the Russian (Русский) translation.
@kilroy98 - For the Russian (Русский) translation corrections and revisions.
@Shofuu - For the entirety of the Spanish (Español) translation and revisions.
@alikdb - For the entirety of the Turkish (Türkçe) translation.
@Nollasko - For the entirety of the Ukrainian (Українська) translation and revisions.
@kilroy98 - For the Ukrainian (Українська) translation corrections and revisions.

