Skip to content

feat(ui): add option to display 4K availability on title cards - #3404

Closed
supatuck wants to merge 1 commit into
seerr-team:developfrom
supatuck:feat/4k-availability-on-title-cards
Closed

feat(ui): add option to display 4K availability on title cards#3404
supatuck wants to merge 1 commit into
seerr-team:developfrom
supatuck:feat/4k-availability-on-title-cards

Conversation

@supatuck

@supatuck supatuck commented Aug 16, 2026

Copy link
Copy Markdown

Description

Adds an opt-in setting under Settings -> General: "Display 4K Availability on Title Cards" (merge4kAvailability, default off).

When enabled, a title whose standard status is Unknown or Deleted but whose 4K status is Available or Partially Available shows the availability indicator on discover, search, and list cards, with the 4K tag on the badge. The merge only applies to users who can already see 4K status: 4K must be enabled for that media type, and the user needs Manage Requests or a matching 4K request permission. Detail pages are unchanged, as they already render a separate 4K badge.

Motivation: on servers where HD copies are replaced by 4K upgrades over time, owned titles read as unowned at a glance on cards. Related to #367 (the inverse complaint, which is why this is opt-in and permission gated) and #1744.

AI disclosure: this change was developed with substantial AI assistance (the implementation and this text were AI drafted). I reviewed it and have been running it on my own Jellyfin based instance.

How Has This Been Tested?

Built the Docker image from this branch and ran it against a live library (about 850 items, mixed HD and 4K, separate standard and 4K Radarr and Sonarr instances). Verified that 4K-only titles show the availability badge with the 4K tag when the setting is on and the user has 4K permissions, that behavior is unchanged with the setting off, and that the setting persists. The production build and type checks pass.

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.

Summary by CodeRabbit

  • New Features
    • Added a setting to merge 4K availability into the standard media status displayed throughout the app.
    • Added 4K availability indicators to movie and TV title cards across lists, collections, sliders, and person details.
    • Added explanatory labels and tooltips for the new setting and 4K status display.
  • Settings
    • The new option is available in main settings, defaults to disabled, and is saved with other preferences.

Adds an opt-in main setting, merge4kAvailability, off by default. When
enabled, a title whose standard version is unknown or deleted but whose
4K version is available or partially available shows the availability
check on discover cards, with the 4K tag on the badge. The merge only
applies for users who could see the 4K status anyway: it requires 4K to
be enabled for that media type and the user to hold a matching 4K
request permission or Manage Requests.

Detail pages already show a separate 4K badge and are unchanged. Users
who keep the setting off see no behavior change.

Motivation: on libraries where HD copies are routinely replaced by 4K
upgrades, cards for owned titles show no availability at a glance.
Related discussions: seerr-team#367, seerr-team#1744
@supatuck
supatuck requested a review from a team as a code owner August 16, 2026 19:32
@coderabbitai

coderabbitai Bot commented Aug 16, 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: 1e3ffba0-34b4-464f-9ce6-dc54857006a1

📥 Commits

Reviewing files that changed from the base of the PR and between 4d17e08 and 8a23110.

📒 Files selected for processing (13)
  • seerr-api.yml
  • server/interfaces/api/settingsInterfaces.ts
  • server/lib/settings/index.ts
  • src/components/CollectionDetails/index.tsx
  • src/components/Common/ListView/index.tsx
  • src/components/MediaSlider/index.tsx
  • src/components/PersonDetails/index.tsx
  • src/components/Settings/SettingsMain/index.tsx
  • src/components/TitleCard/TmdbTitleCard.tsx
  • src/components/TitleCard/index.tsx
  • src/context/SettingsContext.tsx
  • src/i18n/locale/en.json
  • src/pages/_app.tsx

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


📝 Walkthrough

Walkthrough

The PR adds the merge4kAvailability setting across the API, server, frontend defaults, and settings form. Title-card components now receive 4K media status and can display it when configuration, permissions, and status conditions match.

Changes

4K availability merging

