Skip to content

trailarr

Media Servers

A Docker‑based application for automatically downloading and managing trailers for media libraries

Python Latest v0.9.5 · 20d ago Security brief →

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 →
No immediate action
v0.9.5 Bug fix

Direct Install fix

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, setting URL_BASE broke 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 Mkdocs to Zensical which is a ground-up rebuild of the MAterial for Mkdocs by 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 a ContentTypeError when 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_from and 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_exists not being corrected to True when trailers already exist on disk but the flag is stale False (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_exists being incorrectly flipped to True mid-download when a multi-profile download is in progress. Both the new-trailer detection loop and the reconciliation step now skip the upward correction when monitor=True, preventing a race condition where setting the flag early would force monitoring off and cancel pending profile downloads.
  • Fixed several UI typos: MinuimumMinimum, MaximunMaximum, seperateseparate, atmostat most, atleastat least, YoutubeYouTube.

Other Changes:

  • Refactored scan_media_folder in 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_SCAN setting (env var and General Settings UI) that forces the next Scan Media Folders run to scan every folder in full, bypassing the folder-change optimisation. Designed as a one-shot fix for users with stale trailer_exists or media_exists flags in folders with no recent file-system activity. The setting automatically resets to false once the full scan completes.

Bug Fixes: 🐛

  • Fixed a PermissionError on container startup when URL_BASE is set — index.html is now owned by appuser at startup so it can apply the <base href> patch at runtime.
  • Removed restrictions on the Download button in media details page. Previously it was checking for trailer_exists=false and youtube_trailer_id changed before sending the request - both restrictions removed.
  • Fixed trailer_exists not being reset to False when a trailer file is deleted externally (outside Trailarr). The files scan now correctly clears the flag — and resets media_exists too — when the media folder is no longer accessible. Related to #486
  • Fixed stale media_exists values left over from older versions. The files scan now reconciles media_exists against disk after every folder scan, correcting both false-positives and false-negatives.
  • Fixed trailer_exists and trailer_exists-adjacent status updates not preserving DOWNLOADING status. 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 = False and an empty media_filename after a Plex refresh. These fields are now populated from the Plex Media.Part.file path 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_fields now compares existing values before committing, eliminating redundant writes on every routine Plex sync.
  • Plex refresh no longer overwrites media_filename for 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.

About

Stars
422
Forks
21
Languages
Python CSS TypeScript

Install & Platforms

Install via
docker

Community & Support

Beta — feedback welcome: [email protected]