Skip to content

feat: anime quality profile and server selection for Seerr#95

Open
retardgerman wants to merge 17 commits intomainfrom
dev
Open

feat: anime quality profile and server selection for Seerr#95
retardgerman wants to merge 17 commits intomainfrom
dev

Conversation

@retardgerman
Copy link
Copy Markdown
Contributor

@retardgerman retardgerman commented Apr 9, 2026

Summary

  • Adds 4 new config keys for anime-specific Radarr/Sonarr routing: DEFAULT_QUALITY_PROFILE_ANIME, DEFAULT_QUALITY_PROFILE_ANIME_MOVIE, DEFAULT_SERVER_ANIME, DEFAULT_SERVER_ANIME_MOVIE
  • Anime is detected automatically via TMDB genre 16 (Animation) + Japanese original language — same heuristic Jellyseerr uses internally
  • Falls back to standard movie/TV defaults if no anime config is set, so existing setups are unaffected
  • isAnime: true is included in the Jellyseerr request payload when anime is detected, allowing Jellyseerr to route to its own anime-configured instance
  • Dashboard: all 4 anime selects are populated when clicking "Load Seerr Options" (Sonarr profiles/servers for anime TV, Radarr for anime movies)

AI-assisted documentation. Code logic manually verified.

Closes #94

retardgerman and others added 17 commits April 5, 2026 13:33
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>
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.

Add Anime and Anime Films as categories

1 participant