Skip to content

Repository files navigation

RSS4Transmission

Tests golangci-lint License Badge Last Release

About

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.

Why?

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.

Docker Image

Pre-built images are available on DockerHub.

Features

  • 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 watch reloads 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 via text/template strings 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 with Transmission.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 MinUploadMbps floor 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 /speedtest page, and exported on a Prometheus-style /metrics endpoint. 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 /speedtest page 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, and rss4transmission speedtest runs a single on-demand measurement from the CLI, and --server targets one speedtest.net server ID for that run
  • Torrent file cache — avoids re-fetching .torrent files 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/watch tick
  • fail2ban integration — optional access log with timestamps and client IPs lets fail2ban detect and ban brute-force attempts against the cancel endpoint
  • Live config reloadwatch re-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

Live config reload

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:

  • Feeds and Extractors
  • Transmission, including a new host or port, new credentials, and WebUI
  • Gluetun, including the rotation policy and the control server address
  • SpeedTest, PortCheck.Enabled, and TorrentComplete.PollInterval
  • Ntfy and Notifications, including HMACSecret, TokenTTLH, and BaseURL
  • SeenFile and SeenCacheDays

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
  • --download and --download-path
  • --seen-file, which pins the cache path and overrides SeenFile in the config file

Documentation

  • 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, /speedtest page and /metrics endpoint
  • 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

License

RSS4Transmission is licensed under the GPLv3.

About

Transmission + Gluetun + RSS Feed

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages