20 Commits

Author SHA1 Message Date
lscambo13
b218a819da RELEASE: ElegantFin v25.11.25 2025-11-24 22:06:51 +05:30
lscambo13
c4d04e1709 Fix: Optimized performance a bit 2025-11-24 21:04:17 +05:30
lscambo13
c9839f0848 Fix: TYPO!! #205 2025-11-24 19:07:46 +05:30
lscambo13
779b3449c0 dev: Updated the documentation 2025-11-23 23:59:59 +05:30
lscambo13
53b003dd9e Fix: Media Bar contents were overlapping on smaller displays 2025-11-23 21:32:37 +05:30
lscambo13
5c915d6ac1 Fix: Disabled or adjusted some animations for improved performance on low-end TVs 2025-11-23 21:08:13 +05:30
lscambo13
2336be539a Fix: Disabled the new episode grid on older browsers to avoid issues with Music pages 2025-11-23 20:21:37 +05:30
lscambo13
76a5319c97 Fix: Artist page top margin was too low 2025-11-23 20:14:20 +05:30
lscambo13
296263c9d7 dev: Renamed '--backdropPositionY' to a more logical name, '--backdropTrimFromTop' 2025-11-23 20:11:59 +05:30
lscambo13
422a1e185e New: Shift the media page content up when Now Playing bottom bar is visible 2025-11-23 20:01:20 +05:30
lscambo13
7dcd42f992 Fix: Custom Media Cover titles were not visible on TVs 2025-11-23 19:58:58 +05:30
lscambo13
4e53bd27bc Fix: Improved compatibility with older browsers that don't support 'aspect-ratio' 2025-11-15 21:40:21 +05:30
lscambo13
86a1e1c74e Fix: Added responsive Episode card grid to get rid of the media queries 2025-11-15 21:31:16 +05:30
lscambo13
81a118e86e dev: updated documentation 2025-11-15 20:37:23 +05:30
lscambo13
44e95c42cb New: Added custom covers for Mixed Media libraries, Recordings and Recorded Movies
Fix: Added line wrap to prevent long library names from overflowing
dev: Simplified the code
2025-11-15 20:27:46 +05:30
lscambo13
8b1585da89 Fix: Added the missing entries i.e. Playlists, Recorded Movies etc 2025-11-15 20:24:05 +05:30
Mads Kelberg
3d08baecc8 fix: custom background overwrites scaling & position 2025-11-14 11:59:59 +01:00
Mads Kelberg
fe651691e3 refactor: use data label instead of static label 2025-11-13 23:23:08 +01:00
Mads Kelberg
cf67874221 chore: group css and remove duplicate 2025-11-13 23:18:07 +01:00
Mads Kelberg
676a1be4ae fix: update CSS selectors for CollectionFolder type 2025-11-13 23:13:43 +01:00
17 changed files with 4493 additions and 218 deletions

View File

@@ -205,7 +205,7 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
</details> </details>
<details> <details>
<summary><i>7. Enable experimental support for the Media Bar plugin</i></summary> <summary><i>7. Enable alternative style for the Media Bar plugin</i></summary>
<img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/3e88e270-40f9-48ba-8173-f65b94344f8d" /> <img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/3e88e270-40f9-48ba-8173-f65b94344f8d" />
@@ -217,6 +217,23 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
- To undo this change, simply remove this code block. - To undo this change, simply remove this code block.
</details> </details>
<details>
<summary><i>8. Switch between different app bar styles</i></summary>
https://github.com/user-attachments/assets/b5868cd2-8df9-490d-a2b6-4386c6ddcd56
- You can switch between these using `--appBarHeight`.
- Use 5em to enable the fading app bar (seamless) (default);
- Or, use 4.6em to get the solid app bar (cleaner with border)
```
:root{
/* example */
--appBarHeight: 4.6em;
}
```
- To undo this change, simply remove this code block.
</details>
<hr> <hr>
### 🆗 Tested on ### 🆗 Tested on
@@ -231,7 +248,10 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
<summary>1⃣ - <i>How do I check if I am using the latest version of ElegantFin?</i></summary> <summary>1⃣ - <i>How do I check if I am using the latest version of ElegantFin?</i></summary>
- Check the version number at the bottom in the Settings screen. - Check the version number at the bottom in the Settings screen.
- It should be something like `ElegantFin v25.10.XX`. - It should be something like `ElegantFin v25.XX.XX`.
<img width="380" height="300" alt="image" src="https://github.com/user-attachments/assets/aecca6f5-7bd3-4057-9131-aa60b3becbaf" />
</details> </details>
<details> <details>
@@ -241,7 +261,7 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
- Once that cache is updated, the new version will be loaded automatically. - Once that cache is updated, the new version will be loaded automatically.
- There are multiple ways to clear the cache depending on your OS, smartphone or TV. Look online if you don't know. - There are multiple ways to clear the cache depending on your OS, smartphone or TV. Look online if you don't know.
- On the web version, you can force a hard refresh of the page using CTRL + F5. - On the web version, you can force a hard refresh of the page using CTRL + F5.
- On apps, try signing out and back in again. OR in case of Jellyfin Media Player on windows, you might need to delete the cache folder. That should definitely pull the latest version. - On apps, try signing out and back in again. OR in case of Jellyfin Media Player on windows, you might need to delete the cache folder.
</details> </details>
<details> <details>

