Buildarr Jellyseerr Plugin#

PyPI PyPI - Python Version GitHub Pre-commit hooks Code style: black

The Buildarr Jellyseerr plugin (buildarr-jellyseerr) is a plugin for Buildarr that adds the capability to configure and manage Jellyseerr instances.

Jellyseerr is an application that links with both Jellyfin/Plex and your Sonarr/Radarr instances. It allows your users to login using their Jellyfin/Plex credentials, browse available media online, and make media requests for new content.

Once these requests are approved, Jellyseerr will then make the requests to Sonarr/Radarr to download them, monitor the progress, and report back to the user when the media is available in Jellyfin/Plex.

Buildarr can be used to initialise a new Jellyseerr install with Jellyfin server credentials (Plex is not supported at this time), manage the Jellyseerr server settings, and connect it with Sonarr and Radarr servers.

Installation#

When using Buildarr as a standalone application, the Jellyseerr plugin can simply be installed using pip:

$ pip install buildarr buildarr-jellyseerr

If you are linking a Jellyseerr instance with another Buildarr-configured application, specify the following extras to also install a compatible version of the corresponding plugins:

  • sonarr (for the Sonarr TV show PVR)
  • radarr (for the Radarr movie PVR)
$ pip install buildarr buildarr-jellyseerr[sonarr,radarr]

When using Buildarr as a Docker container, the Jellyseerr plugin is bundled with the official container (callum027/buildarr), so there is no need to install it separately.

You can upgrade or pin the version of the plugin to a specific version within the container by setting the $BUILDARR_JELLYSEERR_VERSION environment variable in the docker run command using --env/-e:

-e BUILDARR_JELLYSEERR_VERSION="<version>"

Quick Start#

Brand new Jellyseerr instances require initialisation for Buildarr to be able to manage it.

This is usually done manually by navigating to http://localhost:5055/setup on the Jellyseerr host, logging in with Jellyfin or Plex credentials, and then selecting libraries to monitor.

As of this release, automatically initialising Jellyseerr for Plex is not yet supported. Please initialise the Jellyseerr instance manually.

For Jellyseerr instances being connected to Jellyfin only, Buildarr can perform this initialisation automatically.

To do this, set the following parameters under the jellyfin configuration section, which are required when initialisting a new instance (they are otherwise optional):

---

jellyseerr:
  hostname: "localhost"
  port: 5055
  protocol: "http"
  api_key: "<API key>"  # Required. Check `settings.json` in the config volume to get the value.
  settings:
    jellyfin:
      server_url: "http://localhost:8096"  # Jellyfin server URL, preferably direct (no proxy).
      username: "admin"  # Jellyfin server admin user.
      password: "secure-password"  # Jellyfin server admin user password.
      email_address: "admin@example.com"  # Jellyfin server admin email address.
      # Jellyfin media libraries to monitor.
      # This can be used to change what libraries Jellyseerr monitors,
      # even after it is initialised.
      libraries:
        - "Shows"
        - "Movies"
        - "Anime"
        - "Anime Movies"

After that, configure and run Buildarr as normal, and setup desired settings for Jellyseerr.

For more information on configuring Jellyseerr, see Configuring your Jellyseerr instance.

Once you have a complete configuration file, test it against the Jellyseerr instance using buildarr run.

The output should contain messages about checking, performing and finishing the initialisation. If no errors were found, congratulations, your Jellyseerr instance is now managed by Buildarr!

