mirror of
https://github.com/lscambo13/ElegantFin.git
synced 2025-09-18 12:40:16 +00:00
Fix: Center align the custom media covers
Fix: Do not hide labels on specific cards Fix: Border radius was getting reset on click on list items dev: Allow users to customise the My Media cover images
This commit is contained in:
91
Add-Ons.md
Normal file
91
Add-Ons.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
|
||||||
|
#### **Author:** [lscambo13](https://github.com/lscambo13)
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
|
### 🖼️ Previews
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><i>Click here to reveal</i></summary>
|
||||||
|
|
||||||
|
<img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/1.%20Homepage.png" style="width:360px;height:auto;"></img>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
### 👇 How to setup this theme?
|
||||||
|
|
||||||
|
<b>
|
||||||
|
- To configure your theme to use the custom images, you'll need to input a URL pointing to an image in variables starting with '--url' and an overlay color in variables starting with '--color'.
|
||||||
|
- Default Jellyfin cover sizes are 960px x 540px.
|
||||||
|
- The colors should be in rgb format i.e. rbg(128, 128, 128).
|
||||||
|
- You should remove the entries you do not intend to modify.
|
||||||
|
- paste the following at the end in Custom CSS code box after making the necessary changes:</b>
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
@import url("");
|
||||||
|
|
||||||
|
:root{
|
||||||
|
|
||||||
|
<!-- overlay colors; change according to your image. -->
|
||||||
|
--colorOverlayMoviesCover: rgb();
|
||||||
|
--colorOverlayTvshowsCover: rgb();
|
||||||
|
--colorOverlayLivetvCover: rgb();
|
||||||
|
--colorOverlayPlaylistsCover: rgb();
|
||||||
|
--colorOverlayBoxsetsCover: rgb();
|
||||||
|
--colorOverlayMusicCover: rgb();
|
||||||
|
--colorOverlayHomevideosCover: rgb();
|
||||||
|
--colorOverlayBooksCover: rgb();
|
||||||
|
--colorOverlayFoldersCover: rgb();
|
||||||
|
|
||||||
|
<!-- cover images; input the url pointing to an image. -->
|
||||||
|
--urlMoviesCover: url();
|
||||||
|
--urlTvshowsCover: url();
|
||||||
|
--urlLivetvCover: url();
|
||||||
|
--urlBoxsetsCover: url();
|
||||||
|
--urlMusicCover: url();
|
||||||
|
--urlHomevideosCover: url();
|
||||||
|
--urlBooksCover: url();
|
||||||
|
--urlFoldersCover: url();
|
||||||
|
}
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
Suppose you want to modify the Live TV cover art. You'll have to modify the variables --colorOverlayLivetvCover and --urlLivetvCover, so that your configuration will look something like this:
|
||||||
|
'
|
||||||
|
@import url("");
|
||||||
|
|
||||||
|
:root{
|
||||||
|
--colorOverlayLivetvCover: rgb(39, 68, 185);
|
||||||
|
--urlLivetvCover: url(https://artworks.thetvdb.com/banners/fanart/original/71663-33.jpg);
|
||||||
|
}
|
||||||
|
|
||||||
|
'
|
||||||
|
<details>
|
||||||
|
<summary><i>Detailed steps for server-side implementation</i></summary>
|
||||||
|
|
||||||
|
1. Open Dashboard from Administration tab in Settings.
|
||||||
|
2. Select General tab from the side bar.
|
||||||
|
3. Scroll down to find Custom CSS code box under Branding section.
|
||||||
|
4. Paste the custom css in Custom CSS code box.
|
||||||
|
5. Click save
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><i>Detailed steps for client-side implementation</i></summary>
|
||||||
|
|
||||||
|
1. Open Display tab in Settings.
|
||||||
|
2. Scroll down to find Custom CSS code box.
|
||||||
|
3. Paste the custom css in Custom CSS code box.
|
||||||
|
4. Click save.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
@@ -1,5 +1,8 @@
|
|||||||
/* ElegantFin Theme for Jellyfin by lscambo13 */
|
/* ElegantFin Theme for Jellyfin by lscambo13 */
|
||||||
|
|
||||||
|
/* Add-ons: Uncomment to enable */
|
||||||
|
/* @import url(""); */
|
||||||
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap');
|
@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap');
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
@@ -39,8 +42,12 @@
|
|||||||
--smallRadius: .5em;
|
--smallRadius: .5em;
|
||||||
--smallerRadius: .375em;
|
--smallerRadius: .375em;
|
||||||
--borderWidth: 0.075em;
|
--borderWidth: 0.075em;
|
||||||
|
|
||||||
|
/* login page customizations */
|
||||||
--loginPageBgUrl: url("");
|
--loginPageBgUrl: url("");
|
||||||
--loginPageText: "Sign in to continue";
|
--loginPageText: "Sign in to continue";
|
||||||
|
|
||||||
|
/* my media library default covers customizations */
|
||||||
--colorOverlayMoviesCover: rgb(193, 103, 104);
|
--colorOverlayMoviesCover: rgb(193, 103, 104);
|
||||||
--colorOverlayTvshowsCover: rgb(140, 149, 43);
|
--colorOverlayTvshowsCover: rgb(140, 149, 43);
|
||||||
--colorOverlayLivetvCover: rgb(17, 98, 159);
|
--colorOverlayLivetvCover: rgb(17, 98, 159);
|
||||||
@@ -61,6 +68,19 @@
|
|||||||
--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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* :root{
|
||||||
|
--urlMoviesCover: url(https://artworks.thetvdb.com/banners/v4/movie/159/backgrounds/6328557507dd4.jpg);
|
||||||
|
--urlTvshowsCover: url(https://raw.githubusercontent.com/lscambo13/ElegantFin/refs/heads/main/Theme/assets/img/library-covers/tvshows.webp);
|
||||||
|
--urlLivetvCover: url(https://artworks.thetvdb.com/banners/fanart/original/71663-33.jpg);
|
||||||
|
--urlPlaylistsCover: url(https://m.media-amazon.com/images/M/MV5BMzRjMjgwMTUtMjNiOS00ZWJlLWJkODktZTU5NmQ5Y2UxZDA3XkEyXkFqcGc@._V1_QL75_UX820_.jpg);
|
||||||
|
--urlBoxsetsCover: url(https://artworks.thetvdb.com/banners/v4/movie/155/backgrounds/671ae49f9c44f.jpg);
|
||||||
|
--urlMusicCover: url(https://artworks.thetvdb.com/banners/v4/movie/223419/backgrounds/614203ff892f8.jpg);
|
||||||
|
--urlHomevideosCover: url(https://artworks.thetvdb.com/banners/v4/movie/132448/backgrounds/646b4c94e9b29.jpg);
|
||||||
|
--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);
|
||||||
|
} */
|
||||||
|
|
||||||
|
|
||||||
html {
|
html {
|
||||||
font-family: "Inter", serif;
|
font-family: "Inter", serif;
|
||||||
font-optical-sizing: auto;
|
font-optical-sizing: auto;
|
||||||
@@ -1170,6 +1190,7 @@ div[data-role=controlgroup] a.ui-btn-active {
|
|||||||
.listItem:hover,
|
.listItem:hover,
|
||||||
.navMenuOption:hover {
|
.navMenuOption:hover {
|
||||||
background: unset;
|
background: unset;
|
||||||
|
border-radius: var(--smallRadius);
|
||||||
}
|
}
|
||||||
|
|
||||||
.listItem:active,
|
.listItem:active,
|
||||||
@@ -1757,28 +1778,28 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense>div:first-child {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
div[data-isfolder="true"] .cardPadder-overflowBackdrop {
|
.card-withuserdata[data-isfolder="true"] .cardPadder-overflowBackdrop {
|
||||||
padding-bottom: 50%;
|
padding-bottom: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
div[data-isfolder="true"] .cardText-first {
|
.card-withuserdata[data-isfolder="true"] .cardImageContainer.cardContent::before {
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div[data-isfolder="true"] .cardImageIcon.material-icons::before {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* To override images on all, use .cardContent instead of .defaultCardBackground */
|
|
||||||
/* Default Jellyfin cover sizes are 960px x 540px */
|
|
||||||
|
|
||||||
div[data-isfolder="true"] .cardImageContainer.defaultCardBackground::before {
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
font-size: 3.5vh;
|
font-size: 3.5vh;
|
||||||
margin-bottom: .175em;
|
margin-bottom: .175em;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
color: white;
|
color: white;
|
||||||
font-family: 'Noto Sans';
|
font-family: 'Noto Sans';
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"],[data-type="Series"],[data-type="Folder"]) .cardText-first,
|
||||||
|
.card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"],[data-type="Series"],[data-type="Folder"]) .cardText.cardTextCentered,
|
||||||
|
.card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"],[data-type="Series"],[data-type="Folder"]) .cardImageIcon.material-icons:not(.quiz)::before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.padded-right-withalphapicker .card-withuserdata[data-isfolder="true"]:not([data-type="PhotoAlbum"],[data-type="Series"],[data-type="Folder"]) {
|
||||||
|
margin-bottom: -1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div[data-collectiontype="movies"] .cardImageContainer.defaultCardBackground {
|
div[data-collectiontype="movies"] .cardImageContainer.defaultCardBackground {
|
||||||
@@ -1826,10 +1847,10 @@ div[data-collectiontype="playlists"] .cardImageContainer.defaultCardBackground {
|
|||||||
background-image: var(--urlPlaylistsCover) !important;
|
background-image: var(--urlPlaylistsCover) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
div[data-isfolder="true"] .cardImageContainer.defaultCardBackground {
|
.card-withuserdata[data-isfolder="true"] .cardImageContainer.defaultCardBackground {
|
||||||
filter: contrast(0.85);
|
filter: contrast(0.85);
|
||||||
background-size: cover !important;
|
background-size: cover !important;
|
||||||
background-position-y: 50% !important;
|
background-position: 50% !important;
|
||||||
background-blend-mode: multiply;
|
background-blend-mode: multiply;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1869,7 +1890,7 @@ div[data-collectiontype="playlists"] .cardImageContainer.defaultCardBackground::
|
|||||||
content: "Playlists";
|
content: "Playlists";
|
||||||
}
|
}
|
||||||
|
|
||||||
div[data-collectiontype="movies"] .cardImageContainer,
|
/* div[data-collectiontype="movies"] .cardImageContainer,
|
||||||
div[data-collectiontype="tvshows"] .cardImageContainer,
|
div[data-collectiontype="tvshows"] .cardImageContainer,
|
||||||
div[data-collectiontype="livetv"] .cardImageContainer,
|
div[data-collectiontype="livetv"] .cardImageContainer,
|
||||||
div[data-collectiontype="boxsets"] .cardImageContainer,
|
div[data-collectiontype="boxsets"] .cardImageContainer,
|
||||||
@@ -1878,5 +1899,5 @@ div[data-collectiontype="folders"] .cardImageContainer,
|
|||||||
div[data-collectiontype="books"] .cardImageContainer,
|
div[data-collectiontype="books"] .cardImageContainer,
|
||||||
div[data-collectiontype="homevideos"] .cardImageContainer,
|
div[data-collectiontype="homevideos"] .cardImageContainer,
|
||||||
div[data-collectiontype="music"] .cardImageContainer {
|
div[data-collectiontype="music"] .cardImageContainer {
|
||||||
/* mix-blend-mode: color-dodge; */
|
mix-blend-mode: color-dodge;
|
||||||
}
|
} */
|
89
Theme/assets/add-ons/custom-media-covers-nightly.css
Normal file
89
Theme/assets/add-ons/custom-media-covers-nightly.css
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/* Add-on: Custom media covers for the ElegantFin Theme for Jellyfin by lscambo13 */
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-withuserdata[data-isfolder="true"] .cardImageContainer.cardContent {
|
||||||
|
filter: contrast(0.85);
|
||||||
|
background-size: cover !important;
|
||||||
|
background-position: 50% !important;
|
||||||
|
background-blend-mode: multiply;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[data-collectiontype="movies"] .cardImageContainer.cardContent::before {
|
||||||
|
content: "Movies";
|
||||||
|
}
|
||||||
|
|
||||||
|
div[data-collectiontype="tvshows"] .cardImageContainer.cardContent::before {
|
||||||
|
content: "TV Shows";
|
||||||
|
}
|
||||||
|
|
||||||
|
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";
|
||||||
|
}
|
Reference in New Issue
Block a user