Adds torrents from rss feeds to transmission web frontend.
Ruby Shell
Clone or download
Latest commit 8b6b66e Jun 16, 2018


Gem Version Build Status Coverage Status Code Climate Docker Hub Build Status

transmission-rss is basically a workaround for transmission's lack of the ability to monitor RSS feeds and automatically add enclosed torrent links.

It works with transmission-daemon and transmission-gtk (if the web frontend is enabled in the settings dialog). Sites like and or self-hosted seriesly instances are suited well as feed sources.

A tool called transmission-add-file is also included for mass adding of torrent files.

As it's done with poems, I devote this very artful and romantic piece of code to the single most delightful human being: Ann.

The minimum supported Ruby version is 2.1. (You will need rbenv if your os does not support Ruby >= 2.1, e.g. on Debian wheezy.)


Latest stable version from

gem install transmission-rss

From source

git clone
cd transmission-rss
gem build transmission-rss.gemspec
gem install transmission-rss-*.gem

Via Docker

docker run \
  -v $(pwd)/transmission-rss.conf:/etc/transmission-rss.conf \


A yaml formatted config file is expected at /etc/transmission-rss.conf. Users can override some options for their transmission-rss instances by providing a config at ~/.config/transmission-rss/config.yml (or in $XDG_CONFIG_HOME instead of ~/.config).

WARNING: If you want to override a nested option like you also have to explicitly specify the others like log.level. (True for categories server, login, log, privileges, and client.)

Minimal example

It should at least contain a list of feeds:

  - url:
  - url:

Feed item titles can be filtered by a regular expression:

  - url:
    regexp: foo
  - url:
    regexp: (foo|bar)

Feeds can also be configured to download files to specific directory:

  - url:
    download_path: /home/user/Downloads

Setting the seed ratio limit is supported per feed:

  - url:
    seed_ratio_limit: 0

Configurable certificate validation, good for self-signed certificates. Default is true:

  - url:
    validate_cert: false

All available options

The following configuration file example contains every existing option (although update_interval, add_paused, server, log, fork, and pid_file are default values and could be omitted). The default is STDERR. privileges is not defined by default, so the script runs as current user/group. login is also not defined by default. It has to be defined, if transmission is configured for HTTP basic authentication.

See ./transmission-rss.conf.example for more documentation.

  - url:
  - url:
  - url:
    regexp: match1
  - url:
    regexp: (match1|match2)
  - url:
    download_path: /home/user/Downloads
  - url:
    seed_ratio_limit: 1
  - url:
      - match1
      - match2
  - url:
      - matcher: match1
        download_path: /home/user/match1
      - matcher: match2
        download_path: /home/user/match2
  - url:
    validate_cert: false

update_interval: 600

add_paused: false

  host: localhost
  port: 9091
  rpc_path: /transmission/rpc

  username: transmission
  password: transmission

  target: /var/log/transmissiond-rss.log
  level: debug

  user: nobody
  group: nobody

  timeout: 5

fork: false

pid_file: false

seen_file: ~/.config/transmission/seen

Daemonized Startup

The following content can be saved into /etc/systemd/system/transmission-rss.service to create a systemd unit. Remember checking the path in ExecStart.

Description=Transmission RSS daemon. transmission-daemon.service

ExecStart=/usr/local/bin/transmission-rss -f
ExecReload=/bin/kill -s HUP $MAINPID


The unit files are reloaded by systemctl daemon-reload. You can then start transmission-rss by running systemctl start transmission-rss. Starting on boot, can be enabled systemctl enable transmission-rss.