diff --git a/docs/using-jellyseerr/settings/general.md b/docs/using-jellyseerr/settings/general.md
index e006a43fd..6cda0e2e9 100644
--- a/docs/using-jellyseerr/settings/general.md
+++ b/docs/using-jellyseerr/settings/general.md
@@ -78,6 +78,12 @@ Available media will still appear in search results, however, so it is possible
This setting is **disabled** by default.
+## Hide Blacklisted Items
+
+When enabled, media that has been blacklisted will not appear on the "Discover" home page, for all administrators. This can be useful to hide content that you don't want to see, such as content with specific tags or content that has been manually blacklisted when you have the "Manage Blacklist" permission.
+
+This setting is **disabled** by default.
+
## Allow Partial Series Requests
When enabled, users will be able to submit requests for specific seasons of TV series. If disabled, users will only be able to submit requests for all unavailable seasons.
diff --git a/server/interfaces/api/settingsInterfaces.ts b/server/interfaces/api/settingsInterfaces.ts
index 0e97c2bf4..e9c832a85 100644
--- a/server/interfaces/api/settingsInterfaces.ts
+++ b/server/interfaces/api/settingsInterfaces.ts
@@ -29,6 +29,7 @@ export interface PublicSettingsResponse {
applicationTitle: string;
applicationUrl: string;
hideAvailable: boolean;
+ hideBlacklisted: boolean;
localLogin: boolean;
mediaServerLogin: boolean;
movie4kEnabled: boolean;
diff --git a/server/lib/settings/index.ts b/server/lib/settings/index.ts
index 2f9b27fa5..9fa011af4 100644
--- a/server/lib/settings/index.ts
+++ b/server/lib/settings/index.ts
@@ -122,6 +122,7 @@ export interface MainSettings {
tv: Quota;
};
hideAvailable: boolean;
+ hideBlacklisted: boolean;
localLogin: boolean;
mediaServerLogin: boolean;
newPlexLogin: boolean;
@@ -150,6 +151,7 @@ interface FullPublicSettings extends PublicSettings {
applicationTitle: string;
applicationUrl: string;
hideAvailable: boolean;
+ hideBlacklisted: boolean;
localLogin: boolean;
mediaServerLogin: boolean;
movie4kEnabled: boolean;
@@ -360,6 +362,7 @@ class Settings {
tv: {},
},
hideAvailable: false,
+ hideBlacklisted: false,
localLogin: true,
mediaServerLogin: true,
newPlexLogin: true,
@@ -618,6 +621,7 @@ class Settings {
applicationTitle: this.data.main.applicationTitle,
applicationUrl: this.data.main.applicationUrl,
hideAvailable: this.data.main.hideAvailable,
+ hideBlacklisted: this.data.main.hideBlacklisted,
localLogin: this.data.main.localLogin,
mediaServerLogin: this.data.main.mediaServerLogin,
jellyfinExternalHost: this.data.jellyfin.externalHostname,
diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx
index 9449ab503..a0fae3864 100644
--- a/src/components/Search/index.tsx
+++ b/src/components/Search/index.tsx
@@ -34,7 +34,7 @@ const Search = () => {
{
query: router.query.query,
},
- { hideAvailable: false }
+ { hideAvailable: false, hideBlacklisted: false }
);
if (error) {
diff --git a/src/components/Settings/SettingsMain/index.tsx b/src/components/Settings/SettingsMain/index.tsx
index e8c19d1bc..41673813f 100644
--- a/src/components/Settings/SettingsMain/index.tsx
+++ b/src/components/Settings/SettingsMain/index.tsx
@@ -45,11 +45,16 @@ const messages = defineMessages('components.Settings.SettingsMain', {
'The "Process Blacklisted Tags" job will blacklist this many pages into each sort. Larger numbers will create a more accurate blacklist, but use more space.',
streamingRegion: 'Streaming Region',
streamingRegionTip: 'Show streaming sites by regional availability',
+ hideBlacklisted: 'Hide Blacklisted Items',
+ hideBlacklistedTip:
+ 'Hide blacklisted items from discover pages for all users with the "Manage Blacklist" permission',
toastApiKeySuccess: 'New API key generated successfully!',
toastApiKeyFailure: 'Something went wrong while generating a new API key.',
toastSettingsSuccess: 'Settings saved successfully!',
toastSettingsFailure: 'Something went wrong while saving settings.',
hideAvailable: 'Hide Available Media',
+ hideAvailableTip:
+ 'Hide available media from the discover pages but not search results',
cacheImages: 'Enable Image Caching',
cacheImagesTip:
'Cache externally sourced images (requires a significant amount of disk space)',
@@ -145,6 +150,7 @@ const SettingsMain = () => {
applicationTitle: data?.applicationTitle,
applicationUrl: data?.applicationUrl,
hideAvailable: data?.hideAvailable,
+ hideBlacklisted: data?.hideBlacklisted,
locale: data?.locale ?? 'en',
discoverRegion: data?.discoverRegion,
originalLanguage: data?.originalLanguage,
@@ -163,6 +169,7 @@ const SettingsMain = () => {
applicationTitle: values.applicationTitle,
applicationUrl: values.applicationUrl,
hideAvailable: values.hideAvailable,
+ hideBlacklisted: values.hideBlacklisted,
locale: values.locale,
discoverRegion: values.discoverRegion,
streamingRegion: values.streamingRegion,
@@ -428,6 +435,9 @@ const SettingsMain = () => {
{intl.formatMessage(messages.hideAvailable)}