Settings reference¶
Settings live under Settings (connections, encoding, automation, metadata, discs, path mappings) and Settings → General (host, security, proxy, logging, updates, backups). Both pages have a Show Advanced toggle that reveals the orange advanced fields, like Sonarr's.
Everything on these pages is also available as JSON: GET /api/settings, PUT /api/settings.
General¶
- Host — Bind Address (
*,localhostor an IP), Port, URL Base (reverse proxy sub-path, e.g./rexarr), Instance Name (browser tab and login page), Application URL (used for webhook links), and SSL (HTTPS on its own port with a PEM cert + key or a.pfx). Host changes need a restart: the page shows a Restart button, and Rexarr restarts its web server in place, falling back to the old port if the new one cannot be bound.REXARR_PORT/PORT,REXARR_HOSTandREXARR_URL_BASEtake precedence and lock the fields. - Security — Authentication None, Basic (Browser Popup) or Forms (Login Page); Authentication Required
can skip local addresses (a reverse proxy's
X-Forwarded-Foris honoured only when the proxy itself is local). Passwords are stored as salted scrypt hashes; sessions are signed cookies (30 days with Remember me); repeated failed logins are throttled and logged under System → Events. The API key (X-Api-Keyheader or?apikey=) always works — the webhook URLs on the Connections page include it when authentication is on. Locked out? Start Rexarr once withREXARR_RESET_AUTH=1to turn authentication off. Certificate Validation controls HTTPS checks for Radarr / Sonarr / Prowlarr and other servers (enabled, disabled for local addresses, disabled). - Proxy — HTTP(S) proxy, with credentials, an ignore list such as
*.local, 192.168.1.*, and a bypass for local addresses, for AniDB data, cover art and remote *arr apps. - Logging — Info / Debug / Trace (Debug and Trace add every HTTP request) and the log file size before rotation.
- Updates — branch and mechanism; the mechanism decides what System → Updates tells you to run to install a release. Rexarr does not update itself, and in Docker you pull the new image.
- Backups — folder (relative to the config directory), interval (1–7 days) and retention: scheduled backups older than this are removed, and the newest three are always kept.
Connections¶
| Connection | Fields | Notes |
|---|---|---|
| Radarr | URL, API key | API v3. Test verifies it |
| Sonarr | URL, API key | API v3 |
| Prowlarr | URL, API key | optional, for raw indexer search |
| Lidarr | URL, API key, split image + cue downloads | API v1, enables the Music page |
| slskd | URL, API key, download folder, max peer queue | Soulseek album search |
| fre:ac | freaccmd path |
empty = auto-detect |
| Tesseract | on / off, tesseract path |
ocr.enabled, ocr.tesseractPath; empty path = auto-detect. Off copies picture subtitles as they are, whatever a profile asks for |
| Rip farm | on / off, approval, how many encodes to keep here | agents.*; see Rip farm |
| Local media | extra folders, scan interval, folder kinds | see Local media |
| MusicBrainz | on / off | CD and album lookups, Cover Art Archive |
| TheDiscDB | on / off | barcodes and disc contents for physical releases |
| OMDb | on / off, API key | omdb.*; genre, year and kind for titles the *arr apps do not have |
| RexDB | on / off, index URL, when to contribute | rexdb.*; which episode is on which disc, from the shared database |
| CDDB / freedb | on / off, server | audio CD track titles when MusicBrainz has none |
| Notifications | any number of targets | see below |
Notifications¶
Rexarr can tell you when an encode finished or failed, when a disc finished or failed, and when an update is available. Add notification opens a picker of the kinds below; add as many as you like, and each one chooses its own events, so the phone can get failures only while a channel gets everything.
| Target | What it needs |
|---|---|
| Discord | the channel's webhook URL (Channel → Edit → Integrations → Webhooks) |
| Slack | an incoming webhook URL |
| Telegram | a bot token from @BotFather and the chat id |
| ntfy | the topic URL (https://ntfy.sh/your-topic), or the server URL and the topic separately; an access token for protected topics. Failures are sent with a high priority |
| Gotify | the server URL and an app token |
| Pushbullet | an access token |
| Apprise API | the server URL, plus a config key for a saved configuration or the Apprise URLs for a stateless one — this is the way to reach IFTTT and everything else Apprise supports |
| Webhook | a URL of your own. It receives { event, title, message, failed, at } as JSON |
| Custom Script | the path to an executable program. It is run on each event with REXARR_EVENT, REXARR_TITLE, REXARR_MESSAGE, REXARR_FAILED, REXARR_VERSION and REXARR_AT in its environment, and is given 30 seconds; a non-zero exit, a missing file or one that is not executable is reported |
Test sends one message with the values on screen, saved or not, and says what the target answered. A target that fails later is not retried: the reason is written to System → Events, so a broken webhook never holds up an encode or a rip.
A custom script runs as Rexarr
Anyone who can reach the Settings page can point this at any program on the machine and have Rexarr run it with Rexarr's own permissions. On an instance other people can reach, turn on authentication (Settings → General → Security) before you add one.
Encoding¶
FFmpeg
| Field | Key | Meaning |
|---|---|---|
| ffmpeg binary | ffmpegPath |
empty = auto-detect |
| ffprobe binary | ffprobePath |
empty = auto-detect |
| Encodes at a time | concurrency |
enforced from job creation, also on the Activity page |
| Import poll interval (s) | pollIntervalSeconds |
how often a waiting job asks the *arr app |
| Write encodes to | transcodeTemp |
transcodes (then move) or output (next to the final file) |
| Stop stalled encodes after | stallTimeoutMinutes |
minutes without progress; 0 = never |
| Keep this computer awake | preventSleep |
see Keeping the computer awake |
Transcoding — hardware acceleration method, device, hardware decoding, fall back to software, and the Test button. See Transcoding.
Defaults — default profile per media type (defaultProfiles.movie / .tv / .anime / .music), which may
be a smart profile that decides per file, and what
search shows (remuxOnly, searchDiscReleases).
Automation¶
Auto transcode: auto.enabled, auto.includeExisting, auto.sources.radarr / .sonarr,
auto.scanIntervalMinutes, auto.maxPerScan, auto.profiles.movie / .tv / .anime. See
Auto transcode.
Metadata¶
- AniDB for anime (
anidb.enabled), with a refresh button and the dataset status. See AniDB. - MusicBrainz & Cover Art Archive (
musicbrainz.enabled) — audio CDs by disc id, tags and cover art. - TheDiscDB (
thediscdb.enabled, on by default) — thediscdb.com is a community catalogue of physical releases: the barcode on the case, what is on each disc, and the IMDb / TMDb ids of that exact edition. Rexarr asks it when a scanned barcode needs turning into a title. A hit names the film or series outright —191329125670comes back as 1917 (2019) with TMDb 530915, so Radarr is told which film it is rather than asked to search for a cleaned-up shop listing. No account; mostly US releases, and it will not know every disc, in which case MusicBrainz and UPCitemdb are tried as before. -
CDDB / freedb (
cddb.enabled, on by default, andcddb.server) — the track listings CD players have used since the nineties. Rexarr computes the CDDB disc id of the disc in the drive and asks for its entry, but only when MusicBrainz has nothing for that disc id, so a CD too obscure for MusicBrainz still rips with real track titles. A CDDB entry carries artist, album, year, genre and the titles, and nothing else: no cover art, and no MusicBrainz ids are written for it. The entry is shown on the Discs page as a release to pick, labelled CDDB.The server is any freedb-protocol CGI endpoint; the default is
https://freedbtest.dyndns.org/~cddb/cddb.cgi, which answers anyone. It can also be a whole URL with the handshake in it, which is how gnudb.org — the maintained freedb successor — publishes its service:gnudb.gnudb.org/~cddb/cddb.cgi?cmd=cddb+read+data+4105d789&hello=emailname+emailhost.com+applicationname+0.1&proto=6Paste that as it stands, with your own values in the
hello, and Rexarr keeps thehelloandprotoand replaces only thecmd. The handshake is<email name>+<email host>+<application>+<version>. gnudb answers only application names it knows: its own example name is accepted,rexarris not — that request comes back500 Unknown application, developer email for rexarr …, which Rexarr writes to the disc log as it stands.
Disc ripping¶
| Field | Key | Meaning |
|---|---|---|
| Disc ripping | disc.enabled |
watch optical drives (on by default) |
| makemkvcon binary | disc.makemkvPath |
empty = auto-detect |
| Rip directory | disc.ripDirectory |
where finished files are delivered; empty = <config>/cache/rips |
| Minimum title length (seconds) | disc.minTitleSeconds |
skips trailers and menus. 600 for movies, 1200 for hour-long episodes, lower for short anime |
| Best audio per language / every track | disc.audioMode |
best or all; per-title choices override it |
| Include extras and specials | disc.includeExtras |
also list titles shorter than the minimum |
| Shortest extra (seconds) | disc.extraMinSeconds |
default 30 |
| Drive poll interval (seconds) | disc.pollIntervalSeconds |
|
| Start ripping automatically once identified | disc.autoRip |
|
| Transcode with the default profile | disc.autoTranscode |
|
| Hand finished files to Radarr / Sonarr | disc.autoDeliver |
|
| Eject when done | disc.autoEject |
|
| Keep the raw MakeMKV rip after transcoding | disc.keepRaw |
|
| Group multi-disc sets into box sets | disc.groupBoxSets |
A disc whose series and season match a disc already in the queue offers to join it instead of starting an item of its own. See Box sets. |
| Import finished rips automatically | disc.autoImport |
the 10-minute rip-folder sweep |
| Add shows and movies when their disc starts ripping | disc.addMissing |
|
| Monitor what was added | disc.addMonitored |
off by default, so nothing is downloaded |
| Where added titles go | disc.addTargets |
root folder and quality profile per kind; empty = like your library |
| Virtual drives folder (testing) | disc.virtualDriveDirectory |
a folder of .iso / disc folders |
| Audio CDs | disc.cd |
FLAC compression, Linux TOC reader, MusicBrainz lookup, MQA detection, import into Lidarr |
Buttons on this page: Check import access (asks Radarr and Sonarr whether they can see the rip folder) and Import rip folder now. See Disc ripping.
Experiments¶
Features that are finished enough to try and not finished enough to be on by default. They can change or go away in the next release, so they are the part of Rexarr most worth reporting when they misbehave.
Barcode scanning¶
Scan the barcode on a disc case with your phone: Rexarr works out what the disc is, adds it to Radarr / Sonarr if
it is not there yet, and keeps it on a list of discs it expects, so the title is in the library before the disc
reaches the drive. Off unless experiments.barcode is on.
- Turn it on and save. The page then shows a QR code: point your phone's camera at it to open Rexarr's
/scanpage. The phone has to be able to reach Rexarr's address, and when authentication is on the code carries your API key — treat it like a password. - On the phone, scan the barcode or type the number under it.
- Rexarr looks the number up, shows what it found, and you confirm which title it is. A title that is not in the library yet is added the same way a disc's title is — the root folder and quality profile your library uses for that kind of thing, unmonitored unless Settings → Disc ripping → Monitor what is added is on.
A camera needs HTTPS
Browsers only hand a page the camera over https:// or on localhost. Over plain http:// on your network
the scanning page says so and falls back to typing the number in, which works everywhere. Turn on SSL under
Settings → General → Host, or put Rexarr behind a proxy with a certificate.
Where the numbers come from: MusicBrainz for music, which indexes barcodes
properly, and UPCitemdb's trial endpoint for everything else — 100 lookups a day per
address, no account for either. What comes back is a shop listing (Blade Runner 2049 [4K Ultra HD + Blu-ray]),
so the edition, region, disc-count and seller noise is stripped before the title is matched. Both can simply not
know a disc; when that happens, search for the title on the Discs page as usual.
API: GET /api/scan/qr.svg, POST /api/barcode/lookup, GET/POST /api/barcode/expected,
DELETE /api/barcode/expected/:id.
Ripping to-do list¶
Radarr and Sonarr already keep a list of what they would like a better copy of — their Cutoff Unmet pages — and most of it waits for a download that may never come while the better copy sits on a shelf in the next room. With this on, the Discs page gains an Insert disc for… card that reads that list the other way round:
| Column | What it says |
|---|---|
| Title | the film, or a series season with how many of its episodes are below the cutoff |
| On disk | the quality you have now — the worst one in the season, when they differ |
| A disc would give | a Blu-ray or a UHD Blu-ray, whichever would actually improve it |
What it leaves out matters as much as what it shows: a 1080p remux is already what a Blu-ray holds, so those only appear when a UHD disc would help, and anything at 2160p remux is left out entirely — no disc on a shelf beats it. Titles whose barcode you have scanned are marked on the shelf and sorted first.
API: GET /api/wanted.
Path mappings¶
Translate the paths Radarr / Sonarr / Lidarr report into paths on this machine — needed whenever the *arr app runs in Docker or on another host:
| Remote path (what the app says) | Local path (what Rexarr opens) | App |
|---|---|---|
/data/media/movies |
/Volumes/Media/Movies |
radarr |
/media |
/Volumes/Media |
sonarr |
Rules: longest match wins; mappings apply both ways, so a rip folder on this machine is translated back into the path the app expects when Rexarr asks it to import. System → Status flags files an app reports that Rexarr cannot see, and Check import access does the same for the rip folder.