Sailing the digital seas with ease,
Fetching treasures as we please.
With *arr at helm and put.io's might,
Downloads flow through day and night.
plundrio (/หplสndriหoส/
) is a put.io download client designed to seamlessly
integrate with the *arr stack (Sonarr, Radarr, Lidarr, etc.). Files are
automatically added to put.io and downloaded to the local disk once complete.
- ๐ Features
- ๐ง How It Works
- ๐ Prerequisites
- ๐ฆ Installation
- ๐ Getting Started
- โ๏ธ Configuration
- ๐ Configuring *arr Applications
- ๐ฎ Commands
- ๐ก Tips & Optimization
- ๐ Troubleshooting
- โ Frequently Asked Questions
- ๐ค Contributing
- ๐ License
- ๐ Seamless integration with Sonarr, Radarr, and other *arr applications supporting Transmission RPC
- ๐ Stateless architecture; multiple instances per put.io account supported
- โก Fast and efficient downloads from put.io (with resume support)
- ๐ Parallel downloads with configurable worker count to maximize bandwidth
- ๏ฟฝ๏ธ Easy configuration and setup with multiple configuration methods
- ๐งน Automatic cleanup of completed transfers
- ๐ Secure OAuth token handling for put.io authentication
- ๐ Comprehensive transfer logging with detailed metadata for all transfers
- ๐ Automatic retry of failed transfers with configurable retry attempts
plundrio makes downloading from put.io simple and automatic:
graph LR
A[*arr Application] -->|Sends download request| B[plundrio]
B -->|Adds transfer to| C[put.io]
C -->|Transfer completes| D[plundrio monitors]
D -->|Downloads files| E[Local Storage]
D -->|Cleans up| C
- Your *arr application sends a download request to plundrio via Transmission RPC
- plundrio forwards this request to put.io
- plundrio tracks all put.io transfers pointing at the specified target directory
- Once a transfer completes, it automatically downloads all files to your local folder
- Downloads are parallelized with multiple workers to optimize speed
- Transfers and their files are cleaned up when all files are present locally and the transfer finished seeding
plundrio implements a specialized state tracking system to ensure seamless integration with *arr applications:
-
Transfer Record Preservation:
- When a transfer completes and files are downloaded, plundrio removes the files from put.io but keeps the transfer record
- This transfer record acts as a central entity that *arr applications can query to determine completion status
- Transfers are only fully removed when explicitly requested via torrent-remove RPC call
-
Progress Calculation:
- put.io download progress (0-100%) is mapped to 0-50% of the total progress
- Local download progress (0-100%) is mapped to 50-100% of the total progress
- For transfers being processed: progress = (put.io_progress / 2) + (local_progress * 0.5)
- For completed transfers: progress = 100% with "seeding" status
- This two-phase progress tracking gives *arr applications accurate visibility into both remote and local download status
This approach ensures reliable integration with *arr applications while optimizing put.io storage usage.
Before installing plundrio, ensure you have:
- put.io Account: An active put.io subscription
- OAuth Token: A valid put.io OAuth token (instructions for obtaining below)
- Storage Space: Sufficient disk space for your downloads
- Network Bandwidth: Adequate bandwidth for parallel downloads
- *One or more arr Applications: Sonarr, Radarr, Lidarr, etc. (optional, but recommended)
go install github.com/elsbrock/plundrio/cmd/plundrio@latest
plundrio can be integrated directly into your NixOS configuration as a service:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
plundrio.url = "github:elsbrock/plundrio";
};
outputs = { self, nixpkgs, plundrio, ... }: {
nixosConfigurations.mySystem = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
plundrio.nixosModules.default
{
services.plundrio = {
enable = true;
targetDir = "/var/lib/plundrio/downloads";
putioFolder = "plundrio";
oauthToken = "your-oauth-token";
# Optional configurations with defaults:
# listenAddr = ":9091";
# workerCount = 4;
# logLevel = "info";
# user = "plundrio";
# group = "plundrio";
};
}
];
};
};
}
The NixOS module:
- Creates a dedicated system user and group (plundrio)
- Sets up a systemd service with proper security hardening
- Creates the target directory with appropriate permissions
- Automatically starts at boot and restarts on failure
docker run --rm -it ghcr.io/elsbrock/plundrio:latest -- --help
Make sure to expose the transmission RPC port (default 9091) and mount the download directory:
docker run -d \
--name plundrio \
-p 9091:9091 \
-v /path/to/downloads:/downloads \
-e PLDR_TOKEN=your-token \
-e PLDR_TARGET=/downloads \
-e PLDR_FOLDER=plundrio \
ghcr.io/elsbrock/plundrio:latest
Download the latest binary for your platform from the releases page. We provide packages and Docker images for both x86_64-linux and aarch64-linux platforms.
plundrio get-token
This will guide you through the OAuth authentication process and provide you with a token.
plundrio generate-config
This creates a template configuration file that you can customize.
Edit your configuration file or set environment variables to specify your download directory and put.io folder.
plundrio run \
--target /path/to/downloads \
--folder "plundrio" \
--token YOUR_PUTIO_TOKEN \
--workers 4
Add plundrio as a Transmission download client in your *arr application (see Configuring *arr Applications below).
plundrio supports multiple configuration methods:
- Config file (YAML format):
target: /path/to/downloads # Target directory for downloads
folder: "plundrio" # Folder name on put.io
token: "" # Put.io OAuth token (prefer env var)
listen: ":9091" # Transmission RPC server address
workers: 4 # Number of download workers
log_level: "info" # Log level (trace,debug,info,warn,error,fatal,panic,none,pretty)
-
Command-line flags (see full list with
plundrio run --help
) -
Environment variables (prefixed with
PLDR_
):
export PLDR_TARGET=/path/to/downloads
export PLDR_TOKEN=your-putio-token
export PLDR_FOLDER=plundrio
export PLDR_LISTEN=:9091
export PLDR_WORKERS=4
export PLDR_LOG_LEVEL=info
Configuration values are loaded in the following order, with later sources overriding earlier ones:
- Default values
- Configuration file
- Environment variables
- Command-line flags
๐ก Security Note: Store OAuth tokens in environment variables rather than config files or command-line arguments for better security.
To add plundrio to your *arr application (Sonarr, Radarr, etc.):
- Go to Settings > Download Clients
- Click the + button to add a new client
- Select "Transmission" from the list
- Fill in the following details:
- Name: plundrio (or any name you prefer)
- Host: localhost (or your server IP)
- Port: 9091 (or your configured port)
- URL Base: leave empty
- Username: leave empty
- Password: leave empty
- Click "Test" to verify the connection
- Save if the test is successful
plundrio will now automatically handle downloads from your *arr application through put.io.
plundrio run \
--target /path/to/downloads \
--folder "plundrio" \
--token YOUR_PUTIO_TOKEN \
--workers 4
plundrio generate-config
plundrio get-token
-
Trash Bin Management: We recommend turning off the trash bin in your put.io settings. This helps keep your put.io account clean and saves space. The trash cannot be deleted programmatically.
-
Download Speed Optimization: Downloads are optimized using the grab library for maximum efficiency. The default worker count of 4 allows for parallel downloads to maximize your available bandwidth.
-
Worker Count Tuning:
- For faster internet connections (100Mbps+), consider increasing worker count to 5-8
- For slower connections, reduce worker count to 2-3 to avoid bandwidth saturation
- Monitor system resource usage to find the optimal setting for your environment
-
Automatic Downloads: If you set the default download folder of put.io to the folder configured in plundrio, you can automatically download files added through other means (e.g., via chill.institute).
-
Security Best Practices:
- Use environment variables for sensitive data like OAuth tokens
- Consider using Docker secrets or a secure environment variable manager in production
- Regularly rotate your OAuth tokens for enhanced security
-
Connection Refused
- Ensure plundrio is running and the port (default 9091) is not blocked by a firewall
- Verify the correct host/IP is configured in your *arr application
-
Authentication Failures
- Regenerate your OAuth token using
plundrio get-token
- Check that the token is correctly set in your configuration
- Regenerate your OAuth token using
-
Download Issues
- Verify your target directory is writable
- Check available disk space
- Ensure your put.io account is active and has the files available
-
Performance Problems
- Adjust worker count based on your bandwidth and system capabilities
- Check for network throttling or limitations
Can I use plundrio without *arr applications?
Yes, plundrio will monitor and download any transfers in your configured put.io folder, regardless of how they were added.
How does plundrio compare to the official put.io client?
plundrio focuses on automation and integration with *arr applications, while the official client offers a more general-purpose interface.
Can I run multiple instances of plundrio?
Yes, plundrio is stateless and can be run in multiple instances, even pointing to the same put.io account with different configurations.
Does plundrio support VPNs or proxies?
plundrio uses your system's network configuration. If your system routes through a VPN or proxy, plundrio will use that connection.
How can I monitor plundrio's status?
plundrio logs its activities to stdout. You can redirect these logs to a file or use a log management system.
Contributions to plundrio are welcome! Here's how you can contribute:
-
Code Contributions:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
-
Bug Reports:
- Open an issue describing the bug
- Include steps to reproduce
- Provide system information
-
Feature Requests:
- Open an issue describing the feature
- Explain the use case and benefits
-
Documentation:
- Help improve the README
- Add examples or tutorials
Please open an issue first to discuss what you would like to change for major features or changes.
This project is licensed under the MIT License - see the LICENSE file for details.