2023-04-15 09:44:20,386 buildarr:1 buildarr.cli.run [INFO] Buildarr version 0.4.2 (log level: INFO)
2023-04-15 09:44:20,386 buildarr:1 buildarr.cli.run [INFO] Loading configuration file '/config/buildarr.yml'
2023-04-15 09:44:20,458 buildarr:1 buildarr.cli.run [INFO] Finished loading configuration file
2023-04-15 09:44:20,461 buildarr:1 buildarr.cli.run [INFO] Loaded plugins: jellyseerr (0.1.0), prowlarr (0.1.1), sonarr (0.4.1)
2023-04-15 09:44:20,461 buildarr:1 buildarr.cli.run [INFO] Loading instance configurations
2023-04-15 09:44:20,464 buildarr:1 buildarr.cli.run [INFO] Finished loading instance configurations
2023-04-15 09:44:20,464 buildarr:1 buildarr.cli.run [INFO] Running with plugins: sonarr, jellyseerr
2023-04-15 09:44:20,464 buildarr:1 buildarr.cli.run [INFO] Resolving instance dependencies
2023-04-15 09:44:20,464 buildarr:1 buildarr.cli.run [INFO] Finished resolving instance dependencies
2023-04-15 09:44:20,464 buildarr:1 buildarr.cli.run [INFO] Rendering instance configuration dynamic attributes
2023-04-15 09:44:20,465 buildarr:1 buildarr.cli.run [INFO] Finished rendering instance configuration dynamic attributes
2023-04-15 09:44:20,599 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Instance has not been initialised
2023-04-15 09:44:20,600 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Initialising instance
2023-04-15 09:44:20,600 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Checking if required attributes are defined
2023-04-15 09:44:20,600 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Finished checking if required attributes are defined
2023-04-15 09:44:20,600 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Authenticating Jellyseerr with Jellyfin
2023-04-15 09:44:20,842 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Finished authenticating Jellyseerr with Jellyfin
2023-04-15 09:44:20,842 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Syncing Jellyfin libraries to Jellyseerr
2023-04-15 09:44:21,027 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Finished syncing Jellyfin libraries to Jellyseerr
2023-04-15 09:44:21,027 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Enabling Jellyfin libraries in Jellyseerr: 'TV Shows'
2023-04-15 09:44:21,083 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Finished enabling Jellyfin libraries in Jellyseerr
2023-04-15 09:44:21,083 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Finalising initialisation
2023-04-15 09:44:21,191 buildarr:1 buildarr_jellyseerr.config.settings.jellyfin [INFO] <jellyseerr> (default) Finished finalising initialisation
2023-04-15 09:44:21,192 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Finished initialising instance
2023-04-15 09:44:21,192 buildarr:1 buildarr.cli.run [INFO] Loading secrets file from '/config/secrets.json'
2023-04-15 09:44:21,196 buildarr:1 buildarr.cli.run [INFO] Finished loading secrets file
2023-04-15 09:44:21,196 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Checking secrets
2023-04-15 09:44:21,201 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Connection test successful using cached secrets
2023-04-15 09:44:21,201 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished checking secrets
2023-04-15 09:44:21,201 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Checking secrets
2023-04-15 09:44:21,223 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Connection test failed using cached secrets (or not cached), fetching secrets
2023-04-15 09:44:21,231 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Connection test successful using fetched secrets
2023-04-15 09:44:21,231 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Finished checking secrets
2023-04-15 09:44:21,231 buildarr:1 buildarr.cli.run [INFO] Saving updated secrets file to '/config/secrets.json'
2023-04-15 09:44:21,232 buildarr:1 buildarr.cli.run [INFO] Finished saving updated secrets file
2023-04-15 09:44:21,232 buildarr:1 buildarr.cli.run [INFO] Updating configuration on remote instances
2023-04-15 09:44:21,232 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Fetching remote configuration to check if updates are required
2023-04-15 09:44:21,363 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished fetching remote configuration
2023-04-15 09:44:21,402 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Updating remote configuration
2023-04-15 09:44:21,491 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Remote configuration is up to date
2023-04-15 09:44:21,491 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished updating remote configuration
2023-04-15 09:44:21,491 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Fetching remote configuration to check if updates are required
2023-04-15 09:44:22,496 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Finished fetching remote configuration
2023-04-15 09:44:22,507 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Updating remote configuration
2023-04-15 09:44:22,629 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Remote configuration successfully updated
2023-04-15 09:44:22,629 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Finished updating remote configuration
2023-04-15 09:44:22,629 buildarr:1 buildarr.cli.run [INFO] Finished updating configuration on remote instances
2023-04-15 09:44:22,629 buildarr:1 buildarr.cli.run [INFO] Deleting unmanaged/unused resources on remote instances
2023-04-15 09:44:22,630 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Refetching remote configuration to delete unused resources
2023-04-15 09:44:22,735 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Finished refetching remote configuration
2023-04-15 09:44:22,749 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Deleting unmanaged/unused resources on the remote instance
2023-04-15 09:44:22,760 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Remote configuration is clean
2023-04-15 09:44:22,760 buildarr:1 buildarr.cli.run [INFO] <jellyseerr> (default) Finished deleting unmanaged/unused resources on the remote instance
2023-04-15 09:44:22,760 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Refetching remote configuration to delete unused resources
2023-04-15 09:44:22,874 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished refetching remote configuration
2023-04-15 09:44:22,909 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Deleting unmanaged/unused resources on the remote instance
2023-04-15 09:44:22,910 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Remote configuration is clean
2023-04-15 09:44:22,910 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished deleting unmanaged/unused resources on the remote instance
2023-04-15 09:44:22,910 buildarr:1 buildarr.cli.run [INFO] Finished deleting unmanaged/unused resources on remote instances

Configuring your Jellyseerr instance#

The following sections cover all of the possible configuration attributes for a Jellyseerr instance.

Dumping an existing Jellyseerr instance configuration#

Buildarr is capable of dumping a running Jellyseerr instance's configuration.

$ buildarr jellyseerr dump-config http://localhost:5055 > jellyseerr.yml
Jellyseerr instance API key: <Paste API key here>

The dumped YAML object can be placed directly under the jellyseerr configuration block, or used as an instance-specific configuration.

