v2.12.0
A big batch of fixes, mostly for collections that fail quietly. Failed syncs should now show as failed instead of getting a green tick.
This release also adds Item Order for multi-source collections, a Recently Released Episodes (Individual) hub, an optional TMDB ID in movie placeholder folder names, a Minimum IMDb votes filter, and a health check for placeholder folders that aren't on a mounted volume.
Docker tags
| Tag | What it tracks |
|---|---|
bitr8/agregarr:latest
| Stable releases. This is what you want. |
bitr8/agregarr:2.12.0
| Pinned to this exact release. |
bitr8/agregarr:develop
| Bleeding edge. Builds on every push, breaks sometimes. |
Upgrading from 2.11.x is a pull. Config volumes are compatible. Before you do:
- Collections that fail to fetch now show red instead of a green tick (fork #129). A single-source collection whose source can't be fetched, such as a Letterboxd solver in backoff or a Trakt 403, used to finish green with the reason buried in the logs. It should now turn red, show the cause, and keep the sync button. Collections that were quietly failing may show up after the first sync. Multi-source collections also go red when any source fails, naming the list that broke while still updating from the sources that worked.
- Placeholder cleanup may skip scans it previously ran (fork #116). If Plex sees your placeholder folder under a different path from Agregarr, for example Docker
/data/...against Windows PlexO:\..., cleanup should now skip the scoped scan for directories Plex can't see. The library-wide trash purge only runs after a scan was actually issued. The "different paths" warning should also appear where it was missing. After creating a placeholder in a directory Plex can't see, Agregarr now leaves discovery to Plex's folder watcher or scheduled scan instead of sending the scan it used to. Setups where both sides share the same paths behave as before. - A new Placeholder Folders health check may warn (fork #132) when a placeholder root folder isn't on a mounted volume. It only warns. Placeholders are still written as before.
- The dashboard's Tautulli stats are cached for up to 5 minutes (fork #140). Reloading the dashboard inside that window makes no Tautulli calls, so the numbers may lag by up to 5 minutes.
- Collections with a Target User keep their target-user label (fork #144). Recently Added/Released hubs and multi-source collections now get the label they were missing, and single-source collections should keep it. Sharing exclusions for other users apply on the next full sync.
- Overlay elements bigger than the poster are cropped at the edge instead of shrunk to fit (fork #85). None of the preset templates have one, so most libraries won't notice. If yours do, posters only pick up the change when that item's own data changes. Old and new versions may sit side by side for a while. Editing the template re-renders everything it covers straight away. Icon rows wider than the poster now lose the icons past the edge instead of shrinking.
- Multi-source collections set to Reverse source order will change on the first sync (fork #142). Reverse used to come out forwards and keep the wrong items. It now keeps the last items from each list, last one first. Other Item Order choices keep the same items as before.
- AniList and MyAnimeList collections that were failing quietly will turn red (fork #129). They previously reported an empty success when the fetch failed, including AniList custom list URLs.
- A hidden stored Item Order on a multi-source config now sorts the combined list too (fork #142). This only applies when a non-default Item Order was carried over from a single-source collection. Configs on Default are unchanged.
Thanks
- Sdhb1: the logs behind the Plex path mismatch, the repeated "Failed to arrange" warning, and the placeholders missing their labels.
- gathly: a run of detailed reports covering Letterboxd cloned lists, failed fetches showing as successful, empty YouTube cookies files, placeholders deleted while Plex was still matching them, and placeholder folder settings that couldn't be cleared.
- mduijm: the health check false timeouts and the stale Tautulli rating key.
- LoveMyslf-1: the TMDB ID folder names, the Recently Released Episodes hub, and the request to show why an overlay applies.
- sjthespian: the overlay layout report and the patience while it took two goes.
- TallAussie: the FlixPatrol solver report with a controlled Byparr request.
- Tredecate: Item Order for multi-source, plus the Target User label and warning reports.
- shonufgit: the Minimum IMDb votes request.
- BSCTech70: the dashboard hang with a lot of collections.
Cheers too to everyone else who reported the issues below.
What's new
Item Order for multi-source collections
Multi-source collections had no Item Order setting, so Combine Mode was the only thing shaping the final order. The Item Order select now appears for multi-source collections.
Each source is sorted first. This means the Max Items cut keeps the best items from each list instead of simply taking its first items. The combined list is then sorted again as a whole. Reverse flips each source before combining, keeping the last items from each list, last one first. Random shuffles at both stages.
With Cycle Lists, the sort applies to the active source's items on each sync. Coming Soon items sort by release date, and collection previews now use the same Item Order. Leave it on Default and nothing changes. (fork #142)
Recently Released Episodes (Individual) hub
Filtered hubs only had episode-level rows ordered by when Plex added the episode. An old episode imported today looked new.
The new Recently Released Episodes (Individual) option lists individual episodes by original air date, newest first. Episodes dated in the future never appear. Trailer-placeholder shows are excluded, as they are with the Individual added hub.
It's off by default and only affects configs that select it. TV libraries only. (fork #135)
TMDB ID in movie placeholder folder names
Two movies with the same title and year, such as two "The Odyssey (2026)" entries, used to share one placeholder folder. The second movie's metadata was then lost, and Plex could match the wrong film.
The new Add TMDB ID to movie placeholder folders setting lives under Settings > Downloads > Placeholder Root Folders. New movie folders are named Title (Year) {tmdb-12345}, giving each movie its own folder, marker, and .plexmatch.
It's off by default. Existing placeholders are never renamed. A movie that already has its placeholder in the old folder keeps using it. Discovery reads both forms, so switching the option on or off later should be safe.
There are a couple of limits. It applies to movies only because TV placeholders already use Sonarr's folder name. An old folder already shared by two movies also stays shared. If you turn the setting on and later turn it off, hinted placeholders Plex hasn't discovered yet are downloaded again into the old folder. Plex may then show two versions until the hinted one ages out. (fork #133)
Minimum IMDb votes
A title with a high IMDb rating based on only a handful of votes used to pass the minimum rating filter and get grabbed. The auto-download section now has a Minimum IMDb votes field beside Minimum IMDb rating.
Titles below the vote threshold are skipped. The field works by itself or alongside the rating filter. At 0, which is the default, nothing changes. It uses the IMDb ratings response already fetched for the rating filter, so it makes no extra requests.
When a minimum is set, titles with no IMDb vote data are skipped. Rotten Tomatoes has no vote count, so there's no equivalent setting there. The placeholder filters and bulk edit table don't have the field yet. (fork #121)
Job descriptions
Settings > Jobs & Cache previously listed jobs by name only. It wasn't clear that Overlay Quick Sync handles newly added items, while Poster Overlay Application runs across the full library.
Each job now has a one-line description under its name. (fork #108)
Placeholder Folders health check
A placeholder root entered as a path that was never mounted into the container, either through a typo or because it sat outside the volume mappings, used to work quietly. Trailers were written into the container's own filesystem. On Unraid, that can fill docker.img with no clue why.
The new Placeholder Folders health check warns and names each movie or TV root that resolves to the container's root filesystem. It doesn't stop anything. Placeholders are still written as before.
The check stays quiet on bare-metal installs, when no roots are configured, or when /proc/self/mountinfo can't be read. Filesystem checks run asynchronously, with at most one check per folder at a time, so a hung NFS/SMB mount shouldn't freeze the server or pile up stuck checks. (fork #132)
Fixed
Collections
- Failed collection syncs should now show as failed instead of getting a green tick. They include the underlying cause and keep the sync button. Letterboxd should no longer swallow its own errors. A failed fetch happens before Plex is touched, so the existing collection should be left as it was. (fork #129)
- Multi-source collections with a failed source should also show as failed, naming the source by its list title. If that isn't available, the name falls back to the tag label, URL path, or source type instead of an internal id. Query strings are stripped, so an API key in a list URL can't land in the saved error, and names are capped at 60 characters. If every source fails, the collection should be left as it was. Items from one failed source drop out until that source recovers. (fork #129)
- AniList and MyAnimeList failures should now show as failed, including AniList collections built from a custom list URL. A URL that can't be parsed still returns an empty result. (fork #129)
- MDBList, Trakt, Sonarr, Networks, Originals, Tautulli, Overseerr, and Coming Soon failures now show the underlying message instead of
[object Object]. (fork #129) - Letterboxd lists cloned from someone else's should now sync like any other list. The "Cloned from..." sidebar posters were being read as list items, adding 5 films per page and pushing pagination to the 15-page cap. A 176-film list ended up syncing as 251 items. The parser now reads only the list's own poster grid. Watchlists and other pages are parsed as before. (fork #128)
- One stale item should no longer abort an unwatched-only collection sync. When a source, particularly Tautulli history, returned an item whose Plex rating key no longer existed, the whole media type failed with "Media type processing failed". Only a confirmed 404 now skips the item with a warning. Any other error still fails the media type before label cleanup runs. If every item is stale, the sync still fails before cleanup, so the collection keeps what it had instead of being emptied. Multi-source unwatched-only collections get the same protection when every label fails. (fork #127)
- Tautulli movies with stale rating keys after Plex re-added them should now be found through the guid returned by Tautulli. They should no longer drop out of the collection until somebody watches them under the new key. This applies to movies only because TV rows carry an episode guid. TMDB and TVDB ids are carried across, so global exclusions should apply as they do for healthy keys. Healthy keys make no extra call. (fork #127)
- A collection listing the same item twice should no longer try to move it again on every sync. The reorder step asked Plex to move the item after itself, Plex returned 400, and the "Failed to arrange" warning came back each time. The shared arrange step now de-duplicates the order, covering every source type. (fork #124)
- Overseerr collections, including global, server-owner, and per-user collections, should no longer let a show requested twice take two slots. Repeats are removed just before the Max Items cut. Two users who requested the same show still keep one each. (fork #124)
- The reorder step should no longer try to move items that aren't in the collection, such as a list entry Plex couldn't find. Plex returned 400 for each one, so the "Failed to arrange" warning came back every sync. A collection whose add had failed also got one failed move per item. (fork #124)
- Target User collections now carry the target-user label, as covered in the upgrade notes above. Collections without a Target User keep their existing labels. Auto-franchise, Plex actor/director, essentials, separator, and Overseerr user collections still keep their own labels and ignore Target User, although the form offers it for them. (fork #144)
- A filtered hub with a stale stored rating key after a Target User change should now find the collection carrying the current label first. It should no longer adopt a leftover collection with the previous label. (fork #144)
- The Users' Home + Target User warning no longer says Home promotion can't be scoped per user. Plex Media Server 1.43.1 fixed label restrictions on Home-promoted collections, so the warning now only says that versions before 1.43.1 ignore them. (fork #143)
Placeholders
- A placeholder Plex has indexed but not yet matched should now be kept. On a busy server, Plex can index a placeholder a minute or two before attaching its TMDB id. Agregarr treated that as a failed match, deleted the file, and blocked the title for 7 days. It now keeps the placeholder for 24 hours from creation and checks it again on the next sync, without downloading the trailer again. If it remains unmatched after 24 hours, it's deleted and cached as unmatched for 7 days as before. A genuinely unmatchable placeholder may appear as an unmatched Plex entry for up to 24 hours. A clock stepping backwards, through time sync or VM resume, no longer defeats the keep window. (fork #131)
- TV placeholders Plex hadn't labelled should now be adopted. The whole-library pass logged "Adopting record-less placeholder" for every TV show and then skipped it. Those shows never received the trailer-placeholder label or a database record, so they kept appearing in the filtered Recently Added hub. Season 00 is now found by walking through show, seasons, Season 00, and episodes. (fork #125)
- TV placeholder adoption now has extra guards so a real show isn't picked up by mistake. The Season 00 file must be the exact
S00E00.Trailer.mp4written by Agregarr, and the.comingsoonmarker must exist. If the marker contains a tmdbId, it must match the item. Anything else is skipped with a warning and left alone. (fork #125) - Ghost cleanup and the scoped scan after placeholder creation should now read Plex's section locations correctly. Directories Plex can't see are skipped, and Windows-style section paths are matched. See the upgrade notes above. (fork #116)
- An unreadable or non-Netscape YouTube cookies file is no longer reported as configured. An empty or incorrectly formatted file shows "YouTube cookies file is not valid" in Settings > Downloads and the collection form. Downloads then run without
--cookies, so yt-dlp can still try. A root-owned mode-600 file is reported as unreadable instead of "not found". Previously, every trailer candidate failed and each placeholder quietly received the static fallback video. Placeholders that already received the fallback aren't regenerated. (fork #130) - With Add TMDB ID to movie placeholder folders enabled, a permission or I/O error while checking for an existing placeholder keeps the old folder instead of creating a duplicate. (fork #133)
Settings and health checks
- Clearing a field under Settings > Placeholder Root Folders should now stick. Saving replaces both maps with exactly what the form submits. The form only sends libraries currently in Plex with a non-empty path, so cleared fields are removed and entries for deleted libraries are pruned on the next save. Saving other settings leaves the maps alone. (fork #132)
- The Ratings Proxy and Cloudflare Solver checks should no longer report false timeouts. A solver busy with a Cloudflare challenge is recognised per instance and reported as reachable but busy, so one busy solver doesn't hide another that's down. Each check now makes one longer attempt, 12 seconds for the Ratings Proxy and 10 seconds per solver, with no retries. A solver that's genuinely down is still reported as unreachable. (fork #126)
Dashboard
- The dashboard should no longer hang or spike Plex CPU when there are lots of collections. Each stats request used to make up to three Tautulli calls per collection, one at a time, even though only the top 8 or 50 were returned. It now makes one watch-time call per collection to rank them, then fetches details only for the collections returned. A complete pass is cached for 5 minutes per Tautulli server, and concurrent requests share it. The first load still makes one call per collection in sequence. Repeat loads inside the cache window make no Tautulli calls. (fork #140)
Overlays
- Overlay elements that run past the poster edge are now cropped instead of shrunk, so the result should match the editor. See the upgrade notes above. (fork #85)
- The Test Item modal now shows
(actual: missing)when a condition's input has no value. Previously it showed a bare(actual: ), which looked the same as an empty string. This is display only. Overlay matching is unchanged. (fork #136)
Other
- Agregarr should keep booting when the old log path can't be inspected. Only a failure to remove the old log file now stops startup.
- When a Cloudflare solver loads a page but the site refuses it, the log now says so. For example:
Byparr: solver loaded flixpatrol.com but the site returned HTTP 403. It no longer blames FlareSolverr. (fork #147) - AniList collections no longer send a Plex lookup that always failed for every item they couldn't match. Results are unchanged. It just drops the wasted requests.