How pankyop/rich-presence-for-jellyfin-in-discord-plugin works
This Jellyfin plugin turns playback sessions into live Discord Rich Presence over local IPC. Jellyfin session events and fallback polling are filtered and throttled by SessionMonitor, which asks ActivityBuilder to format movie, TV, and music activities; artwork resolution is optional and external lookups are disabled by default. The Discord client sends activity through local named pipes or Unix sockets. Configuration and the embedded dashboard expose the user controls. The documented workflow and sampled caller references support the main connections; internal event wiring and some unsampled implementation details are not expanded.
Main entry points: SessionMonitor.cs Session monitor · DiscordIpcClient.cs Discord IPC client · ActivityBuilder.cs Activity builder · Plugin.cs Plugin & dashboard
Components 13
Plugin lifecycle
- Service registration
Jellyfin.Plugin.DiscordRichPresence/PluginServiceRegistrator.cs - Session monitor
Jellyfin.Plugin.DiscordRichPresence/Session/SessionMonitor.cs
Presence generation
- Activity builder
Jellyfin.Plugin.DiscordRichPresence/Discord/ActivityBuilder.cs - Artwork resolver
Jellyfin.Plugin.DiscordRichPresence/Discord/ArtworkResolver.cs - Activity model
Jellyfin.Plugin.DiscordRichPresence/Discord/Models/DiscordActivity.cs
Discord transport
- RPC payloads
Jellyfin.Plugin.DiscordRichPresence/Discord/Models/DiscordRpcPayloads.cs - Discord IPC client
Jellyfin.Plugin.DiscordRichPresence/Discord/DiscordIpcClient.cs
Configuration
- Plugin & dashboard
Jellyfin.Plugin.DiscordRichPresence/Plugin.cs - Plugin settings
Jellyfin.Plugin.DiscordRichPresence/Configuration/PluginConfiguration.cs - Settings page
Jellyfin.Plugin.DiscordRichPresence/Configuration/configPage.html
Other components
- Jellyfin Server
- Discord Desktop
- Metadata providers
Connections 16
- Jellyfin Server → Session monitor: supplies sessions
README.md - Service registration → Session monitor: registers hosted service
Jellyfin.Plugin.DiscordRichPresence/PluginServiceRegistrator.cs - Service registration → Discord IPC client: registers client
Jellyfin.Plugin.DiscordRichPresence/PluginServiceRegistrator.cs - Session monitor → Activity builder: builds activity
Jellyfin.Plugin.DiscordRichPresence/Session/SessionMonitor.cs - Session monitor → Discord IPC client: sends or clears
Jellyfin.Plugin.DiscordRichPresence/Session/SessionMonitor.cs - Activity builder → Artwork resolver: resolves artwork
Jellyfin.Plugin.DiscordRichPresence/Discord/ActivityBuilder.cs - Activity builder → Activity model: creates activity
Jellyfin.Plugin.DiscordRichPresence/Discord/ActivityBuilder.cs - Discord IPC client → Activity model: serializes activity
Jellyfin.Plugin.DiscordRichPresence/Discord/DiscordIpcClient.cs - Discord IPC client → RPC payloads: uses RPC packets
Jellyfin.Plugin.DiscordRichPresence/Discord/DiscordIpcClient.cs - Discord IPC client → Discord Desktop: sends over local IPC
README.md - Plugin & dashboard → Plugin settings: owns configuration
Jellyfin.Plugin.DiscordRichPresence/Plugin.cs - Plugin & dashboard → Settings page: exposes settings page
Jellyfin.Plugin.DiscordRichPresence/Plugin.cs - Session monitor → Plugin settings: reads preferences
Jellyfin.Plugin.DiscordRichPresence/Session/SessionMonitor.cs - Activity builder → Plugin settings: formats by settings
Jellyfin.Plugin.DiscordRichPresence/Discord/ActivityBuilder.cs - Artwork resolver → Metadata providers: queries when enabled
README.md - Jellyfin Server → Plugin & dashboard: hosts plugin
README.md