From 2ae147ac01b13fec23d86e65e711db2e4aaa0a75 Mon Sep 17 00:00:00 2001
From: CodeDevMLH <145071728+CodeDevMLH@users.noreply.github.com>
Date: Fri, 13 Feb 2026 01:15:33 +0100
Subject: [PATCH] Add seasonal content support and enhance custom media ID
handling
---
.../Configuration/PluginConfiguration.cs | 1 +
.../Configuration/configPage.html | 229 +++++++++++++-----
.../Web/mediaBarEnhanced.js | 215 ++++++++--------
3 files changed, 293 insertions(+), 152 deletions(-)
diff --git a/Jellyfin.Plugin.MediaBarEnhanced/Configuration/PluginConfiguration.cs b/Jellyfin.Plugin.MediaBarEnhanced/Configuration/PluginConfiguration.cs
index 2364819..d205d14 100644
--- a/Jellyfin.Plugin.MediaBarEnhanced/Configuration/PluginConfiguration.cs
+++ b/Jellyfin.Plugin.MediaBarEnhanced/Configuration/PluginConfiguration.cs
@@ -34,6 +34,7 @@ namespace Jellyfin.Plugin.MediaBarEnhanced.Configuration
public bool EnableCustomMediaIds { get; set; } = true;
public string PreferredVideoQuality { get; set; } = "Auto";
public bool EnableSeasonalContent { get; set; } = false;
+ public string SeasonalSections { get; set; } = "[]";
public bool IsEnabled { get; set; } = true;
public bool EnableClientSideSettings { get; set; } = false;
public bool ApplyLimitsToCustomIds { get; set; } = false;
diff --git a/Jellyfin.Plugin.MediaBarEnhanced/Configuration/configPage.html b/Jellyfin.Plugin.MediaBarEnhanced/Configuration/configPage.html
index 108d101..b7ee732 100644
--- a/Jellyfin.Plugin.MediaBarEnhanced/Configuration/configPage.html
+++ b/Jellyfin.Plugin.MediaBarEnhanced/Configuration/configPage.html
@@ -94,6 +94,7 @@
+
Custom Media IDs
-
If enabled, the slideshow will try to show the items listed
- below. If the list is empty, default behavior (random items) is used. Disable this
- to temporarily ignore your custom list without deleting it.
+
If enabled, the slideshow will show the items listed
+ below as the default content. If the list is empty, random items from your library are used.
If enabled, the Max Items limit (Advanced → Content Limits) will also apply to Custom Media IDs and Collections. By default, custom lists are not limited.
-
-
-
-
Enter the IDs of the items you want to show in the slideshow.
- You can separate them by new line or comma.
-
- Manual Trailer/Video Override: You can specify a YouTube URL OR a Jellyfin Item ID (e.g. for a Theme Video) for an item by adding it in
- brackets: e.g. ID DESCRIPTION [https://youtu.be/...] or ID [Method] DESCRIPTION.
-
- Methods:
-
-
YouTube URL: Play a remote trailer from YouTube.
-
Jellyfin Item ID (GUID): Play the video of another library item (e.g. a Theme Video or Backdrop Video) using the native player.
-
-
- You can also add a description after the ID using any separator like space, pipe
- (|) or dash (-): e.g. ID DESCRIPTION or ID | DESCRIPTION
-
- Note: If using a Collection Name (instead of an ID) combined with a description, you MUST use
- the pipe (|) separator.
-
- Note: The separator MUST NOT be a hex character (0-9, a-f).
-
- Seasonal Mode Enabled: Define lines with date ranges (Format: DD.MM-DD.MM |
- name | IDs).
- Example:
- 20.10-31.10 | Halloween | ID1, ID2 [https://youtu.be/...]
- 01.12-26.12 | Christmas | ID3, ID4
- Only lines matching the current date will be used. If no line matches, it will try to
- fetch the list.txt or use random items.
+
+
+
+
+
Enter the IDs of the items you want to show in the slideshow as
+ your default content.
+ You can separate them by new line or comma.
+
+ Manual Trailer/Video Override: You can specify a YouTube URL OR a Jellyfin Item ID (e.g. for a Theme Video) for an item by adding it in
+ brackets: e.g. ID DESCRIPTION [https://youtu.be/...] or ID [JellyfinItemId] DESCRIPTION.
+
+ Methods:
+
+
YouTube URL: Play a remote trailer from YouTube.
+
Jellyfin Item ID (GUID): Play the video of another library item (e.g. a Theme Video or Backdrop Video) using the native player.
+
+ You can also add a description after the ID using any separator like space, pipe
+ (|) or dash (-): e.g. ID DESCRIPTION or ID | DESCRIPTION
+
+ Note: If using a Collection Name (instead of an ID) combined with a description, you MUST use
+ the pipe (|) separator.
+
+ Note: The separator MUST NOT be a hex character (0-9, a-f).
+
+
You can find the IDs of your items in the URL of the item page in the web interface.
+ Example:
+ https://your-jellyfin-url/web/#/details?id=your-item-id&serverId=your-server-id
+ You can also insert a name of a collection or playlist to fetch the IDs of all items in
+ it (will take the first hit. Note: there is currently no feedback if the name
+ resolution succeeded, you will have to look if the bar displays the correct items).
+
-
You can find the IDs of your items in the URL of the item page in the web interface.
- Example:
- https://your-jellyfin-url/web/#/details?id=your-item-id&serverId=your-server-id
- You can also insert a name of a collection or playlist to fetch the IDs of all items in
- it (will take the first hit. Note: there is currently no feedback if the name
- resolution succeeded, you will have to look if the bar displays the correct items.).
-
+
+
+
Seasonal Content
+
+
+
When enabled, seasonal sections below will override the default list
+ during their active date ranges. If no season matches the current date, the default Custom Media IDs above are used as fallback.