File diff suppressed because one or more lines are too long

View File

@@ -92,9 +92,7 @@
--sidePadding: 3.3%; --sidePadding: 3.3%;
--itemColumnGap: 1em; --itemColumnGap: 1em;
--primaryItemPageNegativeSpace: 14vh; --minEpisodeCardWidth: 26em;
--secondaryItemPageNegativeSpace: 60vh;
--clearLogoBottomSpace: 11em;
--blurSmallest: blur(2px); --blurSmallest: blur(2px);
--blurDefault: blur(5px); --blurDefault: blur(5px);
@@ -156,9 +154,9 @@
use 4.6em to get the solid app bar (cleaner with border) */ use 4.6em to get the solid app bar (cleaner with border) */
--appBarHeight: 5em; --appBarHeight: 5em;
/* use 50% to crop the top of the backdrop image slightly (recommended) [default]; /* use 10% to crop the top 10% of a backdrop image on a 16:9 screen (recommended) [default];
use 0% to prevent the cropping from top, or choose between 0% and 100% according to your preference */ use a figure between 0% and 20% according to your liking */
--backdropPositionY: 50%; --backdropTrimFromTop: 10%;
} }
html { html {
@@ -169,11 +167,25 @@ html {
-webkit-tap-highlight-color: transparent !important; -webkit-tap-highlight-color: transparent !important;
} }
body {
--primaryItemPageNegativeSpace: 14vh;
--secondaryItemPageNegativeSpace: 60vh;
--clearLogoBottomSpace: 11em;
}
.layout-desktop > body:has(> audio[src]) {
--primaryItemPageNegativeSpace: calc(14vh + 5em);
--secondaryItemPageNegativeSpace: calc(60vh + 5em);
}
.layout-mobile { .layout-mobile {
--itemColumnGap: 0; --itemColumnGap: 0;
--headerColorGradient: var(--headerColorGradientAlt); --headerColorGradient: var(--headerColorGradientAlt);
--blurLargest: blur(12px); --blurLargest: blur(12px);
--headerBlurMask: linear-gradient(180deg, white 60%, 90%, transparent); --headerBlurMask: linear-gradient(180deg, white 60%, 90%, transparent);
}
.layout-mobile > body {
--secondaryItemPageNegativeSpace: 45vh; --secondaryItemPageNegativeSpace: 45vh;
} }
@@ -391,7 +403,7 @@ html {
background: rgba(255, 255, 255, 0.05); background: rgba(255, 255, 255, 0.05);
} }
.card-hoverable .cardOverlayContainer:after { .cardOverlayContainer:after {
content: var(--cardHoverEffect); content: var(--cardHoverEffect);
transition: 0.5s; transition: 0.5s;
position: absolute; position: absolute;
@@ -493,7 +505,7 @@ html {
color: white; color: white;
} }
.cardOverlayContainer:has(.cardOverlayButton:hover) { .cardOverlayContainer:has(> button:hover) {
backdrop-filter: var(--blurDefault); backdrop-filter: var(--blurDefault);
} }
@@ -508,37 +520,13 @@ html {
/* episode grid start */ /* episode grid start */
.layout-desktop .detailSection > #listChildrenCollapsible .vertical-list, @supports (display: revert) {
.layout-desktop .detailPageContent > #childrenCollapsible .vertical-list { .vertical-list:has(.listItem-largeImage) {
display: grid; display: grid;
grid-template-columns: repeat(4, 1fr); grid-template-columns: repeat(auto-fill, minmax(min(var(--minEpisodeCardWidth), 100%), 1fr));
gap: var(--itemColumnGap); gap: var(--itemColumnGap);
} }
@media (max-width: 100em) {
.layout-desktop .detailSection > #listChildrenCollapsible .vertical-list,
.layout-desktop .detailPageContent > #childrenCollapsible .vertical-list {
grid-template-columns: repeat(3, 1fr);
}
}
@media (max-width: 64em) {
.layout-desktop .listItemImage-large {
width: 100%;
}
.layout-desktop .detailSection > #listChildrenCollapsible .vertical-list,
.layout-desktop .detailPageContent > #childrenCollapsible .vertical-list {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 40em) {
.layout-desktop .detailSection > #listChildrenCollapsible .vertical-list,
.layout-desktop .detailPageContent > #childrenCollapsible .vertical-list {
grid-template-columns: repeat(1, 1fr);
}
}
.layout-desktop .listItem-largeImage { .layout-desktop .listItem-largeImage {
display: grid; display: grid;
margin-bottom: 0 !important; margin-bottom: 0 !important;
@@ -560,9 +548,9 @@ html {
order: 1; order: 1;
grid-column: 1 / -1; grid-column: 1 / -1;
height: max-content; height: max-content;
min-height: 15em;
width: 100%; width: 100%;
aspect-ratio: 16 / 9; aspect-ratio: 16 / 9;
/* margin: 0 !important; */
box-sizing: border-box; box-sizing: border-box;
} }
@@ -579,6 +567,7 @@ html {
grid-column: 3; grid-column: 3;
align-self: center; align-self: center;
} }
}
/* episode grid end */ /* episode grid end */
@@ -1264,7 +1253,7 @@ html {
} }
#itemDetailPage:has(.detailImageContainer .cardPadder-square:not(.person)) .itemBackdrop { #itemDetailPage:has(.detailImageContainer .cardPadder-square:not(.person)) .itemBackdrop {
height: calc(100vh - 27vh - var(--secondaryItemPageNegativeSpace)); height: calc(100vh - 20vh - var(--secondaryItemPageNegativeSpace));
} }
.detailLogo { .detailLogo {
@@ -1515,7 +1504,7 @@ html,
} }
.backdropImage { .backdropImage {
background-position-y: var(--backdropPositionY); background-position-y: clamp(0%, calc(var(--backdropTrimFromTop) * 5), 100%);
} }
.backdropImage:after, .backdropImage:after,
@@ -2199,10 +2188,6 @@ progress + span {
} }
} }
.layout-tv .emby-checkbox:focus + span + .checkboxOutline {
transform: scale(1.75);
}
.cardIndicators { .cardIndicators {
-webkit-align-items: center; -webkit-align-items: center;
align-items: center; align-items: center;
@@ -2906,9 +2891,9 @@ div[data-role="controlgroup"] a.ui-btn-active {
padding-right: var(--sidePadding) !important; padding-right: var(--sidePadding) !important;
} }
.paddded-left { /* .padded-left {
padding-left: var(--sidePadding) !important; padding-left: var(--sidePadding) !important;
} } */
.layout-mobile .padded-right-withalphapicker { .layout-mobile .padded-right-withalphapicker {
padding-left: 4.5%; padding-left: 4.5%;
@@ -3900,7 +3885,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
} }
/* this allows switching between the header styles easily */ /* this allows switching between the header styles easily */
#reactRoot > div:nth-of-type(3) { #reactRoot > div:nth-child(3) {
container-name: skinHeader; container-name: skinHeader;
container-type: size; container-type: size;
height: var(--appBarHeight); height: var(--appBarHeight);
@@ -3956,6 +3941,8 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
background: linear-gradient(transparent, var(--darkerGradientPointAlpha) 20em); background: linear-gradient(transparent, var(--darkerGradientPointAlpha) 20em);
} }
/* performance improvements fot low-end TVs - start */
/* .layout-tv *, /* .layout-tv *,
.layout-tv *::before, .layout-tv *::before,
.layout-tv *::after { .layout-tv *::after {
@@ -3977,11 +3964,28 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
display: none !important; display: none !important;
} */ } */
/* .layout-tv .emby-checkbox:focus + span + .checkboxOutline {
transform: scale(1.75);
} */
.layout-tv .show-focus:focus, .layout-tv .show-focus:focus,
.layout-tv .show-animation:focus { .layout-tv .show-animation:focus,
.emby-select-focusscale:focus {
transform: none !important; transform: none !important;
} }
.layout-tv .focuscontainer,
.layout-tv .backdropImage {
animation-duration: 0s !important;
backdrop-filter: none;
}
.card.show-animation .cardBox {
transition: transform 0.05s ease-out, -webkit-transform 0.05s ease-out;
}
/* performance improvements fot low-end TVs - end */
/* basic styling for the Media Bar Plugin - start /* basic styling for the Media Bar Plugin - start
for extended styling, use the add-on */ for extended styling, use the add-on */

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -11,6 +11,9 @@
--colorOverlayHomevideosCover: rgb(39, 90, 185); --colorOverlayHomevideosCover: rgb(39, 90, 185);
--colorOverlayBooksCover: rgb(166, 68, 70); --colorOverlayBooksCover: rgb(166, 68, 70);
--colorOverlayFoldersCover: rgb(173, 60, 113); --colorOverlayFoldersCover: rgb(173, 60, 113);
--colorOverlayMixedCover: rgb(194, 58, 58);
--colorOverlayRecordedmoviesCover: rgb(52, 52, 52);
--colorOverlayRecordedtvCover: rgb(120, 100, 28);
--urlMoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/movies.webp); --urlMoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/movies.webp);
--urlTvshowsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp); --urlTvshowsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp);
--urlLivetvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/livetv.webp); --urlLivetvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/livetv.webp);
@@ -20,169 +23,113 @@
--urlHomevideosCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/homevideos.webp); --urlHomevideosCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/homevideos.webp);
--urlBooksCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/books.webp); --urlBooksCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/books.webp);
--urlFoldersCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/folders.webp); --urlFoldersCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/folders.webp);
--urlMixedCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/mixed.webp);
--urlRecordedmoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedmovies.webp);
--urlRecordedtvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedtv.webp);
} }
.card-withuserdata[data-isfolder="true"] .cardImageContainer.defaultCardBackground { [data-type="CollectionFolder"] .defaultCardBackground,
[data-type="UserView"] .defaultCardBackground,
[data-type="CollectionFolder"] .cardContent,
[data-type="UserView"] .cardContent {
filter: contrast(0.85); filter: contrast(0.85);
background-size: cover !important; background-size: cover !important;
background-position: 50% !important; background-position: 50% !important;
background-blend-mode: multiply; background-blend-mode: multiply;
} }
.card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"], [data-type="Series"], [data-type="Folder"], [data-type="Season"], [data-type="Playlist"]) .cardImageContainer.cardContent::before { [data-type="CollectionFolder"] .cardContent::before,
[data-type="UserView"] .cardContent::before {
content: attr(aria-label);
position: absolute; position: absolute;
font-size: clamp(1em, max(2.5vh, 2vw), 2.5em); font-size: clamp(1em, max(2.5vh, 2vw), 2em);
margin-bottom: .175em;
font-weight: 800; font-weight: 800;
color: white; color: white;
font-family: 'Noto Sans'; font-family: "Noto Sans";
text-align: center; text-align: center;
width: 94%;
white-space: normal;
} }
.card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"], [data-type="Series"], [data-type="Folder"]) .cardImageIcon.material-icons:not(.quiz)::before { .layout-tv [data-type="CollectionFolder"]::before,
.layout-tv [data-type="UserView"]::before {
content: attr(aria-label);
position: absolute;
display: grid;
align-content: center;
top: 0;
bottom: 0;
font-size: clamp(1em, max(2.5vh, 2vw), 2em);
font-weight: 800;
color: white;
font-family: "Noto Sans";
text-align: center;
width: 94%;
white-space: normal;
z-index: 1;
}
[data-type="CollectionFolder"] .cardImageIcon:not(.quiz)::before,
[data-type="UserView"] .cardImageIcon:not(.quiz)::before {
display: none; display: none;
} }
/* These show up when no image is set */ [data-collectiontype="movies"] .cardContent {
background-color: var(--colorOverlayMoviesCover) !important;
/* div[data-collectiontype="movies"] .cardImageContainer.defaultCardBackground {
background: var(--colorOverlayMoviesCover) !important;
background-image: var(--urlMoviesCover) !important; background-image: var(--urlMoviesCover) !important;
} }
div[data-collectiontype="tvshows"] .cardImageContainer.defaultCardBackground { [data-collectiontype="tvshows"] .cardContent {
background: var(--colorOverlayTvshowsCover) !important; background-color: var(--colorOverlayTvshowsCover) !important;
background-image: var(--urlTvshowsCover) !important; background-image: var(--urlTvshowsCover) !important;
} }
div[data-collectiontype="livetv"] .cardImageContainer.defaultCardBackground { [data-collectiontype="livetv"] .cardContent {
background: var(--colorOverlayLivetvCover) !important; background-color: var(--colorOverlayLivetvCover) !important;
background-image: var(--urlLivetvCover) !important; background-image: var(--urlLivetvCover) !important;
} }
div[data-collectiontype="music"] .cardImageContainer.defaultCardBackground { [data-collectiontype="music"] .cardContent {
background: var(--colorOverlayMusicCover) !important; background-color: var(--colorOverlayMusicCover) !important;
background-image: var(--urlMusicCover) !important; background-image: var(--urlMusicCover) !important;
} }
div[data-collectiontype="homevideos"] .cardImageContainer.defaultCardBackground { [data-collectiontype="homevideos"] .cardContent {
background: var(--colorOverlayHomevideosCover) !important; background-color: var(--colorOverlayHomevideosCover) !important;
background-image: var(--urlHomevideosCover) !important; background-image: var(--urlHomevideosCover) !important;
} }
div[data-collectiontype="books"] .cardImageContainer.defaultCardBackground { [data-collectiontype="books"] .cardContent {
background: var(--colorOverlayBooksCover) !important; background-color: var(--colorOverlayBooksCover) !important;
background-image: var(--urlBooksCover) !important; background-image: var(--urlBooksCover) !important;
} }
div[data-collectiontype="boxsets"] .cardImageContainer.defaultCardBackground { [data-collectiontype="boxsets"] .cardContent {
background: var(--colorOverlayBoxsetsCover) !important; background-color: var(--colorOverlayBoxsetsCover) !important;
background-image: var(--urlBoxsetsCover) !important; background-image: var(--urlBoxsetsCover) !important;
} }
div[data-collectiontype="folders"] .cardImageContainer.defaultCardBackground { [data-collectiontype="folders"] .cardContent {
background: var(--colorOverlayFoldersCover) !important; background-color: var(--colorOverlayFoldersCover) !important;
background-image: var(--urlFoldersCover) !important; background-image: var(--urlFoldersCover) !important;
} }
div[data-collectiontype="playlists"] .cardImageContainer.defaultCardBackground { [data-collectiontype="playlists"] .cardContent {
background: var(--colorOverlayPlaylistsCover) !important; background-color: var(--colorOverlayPlaylistsCover) !important;
background-image: var(--urlPlaylistsCover) !important;
} */
/* These are the front facing images */
div[data-collectiontype="movies"] .cardImageContainer.cardContent {
background: var(--colorOverlayMoviesCover) !important;
background-image: var(--urlMoviesCover) !important;
}
div[data-collectiontype="tvshows"] .cardImageContainer.cardContent {
background: var(--colorOverlayTvshowsCover) !important;
background-image: var(--urlTvshowsCover) !important;
}
div[data-collectiontype="livetv"] .cardImageContainer.cardContent {
background: var(--colorOverlayLivetvCover) !important;
background-image: var(--urlLivetvCover) !important;
}
div[data-collectiontype="music"] .cardImageContainer.cardContent {
background: var(--colorOverlayMusicCover) !important;
background-image: var(--urlMusicCover) !important;
}
div[data-collectiontype="homevideos"] .cardImageContainer.cardContent {
background: var(--colorOverlayHomevideosCover) !important;
background-image: var(--urlHomevideosCover) !important;
}
div[data-collectiontype="books"] .cardImageContainer.cardContent {
background: var(--colorOverlayBooksCover) !important;
background-image: var(--urlBooksCover) !important;
}
div[data-collectiontype="boxsets"] .cardImageContainer.cardContent {
background: var(--colorOverlayBoxsetsCover) !important;
background-image: var(--urlBoxsetsCover) !important;
}
div[data-collectiontype="folders"] .cardImageContainer.cardContent {
background: var(--colorOverlayFoldersCover) !important;
background-image: var(--urlFoldersCover) !important;
}
div[data-collectiontype="playlists"] .cardImageContainer.cardContent {
background: var(--colorOverlayPlaylistsCover) !important;
background-image: var(--urlPlaylistsCover) !important; background-image: var(--urlPlaylistsCover) !important;
} }
.card-withuserdata[data-isfolder="true"] .cardImageContainer.cardContent { [data-prefix="MIX"] .cardContent {
filter: contrast(0.85); background-color: var(--colorOverlayMixedCover) !important;
background-size: cover !important; background-image: var(--urlMixedCover) !important;
background-position: 50% !important;
background-blend-mode: multiply;
} }
div[data-collectiontype="movies"] .cardImageContainer.cardContent::before { [data-collectiontype="movies"][data-prefix="REC"] .cardContent {
content: "Movies"; background-color: var(--colorOverlayRecordedmoviesCover) !important;
background-image: var(--urlRecordedmoviesCover) !important;
} }
div[data-collectiontype="tvshows"] .cardImageContainer.cardContent::before { [data-prefix="REC"] .cardContent {
content: "TV Shows"; background-color: var(--colorOverlayRecordedtvCover) !important;
} background-image: var(--urlRecordedtvCover) !important;
div[data-collectiontype="livetv"] .cardImageContainer.cardContent::before {
content: "Live TV";
}
div[data-collectiontype="music"] .cardImageContainer.cardContent::before {
content: "Music";
}
div[data-collectiontype="homevideos"] .cardImageContainer.cardContent::before {
content: "Home Videos";
}
div[data-collectiontype="books"] .cardImageContainer.cardContent::before {
content: "Books";
}
div[data-collectiontype="boxsets"] .cardImageContainer.cardContent::before {
content: "Collections";
}
div[data-collectiontype="folders"] .cardImageContainer.cardContent::before {
content: "Folders";
}
div[data-collectiontype="playlists"] .cardImageContainer.cardContent::before {
content: "Playlists";
}
.card-withuserdata[data-isfolder="true"] .cardImageContainer.cardContent {
filter: contrast(0.85);
background-size: cover !important;
background-position: 50% !important;
background-blend-mode: multiply;
} }

