putiorr

A stable put.io bridge for the *arr family.

putiorr presents a Transmission-compatible RPC endpoint to Sonarr, Radarr, Lidarr, Readarr, Prowlarr, and similar apps, then copies completed put.io files into the download target your importers already know.

Transmission-compatible RPC
put.io OAuth
RR profiles and routing
Completed-download handling
putiorr Transmission-compatible put.io bridge for Sonarr, Radarr, Lidarr, Prowlarr, and friends.
Put.io
RR profiles Use the setup wizard to create one profile per app.
Setup profile
RadarrEnabled
Radarr

Imports to /movies.

Put.io
putiorr
Download
/downloads
RPC
/radarr/transmission/rpc
SonarrEnabled
Sonarr

Imports to /series.

Put.io
putiorr
Download
/downloads
RPC
/sonarr/transmission/rpc
Download profiles Tune slow-speed reset by download shape.
Add profile
Default100 MB/s120s
Current downloads Combined put.io and local transfer state.
No active downloads yet. Progress appears here.

How the bridge works

1. put.io

Remote transfers are created and prepared in put.io.

2. putiorr

RPC requests look like Transmission to your *arr apps.

Target

3. Download target

Completed files are copied to a shared local target.

*arr

4. Import

Completed-download handling imports from the same mounted path.

5. Library

Your media ends up organized in the normal library folders.

Dashboard screenshots

Current putiorr uses a topbar, clear profile cards, panel actions, and focused empty states.

putiorr dashboard showing RR profile cards, download profile controls, and current downloads panel.

Connect with OAuth or token

The Put.io connection dialog keeps the default OAuth relay path simple, while still allowing a direct token paste or rotation when that fits the install.

  • OAuth starts from the browser with hosted relay defaults.
  • Direct Token supports paste-and-save for manual or rotated credentials.
  • Connection testing stays disabled until credentials are present.
putiorr Put.io connection dialog showing the OAuth tab and Connect with put.io action.
Put.io OAuth
putiorr Put.io connection dialog showing the Direct Token tab and token input.
Direct Token

Profile setup is guided

The setup wizard explains the field you are editing, keeps app-specific defaults aligned, and shows the final category folder before you save.

  • Semantic Field Guide changes with the selected input.
  • Computed values make shared download paths easy to verify.
  • Copy settings gives each *arr app the matching client values.
putiorr profile setup wizard showing semantic field help for the shared download folder and the computed final category folder.

Download profiles tune each use case

Download profiles let each media shape use the right slow-speed reset policy, keeping large copies patient and small imports responsive.

  • Startup grace gives large transfers time to reach normal throughput.
  • Ignore-below rules keep tiny files from distorting reset behavior.
  • Slow threshold and duration can match movies, episodes, music, or books.
putiorr download profile modal showing startup grace, ignore-below, duration, slow threshold, and semantic field guidance.

Paste the generated client values into Sonarr

Sonarr sees putiorr as a Transmission download client. When both containers share a Docker Compose network, the Host can be the putiorr service name.

  • Name and Host can both be putiorr inside the compose network.
  • Port 9091 and Category sonarr match the Sonarr RR profile defaults.
  • Completed Download Handling can remove imported items from the client history.
Sonarr Transmission download client configuration showing putiorr as the host, port 9091, category sonarr, and completed download handling enabled.

Built for reliable imports

Durable queue state

SQLite state keeps the bridge steady across restarts.

Secure OAuth flow

The static relay only returns the token to the user's putiorr instance.

Flexible routing

Profiles map each app to its own RPC path and category.

Shared download target

Mount the same host folder at the same container path everywhere.

Safe cleanup

Delete-local-data and remote cleanup are handled intentionally.

Resumable local copies

Partial files resume with range requests after restarts.

Setup in minutes

Run putiorr near your *arr stack, share one download target mount, and point each app at its matching Transmission URL base.

services:
  putiorr:
    image: ghcr.io/ptheofan/putiorr:latest
    restart: unless-stopped
    volumes:
      - /volume1/docker/putiorr-config:/data/putiorr-config
      - /volume/downloads:/downloads
  1. Create persistent config and download target folders.
  2. Start the container on the same Docker network as your *arr stack.
  3. Mount the download target into putiorr and each *arr app at the same path, such as /downloads.
  4. Connect put.io with OAuth or a direct token.
  5. Create one RR profile per app.
  6. Paste the Transmission host, port, category, and URL base into each app.

OAuth relay remains available

The hosted relay page is still the dedicated browser handoff for put.io OAuth flows.

Open OAuth relay