Layer / File(s) Summary
4K setting contract and propagation
seerr-api.yml, server/interfaces/api/settingsInterfaces.ts, server/lib/settings/index.ts, src/context/SettingsContext.tsx, src/pages/_app.tsx
The settings schema, interfaces, defaults, public settings output, and frontend fallback values include merge4kAvailability.
4K availability setting form
src/components/Settings/SettingsMain/index.tsx, src/i18n/locale/en.json
The settings form initializes, submits, and toggles merge4kAvailability. English labels and tooltip text describe the setting.
4K status title-card display
src/components/TitleCard/index.tsx, src/components/TitleCard/TmdbTitleCard.tsx, src/components/CollectionDetails/index.tsx, src/components/Common/ListView/index.tsx, src/components/MediaSlider/index.tsx, src/components/PersonDetails/index.tsx
Title-card callers pass mediaInfo.status4k. TitleCard selects the 4K status when the setting, permissions, and availability conditions permit it, then marks the badge as 4K.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 8a231

This opt-in change adds 4K availability indicators to title cards without altering existing behavior when disabled; no actionable merge-blocking risk remains after normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant SettingsContext
  participant TitleCard
  participant StatusBadgeMini
  SettingsContext->>TitleCard: provide merge4kAvailability
  TitleCard->>TitleCard: evaluate status4k, regular status, and permissions
  TitleCard->>StatusBadgeMini: pass computed status and is4k
Loading

Possibly related PRs

  • seerr-team/seerr#3137: Both changes propagate a new main setting through the settings contracts, defaults, context, app fallback, and settings form.
  • seerr-team/seerr#3216: Both changes modify MainSettings and server/lib/settings/index.ts.
  • seerr-team/seerr#3361: Both changes add an availability-related setting across settings contracts, defaults, frontend state, form, and localization.

Suggested labels: blocked:template

Suggested reviewers: gauthier-th, fallenbagel

Poem

A rabbit checks the cards at night,
4K status glows just right.
Settings bloom, permissions gleam,
Badges hop into the stream.
“Merge the view!” the rabbit sings.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the new option to display 4K availability on title cards.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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.

@fallenbagel

fallenbagel commented Aug 17, 2026

Copy link
Copy Markdown
Member

Closing this as duplicate work that ignores an active design discussion.

#1744 is about backend availability detection for setups running separate 4K and non-4K Radarr/Sonarr instances, specifically the scanner conflating a 4K-deleted title with available when no non-4K file exists. It already has an open fix attached to it, #2227 (opened by me). It has nothing to do with a frontend toggle for merging 4K status onto title cards. That link makes absolutely zero sense here.

In addition, this overlaps with #3060, which already adds 4K availability display on title cards, a separate 4K request button, and detail page badge changes, which is the same area this PR is touching. That PR has been open since May. I reviewed it myself and asked the author to convert it to draft and open a design discussion first because we wanted to agree on the design that aligns with the design language intended for Seerr by the team before more code was written. That discussion is #3158. It has been running for two months with input from multiple users on what the quality and availability model should actually look like.

You also didn't check the existing PR or design discussion before opening this. The disclosure says the implementation and description were AI drafted and reviewed by you, but reviewing your own diff doesn't tell you whether someone is already working on the same feature. Checking open PRs and discussions before starting implementation is a basic five-minute step, not some deep review process.

Second, the disclosure itself is a problem independent of the duplication itself. It says the implementation and the PR description were AI drafted and that you reviewed it. Per our AI Assistance Notice, that is AI-driven development, not AI-assisted, and disclosing it plainly does not move it into the other category. Reviewing and running AI-drafted output on your own instance is not the same as writing and understanding it. The missed duplicate and irrelevant issue link are exactly the sort of things someone doing their own research before starting would have caught. You don't catch that by reviewing the diff after the fact.

Closing this on both counts. If you want to contribute to this feature area, #3158 is where the design is being discussed and #3060 is the PR carrying the implementation forward. Going forward, disclosed AI-driven implementations get closed the same as undisclosed ones. Disclosure only affects how much scrutiny we apply, not the outcome.

@fallenbagel fallenbagel added the duplicate This issue or pull request already exists label Aug 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

duplicate This issue or pull request already exists

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants