tdarr-review

tdarr-review

Docker app from Desadius' Repository

Overview

Review Tdarr transcodes before replacing originals. A guided process combines picture, audio and synchronized video samples with saved manual checks. Approve completed assessments individually or in batches, record rejection reasons and track savings. Optional manual Radarr replacement requests preserve the original in quarantine. Czech and English interfaces. Linux amd64. Requires a separately installed Tdarr server, its DB2 directory and a separate folder containing completed results. Set PUBLIC_ORIGIN and TDARR_URL for your server before installing. Recovery is an optional separate worker; this template installs only Review. Approval writes to your media library.

Install on Unraid

This guide describes 1.10.3, targeting the versioned Linux amd64 image ghcr.io/desadius/tdarr-review:1.10.3. You can also build the source locally. The Community Applications entry uses the supplied templates/tdarr-review.xml with latest. Registry availability and catalog visibility are separate; see publication status. Cloning this repository does not update an existing container.

Updating to 1.10.3

Back up persistent /data and update only while no approval, batch or transaction recovery is running. Keep existing mappings, access key and settings. This release changes status projections and explanations; it does not reconstruct old approvals, reset assessments or relax quarantine identity checks. Review and optional Recovery have separate image tags. Select 1.10.3 explicitly; updating source or publishing images does not deploy an existing installation.

The five-step assessment and current reviewRevision required since 1.10.2 remain mandatory for approval. The optional Recovery routing function is a separate Tdarr flow change; follow the integration guide.

1. Prepare paths and permissions

Choose four persistent locations: Review state, original media, Tdarr output awaiting approval, and the Tdarr DB2 directory. The example uses /mnt/user/media/movies for films and mounts its parent /mnt/user/media so quarantine can live outside the Plex library.

Do not point REVIEW_HOST at the original library. Tdarr must write results to this separate location and preserve the original. If you already have Review results, use that existing directory.

Example for new application/output directories:

mkdir -p /mnt/cache/appdata/tdarr-review/data
mkdir -p /mnt/cache/appdata/tdarr-recovery/data
mkdir -p /mnt/cache/tdarr-review-output
chown nobody:users /mnt/cache/appdata/tdarr-review/data \
  /mnt/cache/appdata/tdarr-recovery/data /mnt/cache/tdarr-review-output
chmod 770 /mnt/cache/appdata/tdarr-review/data \
  /mnt/cache/appdata/tdarr-recovery/data /mnt/cache/tdarr-review-output

Unraid commonly uses UID 99 / GID 100 (nobody:users). Verify your installation. Review needs write access to the media directories and results, including permission to rename files and create temporary files. Do not recursively change permissions on the whole library merely to install this application.

2. Clone and configure

git clone https://github.com/Desadius/Tdarr-Review.git
cd Tdarr-Review
cp .env.example .env

Edit .env in a text editor. Set REVIEW_IMAGE_TAG=1.10.3 for this source release, your real paths and API address. Set REVIEW_BIND_IP to the server's LAN IP if you want LAN access. Set PUBLIC_ORIGIN to exactly the browser origin, for example http://YOUR_UNRAID_IP:8270 (with your actual IP).

TDARR_DB_HOST must be the directory containing SQL/database.db, not just the database file. Its WAL/SHM sidecars must be available through the same read-only mapping. Locate this directory in your Tdarr server appdata before starting.

After the 1.10.3 image has been published, if Docker Compose is available on your Unraid installation:

docker compose pull review
docker compose up -d --no-build review
docker compose logs --tail 40 review

For the prepared source before image publication, or a local build at any time, use docker compose build review and docker compose up -d review. A locally built image does not establish that the same registry tag is public.

3. Unraid Docker template

Once catalog inclusion is confirmed, search Apps for tdarr-review, select Install and edit the paths and the two required URLs. Before catalog acceptance, you can import the supplied XML manually in your Unraid template directory:

mkdir -p /boot/config/plugins/dockerMan/templates-user
curl --fail --location --output /boot/config/plugins/dockerMan/templates-user/my-tdarr-review.xml \
  https://raw.githubusercontent.com/Desadius/Tdarr-Review/main/templates/tdarr-review.xml

Then select it in Docker → Add Container. Confirm the existing template file will not be overwritten if you already have an installation. The image must be publicly downloadable first. The template includes resource limits and writable state; prepare host directory permissions as in step 1. It does not install a Tdarr server or change its flows.

If using a local build rather than the registry image, build from the repository directory and replace Repository with tdarr-review:local:

docker build -t tdarr-review:local .

In Docker → Add Container, configure:

Field Value
Name tdarr-review
Repository ghcr.io/desadius/tdarr-review:1.10.3 after publication, or tdarr-review:local
Network bridge
WebUI http://[IP]:[PORT:8270]
Port Host 8270 → container 8270/TCP
Variable PUBLIC_ORIGIN Actual URL used in the browser
Variable TDARR_URL Tdarr API address reachable from this container
Variable MEDIA_ROOT /media/movies
Variable REVIEW_ROOT /review
App state Your state directory → /data, read/write
Media parent Your media share → /media, read/write
Review output Your results directory → /review, read/write
Tdarr DB2 Your DB2 directory → /tdarr, read-only

Suggested Extra Parameters:

--user=99:100 --read-only --cap-drop=ALL --security-opt=no-new-privileges --cpus=1 --memory=1g --pids-limit=128 --tmpfs=/tmp:rw,noexec,nosuid,size=128m --restart=unless-stopped --log-opt=max-size=10m --log-opt=max-file=3

Enable Unraid Autostart for this container. Do not start a second Compose instance using the same state/media mappings if you use the Unraid template. The application is designed for one Review writer.

4. First login and settings

On first start, Review creates /data/access-key with restricted permissions. Read it privately from the mapped data directory and enter it on the login page. Do not paste it into an issue or commit it. Sessions last 30 days.

Choose English or Čeština in the header; the choice is saved in this browser. Open Settings (Nastavení). Fill in the source roots as seen by the Tdarr server, the Review path as seen by Tdarr, the library ID and optional prefixes. Use the connection/path test before saving. A saved /data/settings.json takes precedence over environment defaults on subsequent starts.

For the example layout:

Review mediaRoot:       /media/movies
Review reviewRoot:      /review
Tdarr sourceRoots:     /media/movies
Tdarr tdarrReviewRoot: /pilot-review (or your actual Tdarr mapping)
reviewPrefixes:        PROD-Movies (only if results use this prefix)
database:              /tdarr/SQL/database.db

See Configuration for aliases and extension-changing flows.

5. Verify before approval

Check that expected results match their originals. Use a disposable test film to complete Preparation → Picture → Audio → Synchronisation → Decision, confirming each check beside its tool and saving start/middle/end sync checks separately. Save a partial review, close it and reopen it to verify persistent progress. Confirm Tdarr health checks, audio/subtitle policy and paths. Approval requires the current completed server-saved review, snapshot and revision, including for every film in a batch. The final approval dialog copies a result back to the library and removes the replaced original after a verified transaction; it is a real media modification.

For external player/TV checks, name a device/player with at least two characters after trimming surrounding whitespace. HDR/Dolby Vision also requires its own confirmation on a suitable named device. Browser AV previews use H.264/mono AAC at up to 960 px and supported HDR is converted to SDR; they do not test native HDR or surround playback. Use Defer review with a note when more checks remain. See the user guide.

Plex sees the replacement at the original film path (or the verified MKV destination for a TS/M2TS source). Review does not call Plex's API. Use Plex's normal automatic/periodic scan or trigger a library scan yourself.

6. Optional Recovery

Copy examples/recovery-config.example.json to the directory named by RECOVERY_DATA_HOST, as config.json. Edit every relevant field, supply the Radarr key privately, and restrict the file to the container UID (chmod 600). Set a suitable since timestamp in Unix milliseconds instead of zero if you only want recent Tdarr errors considered.

Create the quarantine root before enabling repairs. For the example media mapping:

mkdir -p /mnt/user/media/.tdarr-corrupt
chown nobody:users /mnt/user/media/.tdarr-corrupt
chmod 770 /mnt/user/media/.tdarr-corrupt

Use the parent of your actual movie library if it differs. It must be writable by Recovery and outside Plex's movie root, but within the same mounted media tree.

docker compose --profile recovery pull recovery
docker compose --profile recovery up -d --no-build recovery
docker compose logs --tail 40 recovery

The example starts with enabled:false. This allows verification but disables automatic external repairs. Dry-run cases are not automatically replayed when you later enable it; inspect them deliberately. Do not enable repairs until the mappings and Radarr history are confirmed.

