trailarr
Media ServersA Docker‑based application for automatically downloading and managing trailers for media libraries
Features
- Manages multiple Radarr, Sonarr, or Plex instances to locate media items
- Detects existing trailers and can skip downloads if a suitable PlexPass trailer exists (with resolution checks)
- Downloads trailers and organizes them in the corresponding media folder using customizable naming conventions
- Provides a responsive Angular UI with configurable profiles for trailer download settings
Recent releases
View all 16 releases →
v0.9.4
New feature
⚠ Upgrade required
- If using a reverse‑proxy sub‑directory setup, ensure headers X-Forwarded-For, X-Forwarded-Proto, X-Forwarded-Host, and X-Forwarded-Prefix are forwarded per the updated Reverse Proxy Configuration docs.
Notable features
- Expanded and Table view modes with customizable field display
- Allowed Uploader IDs setting in Trailer Profiles to restrict YouTube channel sources
Full changelog
v0.9.4-beta - May 10, 2026
What's New: ✨
- Refactored most of the frontend to fix some issues that were overlooked when updates were made to relevant logic in backend; and overhauled the UI styling to ensure everything is consistent.
- Added Expanded and Table views in media pages with an option to select fields to display. Fixes #306.
- Added Allowed Uploader IDs setting to Trailer Profiles — restrict trailer searches to specific YouTube channels by providing a comma-separated list of uploader handles (e.g.
@WarnerBrosPictures) or channel IDs. Leave empty to allow all channels. See Search Settings for details. Fixes #59.
Bug Fixes: 🐛
- Fixed trailer search downloading vertical videos (YouTube Shorts). The search filter now rejects any result whose URL contains
/shorts/, which yt-dlp sets at search time for Shorts content. Fixes #468.
Other Changes: ⚡
- Updated Python and npm packages to latest versions.
- Improved
URL_BASE/ reverse-proxy support — Trailarr now serves the frontend correctly at both the local URL (http://your-ip:7889/) and the sub-directory URL (https://mydomain.com/trailarr/) simultaneously. Previously, settingURL_BASEbroke direct local access. If you use a reverse proxy with a sub-directory setup, please review your configuration to ensure the recommended headers (X-Forwarded-For,X-Forwarded-Proto,X-Forwarded-Host,X-Forwarded-Prefix) are forwarded correctly — see the Reverse Proxy Configuration docs for updated examples.
v0.9.3
Bug fix
Notable features
- Refresh Plex Trailer Flags Task caches trailer presence weekly to reduce Plex API calls
- Plex refresh summary log reports sections scanned, items added/updated/linked in a single line
- Plex section skip detection logs skipped sections up front instead of per‑media item
Full changelog
v0.9.3-beta - May 08, 2026
What's New: ✨
- Refresh Plex Trailer Flags Task — New weekly task that caches whether Plex already has a trailer for each media item, eliminating repeated Plex API calls during every download run. See Tasks for details.
- Plex refresh summary log — The Plex connection refresh now logs a single summary line at completion: how many library sections were scanned (vs total), and how many media items were added, updated, or newly linked. Example:
Plex refresh complete for 'My Plex': 2/5 sections scanned, 12 added, 847 updated, 3 newly linked. - Plex section skip detection — Library sections whose root folders don't match any configured path mapping are now detected and skipped up front with a single log line per section, instead of logging one line per media item in that section.
- Docs - Switched docs from
Material for MkdocstoZensicalwhich is a ground-up rebuild of theMAterial for Mkdocsby the same team. Refactored docs to make them work with Zensical.
Bug Fixes: 🐛
- Fixed Tasks page showing stale data after navigating away and back. The tasks data is now refreshed on every visit to the Tasks page, so completed or running tasks are always reflected immediately on return.
- Fixed WebSocket connection and API calls failing when WebUI authentication is disabled. The WebSocket was connecting before the backend had a chance to set the session cookie, causing an immediate 401 rejection with no reconnect. The connection is now established only after the auth check confirms the session cookie is in place.
- Fixed Plex library scan request failing after a trailer is downloaded. Plex's scan endpoint returns
200 text/html(not JSON), which caused aContentTypeErrorwhen the code tried to parse the response as JSON. The scan now checks only the HTTP status code and ignores the response body. Fixes #557. - Fixed the download missing trailers task sleeping between downloads even when a trailer was skipped (e.g. Plex already has a trailer). The sleep (120–660 seconds) is now only applied after an actual download attempt, not on skips. Fixes #558.
Other Changes: ⚡
- Centralised all path-mapping logic (subpath matching, path remapping, trailing-slash normalisation) into a single shared utility module used by all connection managers and the database layer. Fixes silent mapping failures when
path_fromand incoming paths use different separators (e.g. backslash vs forward slash on Windows), false-positive matches against sibling directories, and missing trailing-slash normalisation for Windows UNC paths (\\server\share).
v0.9.2
Breaking risk
Notable features
- Instant client‑side search with bracket filter syntax ([id=], [YYYY], etc.)
- Toast notifications now show type icons, close button, progress bar and pin option
Full changelog
v0.9.2-beta - May 06, 2026
What's New: ✨
- Improved Search — Search is now instant (client-side, no API call). Results include the connection name so the same title from different connections (e.g. Radarr + Plex) can be told apart. Search now supports bracket filter syntax for precise lookups — see Search Documentation for details:
[id=<number>]— exact Trailarr ID match (e.g.[id=2])[YYYY](4 digits) — exact year match (e.g.[2026])[anything else]— searches language, IMDb ID, TXDB ID, Studio, YouTube ID (e.g.[tt0133093],[Warner])- Multiple brackets are AND'd together:
z [2026] [english]returns titles containing "z", year 2026, language English.
- Toast Notification Improvements — Toast messages now show a type icon (✓ success, ⚠ error, ℹ info), a close button to dismiss immediately, and a progress bar that depletes over 3 seconds. Hovering over the toast will pause timer and show an option to pin it open (hides the progress bar) until manually closed.
- Latest Jobs Only - Tasks page now only displays the latest job for scheduled tasks.
Bug Fixes: 🐛
- Fixed
trailer_existsnot being corrected toTruewhen trailers already exist on disk but the flag is staleFalse(e.g. after a manual file copy or an app restart). The files scan now reconciles the flag upward as well as downward. - Fixed
trailer_existsbeing incorrectly flipped toTruemid-download when a multi-profile download is in progress. Both the new-trailer detection loop and the reconciliation step now skip the upward correction whenmonitor=True, preventing a race condition where setting the flag early would force monitoring off and cancel pending profile downloads. - Fixed several UI typos:
Minuimum→Minimum,Maximun→Maximum,seperate→separate,atmost→at most,atleast→at least,Youtube→YouTube.
Other Changes: ⚡
- Refactored
scan_media_folderin the files scan task into focused helpers (_handle_folder_gone,_process_trailer_changes) so flag reconciliation logic is consolidated in one place. - Updated Search documentation to document the bracket filter syntax.
- Updated Python and npm packages to latest versions.
- Moved notifications into it's own component to keep the app component simple.
v0.9.1
Breaking risk
Notable features
- New `FILES_FULL_SCAN` env var and UI setting forces next Scan Media Folders run to perform a full scan of all folders, automatically resetting after completion
- Removed restrictions on the Download button in media details page
Full changelog
v0.9.1-beta - May 4, 2026
What's New: ✨
- Force Full Files Scan — New
FILES_FULL_SCANsetting (env var and General Settings UI) that forces the nextScan Media Foldersrun to scan every folder in full, bypassing the folder-change optimisation. Designed as a one-shot fix for users with staletrailer_existsormedia_existsflags in folders with no recent file-system activity. The setting automatically resets tofalseonce the full scan completes.
Bug Fixes: 🐛
- Fixed a
PermissionErroron container startup whenURL_BASEis set —index.htmlis now owned byappuserat startup so it can apply the<base href>patch at runtime. - Removed restrictions on the
Downloadbutton in media details page. Previously it was checking fortrailer_exists=falseandyoutube_trailer_idchanged before sending the request - both restrictions removed. - Fixed
trailer_existsnot being reset toFalsewhen a trailer file is deleted externally (outside Trailarr). The files scan now correctly clears the flag — and resetsmedia_existstoo — when the media folder is no longer accessible. Related to #486 - Fixed stale
media_existsvalues left over from older versions. The files scan now reconcilesmedia_existsagainst disk after every folder scan, correcting both false-positives and false-negatives. - Fixed
trailer_existsandtrailer_exists-adjacent status updates not preservingDOWNLOADINGstatus. Resetting the flag while a download is in progress no longer clobbers the active download status. - Fixed Plex-only media items (no Radarr/Sonarr backing) always having
media_exists = Falseand an emptymedia_filenameafter a Plex refresh. These fields are now populated from the PlexMedia.Part.filepath on creation and kept in sync on subsequent refreshes.
Other Changes: ⚡
- Plex connection refresh no longer writes to the database when nothing has changed.
update_plex_fieldsnow compares existing values before committing, eliminating redundant writes on every routine Plex sync. - Plex refresh no longer overwrites
media_filenamefor Arr-linked media items. Only Plex-only rows (arr_id = 0) have their filename updated by Plex, preventing a circular overwrite loop between Arr and Plex refreshes. - Minor changes to the media card to ensure the animations are subtle but noticeable.
- Some more polishing and minor updates to the direct install script for Windows.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Install & Platforms
Install via
docker