Sonarr, transmission, hardlinks and custom download directory

Sonarr version (exact version): 4.0.9.2244
Mono version (if Sonarr is not running on Windows): .NET 6.0.13
OS: Docker image (4.0.9.2244-ls256 by linuxserver.io)

Description of issue:
I’m trying to configure sonarr and radarr to use transmission as the download client.

My requirements are a bit specific and non-conventional: I only want to use sonarr and radarr to rename, categorize and place downloads in the proper folders. I won’t use any indexer and I’ll add the torrents directly in the client (transmission).

I want to use hardlinks to keep a single copy of the file on disk and be able to keep seeding the torrent after finish.

I’m running sonarr, radarr and transmission in docker and when using the recommended volumes in sonarr (/tv, /downloads), and using the category = tv in the transmission client in sonarr, it works as expected:

  • I add a tv show in sonarr
  • I add the torrent directly in transmission setting the location as /downloads/complete/tv
  • sonarr tracks and detects the download and shows it in the activity queue
  • When download finishes, sonarr rename and copy the file to the specified media folder

This works but does not allow to use hardlinks as volumes for downloads (/downloads) and media (/tv) are different.

I changed the volumes to use a single volume in sonarr that groups downloads and media, however it is not working.

I’m following the trash guide for hardlinks (Docker - TRaSH Guides), and this is how the /data folder looks:

data
├── media
│   ├── movies
│   └── tv
└── torrents
    ├── complete
    │   ├── movies
    │   └── tv
    └── incomplete

Volumes in docker:

sonarr
volumes:
  - '/docker/sonarr/config:/config'
  - '/data:/data'

transmission
volumes:
  - '/docker/transmission/config:/config'
  - '/docker/transmission/watch:/watch'
  - '/data/torrents:/downloads'

I’m using this docker image: lscr.io/linuxserver/radarr

When starting the docker container for sonarr it complains the /downloads/complete directory does not exist:

You are using docker; download client Transmission places downloads in /downloads/complete but this directory does not appear to exist inside the container. Review your remote path mappings and container volume settings.

So, inside sonarr, I’m configuring the transmission download client with a custom directory (advanced setting) pointing to /data/torrents/complete/tv
When setting a custom download directory, the category option (previously configured as tv) can not be used, so I left the category field empty:

Cannot use Category and Directory

With this config sonarr is not able to detect and track transmission downloads and therefore they do not appear in the activity queue.

Debug log says nothing apart the authentication with transmission was correct.

As far as I know transmission is dumb in the sense it does not support labels or categories as other torrent clients, and the only way the *arr apps use to categorize transmission downloads is with subfolders, however when setting a custom download directory, categories are not configurable.

What is the correct way to set this up? Is it possible to do this with transmission?

That should do it I think…

Yes, that’s it!

A bit obscure and confusing since it is not clearly documented that the patch of the directories must match in sonarr and transmission, and sonarr still complains about the /downloads/complete directory does not exists, but it finally works!

I think it is a limitation of the transmission API, so that it should return the active and complete downloads with its internal path, and they do not match with the path in sonarr. But just guessing…

For those who see this in the future. This is what I’ve changed:

Volumes in docker:

sonarr
volumes:
  - '/docker/sonarr/config:/config'
  - '/data:/data'

transmission
volumes:
  - '/docker/transmission/config:/config'
  - '/docker/transmission/watch:/watch'
  - '/data/torrents:/data/torrents'

I’ve updated the settings.json of transmission to point complete and incomplete downloads to the new directories:

{
    (...)
    "download-dir": "/data/torrents/complete",
    "incomplete-dir": "/data/torrents/incomplete",
    (...)
}

And in sonarr I’m not using a custom download directory for the transmission download client anymore and I’m using tv in the category field as before.

It tracks the downloads, detect when they complete and makes a hardlink to the media directory as expected.

Thank you!