Skip to content

[FEA] server plugin support: custom home sections / custom sidebar items etc#625

Open
kamilkosek wants to merge 25 commits intodamontecres:mainfrom
kamilkosek:develop/server-plugin-support
Open

[FEA] server plugin support: custom home sections / custom sidebar items etc#625
kamilkosek wants to merge 25 commits intodamontecres:mainfrom
kamilkosek:develop/server-plugin-support

Conversation

@kamilkosek
Copy link
Copy Markdown

@kamilkosek kamilkosek commented Jan 3, 2026

Description

This PR adds support for the jellyfin server side plugin to allow pushing settings and other configurable items to the client.
Current state:

  • provide an external image as a background for the login screen
  • Fully customizable home screen
  • Customize sidebar/navigation drawer
  • Push app settings

✅ provide an external image as a background for the login screen

In the plugin settings on the server, you can set an external url, alpha and blur:
grafik

Once you entered the server url and connected to the server, the image is loaded and shown:
grafik

✅ Fully customizable home screen

This follows the same approach as streamyfin does, where you can configure rows which are shown on the homescreen.

[!IMPORTANT]
When no custom sections are configured, the default home screen is shown.

In the plugin settings, you can add, remove, edit and reorder the sections to be shown on the homescreen:
grafik

The available section types are:

  • Resume: Continue watching content in progress
  • NextUp: Next episodes in series
  • Latest: Recently added content
  • Items: Custom item queries
  • Custom: Custom plugin endpoints

✅ Customize sidebar/navigation drawer

  • Add the ability to configure which Items from the sidebar/navigation drawer are shown to the user.
  • Also make it possible to add menu items, kind of shortcuts to custom collections, so they behave like libraries

Notes and thoughts:

Plugin endpoint response:

 // Endpoint: /wholphin/navdrawer
{
  "items": [
    {
      "id": "abc-123-library-id",
      "type": "library",        // library, collection, or playlist
      "name": "Filme",           // Optional: override display name
      "order": 0,
      "visible": true
    },
    {
      "id": "xyz-789-collection-id",
      "type": "collection",
      "name": "Netflix",
      "order": 1,
      "visible": true,
      "imageUrl": "/Items/xyz-789/Images/Primary"  // Optional: custom icon URL
    },
    {
      "id": "def-456-library-id",
      "type": "library",
      "name": "Live TV",
      "order": 2,
      "visible": true
    }
  ]
}

Possible nav drawer structure/behavoiur:

┌─────────────────────┐
│ 👤 User Account     │ ← Always first
├─────────────────────┤
│ 🔍 Search          │ ← Fixed
│ 🏠 Home            │ ← Fixed
│ ❤️  Favorites       │ ← Fixed
├─────────────────────┤
│ 🎬 Filme           │ ← visible: true
│ 🥥 Collection XYZ       │ ← visible: true
│ 📺 Live TV         │ ← visible: true
│ 🎵 Playlists       │ ← visible: true
│ ⋯  More            │ ← Show if any visible: false items exist
│   ├─ Sammlungen   │ ← visible: false (shown when expanded)
│   └─ Serien       │ ← visible: false (shown when expanded)
├─────────────────────┤
│ ⚙️  Settings        │ ← Always last
└─────────────────────┘

□ Push app settings

  • provide an endpoint to push settings to the client
  • lock settings via the server plugin
  • provide a way for the user to "refresh to default settings provided by the server"

The plugin lives here

Related issues

#598
#399

AI/LLM usage

Claude Sonnet 4.5 was used heavily to assist me.

@kamilkosek kamilkosek changed the title [WIP] server plugin support [FEA] server plugin support Jan 6, 2026
@kamilkosek
Copy link
Copy Markdown
Author

Custom Sidebar/navigation drawer items

Important

When nothing is configured in the plugin, the default behaviour stays.

On your server you can now configure the sidebar/navigation drawer items:

add an item

grafik

item overview

grafik

The following table shows which items remain if you use custom items:

┌─────────────────────┐
│ 👤 User Account     │ ← Always first
├─────────────────────┤
│ 🔍 Search          │ ← Fixed
│ 🏠 Home            │ ← Fixed
│ ❤️  Favorites       │ ← Fixed
├─────────────────────┤
│ 🎬 Filme           │ ← visible: true
│ 🥥 Collection XYZ       │ ← visible: true
│ 📺 Live TV         │ ← visible: true
│ 🎵 Playlists       │ ← visible: true
│ ⋯  More            │ ← Show if any visible: false items exist
│   ├─ Sammlungen   │ ← visible: false (shown when expanded)
│   └─ Serien       │ ← visible: false (shown when expanded)
├─────────────────────┤
│ ⚙️  Settings        │ ← Always last
└─────────────────────┘

UI in Wholphin

Then in Wholphin itself, the Sidebar is rendered like this. If the collection has a custom logo set it will use this, otherwise the primary image from the collection is taken - if none of those applies a default font awesome icon is taken.

grafik

new Collection UI component

In order to display collection´s so that they behave more or less like libraries, I´ve created a CollectionFolderCollection.kt composable. This screenshot shows the screen after you navigate to a collection , currently I havent an idea how to signalize to the user that they are currenlty "in a collection" :
grafik

