Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Transmission CLI Build Status Coverage Status Scrutinizer Code Quality

transmission-cli is console php application for automate torrent download/upload from

Blog post:

Based on:


  • send metrics to InfluxDB, torrent monitoring trends with Grafana
  • download popular (rating, comment and votes based) movies from
  • download tracked series from
  • delete not popular uploads from transmission
  • working with multiple transmission instances
  • command line autocompletion
  • add torrents with GET request


  • hourly upload stats by torrent and summary upload
  • list all hosts that sends metrics to InfluxDB


Available commands:

  • help - Displays help for a command
  • list - List commands
  • torrent-list [--name='series*1080'] [--age='>1 <3 =2'] [--sort=1] [--limit=10], tl - List, filter and sort torrents
  • torrent-add file|url [file2] [fileX], ta - Safe add torrents
  • torrent-remove 1 [2] [3], tr - Remove one or more torrents by torrent id
  • torrent-remove-duplicates, trd - Remove duplicates obsolete torrents
  • stats-get [--name='name'] [--age='>1 <3 =2'] [profit='>0'] [--days=7] [--sort=1] [--limit=10] [--rm], sg - Get metrics from InfluxDB
  • stats-send, ss - Send metrics to InfluxDB
  • weburg-download [--limit 1], wd - Download popular torrents and tracked series from
  • weburg-download --popular [--movies-url=url] - Download only popular
  • weburg-download --series - Download only series
  • weburg-download --query - Download first result
  • weburg-download [movie url or id] - Download movie without popularity check
  • weburg-download [series url or id] [--days=1] - Download series for last x days
  • weburg-series-add, wsa - Add series to monitoring list
  • weburg-info, wi - Test internal weburg parser

Global command options

  • --config - set path to config file
  • --dry-run - don't change any data
  • -v|vv|vvv - more verbose output
  • --transmission-host - set transmission host
  • --transmission-port - set transmission port
  • --transmission-user - set transmission user
  • --transmission-password - set transmission password

HTTP server for add torrents

node scripts/server-torrent-add.js

Then you can add torrents via open urls like http://localhost:10293/?

You can also add userscript to your browser, scripts/weburg-torrent-add.user.js


PHAR automatic (Recommended)

latest_phar=$(curl -s | grep 'browser_' | cut -d\" -f4)
wget -O /usr/local/bin/transmission-cli "$latest_phar"
chmod +x /usr/local/bin/transmission-cli

PHAR manually

Download latest transmission-cli.phar here, make it executable and put it to bin directory.

Composer global

composer global require popstas/transmission-cli

If you cannot execute transmission-cli after that, probably you should add ~/.config/composer/vendor/bin to your PATH environment variable as described here.

Composer from source:

git clone
cd transmission-cli
composer install
ln -s "$PWD"/bin/transmission-cli /usr/local/bin/transmission-cli


Default config placement: ~/.transmission-cli.yml. It creates on first run. You can change some parameters here.

Also, you can pass config to command: transmission-cli --config /path/to/config.yml

Commands weburg-download, weburg-series-add, interacts only with and not requests to Transmission or InfluxDb.

You can use download-filename-whitelist and download-filename-blacklist lists for filter torrents before download.

About torrent duplicates

By default, transmission-cli prevents send stats to InfluxDB when you have torrents with same names in your Transmission, because it make stats about these torrents wrong. If it not matters for you, you can use allow-duplicates option in config. When allow-duplicates: true defined in config, transmission-cli will allow to stats-send with duplicates and don't ask to remove duplicates after torrent-add command.


If you want to make commands torrent-* working, you should enable remote access in Transmission and add host, port, username, password if it not defaults.

By default, transmission-cli request to Transmission on localhost:9091 without user and password. You can change it in ~/.transmission-cli.yml.

You can override default config: --transmission-host, --transmission-port, --transmission-user, --transmission-password

Also, maybe you want to automatically download movies, not only torrent files. To do that, enable autodownload in Transmission and point to same directory in --dest= option.

InfluxDB and Grafana

You need to install it for drawing torrent graphics.


Simplest way to install InfluxDB - Docker:

docker run --name influxdb -d --restart=always \
    -v /Users/popstas/lib/influxdb:/data \
    -p 8083:8083 -p 8086:8086 \

And if you don't want to see detailed stats about your torrents, you may not install InfluxDB, commands stats-* will not working.


  1. Run Grafana with Docker
docker run --name grafana -d \
    -v /Users/popstas/lib/grafana:/var/lib/grafana \
    -p 3000:3000 \
    -e "GF_SECURITY_ADMIN_USER=admin" \
  1. Add InfluxDB as data source "influxdb" to Grafana, choose database "transmission".
  2. Import dashboard - grafana-torrents.json

If you don't want to see graphs, Grafana not necessary.

autocompletion for bash/zsh:

source <(transmission-cli _completion --generate-hook)


Then, add to cron tasks like this:

59 * * * * transmission-cli torrent-remove-duplicates --yes --transmission-host=localhost
59 * * * * transmission-cli torrent-remove-duplicates --yes --transmission-host=wrtnsq
0  * * * * transmission-cli stats-send --transmission-host=localhost
0  * * * * transmission-cli stats-send --transmission-host=wrtnsq
1  2 * * * transmission-cli weburg-download --yes --download-torrents-dir=/Volumes/media/_planeta/_torrents

Don't forget add to cron PATH your ~/.config/composer/vendor/bin if you installed transmission-cli with composer global!


See commands --help.