kennethsible/jellyfin-rpc

Discord RPC for Jellyfin that displays what you're watching or listening to

82

stars

146

commits

Python

primary language

Sep 9, 2026

updated

discord
discord-rich-presence
discord-rpc
jellyfin
rich-presence

README

Discord RPC for Jellyfin

Jellyfin RPC updates your Discord status with what you're watching or listening to on your Jellyfin server. Make sure your desktop client for Discord is running and your Activity Sharing settings are enabled.

Discord Episode Activity Discord Music Activity

Installation

  • For the desktop GUI (Windows, macOS, or Linux), download the latest version from the Releases page.

  • For the CLI tool (headless/terminal), download the INI file from GitHub and install the package via pip.

    pip install git+https://github.com/kennethsible/jellyfin-rpc.git
    

[!NOTE] On Linux, AppImageLauncher can automatically create a desktop shortcut and place Jellyfin RPC into your system's application launcher.

Configuration

Jellyfin host can be either a public or local URL for your server. However, posters and album covers won't be retrievable from your Jellyfin server with a local URL (requires HTTPS and must be publicly accessible by Discord). In that case, Jellyfin RPC includes support for public metadata providers such as TMDB and MusicBrainz (via the Cover Art Archive).

After entering your Jellyfin host, click Connect and use Quick Connect to authenticate with a user access token. To generate an API key instead, go to the server dashboard and select API Keys under Advanced.

Jellyfin RPC GUI

If running in headless/CLI mode, configuration is loaded from an INI file. If you encounter any issues, set the log level to DEBUG (via the GUI or INI file) and include the log output when opening a GitHub issue.

[!NOTE] TMDB can optionally be used to fetch posters for movies and TV shows. However, you must create a TMDB account and generate an API key. The Cover Art Archive can be used to fetch album covers without an API key.

