# seadex-scout config. # ---------------------------------------------------------------------------- # Connections & schedule # ---------------------------------------------------------------------------- # An arr is on when its url is set, and then needs its api_key too. At least # one arr must be on. The four ${VAR} references below are read from the # container's environment: set SONARR_URL and SONARR_API_KEY (and the RADARR_* # pair for Radarr) there, or replace the references with the values. A # reference to a variable that is not set reads as empty, so Radarr stays off # until RADARR_URL is set. To force an arr off whatever its url says, add # `enabled: false` to its block. # # api_key shape: the arrs generate a 32-character hex key (Settings -> General -> # API Key). Any other shape is accepted with a startup warning naming the field - # they honour whatever key you set - but a value containing a '$' is REFUSED, # because it means a ${VAR} reference that was never expanded and starting with # the literal placeholder would 401 every call. The one exception is an api_key # that is exactly one unset reference, like the two below: it reads as empty and # fails as a missing key. sonarr: url: "${SONARR_URL}" # where seadex-scout reaches Sonarr, for example http://sonarr:8989 (internal is fine) api_key: "${SONARR_API_KEY}" # 32 hex chars from Sonarr's Settings -> General -> API Key public_url: "" # browser base for the report's deep-links; empty = use url radarr: url: "${RADARR_URL}" # for example http://radarr:7878; unset = Radarr off api_key: "${RADARR_API_KEY}" public_url: "" mode: "daemon" # daemon (scheduled) | report (one-shot, exit) # One cadence for BOTH the alert engine and the Torznab feed, so a notification # and what the arrs grab from the feed come from the same refresh. # # This is the FRESHNESS knob, not the cost knob. Most iterations are a cheap # check of what changed upstream recently (one small request, and usually one # tiny one when nothing changed); every 24h worth of them is a full pass that # re-reads the whole catalogue, re-walks Sonarr/Radarr and rebuilds the search # index. So upstream load tracks how often SeaDex actually changes, not how # often you poll. 15m matches Sonarr's own default RSS interval — polling faster # cannot reach the arrs any sooner. Minimum 15m. # # Runs on start (the first iteration is always a full pass); # off/disabled/0 = no internal timer, trigger each pass with the `poll` # subcommand. In that mode every `poll` is a separate process, so schedule it # around 24h apart rather than every 15m — each one is a full pass. poll_interval: "15m" log: level: "info" # debug | info | warn | error format: "json" # json | text # ---------------------------------------------------------------------------- # Report / alert engine — shapes the findings + report, NOT the indexer # ---------------------------------------------------------------------------- animebytes: false # true if you have an AnimeBytes account (adds AB releases + links) filters: exclude_remux: false # true drops remuxes (default keeps them) require_dual_audio: false # true drops non-dual-audio releases exclude_specials: false # true drops OVA/ONA/specials # Per-tag, per-surface exclusions keyed on SeaDex's own release tags. # EMPTY (the default) MEANS NOTHING IS FILTERED: a release SeaDex tagged # "Broken" is still alerted on as a better release available, still counts as a # best in the report, and is still served in the Torznab feed. The report # annotates it "(broken)" either way. List the tags you want gone, and on which # surfaces — surfaces are exactly findings (the alerts), report, feed (Torznab # search + RSS); an unknown surface name or a tag with no surfaces is a startup # error. Tag matching is exact and case-insensitive. exclude_tags: {} # exclude_tags: # broken: [findings, report, feed] # incomplete: [feed] # AniList IDs whose findings are never alerted on. Findings are reported # continuously for as long as they are true, so your alerting stack keeps # reminding you until you act — which is what makes a lost notification # recoverable. Put a show here when you have decided NOT to upgrade it and # want the reminders to stop. It suppresses the alert only: the show still # appears in report mode, and the RSS feed is untouched (this app never # withholds a release from Sonarr/Radarr). [] = alert on everything. ignore: [] # ignore: [154587, 21519] arr_tags: include: [] # scan only items with one of these tags; [] = all exclude: [] # skip items with any of these tags (wins over include) report: dir: "/config/reports" # report-.md + .json written here # ---------------------------------------------------------------------------- # Indexer engine — optional Torznab feed; the arrs filter it (profiles + CFs) # ---------------------------------------------------------------------------- # Served by the daemon whenever a Torznab URL is set (both empty = off, no port). # Its curation set + RSS feed rebuild together with the alert loop on poll_interval. indexer: feed_api_key: "" # the arrs send this, the feed checks it; no spaces and no '$'; the first-boot starter fills this with a generated key (${SEADEX_SCOUT_FEED_KEY} ref also works) nyaa_torznab_url: "" # Prowlarr Nyaa Torznab URL, e.g. http://prowlarr:9696/1/api ("" = off) ab_torznab_url: "" # Prowlarr AnimeBytes Torznab URL ("" = off) prowlarr_api_key: "" # Prowlarr API key; secret, never logged; "" is valid with Prowlarr auth disabled for local addresses, otherwise 32 hex chars (same shape rule as the arr keys) (${SEADEX_SCOUT_PROWLARR_KEY} ref works) ab_passkey: "" # AnimeBytes passkey for AB RSS download links ("" = AB RSS off); 32/48/56 chars; ${SEADEX_SCOUT_AB_PASSKEY} ref works