View File

@@ -0,0 +1,135 @@
/* Add-on: Custom media covers v25.11.25 for the ElegantFin Theme for Jellyfin by lscambo13 */
:root {
/* my media library default covers customizations */
--colorOverlayMoviesCover: rgb(193, 103, 104);
--colorOverlayTvshowsCover: rgb(140, 149, 43);
--colorOverlayLivetvCover: rgb(17, 98, 159);
--colorOverlayPlaylistsCover: rgb(118, 61, 216);
--colorOverlayBoxsetsCover: rgb(219, 180, 53);
--colorOverlayMusicCover: rgb(11, 93, 72);
--colorOverlayHomevideosCover: rgb(39, 90, 185);
--colorOverlayBooksCover: rgb(166, 68, 70);
--colorOverlayFoldersCover: rgb(173, 60, 113);
--colorOverlayMixedCover: rgb(194, 58, 58);
--colorOverlayRecordedmoviesCover: rgb(52, 52, 52);
--colorOverlayRecordedtvCover: rgb(120, 100, 28);
--urlMoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/movies.webp);
--urlTvshowsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp);
--urlLivetvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/livetv.webp);
--urlPlaylistsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/playlists.webp);
--urlBoxsetsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/boxsets.webp);
--urlMusicCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/music.webp);
--urlHomevideosCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/homevideos.webp);
--urlBooksCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/books.webp);
--urlFoldersCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/folders.webp);
--urlMixedCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/mixed.webp);
--urlRecordedmoviesCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedmovies.webp);
--urlRecordedtvCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/recordedtv.webp);
}
[data-type="CollectionFolder"] .defaultCardBackground,
[data-type="UserView"] .defaultCardBackground,
[data-type="CollectionFolder"] .cardContent,
[data-type="UserView"] .cardContent {
filter: contrast(0.85);
background-size: cover !important;
background-position: 50% !important;
background-blend-mode: multiply;
}
[data-type="CollectionFolder"] .cardContent::before,
[data-type="UserView"] .cardContent::before {
content: attr(aria-label);
position: absolute;
font-size: clamp(1em, max(2.5vh, 2vw), 2em);
font-weight: 800;
color: white;
font-family: "Noto Sans";
text-align: center;
width: 94%;
white-space: normal;
}
.layout-tv [data-type="CollectionFolder"]::before,
.layout-tv [data-type="UserView"]::before {
content: attr(aria-label);
position: absolute;
display: grid;
align-content: center;
top: 0;
bottom: 0;
font-size: clamp(1em, max(2.5vh, 2vw), 2em);
font-weight: 800;
color: white;
font-family: "Noto Sans";
text-align: center;
width: 94%;
white-space: normal;
z-index: 1;
}
[data-type="CollectionFolder"] .cardImageIcon:not(.quiz)::before,
[data-type="UserView"] .cardImageIcon:not(.quiz)::before {
display: none;
}
[data-collectiontype="movies"] .cardContent {
background-color: var(--colorOverlayMoviesCover) !important;
background-image: var(--urlMoviesCover) !important;
}
[data-collectiontype="tvshows"] .cardContent {
background-color: var(--colorOverlayTvshowsCover) !important;
background-image: var(--urlTvshowsCover) !important;
}
[data-collectiontype="livetv"] .cardContent {
background-color: var(--colorOverlayLivetvCover) !important;
background-image: var(--urlLivetvCover) !important;
}
[data-collectiontype="music"] .cardContent {
background-color: var(--colorOverlayMusicCover) !important;
background-image: var(--urlMusicCover) !important;
}
[data-collectiontype="homevideos"] .cardContent {
background-color: var(--colorOverlayHomevideosCover) !important;
background-image: var(--urlHomevideosCover) !important;
}
[data-collectiontype="books"] .cardContent {
background-color: var(--colorOverlayBooksCover) !important;
background-image: var(--urlBooksCover) !important;
}
[data-collectiontype="boxsets"] .cardContent {
background-color: var(--colorOverlayBoxsetsCover) !important;
background-image: var(--urlBoxsetsCover) !important;
}
[data-collectiontype="folders"] .cardContent {
background-color: var(--colorOverlayFoldersCover) !important;
background-image: var(--urlFoldersCover) !important;
}
[data-collectiontype="playlists"] .cardContent {
background-color: var(--colorOverlayPlaylistsCover) !important;
background-image: var(--urlPlaylistsCover) !important;
}
[data-prefix="MIX"] .cardContent {
background-color: var(--colorOverlayMixedCover) !important;
background-image: var(--urlMixedCover) !important;
}
[data-collectiontype="movies"][data-prefix="REC"] .cardContent {
background-color: var(--colorOverlayRecordedmoviesCover) !important;
background-image: var(--urlRecordedmoviesCover) !important;
}
[data-prefix="REC"] .cardContent {
background-color: var(--colorOverlayRecordedtvCover) !important;
background-image: var(--urlRecordedtvCover) !important;
}

