Skip to content

Configuration

All configuration is via environment variables using the FunkArr__ prefix. The double underscore (__) separates nested sections — this is standard ASP.NET Core configuration binding.

Defaults work out of the box for local development. For production, you typically only need to set FunkArr__ApiKey and FunkArr__Download__Path.

General

VariableDefaultDescription
FunkArr__ApiKeyfunkarr-default-api-keyAPI key for Prowlarr/Sonarr/Radarr
FunkArr__DataPathdataBase path for database, rulesets, temp files

API Key

The API key authenticates all requests from Prowlarr, Sonarr, and Radarr. Both the indexer API (/index/api) and download client API (/download/api) require this key. Use the same value when configuring FunkArr in your *arr apps.

WARNING

Change the default API key in production. Anyone with the key can search and download through your FunkArr instance.

Data Path

The data path is the root directory for all persistent state. FunkArr creates the following structure inside it:

data/
  funkarr.db            # SQLite database (when not using PostgreSQL)
  rulesets/
    community/          # Auto-synced community rulesets
    local/              # Your custom rulesets
    version.txt         # Currently installed community ruleset version
  temp/                 # Temporary files during download/remux

Downloads

VariableDefaultDescription
FunkArr__Download__Pathdata/downloadsRoot download directory
FunkArr__Download__ConcurrentDownloads3Max parallel downloads

Download Path

The download path contains two subdirectories that FunkArr manages automatically:

  • incomplete/ — active downloads and remux operations in progress
  • complete/ — finished downloads, organized by category subdirectories

Sonarr and Radarr monitor the complete/ directory for finished files. Make sure this path is accessible to both FunkArr and your *arr apps (typically via a shared Docker volume mount).

Concurrent Downloads

Controls how many videos are downloaded and remuxed simultaneously. Each download uses one FFmpeg process. Increase on fast connections with available CPU; decrease if you see timeouts or resource issues.

Categories

Categories map Sonarr/Radarr download categories to subdirectories inside complete/. Configure one category per *arr app type:

FunkArr__Download__Categories__0__Name=tv
FunkArr__Download__Categories__0__Dir=tv
FunkArr__Download__Categories__1__Name=movies
FunkArr__Download__Categories__1__Dir=movies
VariableDefaultDescription
FunkArr__Download__Categories__N__NameCategory name as configured in Sonarr/Radarr
FunkArr__Download__Categories__N__DirSubdirectory inside complete/ for this category

When Sonarr sends a download request with category tv, the finished file ends up in complete/tv/. The N in the variable name is a zero-based index — use 0, 1, 2, etc. for each category.

Rulesets

VariableDefaultDescription
FunkArr__RuleSet__Repositoryst0o0/funkarrGitHub repository for community rulesets
FunkArr__RuleSet__VersionlatestRuleset version to use
FunkArr__RuleSet__RefreshEnabledtrueEnable automatic ruleset updates

Repository

The GitHub repository where community rulesets are published as release assets. Only change this if you're running a fork with your own ruleset releases.

Version

Set to latest to always use the newest community ruleset release. Pin to a specific version tag (e.g. rulesets-v0.2.0) to prevent automatic updates — useful if a new release breaks a mapping you depend on.

Refresh

When enabled, FunkArr checks for new ruleset releases every 30 minutes and automatically downloads updates. Disable this if you pin a specific version or run in an air-gapped environment.

Metadata

VariableDefaultDescription
FunkArr__Tmdb__ApiKey(empty)TMDB API key
FunkArr__Tvdb__ApiKey(empty)TVDB API key

TMDB

A TMDB API key enables metadata resolution for movies and series. FunkArr uses it to match Mediathek entries to the correct TMDB title, improving accuracy for Radarr and Sonarr.

Get a free API key at themoviedb.org/settings/api.

TVDB

A TVDB API key enables episode guide resolution. FunkArr uses TVDB data to map airdate-based Mediathek entries to season/episode numbers when the ruleset uses an airdate strategy.

Get an API key at thetvdb.com/api-information.

TIP

Both keys are optional but recommended. Without them, FunkArr relies solely on ruleset patterns for matching, which works but produces fewer results.

Scoring

VariableDefaultDescription
FunkArr__Scoring__PoolSize4Parallel scoring workers

The scoring pool processes Mediathek search results against rulesets in parallel. Each worker evaluates one ruleset match at a time. Increase for faster search responses on multi-core systems; the default of 4 works well for most setups.

Match History

VariableDefaultDescription
FunkArr__MatchHistory__MaxSnapshots100Max match history snapshots to retain
FunkArr__MatchHistory__MaxAgeDays30Days before old snapshots are pruned
FunkArr__MatchHistory__SnapshotInterval20Interval between snapshots

Match history tracks which ruleset mappings produced successful downloads over time. This data feeds back into scoring — rules that historically produced correct matches get a confidence boost.

  • MaxSnapshots — limits storage for match history. Higher values give more historical data for scoring but use more disk.
  • MaxAgeDays — removes snapshots older than this many days. Mediathek content changes regularly, so old match data becomes less relevant.
  • SnapshotInterval — controls how often new snapshots are taken. Lower values capture more granular data but increase database writes.

PostgreSQL

By default, FunkArr uses SQLite with the database file at {DataPath}/funkarr.db. Set FunkArr__Postgres__Host to switch to PostgreSQL.

VariableDefaultDescription
FunkArr__Postgres__Host(empty)PostgreSQL host — set to enable PostgreSQL
FunkArr__Postgres__Port5432PostgreSQL port
FunkArr__Postgres__User(empty)PostgreSQL user
FunkArr__Postgres__Password(empty)PostgreSQL password
FunkArr__Postgres__DatabasefunkarrPostgreSQL database name

INFO

When Host is empty or not set, FunkArr uses SQLite. This is the recommended default for single-instance setups. Use PostgreSQL when you need external database management or plan to scale.

Logging

FunkArr uses Serilog for structured logging. Log levels can be tuned per namespace:

VariableDefaultDescription
Serilog__MinimumLevel__DefaultInformationGlobal minimum log level
Serilog__MinimumLevel__Override__AkkaWarningAkka.NET actor system log level
Serilog__MinimumLevel__Override__Microsoft.AspNetCoreWarningASP.NET Core request log level

Valid levels: Verbose, Debug, Information, Warning, Error, Fatal.

Set the default to Debug for troubleshooting. The Akka and ASP.NET overrides are set to Warning by default to reduce noise from the actor system and HTTP pipeline.

Networking

FunkArr listens on port 6969 inside the container. Map it to any host port in your Docker Compose:

yaml
ports:
  - "8080:6969"   # Access via http://localhost:8080

FFmpeg

FFmpeg must be available on PATH — it is included in the official Docker image. FunkArr uses FFmpeg to:

  • Download video streams (including HLS .m3u8)
  • Remux to MKV (copies video/audio codecs without re-encoding)
  • Embed subtitles as SRT tracks with German language tag

There are no configuration options for FFmpeg behavior. The setup health check (/api/system/setup) verifies FFmpeg is available.

Health Checks

FunkArr exposes three health endpoints, none of which are configurable:

EndpointPurpose
/healthzFull health check (database, actor system) — returns 200 or 503
/aliveSimple liveness probe — always returns 200
/api/system/setupSetup validation — checks API key, directories, FFmpeg, API connectivity

Use /healthz for container orchestration health probes and /api/system/setup in the web UI to verify your configuration.