AutoRemovePlus is a plugin for Deluge v2.x that you can use to automatically remove torrents. It's based on AutoRemove 0.1 by Jamie Lennox.
Other forks from v1 that support Deluge v2:
- https://github.com/springjools/deluge-autoremoveplus - note this one has working gtk3 ui (actually not sure)
- https://github.com/tote94/deluge-autoremoveplus - think this is only webui (actually not sure); this refers it's not springjools that has the working GTKui prefs page;
For Deluge v1 support, see deluge-1 branch
This is a GtkUI and WebUI plugin.
- Select how many torrents are allowed at the same time.
- Choose to remove or pause them based on multiple criteria age, seeders, seed time or ratio.
- Set specific removal rules depending on tracker or LabelPlus label.
- Remove only torrents from specific trackers or LabelPlus labels.
- Only remove torrents if under a certain HDD space threshold.
- Select if torrents have to fulfill both or either criteria.
- Delete torrents in order (e.g. delete torrents with highest ratio first).
- Don't remove torrents if they don't reach a minimum time (in days) or ratio.
- Choose the removal interval.
- Right click and select torrents that you don't want automatically removed.
- Remove torrent data option.
- Create an exempted tracker or LabelPlus label list, so that torrents that belong to those trackers or labels are not removed.
- Fully functional WebUI.
Look for torrents to remove every hour:
Check every: 1
Remove every torrent that meets minimum criteria:
Maximum torrents: 0
Don't remove torrents unless Deluge has over 500:
Maximum torrents: 500
Delete torrents even if HDD space not under minimum:
Minimum HDD space: -1
Only remove torrents when the main HDD has less than 10 GB free:
Minimum HDD space: 10
Remove torrents that have a ratio over 2.0 and have been seeding for at least 2 days:
Remove by: Ratio, Min: 2.0, and, Remove by: Seed Time, Min: 48
Remove torrents that have a ratio over 2.0 or have been seeding for at least 10 hours:
Remove by: Ratio, Min: 2.0, or, Remove by: Seed Time, Min: 10
Remove torrents that have a ratio over 2.2 and were added at least 4 days ago:
Remove by: Ratio, Min: 2.2, or, Remove by: Age in days, Min: 4
Remove torrents only according to first criteria:
▪️ Second Remove by: criteria
Pause torrents instead of removing them:
▪️ Remove torrents
The rest of the options are pretty self explanatory
- use python 3
- virutal env manager
virtualenv - run:
+ Install python 3.7 (or whatever your seedbox uses for python3; any py3 version should be ok) - first install pyenv: $ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash - install py3: $ pyenv install 3.9.7 - cd to project root and change to version: $ pyenv local 3.9.7 - this will create .python-version file at the root - verify your py version: $ python --version + Setup virtenv; either A) manually... (not recommended): - install virtualenv: $ pip install virtualenv - create venv: $ python -m virtualenv env (note 'env' specifies the name/location to create the virtual environment in) - activate env: $ source env/bin/activate - to switch projects or just leave the venv, run: $ deactivate B) ...or using pyenv (recommended): - this step might still be needed, unsure: install virtualenv: $ pip install virtualenv - create venv: $ pyenv virtualenv venv39 (again, 'venv39' is just the name/location of the env) - switch to said env: $ pyenv local venv39 (modifies project's .python-version file) - if you have [eval "$(pyenv virtualenv-init -)"] in your .bashrc, then env activation/deactivation should be automatic; to do it manually, then pyenv activate <name> pyenv deactivate Either run locally from shell...
$ python setup.py bdist_egg...or build using Docker to easily swap out Python versions:
$ make buildBy default Python 3.11 is used. If you wish to target a different version specify it as an env var:
$ make build PYTHON_VERSION=3.10Note if you're running an older version of Docker you may need to enable BuildKit manually.
The resulting AutoRemovePlus-vX.Y.Z.egg file can be found in the /dist directory. Note the .egg doesn't contain python version in the filename - our modified setup.py has logic that renames the generated .egg.
- similar to
TotalTrafficplugin, start tracking upload bandwidth, but per torrent. Idea is to enable rule to only remove torrents that have uploaded less than X amount in past Y time period. So removal rule should be something like
if (ratio > 1 || seed_time > 7days) && t.recent_upload < X: t.remove TODO: how would recent_upload be defined? guess we want it to represent something like [KiB in past 1h]. Both data amount & time period need to be configurable. We likely want to keep current torrent data in-memory, and write it down periodically to `autoremoveplusstates.conf`; again, sort of similar what TotalTraffic is doing. This removes the impossible target ratio definition - we should just set the minimum ratio & seed time rules, and let the active torrents upload however long they can. Additional problem will be incorporating it with our UI though.
- as previously, but perhaps also allow measuring avg speed:
avg_upload_speed = torrent['total_uploaded'] / torrent['active_time'] if torrent['active_time'] > 0 else 0 OR don't count the upload speed for the time we were downloading ourselves. unsure why we shouldn't tho...: avg_upload_speed = torrent['total_uploaded'] / torrent['seeding_time'] if torrent['seeding_time'] > 0 else 0 need to add possibility to count seeding time from the moment torrent hits 100%; eg TL writes this in their wiki:
Be aware that seeding time only counts for fully completed torrents (downloaded 100%).
We might be able to use torrent attributes
last_seen_completeand/orfinished_time; note springjool's core.py has_time_seen_complete()that might be what we need. Thinking about it more, think finished_time attr fits our use-case better. Or maybeseeding_time? see libtorrent explanation on fields here TODO: this all is likely already covered by the existing func_seed_time we're even using in production!items should be removed from our state file via Execute plugin on torrent removal event; otherwise torrents removed outside of this script would not get removed from the state tracker. maybe there's some deluge's removed event we could tap into? OR: include some cleanup logic in the plugin itself to remove state info for torrents that are no longer around, ie they had to be removed by some other means.
according to this post, torrmanager.get_status() can accept
update=Trueparam not to return cached results. this makes no sense for static fields such as name or size, but might be needed forseed_time,ratio...; apparently one of the forks of plugin has removed the caching.add rules/support to handle torrents such as
Name: torrent-name.mkv ID: bcbcc09416b8756384f9d72b9dd3cd0762279527 State: Downloading Down Speed: 0.0 K/s Up Speed: 0.0 K/s Seeds: 0 (0) Peers: 4 (15) Availability: 0.08 Seed Rank: - Size: 45.0 M/532.6 M Downloaded: 44.7 M Uploaded: 0 B Share Ratio: 0.00 ETA: - Seeding: - Active: 16h 20m Last Transfer: 16h 17m Complete Seen: Never Tracker: tracker.org Tracker status: Announce OK Progress: 8.45% [#####-------------------------------------------------------] Download Folder: /home/myuser/files/ Name: torrent-name-2 ID: aba61c7f8068c5b5a6414k39cec41d04477f7a4a State: Downloading Down Speed: 0.0 K/s Up Speed: 0.0 K/s Seeds: 0 (0) Peers: 0 (7) Availability: 0.00 Seed Rank: - Size: 0 B/445.1 M Downloaded: 0 B Uploaded: 0 B Share Ratio: -1.00 ETA: - Seeding: - Active: 16h 21m Last Transfer: ∞ Complete Seen: Never Tracker: tracker.org Tracker status: Announce OK Progress: 0.00% [------------------------------------------------------------] Download Folder: /home/myuser/files/incomplete note the Complete Seen & Availability values.
If after building the egg file, the plugin does not load in Deluge:
- Delete the
AutoRemovePlus-vX.Y.Z.eggin/deluge/pluginsdirectory. - Delete the
AutoRemovePlus.conffiles. - Restart Deluge.
- https://github.com/l3uddz/tqm - go-based torrent removal program
- https://github.com/jerrymakesjelly/autoremove-torrents
- springjools fork thread is think this one
- this post contains Execute plugin that emits 4th param - LabelPlus label - to scripts
- for deluge2 LabelPlus plugin, guess we need to grab mhertz' hack?