A fresh installation needs no frozen pending approvals. The empty examples/recovery-approval-registry.example.json may be copied privately to Recovery /data/pending-approvals.json; it does not authorize repairs. Existing installations with historical approvals must follow the registry migration guide before replacing Recovery source/image.

For a local worker build, use docker compose --profile recovery build recovery first. The optional worker runs in a second container, with no HTTP port. Combining both processes in one container is not implemented in this release. Without this worker, normal Review approval and its manual Radarr integration still work.

7. Update an existing installation to 1.10.3

Keep the existing state, media, Review output and read-only Tdarr database mappings. Back up the mapped /data directory privately before the update; it contains access settings, history, journals and now server-saved review progress. Do not replace it with a fresh example directory. Run only one Review writer against those mappings.

After registry publication, pin REVIEW_IMAGE_TAG=1.10.3 in the existing .env, or the explicit ghcr.io/desadius/tdarr-review:1.10.3 Repository value in Unraid, then pull/recreate that same Review service. A source build can be installed independently. Optional Recovery uses its own image tag and update procedure.

Existing pending films start with an unfinished manual review when no matching version-1 session is saved. Past successful transcodes, technical scores and historical approvals do not fabricate new checklist confirmations. Verify container health, login, the five-step workspace and reopening saved/deferred progress before approving a real film. A local installation passed these checks for this release; that does not update your own installation automatically.

Requirements

Linux amd64; Tdarr server; readable DB2 directory; completed transcodes in a separate writable review directory. UID 99 / GID 100 must have access to the selected host mappings.

Related apps

Details

Repository
ghcr.io/desadius/tdarr-review:latest
Last Updated2026-10-12
First Seen2026-10-11

Runtime arguments

Web UI
http://[IP]:[PORT:8270]
Network
bridge
Shell
bash
Privileged
false
Extra Params
--user=99:100 --read-only --cap-drop=ALL --security-opt=no-new-privileges --cpus=1 --memory=1g --pids-limit=128 --tmpfs=/tmp:rw,noexec,nosuid,size=128m --restart=unless-stopped --log-opt=max-size=10m --log-opt=max-file=3

Template configuration

WebUI portPorttcp

Host port for Review. If changed, update PUBLIC_ORIGIN to the exact browser URL.

Target
8270
Default
8270
Value
8270
Browser origin (required)Variable

Enter the exact origin used in your browser, for example http://YOUR_UNRAID_IP:8270. Include the selected host port; no trailing path.

Target
PUBLIC_ORIGIN
Tdarr server URL (required)Variable

Enter the Tdarr server API URL reachable from this container, for example http://YOUR_UNRAID_IP:8266. This is the server API port, not its WebUI port.

Target
TDARR_URL
Application statePathrw

Persistent Review settings, access key, history and journals. Use one Review container per state directory. Must be writable by UID 99 / GID 100.

Target
/data
Default
/mnt/cache/appdata/tdarr-review/data
Value
/mnt/cache/appdata/tdarr-review/data
Media parentPathrw

Parent of your movie library. The default expects films in media/movies. Review needs write access for approval and quarantine outside the Plex library. Configure MEDIA_ROOT if your folder name differs.

Target
/media
Default
/mnt/user/media
Value
/mnt/user/media
Results awaiting reviewPathrw

Separate host folder containing completed Tdarr results awaiting approval. Never select the original movie library. Use your existing results folder if already configured.

Target
/review
Default
/mnt/cache/tdarr-review-output
Value
/mnt/cache/tdarr-review-output
Tdarr DB2 directoryPathro

Directory containing SQL/database.db and its WAL/SHM files, mounted read-only. Locate your actual Tdarr DB2 directory; do not map only the database file.

Target
/tdarr
Default
/mnt/cache/appdata/tdarr/server/Tdarr/DB2
Value
/mnt/cache/appdata/tdarr/server/Tdarr/DB2
Movie root inside ReviewVariable

Container path to your movie library inside the Media parent mapping. Configure the matching source roots used by Tdarr in Review Settings after login.

Target
MEDIA_ROOT
Default
/media/movies
Value
/media/movies
Result root inside ReviewVariable

Container path to completed results, matching the Results awaiting review mapping.

Target
REVIEW_ROOT
Default
/review
Value
/review