feat: anime quality profile and server selection for Seerr#95
Open
retardgerman wants to merge 17 commits intomainfrom
Open
feat: anime quality profile and server selection for Seerr#95retardgerman wants to merge 17 commits intomainfrom
retardgerman wants to merge 17 commits intomainfrom
Conversation
Adds separate configurable quality profiles and Radarr/Sonarr servers for anime content (TV series and movies). Anime is detected automatically using TMDB genre 16 (Animation) + Japanese original language, matching Jellyseerr's own heuristic. Falls back to the standard movie/TV defaults if no anime-specific config is set. - 4 new config keys: DEFAULT_QUALITY_PROFILE_ANIME, DEFAULT_QUALITY_PROFILE_ANIME_MOVIE, DEFAULT_SERVER_ANIME, DEFAULT_SERVER_ANIME_MOVIE - isAnime flag threaded through interactions → botUtils → seerr.js and included in the Jellyseerr request payload - Dashboard: anime quality/server selects populated alongside existing ones when loading Seerr options
Adds a manual "Anime" checkbox to each library row in the Library
Channel Mapping section. Users can explicitly tag a Jellyfin library
as anime — explicit and robust, works with any library naming.
Config format updated from { libraryId: channelId } to
{ libraryId: { channel, isAnime } } with full backward compatibility.
Resolvers in libraryResolver.js handle both old and new formats.
New getLibraryAnimeFlag() helper exported for downstream use.
- Add console.error to all previously empty/silent catch blocks in script.js (library channel dropdown populate, library config parse on render, library config parse on save, autostart check) - Add warn log in resolveTargetChannel when null is resolved despite library being in the notification list - Refactor jellyfinWebhook.js inline library resolution to use shared getLibraryChannels() / resolveTargetChannel() / getLibraryAnimeFlag() from libraryResolver.js — eliminates logic duplication with poller/ws - Wire getLibraryAnimeFlag() into all three notification sources (webhook, poller, WebSocket) and pass isAnimeLibrary through to processAndSendNotification — flag is now fully in the pipeline, logged at info level, ready for downstream use
Array-format JELLYFIN_NOTIFICATION_LIBRARIES was previously expanded inline in the webhook but not in getLibraryChannels(). Now that all three paths use the shared helper, the conversion lives there so legacy configs work consistently across webhook, poller, and WebSocket.
- jellyfinPoller / jellyfinWebSocket: log error when targetChannelId resolves to null so skipped notifications are visible in logs - jellyfinWebhook: warn in buildJellyfinUrl fallback path so misconfigured JELLYFIN_BASE_URL is surfaced - web/script.js: add console.error/warn/debug to every previously empty catch block (version fetch, bot status, session check, webhook secret, localStorage cache, Seerr user load, mapping reload, role load, logs-page bot status) — no control flow changes, logging only
- Logout catch: add console.error + showToast so user gets feedback - loadDiscordGuilds / loadDiscordChannels: add console.error with context - loadRoles catch: add UI fallback (allowlist/blocklist error message) in addition to the existing console.error - updateConnectionStatus: add console.warn to both Seerr and Jellyfin catch blocks for diagnostics - TMDB fetch catch: include error message in the log line
Replace hardcoded English string with translation key. Adds logout_failed to en/de/sv locale files and template.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
en/de/sv/template were all missing config.default_anime_quality, default_anime_quality_help, default_anime_movie_quality, default_anime_movie_quality_help, default_anime_server, default_anime_server_help, default_anime_movie_server, default_anime_movie_server_help — causing raw key names to render in the dashboard. Also backfills missing quality/server/load_profiles_servers keys in sv and template that were never added. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sv.json was missing next_steps_title/next_step_1-3 in config. template.json was missing the same plus episode_channel, episode_channel_help, season_channel, season_channel_help, use_default_channel. de.json is complete relative to en.json. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
DEFAULT_QUALITY_PROFILE_ANIME,DEFAULT_QUALITY_PROFILE_ANIME_MOVIE,DEFAULT_SERVER_ANIME,DEFAULT_SERVER_ANIME_MOVIEisAnime: trueis included in the Jellyseerr request payload when anime is detected, allowing Jellyseerr to route to its own anime-configured instanceCloses #94