Arrmada

Arrmada

Docker app from RegularBloke's Repository

Overview

Arrmada finds, downloads and organises movies, series, books and audiobooks in one app, with requests for your household, subtitles, Convert and Plex or Jellyfin watch insights. This container includes qBittorrent and FlareSolverr, already connected: there's nothing to set up for them. To use your own instead, switch either off under Show more settings (ARRMADA_BUNDLE_QBITTORRENT, ARRMADA_BUNDLE_FLARESOLVERR) and add yours in Settings, Connections. Map the share that holds your media and downloads to /storage, so imports hardlink instead of copying. On first start, open the web UI, create the admin account, and follow the setup: your TMDB key, then each library folder and the Downloads folder under /storage. Never put media in /data: that's the database.

Arrmada on Unraid

There are two ways to run Arrmada on Unraid:

  • The Community Apps template (this page). One container, managed from Unraid's Docker page like any other app, with qBittorrent and FlareSolverr built in: Arrmada starts them, connects to them and keeps their settings in step, so there's no download client to set up. Already have your own qBittorrent, SABnzbd or FlareSolverr? Switch the built-in ones off and use yours.
  • The Compose install (Install). The same app with qBittorrent and FlareSolverr as containers of their own, through the Docker Compose Manager plugin, plus the optional Prowlarr and SABnzbd. Its folders are lines in the stack's .env (ARRMADA_DATA_HOST, and ARRMADA_MEDIA_HOST for media in a share rather than in docker.img), so the compose file itself never needs editing (Configuration).

Both keep the same kind of database, but there's no switch from one to the other: choose one.

Your share layout

Arrmada imports a finished download by hardlinking it into your library: no copy, no extra space, and the torrent keeps seeding. A hardlink only works inside one mount, so keep your libraries and your downloads in one share, given to Arrmada at /storage. For example, a share called data:

/mnt/user/data
├── media
│   ├── movies
│   ├── tv
│   ├── ebooks
│   └── audiobooks
├── downloads         ← the built-in qBittorrent saves here (or torrents/, your choice)
└── usenet            ← SABnzbd, if you use your own

/mnt/user merges your array disks, so a hardlink also needs the download and the library copy to land on the same disk. When they don't, the import copies instead and the log says "imported by COPY". Setting the share's allocation method or split level so a folder stays on one disk helps.

⚠ Never point anything at /data inside the container except appdata. That's where Arrmada keeps its database (and the built-in qBittorrent its settings).

Install from Community Apps

  1. Open the Apps tab, search for Arrmada, and click Install.

  2. Fill in Media and downloads with your share (/mnt/user/data in the example above). Everything else can stay as it is:

    Field Default What it is
    Web UI port 7880 The web page. Not 7878, because Radarr usually has that
    Torrent port (TCP) and (UDP) 56881 The built-in qBittorrent's incoming port. Forward it on your router (TCP and UDP) to seed well
    Audiobook server port 13379 For listening apps (Lissen and others). Off until you switch it on in the app
    App data /mnt/user/appdata/arrmada The database, its backups and settings, and the built-in qBittorrent's (/data inside)
    Media and downloads — Your share, at /storage inside
    qBittorrent web UI port (more settings) 8091 Optional: qBittorrent's own page, if you want to look inside it
    Transcode folder (more settings) — Optional scratch space for Convert. A cache pool is better than the array (/mnt/cache/transcode)
    Built-in qBittorrent / FlareSolverr (more settings) true false to use your own instead (below)
    Torrent port setting (more settings) 56881 The port qBittorrent listens on: always the same number as the torrent port entries
    qBittorrent web UI host port (more settings) 8091 The same number as the qBittorrent web UI port, so Arrmada links the right page
    PUID / PGID (more settings) 99 / 100 Unraid's nobody:users, which own your shares. The built-in qBittorrent runs as them too
    Starting library / downloads folder (more settings) /storage, /storage/downloads Only used until you pick the folders in the app
    FlareSolverr URL (more settings) — Blank uses the built-in one. Your own FlareSolverr's address if you switched that off
  3. Click Apply, then WebUI on Arrmada's icon in the Docker tab.

