7 Commits

Author SHA1 Message Date
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
8 changed files with 83 additions and 125 deletions

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,99 @@
--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 {
position: absolute; position: absolute;
font-size: clamp(1em, max(2.5vh, 2vw), 2.5em); font-size: clamp(1em, max(2.5vh, 2vw), 2.5em);
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 { [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 { [data-type="CollectionFolder"] .cardContent::before,
content: "Live TV"; [data-type="UserView"] .cardContent::before {
} content: attr(aria-label);
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;
} }

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%);
} }
``` ```
@@ -130,7 +148,7 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
### 👇 How to enable this add-on? ### 👇 How to enable this add-on?
- Paste the following at the end in Custom CSS code box: - Paste the following at the end in Custom CSS code box:
``` ```
@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");
@@ -140,9 +158,7 @@ This is a Jellyfin add-on that allows you to customise My Media cover arts. This
### ⚙️ How to configure this add-on? ### ⚙️ How to configure this add-on?
- 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,11 +214,12 @@ 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{
--colorOverlayLivetvCover: rgb(39, 68, 185); --colorOverlayLivetvCover: rgb(39, 68, 185);
--urlLivetvCover: url(https://artworks.thetvdb.com/banners/fanart/original/71663-33.jpg); --urlLivetvCover: url(https://artworks.thetvdb.com/banners/fanart/original/71663-33.jpg);
} }
``` ```
@@ -224,3 +248,4 @@ Suppose you want to modify the Live TV cover art. You'll have to modify the vari
<hr> <hr>
```