View File

@@ -1,2 +1,2 @@
/* Add-on: Media Bar plugin support v25.08.08 for the ElegantFin Theme for Jellyfin by lscambo13 */ /* Add-on: Media Bar plugin support v25.11.25 for the ElegantFin Theme for Jellyfin by lscambo13 */
.button-container{align-items:center}.favorite-button{background:none;color:var(--textColor)}.detail-button:hover,.favorite-button:hover{background:var(--dimTextColor);color:black}.play-button::before,.detail-button::before,.favorite-button::before,.favorite-button.favorited::before{font-weight:400}.play-button{font-family:'Inter';font-size:1em;font-weight:500}.backdrop,.backdrop-container,.backdrop-overlay{mask-image:linear-gradient(180deg,rgba(0,0,0,.85),70%,rgba(0,0,0,0));-webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.85),70%,rgba(0,0,0,0));background-color:transparent}.backdrop{transform-origin:center left}.rating-value{flex-wrap:wrap;justify-content:center}.age-rating{font-size:.8em}#slides-container{width:calc(100vw - (2 * var(--sidePadding)));height:60%;top:8em;border:var(--defaultBorder);border-radius:var(--largerRadius);transition:all .125s,border 0s;user-select:none}.layout-tv #slides-container{top:0}.layout-mobile #slides-container{top:10em}.logo-container{top:10vh}.backdrop,.backdrop-container,.backdrop-overlay{mask-image:none;-webkit-mask-image:none}.backdrop-overlay{background:linear-gradient(0deg,rgba(0,0,0,.85),40%,transparent)}@media only screen and (max-width:767px) and (orientation:portrait){.button-container{top:calc(50% + 20vh);transform:translateX(-50%) scale(.8)}.info-container{}.tomato-rating{display:none}.dots-container{top:calc(50% + 19vh)}.backdrop{transform-origin:center}} .play-button::before,.detail-button::before,.favorite-button::before,.favorite-button.favorited::before{font-weight:400}.play-button{font-family:"Inter";font-size:1em;font-weight:500}.backdrop,.backdrop-container,.backdrop-overlay{mask-image:linear-gradient(180deg,rgba(0,0,0,.85),70%,rgba(0,0,0,0));-webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.85),70%,rgba(0,0,0,0));background-color:transparent}.backdrop{transform-origin:center left}.rating-value{flex-wrap:wrap;justify-content:center}.age-rating{font-size:.8em}#slides-container{width:calc(100vw - (2 * var(--sidePadding)));height:62%;top:var(--appBarHeight);border:var(--defaultBorder);border-radius:var(--largerRadius);transition:all .125s,border 0s;user-select:none}.logo-container{top:10vh}.backdrop,.backdrop-container,.backdrop-overlay{mask-image:none;-webkit-mask-image:none}.backdrop-overlay{background:linear-gradient(0deg,rgba(0,0,0,.85),40%,transparent)}@media only screen and (max-width:767px) and (orientation:portrait){.button-container{top:calc(50% + 20vh);transform:translateX(-50%) scale(.8)}.tomato-rating{display:none}.dots-container{top:calc(50% + 19vh)}.backdrop{transform-origin:center}}@media (min-width:75em){#slides-container{top:calc(.5 * var(--appBarHeight))}}@media only screen and (max-height:767px) and (orientation:landscape){#slides-container{height:57%}.logo-container{top:3%}}@media only screen and (max-width:767px) and (orientation:portrait){.logo-container{top:50%}}

