Skip to content

Integrations

Domekologe edited this page Jul 31, 2026 · 8 revisions

Integrations

🌐 English · Deutsch

All integrations are configured on the Integrations page (/integrations).

Screenshot: integrations page

Media player: Jellyfin & Plex

After successful downloads the app automatically triggers a library refresh on your media server so new episodes show up immediately.

Jellyfin

  • Enter server URL and API key (create the key in Jellyfin under Administration → API Keys).
  • The test button verifies the connection and shows the server name.

Plex

  • Enter the Plex URL; sign-in happens conveniently via Plex OAuth (PIN flow) straight from the UI — the token is stored automatically.
  • Optionally select a specific library section (otherwise all are refreshed).
  • The UI can additionally show whether the server is currently scanning.

MediaScan (inventory matching)

MediaScan loads your media server's complete library (series + movies with TMDB/IMDB/TVDB IDs) into a local cache. The UI can then mark, while browsing, what's already in your collection.

  • Source: Jellyfin (own URL + API key) or Plex (own URL; the Plex token is shared with the media player integration — one OAuth sign-in is enough).
  • Refresh: automatically every 24 h, about 2 minutes after every successful download (so the server can ingest the file first), and manually via button.
  • Missing TMDB IDs are resolved locally from IMDB IDs via the CineInfo cache where possible (relevant for Plex anime with legacy agents).

Overseerr / Jellyseerr ("Seerr")

  • Store the Seerr URL and API key.
  • The Seerr requests page (/seerr) shows pending and approved-but-not-yet-available requests (series + movies) with posters, description, rating and requested seasons.
  • Requests can be approved, declined or hidden directly — and of course started as downloads right away.

Screenshot: Seerr requests

Finding a request

The toolbar filters the whole request set server-side, not just the pages infinite scroll happens to have loaded:

  • Search by title (debounced). With very large backlogs the search covers the newest 400 requests and says so.
  • Status: All / Pending / Approved, each with a live count.
  • Media type: All / Series / Movies.
  • Sort by request date, title or status, with a direction toggle.
  • Layout: compact rows or a poster grid.

All of these are remembered in your browser. Hidden opens the list of requests you have hidden, where each can be restored.

Bulk actions

The checkbox button in the toolbar turns on multi-select. Tick individual requests (or use the select-all box in the action bar) and apply one action to all of them at once:

Action Who can use it
Approve Admins
Decline Admins
Hide Everyone (hiding is a per-user view preference)

A batch is capped at 50 requests per call; the bar says so when your selection is larger. Declining always asks for confirmation, and the result reports how many entries failed if the upstream Seerr instance rejected any.

Note: approve and decline act on the upstream Seerr instance and are admin-only on the server, not just hidden in the UI. A non-admin can still download a pending request — the request simply stays pending for an admin to act on.

CineInfo (TMDB)

With a (free) TMDB API key the app enriches browse and search views with metadata:

Option Description
Country Region for streaming providers & age rating (default DE)
Show streaming providers Where is the title legally available?
Genres, age rating, rating Badges on the cards
Recommendations "You might also like" on detail pages
Trailer Embed YouTube trailers
Backdrop Uses the TMDB backdrop as the header image of the title window. The image reaches down to the end of the header text and sits under a translucent veil (dark in the dark theme, light in the light one) so the title, genres and description stay readable on it. Off, or without artwork for that title, the window looks exactly as it does without the option — no empty band
Hover info Rating/genres/age rating on card hover. They slide in on a small drawer along the bottom edge of the poster instead of covering the artwork; on a touch screen the drawer rests open, so the badges are readable there too
Advanced search Enables the /advanced-search page
Calendar Enables the /calendar page, with sub-options for Seerr requests, MediaScan series, your own library and the refresh interval

TMDB responses are cached locally for 24 h (with automatic cleanup); the cache can be cleared from the UI.

Title localisation: In the detail dialog the series title is only replaced with the TMDB title when the match is clearly correct (a similarity check against the original and localised titles). For uncertain matches the source's original title is kept — so a spin-off, for example, won't override the real series title.

Advanced search

TMDB Discover with filters for genres, keywords (with autocomplete based on the daily TMDB keyword export), streaming providers and region — results can be searched and downloaded on the streaming sites directly.

Calendar

Shows upcoming episode air dates and movie releases for your AutoSync jobs, Seerr requests, MediaScan series and the series in your own library. Enabled here and configured with sub-options for the overlay sources and the refresh interval. A background watcher caches the schedule data — see Calendar for the full description.

Crunchyroll

An optional Crunchyroll login (sub-section of CineInfo) adds two things that pure TMDB data can't always provide:

  • Provider pill for current simulcasts. When a title is available on Crunchyroll, a Crunchyroll pill is shown in the detail dialog — even for brand-new simulcasts that TMDB's provider list hasn't picked up yet. The availability answer is cached for 24 h.
  • Calendar sync. Crunchyroll release dates can be added to the Calendar as their own source.
Option Description
Enable Crunchyroll integration Master switch for all Crunchyroll features
Email / Password / Language Account login. The password is stored encrypted at rest (Fernet, like the other secrets). The session token is cached in an encrypted file so you don't log in on every request.
Profile Pick which account profile the watchlist is read from (loaded via Test connection).
Anonymous mode Public metadata only, no account — provider pills work, watchlist sync does not
Crunchyroll provider pill Toggles the extra pill described above
↳ Sync Crunchyroll simulcast calendar Adds the current + next simulcast season lineup to the Calendar. The titles come from the Crunchyroll API (up to ~80 series, cached 30 min); the actual air dates are resolved via TMDB, reusing the same calendar cache as AutoSync/Seerr
↳ Sync with my watchlist/list Highlights calendar entries that are on your Crunchyroll watchlist; with the simulcast sync off, only your watchlist releases are shown. Requires an account.

Use Test connection to validate the credentials; for an account login it reports the active profile and whether premium features are available.

The integration uses a vendored single-file build of the crunchyroll-api library (src/mediaforge/vendor/crunchyroll_api.py). Video streams are DRM-protected and are not downloaded — only metadata, availability and schedule data are used.

Privacy / ToS note: this logs in to your personal Crunchyroll account. Credentials never leave your server. Heavy automated use may be subject to Crunchyroll's terms of service.

DNS

The DNS integration (Cloudflare/Google/Quad9/custom DoH) is described under Configuration.

UpTime monitoring

Native, built-in monitoring of the source sites — no external Uptime Kuma needed. Enable it under Integrations → UpTime; an UpTime entry then appears in the sidebar with a live dashboard at /uptime.

Option Description
Enable UpTime monitoring Master switch — starts the background monitor and adds the sidebar entry
Check interval How often each site is checked (minimum 1 minute)
Retention How long heartbeats are kept (maximum 7 days)
Timeout Total time budget per check (5–120 s). Shared across a site's mirror failover walk, so several mirrors can no longer multiply this into timeout × number of mirrors
Failure threshold Consecutive failed checks before a site is reported Offline (1–10, default 2). A single timed-out or unreachable probe is held as Degraded until it fails this many rounds in a row — this is what stops a brief DNS/CDN hiccup from wrongly reporting an online site as offline. A confirmed block page always reports Offline immediately, regardless of this value
Verify with full GET request Off by default (a cheap HEAD is used). Enable for more reliable checks against the Cloudflare / DDoS-Guard front ends, which often answer HEAD with a challenge or hold the connection open — at the cost of downloading the page body each check
Tracked sources Choose which source sites (AniWorld, SerienStream, FilmPalast, MegaKino, hanime) are monitored

Each check uses the same reachability + real-site verification as the DNS test, so a site counts as up only when the genuine content answers — an ISP/CUII block page is not treated as online. Checks always probe the site's canonical host first and still walk the mirror list on failure, but never pin the app's live traffic to a fallback mirror. States per site:

  • Online — reachable and the real site was verified.
  • Degraded — reachable but the content couldn't be confirmed (e.g. a Cloudflare challenge page), or a transient failure that hasn't yet reached the failure threshold.
  • Offline — unreachable for failure threshold consecutive checks, or a block/ISP page was detected.

The dashboard lists every tracked source as a full-width row with uptime %, average response time, a heartbeat history and the last error message. It refreshes itself live every few seconds — no page reload.

Time range & detail view. Above the monitors a range selector lets you look back over the history: presets (1h, 6h, 24h, 3d, 7d, limited to your retention) plus a custom from/to window. The selected range is split into a fixed number of history bars; each bar aggregates its slice (red = an outage occurred, orange = degraded, green = all up). Slices with no data (gaps, monitor was off, before it was enabled) show a grey dashed bar and read "No data available". Hovering a bar shows the time span, status, number of checks, average response and any error; clicking (or tapping) a bar expands a detail panel under that monitor listing the individual heartbeats in that slice. Uptime %, average response and check count all reflect the selected range; Last check always shows the most recent probe.

Clone this wiki locally