All possible values are explicitly defined in this dumped configuration.

hostname: localhost
port: 5055
protocol: http
api_key: AbCdEfGhIjKlMnOpQrStUvWxYzaBcDeFgHiJkLmNoPqRsTuVwXyZ123456789012345=
image: fallenbagel/jellyseerr
version: 1.4.1
settings:
  general:
    application_title: Jellyseerr
    application_url: null
    enable_proxy_support: false
    enable_csrf_protection: false
    enable_image_caching: false
    display_language: en
    discover_region: ''
    discover_languages:
    - en
    hide_available_media: false
    allow_partial_series_requests: true
  jellyfin:
    server_url: null
    username: null
    password: null
    email_address: null
    external_url: null
    libraries:
    - TV Shows
  users:
    enable_local_signin: true
    enable_new_jellyfin_signin: true
    global_movie_request_limit: 0
    global_movie_request_days: 7
    global_series_request_limit: 0
    global_series_request_days: 7
    default_permissions:
    - request
    - request-4k
  services:
    radarr:
      delete_unmanaged: false
      definitions: {}
    sonarr:
      delete_unmanaged: false
      definitions:
        Sonarr:
          is_default_server: true
          is_4k_server: false
          hostname: localhost
          port: 8989
          use_ssl: false
          url_base: null
          external_url: http://localhost:8989
          enable_scan: false
          enable_automatic_search: true
          instance_name: null
          api_key: 1a2b3c4d5e6f1a2b3c4d5e6f1a2b3c4d
          root_folder: /data/media/tv
          quality_profile: TV Shows
          language_profile: English
          tags: []
          anime_root_folder: null
          anime_quality_profile: null
          anime_language_profile: null
          anime_tags: []
          enable_season_folders: true
  notifications:
    discord:
      enable: false
      notification_types: []
      webhook_url: null
      username: null
      avatar_url: null
      enable_mentions: true
    email:
      enable: false
      require_user_email: false
      sender_name: Jellyseerr
      sender_address: null
      smtp_host: null
      smtp_port: 587
      encryption_method: starttls-prefer
      allow_selfsigned_certificates: false
      smtp_username: null
      smtp_password: null
      pgp_private_key: null
      pgp_password: null
    gotify:
      enable: false
      notification_types: []
      server_url: null
      access_token: null
    lunasea:
      enable: false
      notification_types: []
      webhook_url: null
      profile_name: null
    pushbullet:
      enable: false
      notification_types: []
      access_token: null
      channel_tag: null
    pushover:
      enable: false
      notification_types: []
      api_key: null
      user_key: null
    slack:
      enable: false
      notification_types: []
      webhook_url: null
    telegram:
      enable: false
      notification_types: []
      access_token: null
      username: null
      chat_id: null
      send_silently: false
    webhook:
      enable: false
      notification_types: []
      webhook_url: null
      authorization_header: null
      payload_template: "{\n    \"notification_type\": \"{{notification_type}}\",\n\
        \    \"event\": \"{{event}}\",\n    \"subject\": \"{{subject}}\",\n    \"\
        message\": \"{{message}}\",\n    \"image\": \"{{image}}\",\n    \"{{media}}\"\
        : {\n        \"media_type\": \"{{media_type}}\",\n        \"tmdbId\": \"{{media_tmdbid}}\"\
        ,\n        \"tvdbId\": \"{{media_tvdbid}}\",\n        \"status\": \"{{media_status}}\"\
        ,\n        \"status4k\": \"{{media_status4k}}\"\n    },\n    \"{{request}}\"\
        : {\n        \"request_id\": \"{{request_id}}\",\n        \"requestedBy_email\"\
        : \"{{requestedBy_email}}\",\n        \"requestedBy_username\": \"{{requestedBy_username}}\"\
        ,\n        \"requestedBy_avatar\": \"{{requestedBy_avatar}}\"\n    },\n  \
        \  \"{{issue}}\": {\n        \"issue_id\": \"{{issue_id}}\",\n        \"issue_type\"\
        : \"{{issue_type}}\",\n        \"issue_status\": \"{{issue_status}}\",\n \
        \       \"reportedBy_email\": \"{{reportedBy_email}}\",\n        \"reportedBy_username\"\
        : \"{{reportedBy_username}}\",\n        \"reportedBy_avatar\": \"{{reportedBy_avatar}}\"\
        \n    },\n    \"{{comment}}\": {\n        \"comment_message\": \"{{comment_message}}\"\
        ,\n        \"commentedBy_email\": \"{{commentedBy_email}}\",\n        \"commentedBy_username\"\
        : \"{{commentedBy_username}}\",\n        \"commentedBy_avatar\": \"{{commentedBy_avatar}}\"\
        \n    },\n    \"{{extra}}\": []\n}"
    webpush:
      enable: false