View File

@@ -84,4 +84,20 @@
} }
} }
@media only screen and (max-height: 767px) and (orientation: landscape) {
#slides-container {
height: 57%;
}
.logo-container {
top: 3%;
}
}
@media only screen and (max-width: 767px) and (orientation: portrait) {
.logo-container {
top: 50%;
}
}
/* this styles the media bar plugin - end */ /* this styles the media bar plugin - end */

View File

@@ -0,0 +1,103 @@
/* Add-on: Media Bar plugin support v25.11.25 for the ElegantFin Theme for Jellyfin by lscambo13 */
/* this styles the media bar plugin - start */
.play-button::before,
.detail-button::before,
.favorite-button::before,
.favorite-button.favorited::before {
font-weight: 400;
}
.play-button {
font-family: "Inter";
font-size: 1em;
font-weight: 500;
}
.backdrop,
.backdrop-container,
.backdrop-overlay {
mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
-webkit-mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.85), 70%, rgba(0, 0, 0, 0));
background-color: transparent;
}
.backdrop {
transform-origin: center left;
}
.rating-value {
flex-wrap: wrap;
justify-content: center;
}
.age-rating {
font-size: 0.8em;
}
#slides-container {
width: calc(100vw - (2 * var(--sidePadding)));
height: 62%;
top: var(--appBarHeight);
border: var(--defaultBorder);
border-radius: var(--largerRadius);
transition: all 0.125s, border 0s;
user-select: none;
}
.logo-container {
top: 10vh;
}
.backdrop,
.backdrop-container,
.backdrop-overlay {
mask-image: none;
-webkit-mask-image: none;
}
.backdrop-overlay {
background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), 40%, transparent);
}
@media only screen and (max-width: 767px) and (orientation: portrait) {
.button-container {
top: calc(50% + 20vh);
transform: translateX(-50%) scale(0.8);
}
.tomato-rating {
display: none;
}
.dots-container {
top: calc(50% + 19vh);
}
.backdrop {
transform-origin: center;
}
}
@media (min-width: 75em) {
#slides-container {
top: calc(0.5 * var(--appBarHeight));
}
}
@media only screen and (max-height: 767px) and (orientation: landscape) {
#slides-container {
height: 57%;
}
.logo-container {
top: 3%;
}
}
@media only screen and (max-width: 767px) and (orientation: portrait) {
.logo-container {
top: 50%;
}
}
/* this styles the media bar plugin - end */

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@@ -1,4 +1,5 @@
# 🧩 Add-on: Custom media covers for ElegantFin # 🧩 Add-on: Custom media covers for ElegantFin
This is a Jellyfin add-on that allows you to customise My Media cover arts. This is an experimental feature, so limited support will be provided. This is a Jellyfin add-on that allows you to customise My Media cover arts. This is an experimental feature, so limited support will be provided.
#### **Author:** [lscambo13](https://github.com/lscambo13) #### **Author:** [lscambo13](https://github.com/lscambo13)
@@ -50,6 +51,9 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--colorOverlayHomevideosCover: transparent; --colorOverlayHomevideosCover: transparent;
--colorOverlayBooksCover: transparent; --colorOverlayBooksCover: transparent;
--colorOverlayFoldersCover: transparent; --colorOverlayFoldersCover: transparent;
--colorOverlayMixedCover: transparent;
--colorOverlayRecordedmoviesCover: transparent;
--colorOverlayRecordedtvCover: transparent;
--urlMoviesCover: transparent; --urlMoviesCover: transparent;
--urlTvshowsCover: transparent; --urlTvshowsCover: transparent;
--urlLivetvCover: transparent; --urlLivetvCover: transparent;
@@ -59,6 +63,9 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--urlHomevideosCover: transparent; --urlHomevideosCover: transparent;
--urlBooksCover: transparent; --urlBooksCover: transparent;
--urlFoldersCover: transparent; --urlFoldersCover: transparent;
--urlMixedCover: transparent;
--urlRecordedmoviesCover: transparent;
--urlRecordedtvCover: transparent;
} }
``` ```
@@ -79,6 +86,9 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--colorOverlayHomevideosCover: transparent; --colorOverlayHomevideosCover: transparent;
--colorOverlayBooksCover: transparent; --colorOverlayBooksCover: transparent;
--colorOverlayFoldersCover: transparent; --colorOverlayFoldersCover: transparent;
--colorOverlayMixedCover: transparent;
--colorOverlayRecordedmoviesCover: transparent;
--colorOverlayRecordedtvCover: transparent;
--urlMoviesCover: var(--cardBackgroundGradient); --urlMoviesCover: var(--cardBackgroundGradient);
--urlTvshowsCover: var(--cardBackgroundGradient); --urlTvshowsCover: var(--cardBackgroundGradient);
--urlLivetvCover: var(--cardBackgroundGradient); --urlLivetvCover: var(--cardBackgroundGradient);
@@ -88,6 +98,9 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--urlHomevideosCover: var(--cardBackgroundGradient); --urlHomevideosCover: var(--cardBackgroundGradient);
--urlBooksCover: var(--cardBackgroundGradient); --urlBooksCover: var(--cardBackgroundGradient);
--urlFoldersCover: var(--cardBackgroundGradient); --urlFoldersCover: var(--cardBackgroundGradient);
--urlMixedCover: var(--cardBackgroundGradient);
--urlRecordedmoviesCover: var(--cardBackgroundGradient);
--urlRecordedtvCover: var(--cardBackgroundGradient);
} }
``` ```
@@ -98,7 +111,6 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
![image](https://github.com/user-attachments/assets/6975a5ef-4824-4807-9afa-434fc3ebaf6f) ![image](https://github.com/user-attachments/assets/6975a5ef-4824-4807-9afa-434fc3ebaf6f)
``` ```
@import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css"); @import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css");
@@ -112,6 +124,9 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--colorOverlayHomevideosCover: rgb(39, 90, 185); --colorOverlayHomevideosCover: rgb(39, 90, 185);
--colorOverlayBooksCover: rgb(166, 68, 70); --colorOverlayBooksCover: rgb(166, 68, 70);
--colorOverlayFoldersCover: rgb(173, 60, 113); --colorOverlayFoldersCover: rgb(173, 60, 113);
--colorOverlayMixedCover: rgb(194, 58, 58);
--colorOverlayRecordedmoviesCover: rgb(52, 52, 52);
--colorOverlayRecordedtvCover: rgb(120, 100, 28);
--urlMoviesCover: linear-gradient(0deg, #313131, #585858 25%); --urlMoviesCover: linear-gradient(0deg, #313131, #585858 25%);
--urlTvshowsCover: linear-gradient(0deg, #313131, #585858 25%); --urlTvshowsCover: linear-gradient(0deg, #313131, #585858 25%);
--urlLivetvCover: linear-gradient(0deg, #313131, #585858 25%); --urlLivetvCover: linear-gradient(0deg, #313131, #585858 25%);
@@ -121,6 +136,9 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--urlHomevideosCover: linear-gradient(0deg, #313131, #585858 25%); --urlHomevideosCover: linear-gradient(0deg, #313131, #585858 25%);
--urlBooksCover: linear-gradient(0deg, #313131, #585858 25%); --urlBooksCover: linear-gradient(0deg, #313131, #585858 25%);
--urlFoldersCover: linear-gradient(0deg, #313131, #585858 25%); --urlFoldersCover: linear-gradient(0deg, #313131, #585858 25%);
--urlMixedCover: linear-gradient(0deg, #313131, #585858 25%);
--urlRecordedmoviesCover: linear-gradient(0deg, #313131, #585858 25%);
--urlRecordedtvCover: linear-gradient(0deg, #313131, #585858 25%);
} }
``` ```
@@ -142,8 +160,6 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
- Remember, you do not need to configure anything if you're happy with the default set of images. - Remember, you do not need to configure anything if you're happy with the default set of images.
<details> <details>
<summary><i>Click here to reveal.</i></summary> <summary><i>Click here to reveal.</i></summary>
@@ -168,6 +184,9 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--colorOverlayHomevideosCover: rgb(); --colorOverlayHomevideosCover: rgb();
--colorOverlayBooksCover: rgb(); --colorOverlayBooksCover: rgb();
--colorOverlayFoldersCover: rgb(); --colorOverlayFoldersCover: rgb();
--colorOverlayMixedCover: rgb();
--colorOverlayRecordedmoviesCover: rgb();
--colorOverlayRecordedtvCover: rgb();
<!-- cover images; input the url pointing to an image. --> <!-- cover images; input the url pointing to an image. -->
@@ -179,8 +198,12 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
--urlHomevideosCover: url(); --urlHomevideosCover: url();
--urlBooksCover: url(); --urlBooksCover: url();
--urlFoldersCover: url(); --urlFoldersCover: url();
--urlMixedCover: url();
--urlRecordedmoviesCover: url();
--urlRecordedtvCover: url();
} }
``` ```
</details> </details>
@@ -191,6 +214,7 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
Suppose you want to modify the Live TV cover art. You'll have to modify the variables named `--colorOverlayLivetvCover` and `--urlLivetvCover`, so that your final configuration will look something like this: Suppose you want to modify the Live TV cover art. You'll have to modify the variables named `--colorOverlayLivetvCover` and `--urlLivetvCover`, so that your final configuration will look something like this:
``` ```
@import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css"); @import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/custom-media-covers-latest-min.css");
:root{ :root{
@@ -224,3 +248,4 @@ Suppose you want to modify the Live TV cover art. You'll have to modify the vari
<hr> <hr>
```