KeyDefaultDescription
JELLYFIN_HOSTJellyfin server URL (e.g., https://jellyfin.example.com or http://localhost:8096).
JELLYFIN_API_KEYJellyfin API key (generated automatically when authenticating with Quick Connect).
JELLYFIN_USERNAMEJellyfin username to display media activity for in Discord.
DISCORD_CLIENT_IDOptional custom Discord application client ID. Uses the provided application if unset.
TMDB_API_KEYOptional API key from TMDB (required for posters if your Jellyfin server is local).
MEDIA_TYPESShows, Movies, MusicComma-separated list of media types to display activities for (Shows, Movies, Music).
SHOW_WHEN_PAUSEDtrueShows the activity with a paused indicator instead of a progress bar. If disabled, the activity stops displaying when paused.
SHOW_SERVER_NAMEfalseShows your server name as the activity name instead of saying "Jellyfin".
SHOW_JELLYFIN_LOGOtrueShows a small Jellyfin logo in the bottom right of the poster or album cover.
POSTER_LANGUAGESComma-separated list of languages (preferably two-letter ISO 639-1 language codes) for TMDB. Uses TMDB's default image order if unset.
TEXTLESS_POSTERSfalseControls whether textless TMDB posters are prioritized over language posters.
ALWAYS_USE_TMDBfalseControls whether TMDB is the default source for posters or a fallback provider for local artwork from Jellyfin.
SEASON_OVER_SERIESfalseControls whether season posters are preferred over series posters for shows.
ALWAYS_USE_MUSICBRAINZfalseControls whether MusicBrainz (via the Cover Art Archive) is the default source for album covers or a fallback provider for local artwork from Jellyfin.
RELEASE_OVER_GROUPfalseControls whether release artwork is preferred over release group artwork on MusicBrainz.
FILTER_MODEBLACKLISTControls whether the library filter uses a whitelist (allowed) or blacklist (blocked).
FILTER_LIBRARIESComma-separated list of Jellyfin library IDs (the topParentId in the web client URL) to either whitelist or blacklist.
POLLING_RATE5Interval in seconds to poll Jellyfin sessions (or the minimum delay/fallback interval between WebSocket events).
SEEK_THRESHOLD10Playback jump in seconds required to resync Discord's elapsed timer when seeking.
LOG_LEVELINFOLogging verbosity for the console (DEBUG, VERBOSE, INFO, WARNING, ERROR, CRITICAL).
FILE_HDLR_LEVELDEBUGLogging verbosity for the log file (DEBUG, VERBOSE, INFO, WARNING, ERROR, CRITICAL).
LOG_MAX_BYTES5242880Maximum size in bytes of a log file before rotating to a new one (default is 5 MB).
LOG_MAX_FILES3Maximum number of log files to keep before deleting the oldest.

CLI Usage (Headless)

jellyfin-rpc [-h] [--ini-path INI_PATH] [--log-path LOG_PATH]

options:
  --ini-path INI_PATH
  --log-path LOG_PATH

If not specified, configuration and log files default to the following directories:

  • %AppData%\Jellyfin RPC (Windows)
  • ~/Library/Application Support/Jellyfin RPC (macOS)
  • ~/.config/jellyfin-rpc (Linux)

Building from Source

[!NOTE] For Linux builds, refer to the PyInstaller GitHub Actions workflow (see here) and use the system Python installation, as uv does not currently include font support (astral-sh/uv/issues/15668).

  1. Install the uv package manager.

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  2. Create a Python environment.

    uv venv .venv --python 3.12
    
  3. Build the standalone executable.

    uv run --extra gui pyinstaller main.spec
    

Contributors

kennethsible

140 commits

Kurotaku-sama

4 commits

Kxsumi

1 commits

sneakykiwi

1 commits

kennethsible/jellyfin-rpc

Discord RPC for Jellyfin that displays what you're watching or listening to

82

stars

146

commits

Python

primary language

Sep 9, 2026

updated

discord
discord-rich-presence
discord-rpc
jellyfin
rich-presence

README

Discord RPC for Jellyfin

Jellyfin RPC updates your Discord status with what you're watching or listening to on your Jellyfin server. Make sure your desktop client for Discord is running and your Activity Sharing settings are enabled.

Discord Episode Activity Discord Music Activity

Installation

  • For the desktop GUI (Windows, macOS, or Linux), download the latest version from the Releases page.

  • For the CLI tool (headless/terminal), download the INI file from GitHub and install the package via pip.

    pip install git+https://github.com/kennethsible/jellyfin-rpc.git
    

[!NOTE] On Linux, AppImageLauncher can automatically create a desktop shortcut and place Jellyfin RPC into your system's application launcher.

Configuration

Jellyfin host can be either a public or local URL for your server. However, posters and album covers won't be retrievable from your Jellyfin server with a local URL (requires HTTPS and must be publicly accessible by Discord). In that case, Jellyfin RPC includes support for public metadata providers such as TMDB and MusicBrainz (via the Cover Art Archive).

After entering your Jellyfin host, click Connect and use Quick Connect to authenticate with a user access token. To generate an API key instead, go to the server dashboard and select API Keys under Advanced.

Jellyfin RPC GUI

If running in headless/CLI mode, configuration is loaded from an INI file. If you encounter any issues, set the log level to DEBUG (via the GUI or INI file) and include the log output when opening a GitHub issue.

[!NOTE] TMDB can optionally be used to fetch posters for movies and TV shows. However, you must create a TMDB account and generate an API key. The Cover Art Archive can be used to fetch album covers without an API key.

KeyDefaultDescription
JELLYFIN_HOSTJellyfin server URL (e.g., https://jellyfin.example.com or http://localhost:8096).
JELLYFIN_API_KEYJellyfin API key (generated automatically when authenticating with Quick Connect).
JELLYFIN_USERNAMEJellyfin username to display media activity for in Discord.
DISCORD_CLIENT_IDOptional custom Discord application client ID. Uses the provided application if unset.
TMDB_API_KEYOptional API key from TMDB (required for posters if your Jellyfin server is local).
MEDIA_TYPESShows, Movies, MusicComma-separated list of media types to display activities for (Shows, Movies, Music).
SHOW_WHEN_PAUSEDtrueShows the activity with a paused indicator instead of a progress bar. If disabled, the activity stops displaying when paused.
SHOW_SERVER_NAMEfalseShows your server name as the activity name instead of saying "Jellyfin".
SHOW_JELLYFIN_LOGOtrueShows a small Jellyfin logo in the bottom right of the poster or album cover.
POSTER_LANGUAGESComma-separated list of languages (preferably two-letter ISO 639-1 language codes) for TMDB. Uses TMDB's default image order if unset.
TEXTLESS_POSTERSfalseControls whether textless TMDB posters are prioritized over language posters.
ALWAYS_USE_TMDBfalseControls whether TMDB is the default source for posters or a fallback provider for local artwork from Jellyfin.
SEASON_OVER_SERIESfalseControls whether season posters are preferred over series posters for shows.
ALWAYS_USE_MUSICBRAINZfalseControls whether MusicBrainz (via the Cover Art Archive) is the default source for album covers or a fallback provider for local artwork from Jellyfin.
RELEASE_OVER_GROUPfalseControls whether release artwork is preferred over release group artwork on MusicBrainz.
FILTER_MODEBLACKLISTControls whether the library filter uses a whitelist (allowed) or blacklist (blocked).
FILTER_LIBRARIESComma-separated list of Jellyfin library IDs (the topParentId in the web client URL) to either whitelist or blacklist.
POLLING_RATE5Interval in seconds to poll Jellyfin sessions (or the minimum delay/fallback interval between WebSocket events).
SEEK_THRESHOLD10Playback jump in seconds required to resync Discord's elapsed timer when seeking.
LOG_LEVELINFOLogging verbosity for the console (DEBUG, VERBOSE, INFO, WARNING, ERROR, CRITICAL).
FILE_HDLR_LEVELDEBUGLogging verbosity for the log file (DEBUG, VERBOSE, INFO, WARNING, ERROR, CRITICAL).
LOG_MAX_BYTES5242880Maximum size in bytes of a log file before rotating to a new one (default is 5 MB).
LOG_MAX_FILES3Maximum number of log files to keep before deleting the oldest.

CLI Usage (Headless)

jellyfin-rpc [-h] [--ini-path INI_PATH] [--log-path LOG_PATH]

options:
  --ini-path INI_PATH
  --log-path LOG_PATH

If not specified, configuration and log files default to the following directories:

  • %AppData%\Jellyfin RPC (Windows)
  • ~/Library/Application Support/Jellyfin RPC (macOS)
  • ~/.config/jellyfin-rpc (Linux)

Building from Source

[!NOTE] For Linux builds, refer to the PyInstaller GitHub Actions workflow (see here) and use the system Python installation, as uv does not currently include font support (astral-sh/uv/issues/15668).

  1. Install the uv package manager.

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  2. Create a Python environment.

    uv venv .venv --python 3.12
    
  3. Build the standalone executable.

    uv run --extra gui pyinstaller main.spec
    

Contributors

kennethsible

140 commits

Kurotaku-sama

4 commits

Kxsumi

1 commits

sneakykiwi

1 commits

Languages

Python

100.0%