App for AFK mining timed Twitch drops with auto drop claiming & channel switching.
10K+
Thanks to @DevilXD and other contributors from the original repo for the vast majority of the code.
This application allows you to AFK mine timed Twitch drops, without having to worry about switching channels when the one you were watching goes offline, claiming the drops, or even receiving the stream data itself. This helps you save on bandwidth and hassle.
Every several seconds, the application pretends to watch a particular stream by fetching stream metadata - this is enough to advance the drops. Note that this completely bypasses the need to download any actual stream video and sound. To keep the status (ONLINE or OFFLINE) of the channels up-to-date, there's a websocket connection established that receives events about streams going up or down, or updates regarding the current amount of viewers.
199 channels at the same time.You can use pre-built Docker images to run Twitch Drops Miner:
Pull the Docker Image:
You can choose from two Docker image repositories:
From Docker Hub:
journeyover/twitchdropsminer:main
From GitHub Container Registry:
ghcr.io/journeydocker/twitchdropsminer:main
The TwitchDropsMiner Docker image is available in three primary tag formats, each suited to different use cases:
main (Continuous Development)
Description: The main tag is automatically updated to reflect the latest commit on the main branch in GitHub. This image corresponds to the latest development state of TwitchDropsMiner.
Usage Consideration: This tag is not recommended for production use, as it changes frequently and may include untested or unstable updates. Use main only if you're contributing to development or need access to the latest features and fixes.
Frequency: Updated with each new commit to the main branch, making this a rapidly evolving image.
WARNING: Pulling the
maintag may introduce breaking changes or instability, as it represents ongoing development work.
latest (Latest Stable Release)
Description: This tag points to the most recent stable release of TwitchDropsMiner. Unlike main, the latest tag is only updated with stable, fully-tested versions.
Usage Recommendation: Use the latest tag if you want the most current stable build without specifying a particular version. Ideal for production environments where stability is critical.
IMPORTANT: Currently, there is no
latesttag available. Please check back for updates on the availability of this tag.
A.B.C.D (Versioned Release)
Description: Versioned tags, such as A.B.C.D, are frozen at a specific release version and will not receive updates after publication. Each versioned tag corresponds directly to a released version of TwitchDropsMiner on GitHub.
Usage Recommendation: Use versioned tags when you need consistency and want to avoid updates that might alter functionality. These tags are ideal for production environments requiring fixed versions.
IMPORTANT: Currently, there are no versioned tags (e.g.,
A.B.C.D) available. When they are published, each will remain fixed, ensuring a stable and unchanging image for users needing version control.
Run the Docker Container:
Configure the container with environment variables to customize its behavior:
Allow Unlinked Campaigns: Set the UNLINKED_CAMPAIGNS environment variable to 1 to ENABLE mining drops from campaigns that are not linked to your account. By default, this is set to 0 (disabled). Note that even when unlinked campaigns are enabled, the application will still consider your priority list, so ensure the desired game is included in your priority list.
Apprise URLs: Set the APPRISE_URL environment variable to a comma list of Apprise URLs (e.g., Discord webhooks, email, etc.).
Priority Mode: Set the PRIORITY_MODE environment variable to one of the following values to determine how the miner prioritizes campaigns:
0: Use the priority list directly. Campaigns are mined in the exact order they appear in the priority list, without additional prioritization.1 (default): Prioritize based on time-to-end. Campaigns in the priority list are mined based on how soon they are ending, with those nearing their end being prioritized higher.2: Optimize by time ratio. Campaigns are prioritized according to the ratio of elapsed time to remaining time, aiming to mine campaigns that are ending soonest more accurately.Example of running the container with these environment variables:
docker run -itd \
--init \
--pull=always \
--restart=always \
-e UNLINKED_CAMPAIGNS=1 \
-e PRIORITY_MODE=1 \
-v ./cookies.jar:/TwitchDropsMiner/cookies.jar \
-v ./settings.json:/TwitchDropsMiner/settings.json \
-v ./logs:/TwitchDropsMiner/logs \
-v /etc/localtime:/etc/localtime:ro \
--name twitch_drops_miner \
ghcr.io/journeydocker/twitchdropsminer:main
To simplify running TwitchDropsMiner, you can use Docker Compose with the following configuration. Create a docker-compose.yml file in your working directory:
version: '3.8'
services:
twitchdropsminer:
image: ghcr.io/journeydocker/twitchdropsminer:main
container_name: twitch_drops_miner
restart: always
environment:
UNLINKED_CAMPAIGNS: "0" # Set to "1" to enable unlinked campaigns mining
PRIORITY_MODE: "1" # Set priority mode (0, 1, or 2)
volumes:
- ./cookies.jar:/TwitchDropsMiner/cookies.jar
- ./settings.json:/TwitchDropsMiner/settings.json
- ./logs:/TwitchDropsMiner/logs
- /etc/localtime:/etc/localtime:ro
After creating the docker-compose.yml file, start the container with:
docker-compose up -d
Docker Considerations: If you are running the application in Docker, remember to shut down the container before making changes directly to the settings.json file.
IMPORTANT: Users are expected to provide their own settings.json and cookies.jar files for configuration. A webUI for easier setup is planned to come in a future release.
Reload button to start processing. It will fetch a list of all applicable streams it can watch, and start mining right away. You can also manually switch to a different channel as needed.