Any thoughts on this ?

@kamilkosek kamilkosek changed the title [FEA] server plugin support [FEA] server plugin support: custom home sections / custom sidebar items etc Jan 7, 2026
@damontecres
Copy link
Copy Markdown
Owner

Hi @kamilkosek, I appreciate the contribution and enthusiasm, but this idea for the server plugin needs more discussion on the goals and how & where it will integrate. There needs to be a good plan for the API between Wholphin and the plugin.

Maybe in #598, can you outline the goals more?

@colin715
Copy link
Copy Markdown

Love the idea of having custom collections in the sidebar. The only collection we ever use is the "Kid's Collection" for my children, and it would be way easier for them to be able to just select it straight from the sidebar.

@kamilkosek
Copy link
Copy Markdown
Author

Love the idea of having custom collections in the sidebar. The only collection we ever use is the "Kid's Collection" for my children, and it would be way easier for them to be able to just select it straight from the sidebar.

Same for me + plus I have many users which are more "streaming provider driven" e.g. " I want to watch something from Netflix" or "I know there is a show on Paramount+ , but I don´t know its name so I have to browse for it". So I have collections for every streaming provider.

@ClappTV
Copy link
Copy Markdown

ClappTV commented Jan 17, 2026

I love the idea of being able to configure the interface from the server for all users, since many people in my family don’t know how to do it or end up changing things and then complain that it doesn’t work the way it should. It would be great (I don’t know if it already does this) if certain settings could be locked from the server so they can’t be modified

@kamilkosek
Copy link
Copy Markdown
Author

I love the idea of being able to configure the interface from the server for all users, since many people in my family don’t know how to do it or end up changing things and then complain that it doesn’t work the way it should. It would be great (I don’t know if it already does this) if certain settings could be locked from the server so they can’t be modified

I already have a prototype with locking settings (local only) which works quite well. But I dont want to make this PR too large

@ClappTV
Copy link
Copy Markdown

ClappTV commented Jan 19, 2026

It also has options to see what server users watch the most and a watchlist.

I love the idea of being able to configure the interface from the server for all users, since many people in my family don’t know how to do it or end up changing things and then complain that it doesn’t work the way it should. It would be great (I don’t know if it already does this) if certain settings could be locked from the server so they can’t be modified

I already have a prototype with locking settings (local only) which works quite well. But I dont want to make this PR too large

Could you add StreamyStats statistics, like Streamyfin does? These include AI-based recommendations and suggest similar content based on what you watch.
It also has options to see what server users watch the most and a watchlist.

@kamilkosek
Copy link
Copy Markdown
Author

It also has options to see what server users watch the most and a watchlist.

I love the idea of being able to configure the interface from the server for all users, since many people in my family don’t know how to do it or end up changing things and then complain that it doesn’t work the way it should. It would be great (I don’t know if it already does this) if certain settings could be locked from the server so they can’t be modified

I already have a prototype with locking settings (local only) which works quite well. But I dont want to make this PR too large

Could you add StreamyStats statistics, like Streamyfin does? These include AI-based recommendations and suggest similar content based on what you watch. It also has options to see what server users watch the most and a watchlist.

I´ll take a look into it - it should not be impossible.

@ClappTV
Copy link
Copy Markdown

ClappTV commented Jan 21, 2026

Can this be used for testing already? Or does it need to be merged first?

@kamilkosek
Copy link
Copy Markdown
Author

Can this be used for testing already? Or does it need to be merged first?

Sure, you can test it using my forks build, see here: kamilkosek/jellyfin-plugin-wholphin#1

@jaretclifton
Copy link
Copy Markdown

Would be nice to include the default "next up" time limit.

damontecres added a commit that referenced this pull request Feb 13, 2026
## Description

This PR adds the ability to customize the home page in-app

### Features
- Add, remove, & reorder rows
- Persist the configuration locally
- Save the configuration to the server, allowing to pull down on other
devices
- Adjust view options for rows such as card height, image type,
preferring series images, or aspect ratio (similar to libraries)
- Pull down the web client's home rows (no plugins are supported yet!)
- Preview of the home page which is usable & updated as changes are made

### Row options

These are row types that can be added in-app via the UI:
- Continue watching
- Next up
- Combined continue waiting & next up
- Recently added in a library
- Recently released in a library
- Genres in a library
- Suggestions for a library (movie & TV show libraries only)
- Favorite movies, tv shows, episodes, etc

Additionally, there are more row types that don't have a UI to add them
(yet):
- Simple query to get items from a parent ID such as a collection or
playlist
- Complex query to get arbitrary items via the `/Items` API endpoint

### Dev notes

Settings are loaded in order:
1. Locally saved
2. Remote saved
3. Fallback to default similar to Wholphin's original home rows

The remote saved settings are stored via the display preferences API.

I know some server admins would prefer to push a default setup to their
clients. This PR does not have that ability, but it does define a
straightforward API for defining the settings. Something like the
potential server plugin work started in #625 could be slimmed down to
expose a URL to be added in the load order.

I'm also investigating integration with popular home page plugins to
allow for further customization, but will take more time.

### Related issues
Closes #399
Closes #361
Closes #282
Related to #340
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants