Skip to content

perf: bound tmdb cache & split scan lookups into their own tier - #3367

Merged
fallenbagel merged 5 commits into
developfrom
perf/tmdb-cache-tier-split
Aug 27, 2026
Merged

fallenbagel merged 5 commits into
developfrom
perf/tmdb-cache-tier-split

Conversation

@fallenbagel

@fallenbagel fallenbagel commented Aug 11, 2026 •

Copy link
Copy Markdown
Member

Description

Library scans and availability sync fetched the full /tv/:id payload including aggregate_credits and cached it for 12 hours in the same unbounded cache the interactive TV detail page uses, so a full scan left most of a library resident until the TTL expired. Scanners and availability sync now request only keywords and external_ids, which is everything they read, and write to a separate LRU-bounded cache with a 15 minute TTL, so scan lookups age out on their own instead of evicting manual browsing traffic. The interactive cache gains a key-count backstop against unbounded growth, and aggregate_credits.crew and credits.cast are stripped before caching since nothing in the codebase reads either.

Both tiers are capped by key count rather than bytes. There is no per-entry ceiling to derive for the interactive tier because TMDB doesn't cap the credit rosters, and for the scan tier the TTL is what actually bounds occupancy: a larger library takes proportionally longer to walk rather than holding proportionally more at once.

Separately, the recently added scan asked Plex for items without includeGuids=1, unlike the full scan, so every newly added movie fell back to a per-item /library/metadata request on each pass while it sat inside the scan's ten minute overlap window. That flag is now set on the movie query only as the show query is left alone because it returns episodes, whose guids the scanner never reads. The plexguid cache is removed along with it as it was keyed by rating key, its cache-hit branch never actually skipped anything since the metadata fetch below it ran unconditionally and overwrote the cached ids, and with guids arriving inline the only thing it still did, reusing an external-id resolve, is already handled by the scan cache tier. Every scan, full or recently added, now derives ids from what Plex reports at that moment, so a corrected match in Plex is picked up on the next scan exactly as before.

In addition, node-cache was entirely dropped in favour of lru-cache.

How Has This Been Tested?

Tested on two instances: mine (with just my tv library enabled), and the reporter of #3307, where the crash in in that issue was reproducible nightly.

On my instance, heap snapshots over Chrome DevTools Protocol with the same library both pre- and post- fix:

before after
idle 110 MB 107 MB
post-sync 270 MB 124 MB
+30 min, forced GC 269 MB 121 MB

Cache counters were identical across both runs (33 hits, 482 misses, 482 keys), so both pre- and post- fix resolved the same set of shows. The scan tier drained from 482 keys to 11 over the 30 minutes so TTL is also working as intended.

The reporter ran the same sequence from a fresh container on each pre- and post- fix, used_heap_size after two forced collections:

develop this branch
idle after restart 99.68 MiB 98.83 MiB
after availability sync 451.22 MiB 128.47 MiB
+30 min, forced GC 452.63 MiB 116.01 MiB
Sonarr scan from that state died at 2m28s completed in 4m46s

The sync took 810s on develop and 840s on the branch, so both pre- and post- fix did the same work. Afterwards the tmdb cache on develop held 175.03 MiB of JSON against 7.29 MiB in tmdbscan on the branch, and the scan tier had drained to zero keys by the 30 minute probe.

They have since been running it without restarts and without heap aborts, sitting at 129.89 MiB after an unattended job block, on the same box that aborted five nights running.

Screenshots / Logs (if applicable)

Checklist:

  • I have read and followed the contribution guidelines.
  • Disclosed any use of AI (see our policy)
  • I have updated the documentation accordingly.
  • All new and existing tests passed.
  • Successful build pnpm build
  • Translation keys pnpm i18n:extract
  • Database migration (if required)

Summary by CodeRabbit

Performance

  • Improved TV metadata lookup speed with bounded caching and automatic expiration.
  • Reduced unnecessary metadata processing during library scans.

Bug Fixes

  • Improved TV show identification across Jellyfin, Plex, and Sonarr scans.
  • Added more reliable TVDB, IMDb, and AniDB resolution during scanning.
  • Improved matching accuracy when resolving external identifiers.
  • Improved handling of missing or incomplete TV metadata during scans.

@fallenbagel
fallenbagel requested a balanced review from Copilot August 11, 2026 03:13
@fallenbagel
fallenbagel requested a review from a team as a code owner August 11, 2026 03:13
@coderabbitai

coderabbitai Bot commented Aug 11, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b753b6d2-2317-4f63-ada6-08e0b4fc8937

📥 Commits

Reviewing files that changed from the base of the PR and between c9825ab and b30cfd7.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (5)
  • package.json
  • server/api/plexapi.ts
  • server/lib/cache.ts
  • server/lib/scanners/plex/index.ts
  • src/components/Settings/SettingsJobsCache/index.tsx

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

TMDB TV lookups now support reduced scan responses with dedicated bounded LRU caching. Shared cache handling supports per-call stores and transformations. Availability synchronization and Jellyfin, Plex, and Sonarr scanners use scan-specific methods.

Changes

TMDB scan caching and integrations

Layer / File(s) Summary
Bounded cache storage
package.json, server/lib/cache.ts
Replaced node-cache with bounded LRU storage. Added CacheStore, cache statistics, cloning, size tracking, explicit key limits, and the tmdbscan cache.
Configurable TMDB TV requests
server/api/externalapi.ts, server/api/themoviedb/index.ts, server/api/themoviedb/interfaces.ts
Added configurable cache and transformation handling. Added reduced TV scan responses, dedicated TTLs, scan cache access, external-ID validation, and shared TVDB resolution.
Availability season enrichment
server/lib/availabilitySync.ts, server/lib/availabilitySync.test.ts
Availability synchronization now uses scan-specific TMDB lookups and supports scan or full TV details. Tests use scan-specific method mocks.
Media scanner lookups
server/lib/scanners/jellyfin/*, server/lib/scanners/plex/index.ts, server/lib/scanners/sonarr/*
Jellyfin, Plex, and Sonarr resolution paths now use scan-specific TMDB methods and types. Plex no longer stores GUID results in the removed GUID cache. Test mocks support the new methods.
API and cache settings integration
server/api/plexapi.ts, src/components/Settings/SettingsJobsCache/index.tsx
Plex requests GUIDs only for movie queries. The cache settings table now displays all API caches.

Estimated code review effort: 4 (Complex) | ~60 minutes

Merge Risk: ⚪ Minimal · up to b30cf

The change bounds cache growth and separates short-lived scan lookups from interactive browsing data, with reported tests showing substantially lower memory use and completed scans; no actionable merge-blocking risk remains beyond normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant Scanner
  participant TheMovieDb
  participant ExternalAPI
  participant CacheStore
  Scanner->>TheMovieDb: Request scan TV details
  TheMovieDb->>ExternalAPI: Send reduced TV detail request
  ExternalAPI->>CacheStore: Read or write transformed response
  CacheStore-->>ExternalAPI: Return cached scan response
  ExternalAPI-->>TheMovieDb: Return scan details
  TheMovieDb-->>Scanner: Return TmdbTvScanDetails
Loading

Suggested reviewers: 0xsysr3ll, danshilm

Poem

A rabbit caches shows with care,
LRU shelves hold details there.
Scan responses stay small and bright,
TTLs retire them at the right time,
Scanners hop through every show.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes address issue #3307 by bounding cache growth, using a separate 15-minute scan cache, limiting scan response fields, removing unused credit data, and preventing repeated scans from retainin…
Out of Scope Changes check ✅ Passed The changes are related to the stated memory-reduction objective. Dependency replacement, scanner updates, cache UI updates, and movie-only GUID requests support the bounded cache and scan-tier design…
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main changes: bounding the TMDB cache and separating scan lookups into a dedicated tier.
Full details: Linked Issues check

Explanation

The changes address issue #3307 by bounding cache growth, using a separate 15-minute scan cache, limiting scan response fields, removing unused credit data, and preventing repeated scans from retaining unbounded TMDB responses.

Full details: Out of Scope Changes check

Explanation

The changes are related to the stated memory-reduction objective. Dependency replacement, scanner updates, cache UI updates, and movie-only GUID requests support the bounded cache and scan-tier design.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Bounds TMDB caching and separates lightweight scan traffic from interactive TV-detail traffic to reduce memory pressure.

Changes:

  • Adds bounded LRU caches for interactive and scan workloads.
  • Introduces lightweight TMDB TV scan responses.
  • Migrates scanners and availability sync to scan-specific lookups.

Reviewed changes

Copilot reviewed 9 out of 10 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
server/lib/cache.ts Adds bounded LRU cache tiers.
server/api/externalapi.ts Supports per-request caches and transforms.
server/api/themoviedb/index.ts Adds lightweight scan lookups and strips unused credits.
server/api/themoviedb/interfaces.ts Defines scan response shape.
server/lib/scanners/sonarr/index.ts Uses scan-tier TV lookups.
server/lib/scanners/plex/index.ts Uses scan-tier TV lookups.
server/lib/scanners/jellyfin/index.ts Uses scan-tier TV lookups.
server/lib/availabilitySync.ts Uses scan-tier TV lookups.
package.json Adds lru-cache.
pnpm-lock.yaml Locks the dependency.
Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread server/api/themoviedb/index.ts Resolved
Comment thread server/api/themoviedb/index.ts Resolved
Comment thread server/lib/scanners/plex/index.ts Resolved
@cypress

cypress Bot commented Aug 11, 2026 •

Copy link
Copy Markdown

seerr    Run #3648

Run Properties:  status check failed Failed #3648  •  git commit 59ad5f1916: perf: bound tmdb cache & split scan lookups into their own tier (#3367)
Project seerr
Branch Review develop
Run status status check failed Failed #3648
Run duration 02m 37s
Commit git commit 59ad5f1916: perf: bound tmdb cache & split scan lookups into their own tier (#3367)
Committer fallenbagel
View all properties for this run ↗︎

Test results
Tests that failed  Failures 1
Tests that were flaky  Flaky 0
Tests that did not run due to a developer annotating a test with .skip  Pending 0
Tests that did not run due to a failure in a mocha hook  Skipped 0
Tests that passed  Passing 32
View all changes introduced in this branch ↗︎

Tests for review

Failed  cypress/e2e/settings/general-settings.cy.ts • 1 failed test

View Output Video

Test Artifacts
General Settings > modifies setting that requires restart Test Replay Screenshots Video

Copilot AI review requested due to automatic review settings August 11, 2026 04:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 12 out of 13 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Generated file
Suppressed comments (1)

server/api/themoviedb/index.ts:983

  • Scan /find lookups still expire after 5 minutes: passing undefined here makes ExternalAPI.get() write with its 300-second default, overriding the scan cache's configured 900-second TTL. This makes TVDB/IMDb mappings age out earlier than the rest of the scan tier and can cause repeated TMDB requests during longer scans. Preserve the existing 5-minute behavior for the interactive cache, but pass SCAN_TTL when the scan cache is supplied.
        undefined,
        { cache }

@seerr-automation-bot seerr-automation-bot added this to the v3.5.0 milestone Aug 11, 2026
@fallenbagel

fallenbagel commented Aug 11, 2026 •

Copy link
Copy Markdown
Member Author

Ignore the failing cypress tests. That's unrelated to this PR and not relevant to users and is fixed by
#3368 anyways.

Comment thread server/api/themoviedb/index.ts Resolved
Copilot AI review requested due to automatic review settings August 11, 2026 19:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 12 out of 13 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

@fallenbagel
fallenbagel requested a review from 0xSysR3ll August 11, 2026 19:38
0xSysR3ll
0xSysR3ll previously approved these changes Aug 11, 2026

@0xSysR3ll 0xSysR3ll left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@fallenbagel
fallenbagel enabled stacked auto-merge (squash) August 11, 2026 19:55
@0xSysR3ll
0xSysR3ll disabled stacked auto-merge August 17, 2026 19:59
Comment thread server/lib/cache.ts Resolved
Library scans and availability sync fetched the full /tv/:id payload including aggregate_credits and
cached it for 12 hours in the same unbounded cache the interactive TV detail page uses, so a full
scan left most of a library resident until the TTL expired. Scanners and availability sync now
request only keywords and external_ids, which is everything they read, and write to a separate
LRU-bounded cache with a 15 minute TTL, so scan lookups age out on their own instead of evicting
traffic of manual browsing. The interactive cache gains a key-count backstop against the unbounded
growth, and aggregate_credits.crew and credits.cast are stripped before caching since nothing in the
codebase readss that either.

refs #3307
The previous split left the /find external-id lookups behind: scanners resolved IMDb and TVDB ids
through getMediaByImdbId and getByExternalId, which cached in the interactive tmdb tier, and
getMediaByImdbId then fetched a full movie or show detail payload purely so callers could read back
the id. Scan paths now call resolveImdbIdForScan and getByExternalIdForScan, which write to the
tmdbscan tier, and a resolved movie is confirmed with an id-only /movie/:id request instead of the
detail payload the movie page needs. getByExternalId keeps its signature and cache for interactive
callers.
getRecentlyAdded queried /library/sections/:id/all without includeGuids=1, unlike getLibraryContents
which has carried the flag since two were split apart in afda9c7, so every recently added movie
arrived without its Guid array and getMediaIds fell back to a per-tiem /library/metadata request on
each pass through the scan's ten minute overlap window. The movie query now sets the flag, the show
query is left alone because it returns episodes, whose guids processPlexShow never reads anyways. So
plexguid cache is removed with it. Its cache-hit branch never skipped anything, since the metadata
fetch below it ran unconditionally and overwrote the cached ids, and with guids arriving inline the
only thing it still did, reusing an external-id resolve, is already covered by the tmdbscan tier.
every tier now uses lrucachestore. Max is now required. And checkPeriod goes with node-cache since
lru-cache purges on its own. The eight tiers that had no cap get one sized from their keys space
where a few keys per configured server for arr, one per searched title or IMDb id for rt and imdb, a
fixed handful for github, watchlist item metadata for plextv, one per linked user for plexwatchlist,
and several per show for tbdb.
Copilot AI review requested due to automatic review settings August 26, 2026 12:11
@fallenbagel
fallenbagel force-pushed the perf/tmdb-cache-tier-split branch from c9825ab to b30cfd7 Compare August 26, 2026 12:11

This comment was marked as spam.

@fallenbagel

Copy link
Copy Markdown
Member Author

Ignore the failing cypress test. It will be fixed on:
#3432

@gauthier-th gauthier-th left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@fallenbagel
fallenbagel merged commit 59ad5f1 into develop Aug 27, 2026
20 of 23 checks passed
@fallenbagel
fallenbagel deleted the perf/tmdb-cache-tier-split branch August 27, 2026 13:09
tehsu added a commit to tehsu/seerr that referenced this pull request Sep 12, 2026
…mary media server (#12)

* fix(subscriber): keep request status updates on the owning save's connection (seerr-team#3366)

* fix(override-rules): match default *arr server by id (seerr-team#3428)

* fix(ui): don't mark empty collections as available (seerr-team#3431)

* feat(users): add search box for user lookup by username or email (seerr-team#2482)

Co-authored-by: 0xsysr3ll <0xsysr3ll@pm.me>
Co-authored-by: Arul1998 <arulcornelious@gmail.com>

* perf: bound tmdb cache & split scan lookups into their own tier (seerr-team#3367)

* feat(notifications): add support for ntfy.sh tags (seerr-team#3350)

Co-authored-by: Bart de Lange <b.delange@vgz.nl>
Co-authored-by: 0xsysr3ll <31414959+0xSysR3ll@users.noreply.github.com>

* feat(api): send a Seerr user agent on outbound requests (seerr-team#3395)

* fix(settings): mutate the query-string status key for modal immediately (seerr-team#3432)

* fix: prevent hideAvailable/hideBlocklisted from filtering person results (seerr-team#3434)

Co-authored-by: mdsaimon1232 <mdsaimon552723@gmail.com>

* fix(discover): fix tv title sorting and validate sortBy per media type (seerr-team#3305)

* fix(datasource): register entities and subscribers explicitly (seerr-team#3375)

* chore(i18n): update translations from Weblate

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: dtalens <dtalens@users.noreply.translate.seerr.dev>

* fix(ui): stop appear leaking onto the DOM in Modal and SlideOver (seerr-team#3446)

* fix(datasource): break import cycle mistyping postgres timestamps (seerr-team#3449)

* chore(deps): upgrade @headlessui/react to 2.2.10  (seerr-team#3450)

* fix(ui): stop the slideover backdrop flashing back on close (seerr-team#3451)

* refactor(ui): use headlessui flat named exports (seerr-team#3453)

* refactor(ui): use the Radio component instead of RadioGroup.Option (seerr-team#3454)

* fix(tv): prevent phantom specials from blocking season request (seerr-team#3351)

* fix(db): drop stale auth unique on sqlite push subscriptions (seerr-team#3391)

* fix(requests): enforce pending and failed states on request routes (seerr-team#3385)

* ci(actions): update github actions (seerr-team#3306)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(i18n): update translations from Weblate

Co-authored-by: Bas Trebus <bas.trebus@maastrichtuniversity.nl>
Co-authored-by: Gallyam <gallyamb@gmail.com>
Co-authored-by: Mateusz Lesiak <mateusz.lesiak01@gmail.com>
Co-authored-by: Miguel Pacheco <runway-venus-kung@duck.com>
Co-authored-by: Nils Karlsson Pyssling <nisse@users.noreply.translate.seerr.dev>
Co-authored-by: Samuel <samuelsilveira100@gmail.com>
Co-authored-by: SulliL <susu.leduc@gmail.com>
Co-authored-by: Thadah D. Denyse <thadahdenyse@protonmail.com>
Co-authored-by: Ulrik J <ulrikj@users.noreply.translate.seerr.dev>
Co-authored-by: Ustinov Mokei Iosipovich <niktonikto150@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: dtalens <dtalens@users.noreply.translate.seerr.dev>
Co-authored-by: shaper868 <devilofdark485@gmail.com>
Co-authored-by: ugyes <ferenc.bodi@live.com>

* fix: fix empty discordId in comment webhooks (seerr-team#3467)

* fix(requests): reset orphaned season statuses when a request is deleted (seerr-team#3279)

* fix(requests): stop editing a request from stealing another's season (seerr-team#3376)

* fix(requests): serialize request creation per user (seerr-team#3377)

* docs(docker): add cap-drop and security-opt to docker command (seerr-team#3472)

* fix(requests): scope download status to requested seasons on request cards (seerr-team#3412)

* ci(actions): update github actions (major) (seerr-team#3471)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update database (seerr-team#3458)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* ci(actions): update github actions (seerr-team#3478)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(i18n): update translations from Weblate

Co-authored-by: Kisnov <gabrielmarfil0@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>

* feat(settings): hide already requested media (seerr-team#1855)

Signed-off-by: 0xsysr3ll <0xsysr3ll@pm.me>

* chore(i18n): update translations from Weblate

Co-authored-by: Serhiy <sergey.bobrov83@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: dtalens <dtalens@users.noreply.translate.seerr.dev>

* fix(requests): skip seasons with no episodes when requesting all seasons (seerr-team#2698)

Co-authored-by: Xyerophyte <Xyerophyte@users.noreply.github.com>

* docs(helm): fix documentation regarding chart signature verification (seerr-team#3420)

Signed-off-by: Ludovic Ortega <ludovic.ortega@adminafk.fr>

* fix(jellyfin-api): update Authorization headers for Jellyfin (seerr-team#3502)

* feat(auth): allow signing in with Jellyfin and Emby alongside the primary media server

Admins can now enable additional Jellyfin and/or Emby servers for sign-in under
Settings → Users, next to the primary media server (for example a Jellyfin
server alongside a Plex primary). These servers are only used for
authentication; libraries and availability keep coming from the primary server.

- The sign-in page offers every enabled method: the primary media server, the
  local account, and each additional server, with the Plex button alongside.
- POST /auth/jellyfin accepts a serverType and authenticates against the
  matching additional server, creating Jellyfin/Emby users with the default
  permissions (respecting the "new sign-in" setting).
- Quick Connect targets the additional Jellyfin server when the primary is not
  Jellyfin.
- Avatars are fetched from the server a user belongs to, and logout skips device
  cleanup for servers Seerr holds no API key for.
- Connection details of an enabled server are verified when saving.
- LabeledCheckbox now labels its own checkbox instead of always "localLogin".

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0165jYqnoUdK9rr5aSvmLPX4

---------

Signed-off-by: 0xsysr3ll <0xsysr3ll@pm.me>
Signed-off-by: Ludovic Ortega <ludovic.ortega@adminafk.fr>
Co-authored-by: fallenbagel <98979876+fallenbagel@users.noreply.github.com>
Co-authored-by: Austin Rikley <newsdecentralized@gmail.com>
Co-authored-by: 0xsysr3ll <31414959+0xSysR3ll@users.noreply.github.com>
Co-authored-by: Arul Cornelious <65539155+Arul1998@users.noreply.github.com>
Co-authored-by: 0xsysr3ll <0xsysr3ll@pm.me>
Co-authored-by: Arul1998 <arulcornelious@gmail.com>
Co-authored-by: Bart de Lange <32978882+bartdelange@users.noreply.github.com>
Co-authored-by: Bart de Lange <b.delange@vgz.nl>
Co-authored-by: Parman Mohammadalizadeh <prmma23@gmail.com>
Co-authored-by: Musfiqur Rahman Saimon <britsync07@gmail.com>
Co-authored-by: mdsaimon1232 <mdsaimon552723@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: dtalens <dtalens@users.noreply.translate.seerr.dev>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Bas Trebus <bas.trebus@maastrichtuniversity.nl>
Co-authored-by: Gallyam <gallyamb@gmail.com>
Co-authored-by: Mateusz Lesiak <mateusz.lesiak01@gmail.com>
Co-authored-by: Miguel Pacheco <runway-venus-kung@duck.com>
Co-authored-by: Nils Karlsson Pyssling <nisse@users.noreply.translate.seerr.dev>
Co-authored-by: Samuel <samuelsilveira100@gmail.com>
Co-authored-by: SulliL <susu.leduc@gmail.com>
Co-authored-by: Thadah D. Denyse <thadahdenyse@protonmail.com>
Co-authored-by: Ulrik J <ulrikj@users.noreply.translate.seerr.dev>
Co-authored-by: Ustinov Mokei Iosipovich <niktonikto150@gmail.com>
Co-authored-by: shaper868 <devilofdark485@gmail.com>
Co-authored-by: ugyes <ferenc.bodi@live.com>
Co-authored-by: Dor Peled <dor.peled@coralogix.com>
Co-authored-by: Ludovic Ortega <ludovic.ortega@adminafk.fr>
Co-authored-by: Kisnov <gabrielmarfil0@gmail.com>
Co-authored-by: Serhiy <sergey.bobrov83@gmail.com>
Co-authored-by: Harsh Abasaheb Chavan <99984066+Xyerophyte@users.noreply.github.com>
Co-authored-by: Xyerophyte <Xyerophyte@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
gabrielcosi pushed a commit to gabrielcosi/home-ops that referenced this pull request Sep 28, 2026
….0) (#963)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/seerr-team/seerr](https://github.com/seerr-team/seerr) | minor | `v3.4.1` → `v3.5.0` |

---

### Release Notes

<details>
<summary>seerr-team/seerr (ghcr.io/seerr-team/seerr)</summary>

### [`v3.5.0`](https://github.com/seerr-team/seerr/releases/tag/v3.5.0)

[Compare Source](seerr-team/seerr@v3.4.1...v3.5.0)

> \[!WARNING]
> **Breaking change: Plex and Jellyfin library API endpoints ([#&#8203;3321](seerr-team/seerr#3321
>
> `GET /settings/plex/library` and `GET /settings/jellyfin/library` no longer accept the `sync` or `enable` query parameters, and reading libraries no longer changes their enabled state. If you have scripts, integrations, or third-party clients that use these to sync or toggle libraries, switch to:
>
> - Sync libraries: `POST /settings/plex/library/sync` and `POST /settings/jellyfin/library/sync`
> - Enable or disable a library: `PUT /settings/plex/library/{libraryId}` and `PUT /settings/jellyfin/library/{libraryId}`
>
> The web UI already uses the new endpoints, so only direct API consumers are affected. Because of that limited scope, this ships in a minor release rather than a major one.

##### 🚀 Features

- *(api)* Send a Seerr user agent on outbound requests ([#&#8203;3395](seerr-team/seerr#3395)) - ([a123d20](seerr-team/seerr@a123d20))
- *(notifications)* Add support for ntfy.sh tags ([#&#8203;3350](seerr-team/seerr#3350)) - ([92bad10](seerr-team/seerr@92bad10))
- *(notifications)* Add embed poster option for Gotify ([#&#8203;3332](seerr-team/seerr#3332)) - ([afb17aa](seerr-team/seerr@afb17aa))
- *(overriderules)* Apply override rules to advanced requests ([#&#8203;2164](seerr-team/seerr#2164)) - ([794743a](seerr-team/seerr@794743a))
- *(settings)* Hide already requested media ([#&#8203;1855](seerr-team/seerr#1855)) - ([6f5a177](seerr-team/seerr@6f5a177))
- *(users)* Add search box for user lookup by username or email ([#&#8203;2482](seerr-team/seerr#2482)) - ([aae8816](seerr-team/seerr@aae8816))
- Add a demo feature ([#&#8203;3017](seerr-team/seerr#3017)) - ([38581ca](seerr-team/seerr@38581ca))
- Add support for custom plex metadata provider guid scheme in scanner ([#&#8203;3316](seerr-team/seerr#3316)) - ([7baed83](seerr-team/seerr@7baed83))

##### 🐛 Bug Fixes

- *(api)* Stop library reads from resetting enabled flags ([#&#8203;3321](seerr-team/seerr#3321)) - ([985ddef](seerr-team/seerr@985ddef))
- *(auth)* Refresh avatar on Quick Connect login ([#&#8203;3504](seerr-team/seerr#3504)) - ([d4eeea8](seerr-team/seerr@d4eeea8))
- *(datasource)* Break import cycle mistyping postgres timestamps ([#&#8203;3449](seerr-team/seerr#3449)) - ([d7b08bd](seerr-team/seerr@d7b08bd))
- *(datasource)* Register entities and subscribers explicitly ([#&#8203;3375](seerr-team/seerr#3375)) - ([0f79ee6](seerr-team/seerr@0f79ee6))
- *(db)* Remap leftover Overseerr DELETED status after migration ([#&#8203;3510](seerr-team/seerr#3510)) - ([2bebae8](seerr-team/seerr@2bebae8))
- *(db)* Drop stale auth unique on sqlite push subscriptions ([#&#8203;3391](seerr-team/seerr#3391)) - ([5f4cb1e](seerr-team/seerr@5f4cb1e))
- *(discover)* Fix tv title sorting and validate sortBy per media type ([#&#8203;3305](seerr-team/seerr#3305)) - ([2759058](seerr-team/seerr@2759058))
- *(jellyfin-api)* Update Authorization headers for Jellyfin ([#&#8203;3502](seerr-team/seerr#3502)) - ([de57e7a](seerr-team/seerr@de57e7a))
- *(login)* Hide quick connect button for emby servers ([#&#8203;3369](seerr-team/seerr#3369)) - ([d103787](seerr-team/seerr@d103787))
- *(override-rules)* Keep values set by advanced requesters ([#&#8203;3539](seerr-team/seerr#3539)) - ([b919443](seerr-team/seerr@b919443))
- *(override-rules)* Match default \*arr server by id ([#&#8203;3428](seerr-team/seerr#3428)) - ([7fae95b](seerr-team/seerr@7fae95b))
- *(plex)* Limit concurrent watchlist metadata requests ([#&#8203;3251](seerr-team/seerr#3251)) - ([103976d](seerr-team/seerr@103976d))
- *(request)* Render anime notice alert in a div instead of a p ([#&#8203;3331](seerr-team/seerr#3331)) - ([1fd35f9](seerr-team/seerr@1fd35f9))
- *(requests)* Serialize requests for the same title ([#&#8203;3380](seerr-team/seerr#3380)) - ([cc6f5c7](seerr-team/seerr@cc6f5c7))
- *(requests)* Stop editing a request from re-requesting covered seasons ([#&#8203;3379](seerr-team/seerr#3379)) - ([10483e2](seerr-team/seerr@10483e2))
- *(requests)* Enforce the quota when editing a request ([#&#8203;3378](seerr-team/seerr#3378)) - ([8f0a977](seerr-team/seerr@8f0a977))
- *(requests)* Skip seasons with no episodes when requesting all seasons ([#&#8203;2698](seerr-team/seerr#2698)) - ([1dbf19b](seerr-team/seerr@1dbf19b))
- *(requests)* Scope download status to requested seasons on request cards ([#&#8203;3412](seerr-team/seerr#3412)) - ([c604bcc](seerr-team/seerr@c604bcc))
- *(requests)* Serialize request creation per user ([#&#8203;3377](seerr-team/seerr#3377)) - ([d7dc7bd](seerr-team/seerr@d7dc7bd))
- *(requests)* Stop editing a request from stealing another's season ([#&#8203;3376](seerr-team/seerr#3376)) - ([17fc4cc](seerr-team/seerr@17fc4cc))
- *(requests)* Reset orphaned season statuses when a request is deleted ([#&#8203;3279](seerr-team/seerr#3279)) - ([970bb54](seerr-team/seerr@970bb54))
- *(requests)* Enforce pending and failed states on request routes ([#&#8203;3385](seerr-team/seerr#3385)) - ([9f6403e](seerr-team/seerr@9f6403e))
- *(scanner)* Confirm orphan candidates against the servers before declining ([#&#8203;3399](seerr-team/seerr#3399)) - ([34b28d0](seerr-team/seerr@34b28d0))
- *(server)* Respond instead of hanging on proxy route errors ([#&#8203;3501](seerr-team/seerr#3501)) - ([a53f49b](seerr-team/seerr@a53f49b))
- *(settings)* Mutate the query-string status key for modal immediately ([#&#8203;3432](seerr-team/seerr#3432)) - ([5af32cb](seerr-team/seerr@5af32cb))
- *(sonarr)* Apply configured series type to non-anime requests ([#&#8203;3329](seerr-team/seerr#3329)) - ([42bee2a](seerr-team/seerr@42bee2a))
- *(sonarr)* Decouple anime root folder routing from seriesType ([#&#8203;3328](seerr-team/seerr#3328)) - ([93c0b6a](seerr-team/seerr@93c0b6a))
- *(subscriber)* Keep issue comment lookups on the owning save's connection ([#&#8203;3536](seerr-team/seerr#3536)) - ([68e01b9](seerr-team/seerr@68e01b9))
- *(subscriber)* Keep request status updates on the owning save's connection ([#&#8203;3366](seerr-team/seerr#3366)) - ([059008c](seerr-team/seerr@059008c))
- *(tv)* Prevent phantom specials from blocking season request ([#&#8203;3351](seerr-team/seerr#3351)) - ([7997f75](seerr-team/seerr@7997f75))
- *(ui)* Stop the slideover backdrop flashing back on close ([#&#8203;3451](seerr-team/seerr#3451)) - ([df743f4](seerr-team/seerr@df743f4))
- *(ui)* Stop appear leaking onto the DOM in Modal and SlideOver ([#&#8203;3446](seerr-team/seerr#3446)) - ([da4b555](seerr-team/seerr@da4b555))
- *(ui)* Don't mark empty collections as available ([#&#8203;3431](seerr-team/seerr#3431)) - ([92f8404](seerr-team/seerr@92f8404))
- *(webpush)* Resolve push subscription bugs for multi-device and shared browsers ([#&#8203;3142](seerr-team/seerr#3142)) - ([59d5947](seerr-team/seerr@59d5947))
- Fix empty discordId in comment webhooks ([#&#8203;3467](seerr-team/seerr#3467)) - ([e73825b](seerr-team/seerr@e73825b))
- Prevent hideAvailable/hideBlocklisted from filtering person results ([#&#8203;3434](seerr-team/seerr#3434)) - ([0be53e6](seerr-team/seerr@0be53e6))
- Stop masking connection failures across media server sync and login ([#&#8203;3324](seerr-team/seerr#3324)) - ([4d17e08](seerr-team/seerr@4d17e08))
- Keep library settings when renamed on media server ([#&#8203;3323](seerr-team/seerr#3323)) - ([c9f2ac5](seerr-team/seerr@c9f2ac5))
- Changes the suggested url from plex's "hosted" app ([#&#8203;3250](seerr-team/seerr#3250)) - ([d3c070e](seerr-team/seerr@d3c070e))

##### 📖 Documentation

- *(discord)* Document the Thread ID notification setting. ([#&#8203;3481](seerr-team/seerr#3481)) - ([7afbb29](seerr-team/seerr@7afbb29))
- *(docker)* Add cap-drop and security-opt to docker command ([#&#8203;3472](seerr-team/seerr#3472)) - ([a4f5eaa](seerr-team/seerr@a4f5eaa))
- Clarify ai disclosure policy further ([#&#8203;3358](seerr-team/seerr#3358)) - ([dea5960](seerr-team/seerr@dea5960))

##### ⚡ Performance

- Bound tmdb cache & split scan lookups into their own tier ([#&#8203;3367](seerr-team/seerr#3367)) - ([59ad5f1](seerr-team/seerr@59ad5f1))

##### 🚜 Refactor

- *(avatarproxy)* Remove unused auth header from avatarproxy ([#&#8203;3503](seerr-team/seerr#3503)) - ([b211652](seerr-team/seerr@b211652))
- *(ui)* Use the Radio component instead of RadioGroup.Option ([#&#8203;3454](seerr-team/seerr#3454)) - ([46d5915](seerr-team/seerr@46d5915))
- *(ui)* Use headlessui flat named exports ([#&#8203;3453](seerr-team/seerr#3453)) - ([aa8e0de](seerr-team/seerr@aa8e0de))

##### 🧪 Testing

- *(cypress)* Stop dirty restartRequired flag cascading across specs ([#&#8203;3368](seerr-team/seerr#3368)) - ([39ff48c](seerr-team/seerr@39ff48c))
- Block outbound HTTP in unit tests ([#&#8203;3511](seerr-team/seerr#3511)) - ([abe2f3b](seerr-team/seerr@abe2f3b))
- Add scanner update rate override for testing ([#&#8203;3241](seerr-team/seerr#3241)) - ([7a76142](seerr-team/seerr@7a76142))

##### ⚙️ Miscellaneous Tasks

- *(actions)* Update github actions ([#&#8203;3478](seerr-team/seerr#3478)) - ([a3dbbd9](seerr-team/seerr@a3dbbd9))
- *(actions)* Update github actions (major) ([#&#8203;3471](seerr-team/seerr#3471)) - ([6bf3d04](seerr-team/seerr@6bf3d04))
- *(actions)* Update github actions ([#&#8203;3306](seerr-team/seerr#3306)) - ([5a5f059](seerr-team/seerr@5a5f059))
- *(duplicate-detector)* Switch embeddings to bge-small-en-v1.5 ([#&#8203;3541](seerr-team/seerr#3541)) - ([4fd0da0](seerr-team/seerr@4fd0da0))
- *(i18n)* Update translations from Weblate - ([68c5bc8](seerr-team/seerr@68c5bc8))
- *(i18n)* Update translations from Weblate - ([5f97227](seerr-team/seerr@5f97227))
- *(i18n)* Update translations from Weblate - ([5c04640](seerr-team/seerr@5c04640))
- *(i18n)* Update translations from Weblate - ([cc592e8](seerr-team/seerr@cc592e8))
- *(release)* Prepare v3.5.0 - ([e2f24cb](seerr-team/seerr@e2f24cb))
- *(release)* Prepare 3.5.0 release - ([cd0fb22](seerr-team/seerr@cd0fb22))
- Remove third party action dawidd6/action-download-artifact ([#&#8203;3480](seerr-team/seerr#3480)) - ([6fa7473](seerr-team/seerr@6fa7473))
- Fix release workflow verify attestation ([#&#8203;3337](seerr-team/seerr#3337)) - ([090c659](seerr-team/seerr@090c659))
- Exclude .pnpm-store from Docker build context ([#&#8203;3313](seerr-team/seerr#3313)) - ([bd491c7](seerr-team/seerr@bd491c7))

##### New Contributors ❤️

- [@&#8203;atilaszsz](https://github.com/atilaszsz) made their first contribution
- [@&#8203;aussierk](https://github.com/aussierk) made their first contribution
- [@&#8203;Xyerophyte](https://github.com/Xyerophyte) made their first contribution
- [@&#8203;Knat-Dev](https://github.com/Knat-Dev) made their first contribution
- [@&#8203;britsync07-prog](https://github.com/britsync07-prog) made their first contribution
- [@&#8203;MannXo](https://github.com/MannXo) made their first contribution
- [@&#8203;bartdelange](https://github.com/bartdelange) made their first contribution
- [@&#8203;Arul1998](https://github.com/Arul1998) made their first contribution
- [@&#8203;tuvokian](https://github.com/tuvokian) made their first contribution
- [@&#8203;peruzzof](https://github.com/peruzzof) made their first contribution
- [@&#8203;lichie567](https://github.com/lichie567) made their first contribution
- [@&#8203;samtheruby](https://github.com/samtheruby) made their first contribution

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Berlin)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTUuMTAiLCJ1cGRhdGVkSW5WZXIiOiI0NC4xMTUuMTAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.xcd.dev/gabrielcosi/home-ops/pulls/963
hbjydev pushed a commit to hbjydev/phoebe that referenced this pull request Sep 28, 2026
….0) (#793)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/seerr-team/seerr](https://github.com/seerr-team/seerr) | minor | `v3.4.1` → `v3.5.0` |

---

### Release Notes

<details>
<summary>seerr-team/seerr (ghcr.io/seerr-team/seerr)</summary>

### [`v3.5.0`](https://github.com/seerr-team/seerr/releases/tag/v3.5.0)

[Compare Source](seerr-team/seerr@v3.4.1...v3.5.0)

##### [3.5.0](https://github.com/seerr-team/seerr/compare/v3.4.1..v3.5.0) - 2026-09-28

##### 🚀 Features

- *(api)* Send a Seerr user agent on outbound requests ([#&#8203;3395](seerr-team/seerr#3395)) - ([a123d20](seerr-team/seerr@a123d20))
- *(notifications)* Add support for ntfy.sh tags ([#&#8203;3350](seerr-team/seerr#3350)) - ([92bad10](seerr-team/seerr@92bad10))
- *(notifications)* Add embed poster option for Gotify ([#&#8203;3332](seerr-team/seerr#3332)) - ([afb17aa](seerr-team/seerr@afb17aa))
- *(overriderules)* Apply override rules to advanced requests ([#&#8203;2164](seerr-team/seerr#2164)) - ([794743a](seerr-team/seerr@794743a))
- *(settings)* Hide already requested media ([#&#8203;1855](seerr-team/seerr#1855)) - ([6f5a177](seerr-team/seerr@6f5a177))
- *(users)* Add search box for user lookup by username or email ([#&#8203;2482](seerr-team/seerr#2482)) - ([aae8816](seerr-team/seerr@aae8816))
- Add a demo feature ([#&#8203;3017](seerr-team/seerr#3017)) - ([38581ca](seerr-team/seerr@38581ca))
- Add support for custom plex metadata provider guid scheme in scanner ([#&#8203;3316](seerr-team/seerr#3316)) - ([7baed83](seerr-team/seerr@7baed83))

##### 🐛 Bug Fixes

- *(api)* Stop library reads from resetting enabled flags ([#&#8203;3321](seerr-team/seerr#3321)) - ([985ddef](seerr-team/seerr@985ddef))
- *(auth)* Refresh avatar on Quick Connect login ([#&#8203;3504](seerr-team/seerr#3504)) - ([d4eeea8](seerr-team/seerr@d4eeea8))
- *(datasource)* Break import cycle mistyping postgres timestamps ([#&#8203;3449](seerr-team/seerr#3449)) - ([d7b08bd](seerr-team/seerr@d7b08bd))
- *(datasource)* Register entities and subscribers explicitly ([#&#8203;3375](seerr-team/seerr#3375)) - ([0f79ee6](seerr-team/seerr@0f79ee6))
- *(db)* Remap leftover Overseerr DELETED status after migration ([#&#8203;3510](seerr-team/seerr#3510)) - ([2bebae8](seerr-team/seerr@2bebae8))
- *(db)* Drop stale auth unique on sqlite push subscriptions ([#&#8203;3391](seerr-team/seerr#3391)) - ([5f4cb1e](seerr-team/seerr@5f4cb1e))
- *(discover)* Fix tv title sorting and validate sortBy per media type ([#&#8203;3305](seerr-team/seerr#3305)) - ([2759058](seerr-team/seerr@2759058))
- *(jellyfin-api)* Update Authorization headers for Jellyfin ([#&#8203;3502](seerr-team/seerr#3502)) - ([de57e7a](seerr-team/seerr@de57e7a))
- *(login)* Hide quick connect button for emby servers ([#&#8203;3369](seerr-team/seerr#3369)) - ([d103787](seerr-team/seerr@d103787))
- *(override-rules)* Keep values set by advanced requesters ([#&#8203;3539](seerr-team/seerr#3539)) - ([b919443](seerr-team/seerr@b919443))
- *(override-rules)* Match default \*arr server by id ([#&#8203;3428](seerr-team/seerr#3428)) - ([7fae95b](seerr-team/seerr@7fae95b))
- *(plex)* Limit concurrent watchlist metadata requests ([#&#8203;3251](seerr-team/seerr#3251)) - ([103976d](seerr-team/seerr@103976d))
- *(request)* Render anime notice alert in a div instead of a p ([#&#8203;3331](seerr-team/seerr#3331)) - ([1fd35f9](seerr-team/seerr@1fd35f9))
- *(requests)* Serialize requests for the same title ([#&#8203;3380](seerr-team/seerr#3380)) - ([cc6f5c7](seerr-team/seerr@cc6f5c7))
- *(requests)* Stop editing a request from re-requesting covered seasons ([#&#8203;3379](seerr-team/seerr#3379)) - ([10483e2](seerr-team/seerr@10483e2))
- *(requests)* Enforce the quota when editing a request ([#&#8203;3378](seerr-team/seerr#3378)) - ([8f0a977](seerr-team/seerr@8f0a977))
- *(requests)* Skip seasons with no episodes when requesting all seasons ([#&#8203;2698](seerr-team/seerr#2698)) - ([1dbf19b](seerr-team/seerr@1dbf19b))
- *(requests)* Scope download status to requested seasons on request cards ([#&#8203;3412](seerr-team/seerr#3412)) - ([c604bcc](seerr-team/seerr@c604bcc))
- *(requests)* Serialize request creation per user ([#&#8203;3377](seerr-team/seerr#3377)) - ([d7dc7bd](seerr-team/seerr@d7dc7bd))
- *(requests)* Stop editing a request from stealing another's season ([#&#8203;3376](seerr-team/seerr#3376)) - ([17fc4cc](seerr-team/seerr@17fc4cc))
- *(requests)* Reset orphaned season statuses when a request is deleted ([#&#8203;3279](seerr-team/seerr#3279)) - ([970bb54](seerr-team/seerr@970bb54))
- *(requests)* Enforce pending and failed states on request routes ([#&#8203;3385](seerr-team/seerr#3385)) - ([9f6403e](seerr-team/seerr@9f6403e))
- *(scanner)* Confirm orphan candidates against the servers before declining ([#&#8203;3399](seerr-team/seerr#3399)) - ([34b28d0](seerr-team/seerr@34b28d0))
- *(server)* Respond instead of hanging on proxy route errors ([#&#8203;3501](seerr-team/seerr#3501)) - ([a53f49b](seerr-team/seerr@a53f49b))
- *(settings)* Mutate the query-string status key for modal immediately ([#&#8203;3432](seerr-team/seerr#3432)) - ([5af32cb](seerr-team/seerr@5af32cb))
- *(sonarr)* Apply configured series type to non-anime requests ([#&#8203;3329](seerr-team/seerr#3329)) - ([42bee2a](seerr-team/seerr@42bee2a))
- *(sonarr)* Decouple anime root folder routing from seriesType ([#&#8203;3328](seerr-team/seerr#3328)) - ([93c0b6a](seerr-team/seerr@93c0b6a))
- *(subscriber)* Keep issue comment lookups on the owning save's connection ([#&#8203;3536](seerr-team/seerr#3536)) - ([68e01b9](seerr-team/seerr@68e01b9))
- *(subscriber)* Keep request status updates on the owning save's connection ([#&#8203;3366](seerr-team/seerr#3366)) - ([059008c](seerr-team/seerr@059008c))
- *(tv)* Prevent phantom specials from blocking season request ([#&#8203;3351](seerr-team/seerr#3351)) - ([7997f75](seerr-team/seerr@7997f75))
- *(ui)* Stop the slideover backdrop flashing back on close ([#&#8203;3451](seerr-team/seerr#3451)) - ([df743f4](seerr-team/seerr@df743f4))
- *(ui)* Stop appear leaking onto the DOM in Modal and SlideOver ([#&#8203;3446](seerr-team/seerr#3446)) - ([da4b555](seerr-team/seerr@da4b555))
- *(ui)* Don't mark empty collections as available ([#&#8203;3431](seerr-team/seerr#3431)) - ([92f8404](seerr-team/seerr@92f8404))
- *(webpush)* Resolve push subscription bugs for multi-device and shared browsers ([#&#8203;3142](seerr-team/seerr#3142)) - ([59d5947](seerr-team/seerr@59d5947))
- Fix empty discordId in comment webhooks ([#&#8203;3467](seerr-team/seerr#3467)) - ([e73825b](seerr-team/seerr@e73825b))
- Prevent hideAvailable/hideBlocklisted from filtering person results ([#&#8203;3434](seerr-team/seerr#3434)) - ([0be53e6](seerr-team/seerr@0be53e6))
- Stop masking connection failures across media server sync and login ([#&#8203;3324](seerr-team/seerr#3324)) - ([4d17e08](seerr-team/seerr@4d17e08))
- Keep library settings when renamed on media server ([#&#8203;3323](seerr-team/seerr#3323)) - ([c9f2ac5](seerr-team/seerr@c9f2ac5))
- Changes the suggested url from plex's "hosted" app ([#&#8203;3250](seerr-team/seerr#3250)) - ([d3c070e](seerr-team/seerr@d3c070e))

##### 📖 Documentation

- *(discord)* Document the Thread ID notification setting. ([#&#8203;3481](seerr-team/seerr#3481)) - ([7afbb29](seerr-team/seerr@7afbb29))
- *(docker)* Add cap-drop and security-opt to docker command ([#&#8203;3472](seerr-team/seerr#3472)) - ([a4f5eaa](seerr-team/seerr@a4f5eaa))
- Clarify ai disclosure policy further ([#&#8203;3358](seerr-team/seerr#3358)) - ([dea5960](seerr-team/seerr@dea5960))

##### ⚡ Performance

- Bound tmdb cache & split scan lookups into their own tier ([#&#8203;3367](seerr-team/seerr#3367)) - ([59ad5f1](seerr-team/seerr@59ad5f1))

##### 🚜 Refactor

- *(avatarproxy)* Remove unused auth header from avatarproxy ([#&#8203;3503](seerr-team/seerr#3503)) - ([b211652](seerr-team/seerr@b211652))
- *(ui)* Use the Radio component instead of RadioGroup.Option ([#&#8203;3454](seerr-team/seerr#3454)) - ([46d5915](seerr-team/seerr@46d5915))
- *(ui)* Use headlessui flat named exports ([#&#8203;3453](seerr-team/seerr#3453)) - ([aa8e0de](seerr-team/seerr@aa8e0de))

##### 🧪 Testing

- *(cypress)* Stop dirty restartRequired flag cascading across specs ([#&#8203;3368](seerr-team/seerr#3368)) - ([39ff48c](seerr-team/seerr@39ff48c))
- Block outbound HTTP in unit tests ([#&#8203;3511](seerr-team/seerr#3511)) - ([abe2f3b](seerr-team/seerr@abe2f3b))
- Add scanner update rate override for testing ([#&#8203;3241](seerr-team/seerr#3241)) - ([7a76142](seerr-team/seerr@7a76142))

##### ⚙️ Miscellaneous Tasks

- *(actions)* Update github actions ([#&#8203;3478](seerr-team/seerr#3478)) - ([a3dbbd9](seerr-team/seerr@a3dbbd9))
- *(actions)* Update github actions (major) ([#&#8203;3471](seerr-team/seerr#3471)) - ([6bf3d04](seerr-team/seerr@6bf3d04))
- *(actions)* Update github actions ([#&#8203;3306](seerr-team/seerr#3306)) - ([5a5f059](seerr-team/seerr@5a5f059))
- *(duplicate-detector)* Switch embeddings to bge-small-en-v1.5 ([#&#8203;3541](seerr-team/seerr#3541)) - ([4fd0da0](seerr-team/seerr@4fd0da0))
- *(i18n)* Update translations from Weblate - ([68c5bc8](seerr-team/seerr@68c5bc8))
- *(i18n)* Update translations from Weblate - ([5f97227](seerr-team/seerr@5f97227))
- *(i18n)* Update translations from Weblate - ([5c04640](seerr-team/seerr@5c04640))
- *(i18n)* Update translations from Weblate - ([cc592e8](seerr-team/seerr@cc592e8))
- *(release)* Prepare v3.5.0 - ([e2f24cb](seerr-team/seerr@e2f24cb))
- *(release)* Prepare 3.5.0 release - ([cd0fb22](seerr-team/seerr@cd0fb22))
- Remove third party action dawidd6/action-download-artifact ([#&#8203;3480](seerr-team/seerr#3480)) - ([6fa7473](seerr-team/seerr@6fa7473))
- Fix release workflow verify attestation ([#&#8203;3337](seerr-team/seerr#3337)) - ([090c659](seerr-team/seerr@090c659))
- Exclude .pnpm-store from Docker build context ([#&#8203;3313](seerr-team/seerr#3313)) - ([bd491c7](seerr-team/seerr@bd491c7))

##### New Contributors ❤️

- [@&#8203;atilaszsz](https://github.com/atilaszsz) made their first contribution
- [@&#8203;aussierk](https://github.com/aussierk) made their first contribution
- [@&#8203;Xyerophyte](https://github.com/Xyerophyte) made their first contribution
- [@&#8203;Knat-Dev](https://github.com/Knat-Dev) made their first contribution
- [@&#8203;britsync07-prog](https://github.com/britsync07-prog) made their first contribution
- [@&#8203;MannXo](https://github.com/MannXo) made their first contribution
- [@&#8203;bartdelange](https://github.com/bartdelange) made their first contribution
- [@&#8203;Arul1998](https://github.com/Arul1998) made their first contribution
- [@&#8203;tuvokian](https://github.com/tuvokian) made their first contribution
- [@&#8203;peruzzof](https://github.com/peruzzof) made their first contribution
- [@&#8203;lichie567](https://github.com/lichie567) made their first contribution
- [@&#8203;samtheruby](https://github.com/samtheruby) made their first contribution

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/London)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTUuMTMiLCJ1cGRhdGVkSW5WZXIiOiI0NC4xMTUuMTMiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.hayden.moe/hayden/phoebe/pulls/793
doonga pushed a commit to greyrock-labs/home-ops that referenced this pull request Sep 28, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [seerr/seerr](https://github.com/seerr-team/seerr) | minor | `v3.4.1` → `v3.5.0` |

---

### Release Notes

<details>
<summary>seerr-team/seerr (seerr/seerr)</summary>

### [`v3.5.0`](https://github.com/seerr-team/seerr/releases/tag/v3.5.0)

[Compare Source](seerr-team/seerr@v3.4.1...v3.5.0)

> \[!WARNING]
> **Breaking change: Plex and Jellyfin library API endpoints ([#&#8203;3321](seerr-team/seerr#3321
>
> `GET /settings/plex/library` and `GET /settings/jellyfin/library` no longer accept the `sync` or `enable` query parameters, and reading libraries no longer changes their enabled state. If you have scripts, integrations, or third-party clients that use these to sync or toggle libraries, switch to:
>
> - Sync libraries: `POST /settings/plex/library/sync` and `POST /settings/jellyfin/library/sync`
> - Enable or disable a library: `PUT /settings/plex/library/{libraryId}` and `PUT /settings/jellyfin/library/{libraryId}`
>
> The web UI already uses the new endpoints, so only direct API consumers are affected. Because of that limited scope, this ships in a minor release rather than a major one.

##### 🚀 Features

- *(api)* Send a Seerr user agent on outbound requests ([#&#8203;3395](seerr-team/seerr#3395)) - ([a123d20](seerr-team/seerr@a123d20))
- *(notifications)* Add support for ntfy.sh tags ([#&#8203;3350](seerr-team/seerr#3350)) - ([92bad10](seerr-team/seerr@92bad10))
- *(notifications)* Add embed poster option for Gotify ([#&#8203;3332](seerr-team/seerr#3332)) - ([afb17aa](seerr-team/seerr@afb17aa))
- *(overriderules)* Apply override rules to advanced requests ([#&#8203;2164](seerr-team/seerr#2164)) - ([794743a](seerr-team/seerr@794743a))
- *(settings)* Hide already requested media ([#&#8203;1855](seerr-team/seerr#1855)) - ([6f5a177](seerr-team/seerr@6f5a177))
- *(users)* Add search box for user lookup by username or email ([#&#8203;2482](seerr-team/seerr#2482)) - ([aae8816](seerr-team/seerr@aae8816))
- Add a demo feature ([#&#8203;3017](seerr-team/seerr#3017)) - ([38581ca](seerr-team/seerr@38581ca))
- Add support for custom plex metadata provider guid scheme in scanner ([#&#8203;3316](seerr-team/seerr#3316)) - ([7baed83](seerr-team/seerr@7baed83))

##### 🐛 Bug Fixes

- *(api)* Stop library reads from resetting enabled flags ([#&#8203;3321](seerr-team/seerr#3321)) - ([985ddef](seerr-team/seerr@985ddef))
- *(auth)* Refresh avatar on Quick Connect login ([#&#8203;3504](seerr-team/seerr#3504)) - ([d4eeea8](seerr-team/seerr@d4eeea8))
- *(datasource)* Break import cycle mistyping postgres timestamps ([#&#8203;3449](seerr-team/seerr#3449)) - ([d7b08bd](seerr-team/seerr@d7b08bd))
- *(datasource)* Register entities and subscribers explicitly ([#&#8203;3375](seerr-team/seerr#3375)) - ([0f79ee6](seerr-team/seerr@0f79ee6))
- *(db)* Remap leftover Overseerr DELETED status after migration ([#&#8203;3510](seerr-team/seerr#3510)) - ([2bebae8](seerr-team/seerr@2bebae8))
- *(db)* Drop stale auth unique on sqlite push subscriptions ([#&#8203;3391](seerr-team/seerr#3391)) - ([5f4cb1e](seerr-team/seerr@5f4cb1e))
- *(discover)* Fix tv title sorting and validate sortBy per media type ([#&#8203;3305](seerr-team/seerr#3305)) - ([2759058](seerr-team/seerr@2759058))
- *(jellyfin-api)* Update Authorization headers for Jellyfin ([#&#8203;3502](seerr-team/seerr#3502)) - ([de57e7a](seerr-team/seerr@de57e7a))
- *(login)* Hide quick connect button for emby servers ([#&#8203;3369](seerr-team/seerr#3369)) - ([d103787](seerr-team/seerr@d103787))
- *(override-rules)* Keep values set by advanced requesters ([#&#8203;3539](seerr-team/seerr#3539)) - ([b919443](seerr-team/seerr@b919443))
- *(override-rules)* Match default \*arr server by id ([#&#8203;3428](seerr-team/seerr#3428)) - ([7fae95b](seerr-team/seerr@7fae95b))
- *(plex)* Limit concurrent watchlist metadata requests ([#&#8203;3251](seerr-team/seerr#3251)) - ([103976d](seerr-team/seerr@103976d))
- *(request)* Render anime notice alert in a div instead of a p ([#&#8203;3331](seerr-team/seerr#3331)) - ([1fd35f9](seerr-team/seerr@1fd35f9))
- *(requests)* Serialize requests for the same title ([#&#8203;3380](seerr-team/seerr#3380)) - ([cc6f5c7](seerr-team/seerr@cc6f5c7))
- *(requests)* Stop editing a request from re-requesting covered seasons ([#&#8203;3379](seerr-team/seerr#3379)) - ([10483e2](seerr-team/seerr@10483e2))
- *(requests)* Enforce the quota when editing a request ([#&#8203;3378](seerr-team/seerr#3378)) - ([8f0a977](seerr-team/seerr@8f0a977))
- *(requests)* Skip seasons with no episodes when requesting all seasons ([#&#8203;2698](seerr-team/seerr#2698)) - ([1dbf19b](seerr-team/seerr@1dbf19b))
- *(requests)* Scope download status to requested seasons on request cards ([#&#8203;3412](seerr-team/seerr#3412)) - ([c604bcc](seerr-team/seerr@c604bcc))
- *(requests)* Serialize request creation per user ([#&#8203;3377](seerr-team/seerr#3377)) - ([d7dc7bd](seerr-team/seerr@d7dc7bd))
- *(requests)* Stop editing a request from stealing another's season ([#&#8203;3376](seerr-team/seerr#3376)) - ([17fc4cc](seerr-team/seerr@17fc4cc))
- *(requests)* Reset orphaned season statuses when a request is deleted ([#&#8203;3279](seerr-team/seerr#3279)) - ([970bb54](seerr-team/seerr@970bb54))
- *(requests)* Enforce pending and failed states on request routes ([#&#8203;3385](seerr-team/seerr#3385)) - ([9f6403e](seerr-team/seerr@9f6403e))
- *(scanner)* Confirm orphan candidates against the servers before declining ([#&#8203;3399](seerr-team/seerr#3399)) - ([34b28d0](seerr-team/seerr@34b28d0))
- *(server)* Respond instead of hanging on proxy route errors ([#&#8203;3501](seerr-team/seerr#3501)) - ([a53f49b](seerr-team/seerr@a53f49b))
- *(settings)* Mutate the query-string status key for modal immediately ([#&#8203;3432](seerr-team/seerr#3432)) - ([5af32cb](seerr-team/seerr@5af32cb))
- *(sonarr)* Apply configured series type to non-anime requests ([#&#8203;3329](seerr-team/seerr#3329)) - ([42bee2a](seerr-team/seerr@42bee2a))
- *(sonarr)* Decouple anime root folder routing from seriesType ([#&#8203;3328](seerr-team/seerr#3328)) - ([93c0b6a](seerr-team/seerr@93c0b6a))
- *(subscriber)* Keep issue comment lookups on the owning save's connection ([#&#8203;3536](seerr-team/seerr#3536)) - ([68e01b9](seerr-team/seerr@68e01b9))
- *(subscriber)* Keep request status updates on the owning save's connection ([#&#8203;3366](seerr-team/seerr#3366)) - ([059008c](seerr-team/seerr@059008c))
- *(tv)* Prevent phantom specials from blocking season request ([#&#8203;3351](seerr-team/seerr#3351)) - ([7997f75](seerr-team/seerr@7997f75))
- *(ui)* Stop the slideover backdrop flashing back on close ([#&#8203;3451](seerr-team/seerr#3451)) - ([df743f4](seerr-team/seerr@df743f4))
- *(ui)* Stop appear leaking onto the DOM in Modal and SlideOver ([#&#8203;3446](seerr-team/seerr#3446)) - ([da4b555](seerr-team/seerr@da4b555))
- *(ui)* Don't mark empty collections as available ([#&#8203;3431](seerr-team/seerr#3431)) - ([92f8404](seerr-team/seerr@92f8404))
- *(webpush)* Resolve push subscription bugs for multi-device and shared browsers ([#&#8203;3142](seerr-team/seerr#3142)) - ([59d5947](seerr-team/seerr@59d5947))
- Fix empty discordId in comment webhooks ([#&#8203;3467](seerr-team/seerr#3467)) - ([e73825b](seerr-team/seerr@e73825b))
- Prevent hideAvailable/hideBlocklisted from filtering person results ([#&#8203;3434](seerr-team/seerr#3434)) - ([0be53e6](seerr-team/seerr@0be53e6))
- Stop masking connection failures across media server sync and login ([#&#8203;3324](seerr-team/seerr#3324)) - ([4d17e08](seerr-team/seerr@4d17e08))
- Keep library settings when renamed on media server ([#&#8203;3323](seerr-team/seerr#3323)) - ([c9f2ac5](seerr-team/seerr@c9f2ac5))
- Changes the suggested url from plex's "hosted" app ([#&#8203;3250](seerr-team/seerr#3250)) - ([d3c070e](seerr-team/seerr@d3c070e))

##### 📖 Documentation

- *(discord)* Document the Thread ID notification setting. ([#&#8203;3481](seerr-team/seerr#3481)) - ([7afbb29](seerr-team/seerr@7afbb29))
- *(docker)* Add cap-drop and security-opt to docker command ([#&#8203;3472](seerr-team/seerr#3472)) - ([a4f5eaa](seerr-team/seerr@a4f5eaa))
- Clarify ai disclosure policy further ([#&#8203;3358](seerr-team/seerr#3358)) - ([dea5960](seerr-team/seerr@dea5960))

##### ⚡ Performance

- Bound tmdb cache & split scan lookups into their own tier ([#&#8203;3367](seerr-team/seerr#3367)) - ([59ad5f1](seerr-team/seerr@59ad5f1))

##### 🚜 Refactor

- *(avatarproxy)* Remove unused auth header from avatarproxy ([#&#8203;3503](seerr-team/seerr#3503)) - ([b211652](seerr-team/seerr@b211652))
- *(ui)* Use the Radio component instead of RadioGroup.Option ([#&#8203;3454](seerr-team/seerr#3454)) - ([46d5915](seerr-team/seerr@46d5915))
- *(ui)* Use headlessui flat named exports ([#&#8203;3453](seerr-team/seerr#3453)) - ([aa8e0de](seerr-team/seerr@aa8e0de))

##### 🧪 Testing

- *(cypress)* Stop dirty restartRequired flag cascading across specs ([#&#8203;3368](seerr-team/seerr#3368)) - ([39ff48c](seerr-team/seerr@39ff48c))
- Block outbound HTTP in unit tests ([#&#8203;3511](seerr-team/seerr#3511)) - ([abe2f3b](seerr-team/seerr@abe2f3b))
- Add scanner update rate override for testing ([#&#8203;3241](seerr-team/seerr#3241)) - ([7a76142](seerr-team/seerr@7a76142))

##### ⚙️ Miscellaneous Tasks

- *(actions)* Update github actions ([#&#8203;3478](seerr-team/seerr#3478)) - ([a3dbbd9](seerr-team/seerr@a3dbbd9))
- *(actions)* Update github actions (major) ([#&#8203;3471](seerr-team/seerr#3471)) - ([6bf3d04](seerr-team/seerr@6bf3d04))
- *(actions)* Update github actions ([#&#8203;3306](seerr-team/seerr#3306)) - ([5a5f059](seerr-team/seerr@5a5f059))
- *(duplicate-detector)* Switch embeddings to bge-small-en-v1.5 ([#&#8203;3541](seerr-team/seerr#3541)) - ([4fd0da0](seerr-team/seerr@4fd0da0))
- *(i18n)* Update translations from Weblate - ([68c5bc8](seerr-team/seerr@68c5bc8))
- *(i18n)* Update translations from Weblate - ([5f97227](seerr-team/seerr@5f97227))
- *(i18n)* Update translations from Weblate - ([5c04640](seerr-team/seerr@5c04640))
- *(i18n)* Update translations from Weblate - ([cc592e8](seerr-team/seerr@cc592e8))
- *(release)* Prepare v3.5.0 - ([e2f24cb](seerr-team/seerr@e2f24cb))
- *(release)* Prepare 3.5.0 release - ([cd0fb22](seerr-team/seerr@cd0fb22))
- Remove third party action dawidd6/action-download-artifact ([#&#8203;3480](seerr-team/seerr#3480)) - ([6fa7473](seerr-team/seerr@6fa7473))
- Fix release workflow verify attestation ([#&#8203;3337](seerr-team/seerr#3337)) - ([090c659](seerr-team/seerr@090c659))
- Exclude .pnpm-store from Docker build context ([#&#8203;3313](seerr-team/seerr#3313)) - ([bd491c7](seerr-team/seerr@bd491c7))

##### New Contributors ❤️

- [@&#8203;atilaszsz](https://github.com/atilaszsz) made their first contribution
- [@&#8203;aussierk](https://github.com/aussierk) made their first contribution
- [@&#8203;Xyerophyte](https://github.com/Xyerophyte) made their first contribution
- [@&#8203;Knat-Dev](https://github.com/Knat-Dev) made their first contribution
- [@&#8203;britsync07-prog](https://github.com/britsync07-prog) made their first contribution
- [@&#8203;MannXo](https://github.com/MannXo) made their first contribution
- [@&#8203;bartdelange](https://github.com/bartdelange) made their first contribution
- [@&#8203;Arul1998](https://github.com/Arul1998) made their first contribution
- [@&#8203;tuvokian](https://github.com/tuvokian) made their first contribution
- [@&#8203;peruzzof](https://github.com/peruzzof) made their first contribution
- [@&#8203;lichie567](https://github.com/lichie567) made their first contribution
- [@&#8203;samtheruby](https://github.com/samtheruby) made their first contribution

</details>

---

### Configuration

📅 **Schedule**: (in timezone America/New_York)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDUuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjExNS4xMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvY29udGFpbmVyIiwidHlwZS9taW5vciJdfQ==-->

Reviewed-on: https://git.greyrock.io/todd/home-ops/pulls/294
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Sep 29, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [seerr/seerr](https://github.com/seerr-team/seerr) | minor | `v3.4.1` → `v3.5.0` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/567) for more information.

---

### Release Notes

<details>
<summary>seerr-team/seerr (seerr/seerr)</summary>

### [`v3.5.0`](https://github.com/seerr-team/seerr/releases/tag/v3.5.0)

[Compare Source](seerr-team/seerr@v3.4.1...v3.5.0)

> \[!WARNING]
> **Breaking change: Plex and Jellyfin library API endpoints ([#&#8203;3321](seerr-team/seerr#3321
>
> `GET /settings/plex/library` and `GET /settings/jellyfin/library` no longer accept the `sync` or `enable` query parameters, and reading libraries no longer changes their enabled state. If you have scripts, integrations, or third-party clients that use these to sync or toggle libraries, switch to:
>
> - Sync libraries: `POST /settings/plex/library/sync` and `POST /settings/jellyfin/library/sync`
> - Enable or disable a library: `PUT /settings/plex/library/{libraryId}` and `PUT /settings/jellyfin/library/{libraryId}`
>
> The web UI already uses the new endpoints, so only direct API consumers are affected. Because of that limited scope, this ships in a minor release rather than a major one.

##### 🚀 Features

- *(api)* Send a Seerr user agent on outbound requests ([#&#8203;3395](seerr-team/seerr#3395)) - ([a123d20](seerr-team/seerr@a123d20))
- *(notifications)* Add support for ntfy.sh tags ([#&#8203;3350](seerr-team/seerr#3350)) - ([92bad10](seerr-team/seerr@92bad10))
- *(notifications)* Add embed poster option for Gotify ([#&#8203;3332](seerr-team/seerr#3332)) - ([afb17aa](seerr-team/seerr@afb17aa))
- *(overriderules)* Apply override rules to advanced requests ([#&#8203;2164](seerr-team/seerr#2164)) - ([794743a](seerr-team/seerr@794743a))
- *(settings)* Hide already requested media ([#&#8203;1855](seerr-team/seerr#1855)) - ([6f5a177](seerr-team/seerr@6f5a177))
- *(users)* Add search box for user lookup by username or email ([#&#8203;2482](seerr-team/seerr#2482)) - ([aae8816](seerr-team/seerr@aae8816))
- Add a demo feature ([#&#8203;3017](seerr-team/seerr#3017)) - ([38581ca](seerr-team/seerr@38581ca))
- Add support for custom plex metadata provider guid scheme in scanner ([#&#8203;3316](seerr-team/seerr#3316)) - ([7baed83](seerr-team/seerr@7baed83))

##### 🐛 Bug Fixes

- *(api)* Stop library reads from resetting enabled flags ([#&#8203;3321](seerr-team/seerr#3321)) - ([985ddef](seerr-team/seerr@985ddef))
- *(auth)* Refresh avatar on Quick Connect login ([#&#8203;3504](seerr-team/seerr#3504)) - ([d4eeea8](seerr-team/seerr@d4eeea8))
- *(datasource)* Break import cycle mistyping postgres timestamps ([#&#8203;3449](seerr-team/seerr#3449)) - ([d7b08bd](seerr-team/seerr@d7b08bd))
- *(datasource)* Register entities and subscribers explicitly ([#&#8203;3375](seerr-team/seerr#3375)) - ([0f79ee6](seerr-team/seerr@0f79ee6))
- *(db)* Remap leftover Overseerr DELETED status after migration ([#&#8203;3510](seerr-team/seerr#3510)) - ([2bebae8](seerr-team/seerr@2bebae8))
- *(db)* Drop stale auth unique on sqlite push subscriptions ([#&#8203;3391](seerr-team/seerr#3391)) - ([5f4cb1e](seerr-team/seerr@5f4cb1e))
- *(discover)* Fix tv title sorting and validate sortBy per media type ([#&#8203;3305](seerr-team/seerr#3305)) - ([2759058](seerr-team/seerr@2759058))
- *(jellyfin-api)* Update Authorization headers for Jellyfin ([#&#8203;3502](seerr-team/seerr#3502)) - ([de57e7a](seerr-team/seerr@de57e7a))
- *(login)* Hide quick connect button for emby servers ([#&#8203;3369](seerr-team/seerr#3369)) - ([d103787](seerr-team/seerr@d103787))
- *(override-rules)* Keep values set by advanced requesters ([#&#8203;3539](seerr-team/seerr#3539)) - ([b919443](seerr-team/seerr@b919443))
- *(override-rules)* Match default \*arr server by id ([#&#8203;3428](seerr-team/seerr#3428)) - ([7fae95b](seerr-team/seerr@7fae95b))
- *(plex)* Limit concurrent watchlist metadata requests ([#&#8203;3251](seerr-team/seerr#3251)) - ([103976d](seerr-team/seerr@103976d))
- *(request)* Render anime notice alert in a div instead of a p ([#&#8203;3331](seerr-team/seerr#3331)) - ([1fd35f9](seerr-team/seerr@1fd35f9))
- *(requests)* Serialize requests for the same title ([#&#8203;3380](seerr-team/seerr#3380)) - ([cc6f5c7](seerr-team/seerr@cc6f5c7))
- *(requests)* Stop editing a request from re-requesting covered seasons ([#&#8203;3379](seerr-team/seerr#3379)) - ([10483e2](seerr-team/seerr@10483e2))
- *(requests)* Enforce the quota when editing a request ([#&#8203;3378](seerr-team/seerr#3378)) - ([8f0a977](seerr-team/seerr@8f0a977))
- *(requests)* Skip seasons with no episodes when requesting all seasons ([#&#8203;2698](seerr-team/seerr#2698)) - ([1dbf19b](seerr-team/seerr@1dbf19b))
- *(requests)* Scope download status to requested seasons on request cards ([#&#8203;3412](seerr-team/seerr#3412)) - ([c604bcc](seerr-team/seerr@c604bcc))
- *(requests)* Serialize request creation per user ([#&#8203;3377](seerr-team/seerr#3377)) - ([d7dc7bd](seerr-team/seerr@d7dc7bd))
- *(requests)* Stop editing a request from stealing another's season ([#&#8203;3376](seerr-team/seerr#3376)) - ([17fc4cc](seerr-team/seerr@17fc4cc))
- *(requests)* Reset orphaned season statuses when a request is deleted ([#&#8203;3279](seerr-team/seerr#3279)) - ([970bb54](seerr-team/seerr@970bb54))
- *(requests)* Enforce pending and failed states on request routes ([#&#8203;3385](seerr-team/seerr#3385)) - ([9f6403e](seerr-team/seerr@9f6403e))
- *(scanner)* Confirm orphan candidates against the servers before declining ([#&#8203;3399](seerr-team/seerr#3399)) - ([34b28d0](seerr-team/seerr@34b28d0))
- *(server)* Respond instead of hanging on proxy route errors ([#&#8203;3501](seerr-team/seerr#3501)) - ([a53f49b](seerr-team/seerr@a53f49b))
- *(settings)* Mutate the query-string status key for modal immediately ([#&#8203;3432](seerr-team/seerr#3432)) - ([5af32cb](seerr-team/seerr@5af32cb))
- *(sonarr)* Apply configured series type to non-anime requests ([#&#8203;3329](seerr-team/seerr#3329)) - ([42bee2a](seerr-team/seerr@42bee2a))
- *(sonarr)* Decouple anime root folder routing from seriesType ([#&#8203;3328](seerr-team/seerr#3328)) - ([93c0b6a](seerr-team/seerr@93c0b6a))
- *(subscriber)* Keep issue comment lookups on the owning save's connection ([#&#8203;3536](seerr-team/seerr#3536)) - ([68e01b9](seerr-team/seerr@68e01b9))
- *(subscriber)* Keep request status updates on the owning save's connection ([#&#8203;3366](seerr-team/seerr#3366)) - ([059008c](seerr-team/seerr@059008c))
- *(tv)* Prevent phantom specials from blocking season request ([#&#8203;3351](seerr-team/seerr#3351)) - ([7997f75](seerr-team/seerr@7997f75))
- *(ui)* Stop the slideover backdrop flashing back on close ([#&#8203;3451](seerr-team/seerr#3451)) - ([df743f4](seerr-team/seerr@df743f4))
- *(ui)* Stop appear leaking onto the DOM in Modal and SlideOver ([#&#8203;3446](seerr-team/seerr#3446)) - ([da4b555](seerr-team/seerr@da4b555))
- *(ui)* Don't mark empty collections as available ([#&#8203;3431](seerr-team/seerr#3431)) - ([92f8404](seerr-team/seerr@92f8404))
- *(webpush)* Resolve push subscription bugs for multi-device and shared browsers ([#&#8203;3142](seerr-team/seerr#3142)) - ([59d5947](seerr-team/seerr@59d5947))
- Fix empty discordId in comment webhooks ([#&#8203;3467](seerr-team/seerr#3467)) - ([e73825b](seerr-team/seerr@e73825b))
- Prevent hideAvailable/hideBlocklisted from filtering person results ([#&#8203;3434](seerr-team/seerr#3434)) - ([0be53e6](seerr-team/seerr@0be53e6))
- Stop masking connection failures across media server sync and login ([#&#8203;3324](seerr-team/seerr#3324)) - ([4d17e08](seerr-team/seerr@4d17e08))
- Keep library settings when renamed on media server ([#&#8203;3323](seerr-team/seerr#3323)) - ([c9f2ac5](seerr-team/seerr@c9f2ac5))
- Changes the suggested url from plex's "hosted" app ([#&#8203;3250](seerr-team/seerr#3250)) - ([d3c070e](seerr-team/seerr@d3c070e))

##### 📖 Documentation

- *(discord)* Document the Thread ID notification setting. ([#&#8203;3481](seerr-team/seerr#3481)) - ([7afbb29](seerr-team/seerr@7afbb29))
- *(docker)* Add cap-drop and security-opt to docker command ([#&#8203;3472](seerr-team/seerr#3472)) - ([a4f5eaa](seerr-team/seerr@a4f5eaa))
- Clarify ai disclosure policy further ([#&#8203;3358](seerr-team/seerr#3358)) - ([dea5960](seerr-team/seerr@dea5960))

##### ⚡ Performance

- Bound tmdb cache & split scan lookups into their own tier ([#&#8203;3367](seerr-team/seerr#3367)) - ([59ad5f1](seerr-team/seerr@59ad5f1))

##### 🚜 Refactor

- *(avatarproxy)* Remove unused auth header from avatarproxy ([#&#8203;3503](seerr-team/seerr#3503)) - ([b211652](seerr-team/seerr@b211652))
- *(ui)* Use the Radio component instead of RadioGroup.Option ([#&#8203;3454](seerr-team/seerr#3454)) - ([46d5915](seerr-team/seerr@46d5915))
- *(ui)* Use headlessui flat named exports ([#&#8203;3453](seerr-team/seerr#3453)) - ([aa8e0de](seerr-team/seerr@aa8e0de))

##### 🧪 Testing

- *(cypress)* Stop dirty restartRequired flag cascading across specs ([#&#8203;3368](seerr-team/seerr#3368)) - ([39ff48c](seerr-team/seerr@39ff48c))
- Block outbound HTTP in unit tests ([#&#8203;3511](seerr-team/seerr#3511)) - ([abe2f3b](seerr-team/seerr@abe2f3b))
- Add scanner update rate override for testing ([#&#8203;3241](seerr-team/seerr#3241)) - ([7a76142](seerr-team/seerr@7a76142))

##### ⚙️ Miscellaneous Tasks

- *(actions)* Update github actions ([#&#8203;3478](seerr-team/seerr#3478)) - ([a3dbbd9](seerr-team/seerr@a3dbbd9))
- *(actions)* Update github actions (major) ([#&#8203;3471](seerr-team/seerr#3471)) - ([6bf3d04](seerr-team/seerr@6bf3d04))
- *(actions)* Update github actions ([#&#8203;3306](seerr-team/seerr#3306)) - ([5a5f059](seerr-team/seerr@5a5f059))
- *(duplicate-detector)* Switch embeddings to bge-small-en-v1.5 ([#&#8203;3541](seerr-team/seerr#3541)) - ([4fd0da0](seerr-team/seerr@4fd0da0))
- *(i18n)* Update translations from Weblate - ([68c5bc8](seerr-team/seerr@68c5bc8))
- *(i18n)* Update translations from Weblate - ([5f97227](seerr-team/seerr@5f97227))
- *(i18n)* Update translations from Weblate - ([5c04640](seerr-team/seerr@5c04640))
- *(i18n)* Update translations from Weblate - ([cc592e8](seerr-team/seerr@cc592e8))
- *(release)* Prepare v3.5.0 - ([e2f24cb](seerr-team/seerr@e2f24cb))
- *(release)* Prepare 3.5.0 release - ([cd0fb22](seerr-team/seerr@cd0fb22))
- Remove third party action dawidd6/action-download-artifact ([#&#8203;3480](seerr-team/seerr#3480)) - ([6fa7473](seerr-team/seerr@6fa7473))
- Fix release workflow verify attestation ([#&#8203;3337](seerr-team/seerr#3337)) - ([090c659](seerr-team/seerr@090c659))
- Exclude .pnpm-store from Docker build context ([#&#8203;3313](seerr-team/seerr#3313)) - ([bd491c7](seerr-team/seerr@bd491c7))

##### New Contributors ❤️

- [@&#8203;atilaszsz](https://github.com/atilaszsz) made their first contribution
- [@&#8203;aussierk](https://github.com/aussierk) made their first contribution
- [@&#8203;Xyerophyte](https://github.com/Xyerophyte) made their first contribution
- [@&#8203;Knat-Dev](https://github.com/Knat-Dev) made their first contribution
- [@&#8203;britsync07-prog](https://github.com/britsync07-prog) made their first contribution
- [@&#8203;MannXo](https://github.com/MannXo) made their first contribution
- [@&#8203;bartdelange](https://github.com/bartdelange) made their first contribution
- [@&#8203;Arul1998](https://github.com/Arul1998) made their first contribution
- [@&#8203;tuvokian](https://github.com/tuvokian) made their first contribution
- [@&#8203;peruzzof](https://github.com/peruzzof) made their first contribution
- [@&#8203;lichie567](https://github.com/lichie567) made their first contribution
- [@&#8203;samtheruby](https://github.com/samtheruby) made their first contribution

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Paris)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTUuMTMiLCJ1cGRhdGVkSW5WZXIiOiI0NC4xMTUuMTMiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/2215
mike548141 added a commit to mike548141/seerr that referenced this pull request Oct 16, 2026
The scanner reads shows through getTvShowForScan since seerr-team#3367, but the
Plex scanner tests only mocked getTvShow. Four of the five episode tests
reached the live TMDB API and got its seasons instead of the fixture's,
so the season they assert on was never created. The Sonarr and Jellyfin
tests already mock both.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
danbryan added a commit to bryanlabs/seerr that referenced this pull request Oct 22, 2026
Backport of upstream 59ad5f1 (seerr-team#3367). The fork's bookshelf and
hardcover caches get key bounds too.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Library scans blow out the V8 heap and kill the process (still happens at mem_limit 1g)

5 participants