Thanks to SethBacon (Video integration)
BobHasNoSoul (Original architect)
MakD (Mobile Styling)
- Download
spotlight.html
andList.txt
. Go to yourjellyfin-web
folder (C:\Program Files\Jellyfin\Server\jellyfin-web) and create a folder namedui
and dropspotlight.html
andList.txt
in that folder
Important: Open Notepad with Administrator rights, or use Notepad++ for this
In the jellyfin-web folder, open the filehome-html.RANDOMSTRINGHERE.chunk.js
. Replace everything with this code
Show code
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8372], {
5939: function(a, e, t) {
t.r(e),
e.default = `
<div id="indexPage" style="outline:0" data-role="page" data-dom-cache="true" class="page homePage libraryPage allLibraryPage backdropPage pageWithAbsoluteTabs withTabs" data-backdroptype="movie,series,book">
<style>
.featurediframe {width: 95vw; height: 23.5em; display: block; border: 0px solid #000; margin: 0 auto; margin-bottom: 0em; margin-top: 1em;}
@media (min-width: 3158px) {.featurediframe {height: 50em;} }
@media (min-width: 2601px) and (max-width: 3157px) {.featurediframe {height: 33em;} }
@media (min-width: 2000px) and (max-width: 2600px) {.featurediframe {height: 27em; font-size: 133%;} .layout-desktop #homeTab .sections.homeSectionsContainer {margin-top: -3em !important;} }
@media (max-width: 1000px) and (orientation: portrait) {.featurediframe {height: 25em; margin-bottom: -3em;} }
@media (max-width: 1000px) and (orientation: landscape) {.featurediframe {height: 26em; margin-bottom: -7em;} }
@media (max-width: 400px) and (orientation: portrait) {.featurediframe {height: 45vh; margin-bottom: 0em;} }
@media (max-height: 400px) and (orientation: landscape) {.featurediframe {height: 100vh;} }
@media screen and (aspect-ratio: 4/3) {.featurediframe {height: 25em;} }
@media screen and (aspect-ratio: 3/4) {.featurediframe {height: 25em; margin-bottom: -5em;} }
@media screen and (aspect-ratio: 16/10) and (max-height: 1200px) {.featurediframe {height: 34em; margin-bottom: -5em;} }
@media screen and (aspect-ratio: 10/16) and (max-height: 1280px) {.featurediframe {height: 25em; margin-bottom: -5em;} }
@media (min-aspect-ratio: 21/9) and (min-width: 3000px) {.featurediframe { height: 50em;} }
</style>
<div class="tabContent pageTabContent" id="homeTab" data-index="0"><iframe class="featurediframe" src="/web/ui/spotlight.html"></iframe><div class="sections"></div></div><div class="tabContent pageTabContent" id="favoritesTab" data-index="1"> <div class="sections"></div></div></div>`;}}]);
document.addEventListener("DOMContentLoaded", () => {
const homeTab = document.getElementById("homeTab");
const spotlightIframe = homeTab.querySelector(".featurediframe");
const observer = new MutationObserver(() => {
const isHomeTabActive = homeTab.classList.contains("is-active");
spotlightIframe.style.display = isHomeTabActive ? "block" : "none";
});
observer.observe(homeTab, { attributes: true, attributeFilter: ["class"] });
});
- Save the file. Empty your browser's cached web content (Ctrl+F5 or empty it from your browser's Cookies and Site Data settings section)
To preselect content, edit List.txt in the ui
folder and paste the ID of each piece of content to be featured (IDs can be found in the address bar).
IMPORTANT
If you use List.txt to preselect content and a User has an Age Rating limit on their account (U, PG etc) make sure you add content for them to see too, or it will just be blank (content above their Age Limit is hidden to them)
If it is empty below
line 1, the bar will feature content at random.
Show guide
Same as above, except open this link and download the file spotlight.html (don't just save the link, it'll save the github page)
Show guide
Open this link and download the file spotlight.html (don't just save the link, it'll save the github page)
And use this version of home-html.chunk.js
And add this to your Custom CSS Box in the Jellyfin Dashboard
@import url("https://cdn.jsdelivr.net/gh/tedhinklater/Jellyfin-Featured-Content-Bar@main/fullscreen/fullscreenspotlight.css");
Show guide
- Create the ui Directory
sudo mkdir -p /usr/share/jellyfin/web/ui
- Download your spotlight.html and List.txt files (make sure you edited them, as above) and then copy them to the new "ui" folder
sudo cp /local/path/to/spotlight.html /usr/share/jellyfin/web/ui/
- Add the relevant script to home-html.chunk.js
sudo nano /usr/share/jellyfin/web/home-html.chunk.js
- Ensure the ui folder & spotlight.html are readable by Jellyfin
sudo chown -R jellyfin:jellyfin /usr/share/jellyfin/web/ui
sudo chmod -R 755 /usr/share/jellyfin/web/ui
- Restart Jellyfin
sudo systemctl restart jellyfin
- Clear Browser Cache
Make sure to clear your browser cache to load the updated home-html.chunk.js & spotlight.html
Show guide
- Create the ui Directory (assuming your container is named jellyfin)
docker exec -u 0 jellyfin mkdir /jellyfin/jellyfin-web/ui
- Copy your downloaded spotlight.html and List.txt files to the new "ui" folder (don't forget to edit them, as above)
docker cp spotlight.html jellyfin:/jellyfin/jellyfin-web/ui/
- Add the relevant code line to the home-html..chunk.js file
Since I'm not aware of a way to edit the file directly in the container, I just created the file outside and copied it back in once I edited it:
docker cp jellyfin:/jellyfin/jellyfin-web/home-html.<numbers>.chunk.js .
and then you can add the relevant code line to the file (see step 6 above)
nano home-html.<numbers>.chunk.js
- Copy the file back to the container
docker cp home-html.<numbers>.chunk.js jellyfin:/jellyfin/jellyfin-web/
- Clear Browser Cache; if it doesn't work instantly, restart the container
docker restart jellyfin
Show guide
When using a reverse proxy like Nginx or Caddy, the X-Frame-Options: DENY
header can block iframes, preventing the feature
- Open your site's configuration:
sudo nano /etc/nginx/sites-available/your-site.conf
- Modify or add the following directive:
- To disable:
# add_header X-Frame-Options "DENY";
- To allow iframes from the same origin:
add_header X-Frame-Options "SAMEORIGIN";
- To disable:
- Restart Nginx:
sudo systemctl restart nginx
-
Modify the /etc/caddy/Caddyfile:
-
To disable:
header -X-Frame-Options
-
To allow:
header X-Frame-Options "SAMEORIGIN"
-
-
Restart Caddy:
sudo systemctl restart caddy
Open home-html.RANDOMSTRINGHERE.chunk.js
and replace everything with this
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8372],{5939:function(a,e,t){t.r(e),e.default='<div id="indexPage" style="outline:0" data-role="page" data-dom-cache="true" class="page homePage libraryPage allLibraryPage backdropPage pageWithAbsoluteTabs withTabs" data-backdroptype="movie,series,book"> <div class="tabContent pageTabContent" id="homeTab" data-index="0"> <div class="sections"></div> </div> <div class="tabContent pageTabContent" id="favoritesTab" data-index="1"> <div class="sections"></div> </div> </div> '}}]);