Your timezone comes from Unraid itself (Settings → Date and Time), so schedules such as Convert's overnight window run on your clock. API keys and passwords never go in the template: you enter them in the app.

A port that's taken. If Unraid says a port "is already allocated", another container has it: pick another number. For the torrent port, change it in all three places (both sides of the TCP entry, both sides of the UDP entry, and Torrent port setting): qBittorrent tells other peers the port it listens on and can't know about a different number on the server side.

Install before it's listed

Until Arrmada shows up in Community Apps, install the same template by hand. In the Unraid terminal (top right of the web UI):

curl -fsSL https://raw.githubusercontent.com/tristenlammi/Arrmada/main/templates/arrmada.xml \
  -o /boot/config/plugins/dockerMan/templates-user/my-Arrmada.xml

Then Docker → Add Container, choose Arrmada from the Template list, and carry on from step 2 above.

First start

Open the web UI from your home network and create your admin account (it can't be created from outside, so nobody else can claim a new install). Setup then walks you through:

  1. Your TMDB key (free, themoviedb.org).
  2. Your folders. Arrmada looks inside /storage and fills in folders named like your libraries (/storage/media/movies, /storage/media/tv, /storage/downloads in the example). Check them, or pick others with Browse. The built-in qBittorrent saves to the Downloads folder you pick.
  3. Your media server (Plex, Jellyfin or both) and indexers.

The Dashboard's Getting started list ticks itself off as you go. Connect a download client is already done: the built-in qBittorrent registers itself on first start.

The built-in qBittorrent and FlareSolverr

They run inside Arrmada's container and start and stop with it: qBittorrent as the same user (PUID/PGID), FlareSolverr as a user of its own that can't read Arrmada's appdata (its browser opens tracker pages). The container log shows their output with [qbittorrent] and [flaresolverr] in front (Docker tab → Arrmada's icon → Logs); [aio] lines are the part that starts them.

  • qBittorrent shows up in Settings → Connections as qBittorrent (bundled). Arrmada sets its incoming port, its save folder and its queue limits, and files each download under its own categories. Its settings and torrent list live in appdata (qbittorrent/), so they survive updates.
  • qBittorrent's own page is on the qBittorrent web UI port (8091: http://<server>:8091). Its login was made by Arrmada on first start: open the qBittorrent card in Settings → Connections and choose Show its login (admins only). Nobody gets in without it, Arrmada included: it signs in with the same login. If you change the password in qBittorrent's own settings, enter the new one on the qBittorrent card too (Edit), or Arrmada can't reach it.
  • FlareSolverr answers only inside the container, and Arrmada's FlareSolverr setting points at it unless you set your own. It's used for trackers behind Cloudflare (TorrentLeech, 1337x) and TheXEM.

Unraid servers are x86-64, which has both. (The all-in-one image's 64-bit ARM build has no FlareSolverr, because the Chromium it needs is x86-64 only; it says so in the log.)

Using your own download client or FlareSolverr

Edit Arrmada, switch on Show more settings, and set Built-in qBittorrent (or Built-in FlareSolverr) to false. After Apply it doesn't start, and:

  • qBittorrent off: its client in Settings → Connections is switched off (not deleted), so nothing new is sent to it. Its settings and torrents stay in appdata: set it back to true and it picks up where it left off, client switched back on. You can remove the two torrent port entries if you like. Then add your own client (next section).
  • FlareSolverr off: put your own FlareSolverr's address in FlareSolverr URL, or in Settings → Connections → FlareSolverr, for example http://192.168.1.10:8191.

Connecting your own download client

Give the client the same share at the same path. Edit the qBittorrent (or SABnzbd) container and add a path: container path /storage, host path /mnt/user/data. Set its download folder inside it (/storage/torrents). Now both containers name a file the same way, and imports hardlink.

If you'd rather keep the client's own layout (the common /downloads → /mnt/user/data/torrents), that works too: add a path mapping on the client's card in Arrmada (remote /downloads, local /storage/torrents). The card suggests it when it sees a path it can't reach.

Then in Arrmada, Settings → Connections → + Add client:

  • qBittorrent: the address of its web UI as Arrmada's container reaches it. On Unraid's default bridge network that's the server's IP and the port, http://192.168.1.10:8080 (container names only work between containers on the same custom network). Then qBittorrent's web UI username and password.
  • SABnzbd: its address and its full API key (SABnzbd → Config → General). See Usenet for categories and indexers. SABnzbd works next to the built-in qBittorrent too: you don't have to switch that off to add it.

Arrmada sends each download to the Downloads folder you picked, and creates its own categories (arrmada, arrmada-tv, arrmada-books, arrmada-music).

Prowlarr: Settings → Connections → Prowlarr, with its address and API key (Prowlarr → Settings → General), then Sync now.

GPU (Intel or AMD)

Convert and Whisper subtitles use Intel or AMD graphics through /dev/dri. Check that the server has it: ls /dev/dri in the Unraid terminal should list renderD128. Then edit Arrmada, switch on Advanced View (top right), and add this to Extra Parameters, after what's already there:

--device=/dev/dri

The template doesn't add the device by itself: on a server without it, Docker would refuse to start the container. docker exec Arrmada /usr/lib/jellyfin-ffmpeg/vainfo shows what the container can see. Intel and AMD cards are both recognised; GPU has the details.

An NVIDIA card can do Convert's encoding (NVENC) instead, through the Nvidia-Driver plugin and --runtime=nvidia; AI subtitles stay on the CPU there. GPU has the steps, and how to see which encoders Arrmada found.

Updating

The template runs ghcr.io/tristenlammi/arrmada:stable-aio, the latest published release with qBittorrent and FlareSolverr built in. When a new one is out, Arrmada's Settings → Status → Updates says so, and Unraid's Docker tab shows update ready after Check for Updates (it can take a few minutes longer than the Updates card, while the all-in-one image is built). Click it (or Update All) to pull the new image; the CA Auto Update plugin can do it on a schedule. Torrents keep their state across an update: qBittorrent saves it when the container stops.

Before an update changes the database, Arrmada copies it to backups/ in its appdata, and it takes a nightly backup too (Backups). To go back a version, edit the container and set Repository to that release's all-in-one tag, for example ghcr.io/tristenlammi/arrmada:0.3.0-aio (releases before the all-in-one image only have the plain tag, ghcr.io/tristenlammi/arrmada:0.2.0, which has no qBittorrent inside). An older version won't start on a database a newer one has already upgraded: restore the backup from before the update first (Backups).

Installed from an earlier version of this template? It ran :stable, the app on its own, and keeps doing so: Unraid never changes an installed container's template. Nothing is wrong with that. To switch to the built-in qBittorrent and FlareSolverr, edit Arrmada, set Repository to ghcr.io/tristenlammi/arrmada:stable-aio, and add the two torrent ports (56881, TCP and UDP); or keep your own client and set Built-in qBittorrent to false.

Troubleshooting

  • The container won't start: "port is already allocated". Something else has that host port. Edit Arrmada and change it (A port that's taken).
  • Torrents download but hardly upload. The torrent port isn't reachable from outside: forward it (TCP and UDP) on your router to the Unraid server, and check the number is the same in all three places.
  • "permission denied" on a library folder. One disk's copy of a share folder is owned by root. Fix it through the share path: chown -R 99:100 and chmod -R u+rwX,g+rwX on the library's parent folders.
  • Downloads finish but never import (your own client). Arrmada can't see where the client saved them. The client's card in Settings → Connections names the path; give the client /storage too, or add the path mapping it suggests.
  • qBittorrent's page doesn't take the login. If you changed the password in qBittorrent, use yours. If it's lost: stop Arrmada, delete qbittorrent/qBittorrent/config/qBittorrent.conf in its appdata, and start it again. A new config and login are made, and Arrmada uses the new login by itself; the torrent list (qbittorrent/qBittorrent/data) is kept, but qBittorrent's other settings go back to Arrmada's defaults.
  • The qBittorrent card says "invalid username or password". The password was changed in qBittorrent: enter it on the card (Edit).
  • More in Troubleshooting.

Requirements

One share holding your media and downloads, mapped to /storage. qBittorrent and FlareSolverr are built in; to seed well, forward the torrent port (56881, TCP and UDP) on your router.

Related apps

Details

Repository
ghcr.io/tristenlammi/arrmada:stable-aio
Last Updated2026-10-18
First Seen2026-10-18

Runtime arguments

Web UI
http://[IP]:[PORT:7878]/
Network
bridge
Shell
bash
Privileged
false
Extra Params
--cap-add=SYS_NICE --restart=unless-stopped --stop-timeout=30

Template configuration

Web UI portPorttcp

The web interface. 7880 on the server, because Radarr usually has 7878.

Target
7878
Default
7880
Value
7880
Torrent port (TCP)Porttcp

The built-in qBittorrent's incoming port. Forward it on your router. To change it, use the same new number on both sides here, in the UDP entry and in Torrent port setting.

Target
56881
Default
56881
Value
56881
Torrent port (UDP)Portudp

The same port for UDP (DHT and peers). Keep it the same as the TCP entry.

Target
56881
Default
56881
Value
56881
Audiobook server portPorttcp

For listening apps such as Lissen. Off until you switch it on in the app; 13379 stays clear of an Audiobookshelf on 13378.

Target
13378
Default
13379
Value
13379
qBittorrent web UI portPorttcp

Optional. The built-in qBittorrent's own page, if you want to look inside it. Arrmada doesn't need it. The login is in Arrmada, Settings, Connections (admins).

Target
8080
Default
8091
Value
8091
App dataPathrw

The database, its backups and settings, and the built-in qBittorrent's settings and torrent list. Keep it in appdata. Never put media here.

Target
/data
Default
/mnt/user/appdata/arrmada
Value
/mnt/user/appdata/arrmada
Media and downloadsPathrw

The share that holds your libraries and your downloads, for example /mnt/user/data with media and torrents inside. One share for both, so imports can hardlink. Each library folder is picked inside it in the app.

Target
/storage
Transcode folderPathrw

Optional. Scratch space for Convert on a fast pool, not the array (for example /mnt/cache/transcode).

Target
/transcode
Built-in qBittorrentVariable

true runs qBittorrent inside this container, connected and set up by Arrmada. false to use your own: add it in Settings, Connections. Switching it off keeps its settings and torrents in appdata for later.

Target
ARRMADA_BUNDLE_QBITTORRENT
Default
true|false
Value
true
Built-in FlareSolverrVariable

true runs FlareSolverr inside this container, for trackers behind Cloudflare. false to use your own (FlareSolverr URL below) or none.

Target
ARRMADA_BUNDLE_FLARESOLVERR
Default
true|false
Value
true
Torrent port settingVariable

The port the built-in qBittorrent listens on. Must be the same number as the torrent port entries above.

Target
ARRMADA_QBIT_PORT
Default
56881
Value
56881
qBittorrent web UI host portVariable

The same number as the qBittorrent web UI port above, so Arrmada links the right page.

Target
ARRMADA_QBIT_WEBUI_HOST_PORT
Default
8091
Value
8091
PUIDVariable

The user Arrmada and the built-in qBittorrent run as. 99 is Unraid's nobody.

Default
99
Value
99
PGIDVariable

The group they run as. 100 is Unraid's users.

Default
100
Value
100
Audiobook server host portVariable

The same number as the audiobook server port above, so the app shows people the right address.

Target
ARRMADA_AUDIOBOOK_HOST_PORT
Default
13379
Value
13379
Starting library folderVariable

Where a library you haven't picked a folder for goes (movies, tvshows, ebooks, audiobooks inside it). The folders you pick in the app win. Keep it under /storage.

Target
ARRMADA_LIBRARY_DIR
Default
/storage
Value
/storage
Starting downloads folderVariable

Where downloads go until you pick the Downloads folder in the app. Keep it under /storage.

Target
ARRMADA_DOWNLOADS_DIR
Default
/storage/downloads
Value
/storage/downloads
FlareSolverr URLVariable

Optional. Leave it blank to use the built-in FlareSolverr. Your own (for example http://192.168.1.10:8191) if you switched the built-in one off. Can also be set in the app.

Target
ARRMADA_FLARESOLVERR_URL