RSS4Transmission is a tool for fetching torrents over RSS for Transmission. It watches one or more RSS feeds, applies configurable label-based filtering and deduplication, and submits matching torrents directly to Transmission.
There are already a few tools that do this — most notably rss-transmission. RSS4Transmission is designed for users who pull down many different files from the same feed and need them saved to different directories. It fetches each RSS endpoint only once even when multiple feed configurations share the same URL, and it selects the highest-quality version of each item automatically using a configurable preference system.
Pre-built images are available on DockerHub.
- Label-based selection — extract structured metadata (channel/feed, series, round, session, resolution, etc.) from torrent titles and file names; deduplicate by identity key; prefer higher-quality versions automatically
- ntfy push notifications — receive a notification when a torrent starts
(with a More Info button), when it completes, when
watchreloads its config file (reporting success or failure, with the error text on failure), and when Transmission's peer port transitions open/closed or is still closed 60s after startup; notification title, body, and priority are user-defined viatext/templatestrings in the config file, with full access to torrent metadata (labels, size, feed name, GUID, and more) - History web UI — the Torrents page: a browsable record of every processed feed item with outcome and extracted labels; skipped, excluded, and error items can be re-submitted to Transmission with a Torrent button. Cross-links the VPN Speed and Rotations pages when speed testing is enabled
- Embedded Transmission client — the Transmission page shows the Transmission web client
in a frame, so one nav bar covers both tools. A built-in reverse proxy reaches Transmission on
your behalf and signs in with the configured credentials, which works even when the browser
cannot resolve
Transmission.Host. Turn it off withTransmission.WebUI: false - Gluetun VPN integration — automatically restarts the VPN and syncs the peer port into
Transmission when running behind Gluetun; port state is
polled every 5 minutes and logged/alerted on (also available without Gluetun via
PortCheck.Enabled) - VPN speed testing & egress rotation — periodically measures real speedtest.net throughput
over the Gluetun tunnel and asks Gluetun to re-pick an egress when the link is slow in either
direction — a separate
MinUploadMbpsfloor catches an exit that downloads fine while uploading nothing, which is what silently wrecks a ratio on a private tracker — gated by a cooldown, a daily cap, and a never-rotate-while-downloading rule; results are persisted, shown on a/speedtestpage, and exported on a Prometheus-style/metricsendpoint. Every rotation can send a pair of ntfy alerts — one when it's requested and one naming the new exit IP once the tunnel is back up. The/speedtestpage also has Run speedtest now and Rotate VPN now buttons for acting immediately instead of waiting for the next interval; its header also shows the port Gluetun forwards and whether Transmission sees that port as open, andrss4transmission speedtestruns a single on-demand measurement from the CLI, and--servertargets one speedtest.net server ID for that run - Torrent file cache — avoids re-fetching
.torrentfiles on every watch-loop iteration; pruned automatically - Ordered, stop-after-dispatch processing — feeds are processed in the order they're listed
in the config file; as soon as one torrent is dispatched or downloaded, the run stops
immediately, resuming with the next feed on the following
once/watchtick - fail2ban integration — optional access log with timestamps and client IPs lets fail2ban detect and ban brute-force attempts against the cancel endpoint
- Live config reload —
watchre-reads the whole config file when you save it and applies every setting to the running process. A bad edit is rejected, and the previous config keeps running
The watch command watches the config file. When you save a change, watch reads the whole file
again and applies every setting to the running process. A restart is not necessary.
The settings below all take effect on the next save:
FeedsandExtractorsTransmission, including a new host or port, new credentials, andWebUIGluetun, including the rotation policy and the control server addressSpeedTest,PortCheck.Enabled, andTorrentComplete.PollIntervalNtfyandNotifications, includingHMACSecret,TokenTTLH, andBaseURLSeenFileandSeenCacheDays
Two changes cost a little work. A new SpeedTest or Gluetun block rebuilds the speed monitor,
which abandons a measurement in progress. A new SeenFile saves the current cache before it opens
the new path.
If the new file is not valid, watch rejects it and keeps the config that is already running. It
logs the error and sends the config-failed ntfy alert. Fix the file and save it again.
The command line flags are read once at start. To change one of the flags below, restart the process:
--private-listen,--public-listen,--history-file, and--access-log--sleep,--torrent-cache-dir, and--feed--downloadand--download-path--seen-file, which pins the cache path and overridesSeenFilein the config file
- Deployment & Docker Compose — Docker setup, Transmission config, Gluetun integration, seen cache, torrent file cache, environment variables
- VPN Speed Testing — measuring throughput over the Gluetun tunnel,
automatic egress rotation, bandwidth cost,
/speedtestpage and/metricsendpoint - Feeds & Labels — feed configuration, label extractors, identity deduplication, preference ranking, full config example
- Notifications & History — ntfy push notifications with customizable
templates and priority, cancel endpoint (Traefik and direct port-forward models), history web
UI, completed notification via periodic Transmission polling
(
TorrentComplete.PollInterval) - fail2ban Integration — access log setup, filter and jail configuration, Docker volume-mount example, client IP resolution with Cloudflare support
RSS4Transmission is licensed under the GPLv3.