Warning
Due to how Twitch handles the drop progression on their side, watching a stream in the browser (or by any other means) on the same account that is actively being used by the miner, will usually cause the miner to misbehave, reporting false progress and getting stuck mining the current drop.Using the same account to watch other streams during mining is thus discouraged, in order to avoid any problems arising from it.
Caution
Persistent cookies will be stored in the `cookies.jar` file, from which the authorization (login) information will be restored on each subsequent run. Make sure to keep your cookies file safe, as the authorization information it stores can give another person access to your Twitch account, even without them knowing your password!
Important
Successfully logging into your Twitch account in the application may cause Twitch to send you a "New Login" notification email. This is normal - you can verify that it comes from your own IP address. The detected browser during the login will be "Chrome", as that's what the miner currently presents itself to the Twitch server.
Note
The time remaining timer always countdowns a single minute and then stops - it is then restarted only after the application redetermines the remaining time. This "redetermination" can happen at any time Twitch decides to report on the drop's progress, but not later than 20 seconds after the timer reaches zero. The seconds timer is only an approximation and does not represent nor affect actual mining speed. The time variations are due to Twitch sometimes not reporting drop progress at all, or reporting progress for the wrong drop - these cases have all been accounted for in the application though.
Note
The source code requires Python 3.10 or higher to run.
EXE. Some antivirus engines (including Windows Defender) might report the packaged executable as a trojan, because PyInstaller has been used by others to package malicious Python code in the past. These reports can be safely ignored. If you absolutely do not trust the executable, you'll have to install Python yourself and run everything from source.%TEMP% directory for temporary runtime storage of files, that don't need to be exposed to the user (like compiled code and translation files). For persistent storage, the directory the executable resides in is used instead.HKCU) autostart key. It is only altered when toggling the respective option. If you relocate the app to a different directory, the autostart feature will stop working, until you toggle the option off and back on againglibc>=2.35, plus a working display server.gtk3 library (and its dependencies), which is required for proper system tray/notifications support..app bundle, distributed as a ZIP archive.cd path/to/folder) and enter xattr -cr Twitch Drops Miner (by DevilXD).app or just type xattr -cr (make sure to put a space at the end), drag and drop the Twitch Drops Miner (by DevilXD).app file into the terminal window (this will auto-fill the path) and entercookies.jar, settings.json, lock.file and the cache folder) are stored inside the application bundle in Twitch Drops Miner (by DevilXD).app/Contents/MacOS (to access them Right-click the application and select Show Package Contents)If you'd be interested in running the latest master from source or building your own executable, see the wiki page explaining how to do so: https://github.com/DevilXD/TwitchDropsMiner/wiki/Setting-up-the-environment,-building-and-running
If you encounter any issues with the miner:
Twitch Drops Miner (TDM for short) has been designed with a couple of simple goals in mind. These are, specifically:
TDM is not intended for/as:
This means that features such as:
..., are most likely not going to be a feature, ever. You're welcome to search through the existing issues to comment on your point of view on the relevant matters, where applicable. Otherwise, most of the new issues that go against these goals will be closed and the user will be pointed to this paragraph.
For more context about these goals, please check out these issues: #161, #105, #84
Content type
Image
Digest
sha256:c7986010f…
Size
140.5 MB
Last updated
about 16 hours ago
docker pull journeyover/twitchdropsminer:main