15 Commits

Author SHA1 Message Date
lscambo13
756e4a181b Fix: Prevented long section headings from breaking into another line on the homepage on phones 2025-12-30 23:08:46 +05:30
lscambo13
a3e52a43de New: Updated styling for the Media Bar support add-on
Changes:
- redesigned the side indicator dots
- tweaked the layout specifically for phones and TVs
- improved responsiveness on TV layout
- made parental rating font consistent with its siblings
- positioned it correctly for the experimental layout
- positioned the pause button in the top-right corner
- updated colors of dot separators
- tweaked its distance from the header on small screens
2025-12-30 23:05:06 +05:30
lscambo13
8112d4401b Fix: Improved responsiveness of header tabs and page padding
- Prevented header tabs from shifting up too early on TVs
- Updated the page padding-top to adjust in sync with header tabs position
- Made the page top padding aware of the header height to prevent overlaps
2025-12-30 21:38:02 +05:30
lscambo13
c665c54f53 dev: updated the readme.md file 2025-12-29 00:56:39 +05:30
lscambo13
af6d340e8e dev: updated the customisation section 2025-12-29 00:33:31 +05:30
lscambo13
fa0cf75972 dev: possible fix for #196 #192 #163 2025-12-28 22:45:01 +05:30
lscambo13
ec7b63b431 Merge branch 'main' of https://github.com/lscambo13/ElegantFin 2025-12-28 22:21:43 +05:30
lscambo13
0f8474eccd New: Stop hiding the header on scroll on tablets to match the desktop layout behavior 2025-12-28 22:21:21 +05:30
lscambo13
4083a7a0b9 Fix: Header tabs were being cut-off on tablet screens #220 2025-12-28 22:19:00 +05:30
lscambo13
8f27df07bc dev: simplified some selectors 2025-12-28 22:13:59 +05:30
lscambo13
6a11b9cb60 Fix: Header tabs were sightly off-center on phones/tablets due to an unintentional left padding 2025-12-28 22:11:19 +05:30
lscambo13
c972bb0a48 Update header level in README.md
Change header level for the ElegantFin Theme section.
2025-12-24 07:46:06 +05:30
lscambo13
bf4241a700 Fix: Posters were not visible on some older TVs
Thanks to @BullenMoore https://github.com/lscambo13/ElegantFin/issues/182#issuecomment-3678911997
2025-12-21 22:14:22 +05:30
lscambo13
1fe65b63e6 Fix: Reworked Live TV cells to fix issues with cover overlap. focus color and height 2025-12-21 20:50:25 +05:30
lscambo13
872ac32747 Fix: Grid layout was unintentionally being applied on all layouts #217 2025-12-21 20:43:16 +05:30
4 changed files with 301 additions and 209 deletions

View File

@@ -1,15 +1,32 @@
<!-- Banner Image -->
<img src="https://github.com/lscambo13/ElegantFin/blob/main/Theme/assets/img/banner.png?raw=true" alt="ElegantFin Theme for Jellyfin - Banner">
# ⭐ ElegantFin Theme
This is a Jellyfin theme inspired from Jellyseerr to improve the overall look and experience with various fixes to the UI/UX. It gives Jellyfin a fresh, modern look, and it aims to work on mobile, desktop, and TV, with just one import.
<div align="center">
<a href="https://www.jsdelivr.com/package/gh/lscambo13/ElegantFin">
<img
src="https://img.shields.io/jsdelivr/gh/hm/lscambo13/ElegantFin?style=flat&logo=jsdelivr&logoColor=%23f65e34&label=jsDelivr%20Hits&labelColor=white&color=%23f65e34"
alt="jsDelivr Requests"
/>
</a>
<br>
<a href="https://github.com/lscambo13/ElegantFin/stargazers">
<img
src="https://img.shields.io/github/stars/lscambo13/ElegantFin?style=flat&logo=github&logoColor=%231f2328&label=GitHub%20Stars&labelColor=white&color=%231f2328"
alt="GitHub Repo stars"
/>
</a>
</div>
## ⭐ ElegantFin Theme
This is a Jellyfin theme inspired from Jellyseerr to improve the overall look and experience with various fixes to the UI/UX. It gives Jellyfin a fresh, modern look, and it aims to work on mobile, desktop, and TV, with just one import.
#### **Author:** [lscambo13](https://github.com/lscambo13)
<hr>
### ✨ Key Features
- modern layouts and color tones
- new and improved animations on most elements
- rounded corners and even spacing everywhere
@@ -22,13 +39,14 @@ This is a Jellyfin theme inspired from Jellyseerr to improve the overall look an
<hr>
### 🖼️ Theme Showcase
Captured on ElegantFin v25.08.02
<details>
<summary> 💻 <i>Desktop and </i>📱 <i>Mobile Screenshots</i></summary>
| Desktop | Mobile |
| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/21.%20Login%20Page.webp?raw=true"><br><strong>Login Page</strong></div> | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/mobile/21.%20Login%20Page.webp?raw=true"></div> |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/1.%20Homepage.webp?raw=true"><br><strong>Homepage</strong></div> | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/mobile/1.%20Homepage.webp?raw=true"></div> |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/2.%20Movies%20Library.webp?raw=true"><br><strong>Movies Library</strong></div> | <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/mobile/2.%20Movies%20Library.webp?raw=true"></div> |
@@ -56,7 +74,7 @@ Captured on ElegantFin v25.08.02
<summary> 📺 <i>TV Screenshots</i></summary>
| TV View |
| ------------------------------------------------------------------------------------------------------------- |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/tv/21.%20Login%20Page.webp?raw=true"><br><strong>Login Page</strong></div> |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/tv/1.%20Homepage.webp?raw=true"><br><strong>Homepage</strong></div> |
| <div align="center"><img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/tv/2.%20Movies%20Library.webp?raw=true"><br><strong>Movies Library</strong></div> |
@@ -77,12 +95,8 @@ Captured on ElegantFin v25.08.02
</details>
https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
<hr>
### 👇 How to install/setup this theme?
@@ -110,7 +124,6 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
4. Click save.
</details>
<hr>
### 🧩 How to customise this theme?
@@ -150,7 +163,6 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
<img width="400" height="auto" alt="image" src="https://github.com/user-attachments/assets/cb8479c2-c577-4d54-a567-697f54291a3b" />
- To enable 'Mark Played' and 'Add to Favorites' buttons that show up at the bottom right corner of cards while hovering, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
```
:root{
@@ -165,7 +177,6 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
<img width="400" height="auto" alt="image" src="https://github.com/user-attachments/assets/ebde9db6-cd2f-47b5-bdb9-cee1e9852e2e" />
- To bring the mini play button to the center of cards, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
```
:root{
@@ -181,11 +192,13 @@ https://github.com/user-attachments/assets/bb7f3174-b703-4c98-a23c-e6bb4abba390
https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
- To disable the reflection on cards that shows when hovering over them on desktop, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
```
:root{
--cardHoverEffect: none;
}
```
- To undo this change, simply remove this code block or replace `none` with `""`.
</details>
@@ -194,13 +207,14 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
<img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/5999a5de-5134-4b02-94aa-6306768a251c" />
- To enable text labels under the media library cards, copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
```
:root{
--libraryLabelVisibility: block;
}
```
- To undo this change, simply remove this code block or replace `block` with `none`.
</details>
@@ -209,11 +223,12 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
<img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/3e88e270-40f9-48ba-8173-f65b94344f8d" />
- ElegantFin does not support any plugins by default, so to to add external support for [this plugin](https://github.com/IAmParadox27/jellyfin-plugin-media-bar), copy and paste the following code at the end in Custom CSS box, click save and finally refresh your app/webpage.
```
@import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/media-bar-plugin-support-latest-min.css");
```
- To undo this change, simply remove this code block.
</details>
@@ -225,25 +240,38 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
- 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>
<details>
<summary><i>9. Change to alternative color themes</i></summary>
<img width="640" height="auto" alt="image" src="https://github.com/user-attachments/assets/0cab75aa-8fcd-4174-b0db-cc533b724bca" />
- Check out the [the theme Playground page](https://github.com/lscambo13/ElegantFin/discussions/221) for different color themes.
- You can also experiment and share your own take there if you wish.
</details>
<hr>
### 🆗 Tested on
- Jellyfin Server v10.11.1
- Jellyfin Server v10.11.5
- Microsoft Edge (Chromium)
- Jellyfin Android App v2.6.3
<hr>
### 🛠️ Troubleshooting
<details>
<summary>1⃣ - <i>How do I check if I am using the latest version of ElegantFin?</i></summary>
@@ -282,7 +310,6 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
- It seems that modern Material Icons which this theme uses are [not compatible on some WebOS TVs](https://github.com/lscambo13/ElegantFin/issues/39). There is a [huge similar thread](https://www.reddit.com/r/youtubetv/comments/e27go3/chinese_symbols_instead_of_icons_on_lg_tv/) about this.
- This bug can be fixed by using the older icons, so I have implemented the following workaround to bring back older, supported icons.
- Simply add the following code at the end in Custom CSS box and save, then refresh your apps and webpages:
```
:root{
--iconPack: 'Material Icons';
@@ -296,7 +323,6 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
- First check [here](https://github.com/lscambo13/ElegantFin/issues?q=) whether a similar issue has been reported already. If it exists, upvote and comment there to let me know.
- Alternatively, create a new issue [here](https://github.com/lscambo13/ElegantFin/issues/new/choose).
</details>
<details>
<summary>7⃣ - <i>When can I expect another update?</i></summary>
@@ -310,8 +336,6 @@ https://github.com/user-attachments/assets/ac22440d-39d7-48d6-a8da-3b7777372ffd
Please read the [Contributor Guidelines](./CONTRIBUTING.md) before opening pull requests.
### 🙏 Feedback Appreciated
Please use the right template when creating an [issue](https://github.com/lscambo13/ElegantFin/issues/new/choose) to [report bugs](https://github.com/lscambo13/ElegantFin/issues/new?template=bug_report.md) or [provide suggestions](https://github.com/lscambo13/ElegantFin/issues/new?template=feature_request.md).

View File

@@ -521,7 +521,7 @@ body {
/* episode grid start */
@supports (display: revert) {
.vertical-list:has(.listItem-largeImage) {
.layout-desktop .vertical-list:has(.listItem-largeImage) {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(min(var(--minEpisodeCardWidth), 100%), 1fr));
gap: var(--itemColumnGap);
@@ -1063,7 +1063,6 @@ body {
#itemDetailPage .emby-scroller,
#itemDetailPage .scrollX {
margin: 0 calc(-1 * var(--sidePadding));
padding: 0 var(--sidePadding);
padding-left: calc(var(--sidePadding) - 0.375em);
/* mask-image: linear-gradient(90deg, transparent, white var(--sidePadding), white calc(100vw - var(--sidePadding)), transparent); */
}
@@ -1075,10 +1074,14 @@ body {
}
.emby-scroller,
.hiddenScrollX.scrollX {
.scrollX {
padding-left: calc(var(--sidePadding) - 0.375em);
}
.sectionTabs .scrollX {
padding-left: 0;
}
.itemsContainer:not(.editorsChoiceItemsContainer) {
column-gap: var(--itemColumnGap);
}
@@ -1093,11 +1096,6 @@ body {
margin: 0.75em 0 -0.75em 0;
}
.layout-mobile :not(.sectionTitleContainer-cards) > .sectionTitle-cards {
text-align: left;
margin: 0.75em 0 -0.75em 0;
}
.emby-scrollbuttons,
[dir="ltr"] .emby-scrollbuttons {
padding-top: 1.25em;
@@ -1319,7 +1317,7 @@ body {
.layout-tv .detailImageContainer .card {
width: 25vw !important;
display: grid !important;
display: block !important;
position: fixed !important;
top: 0;
bottom: 0;
@@ -2973,8 +2971,13 @@ div[data-role="controlgroup"] a.ui-btn-active {
}
.sectionTitleTextButton > * {
padding: 0.3em 0 !important;
margin: 0 0 !important;
text-align: left;
padding: 0.3em 0;
/* margin: 0 0 !important; */
/* this prevents long library names from breaking into another line */
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.dashboardSection .sectionTitleTextButton > .material-icons,
@@ -3272,18 +3275,13 @@ div[data-role="controlgroup"] a.ui-btn-active {
display: var(--itemOriginalTitleVisibility);
}
.channelPrograms + .channelPrograms,
.guide-channelHeaderCell + .guide-channelHeaderCell {
margin-top: 0;
}
.channelPrograms,
.guide-channelHeaderCell,
.programCell {
border-color: transparent;
/* this disables the 'color coded backgrounds' */
background-color: transparent !important;
border-radius: var(--smallRadius);
height: 4.42em;
}
.guideProgramName {
@@ -3305,24 +3303,40 @@ div[data-role="controlgroup"] a.ui-btn-active {
padding: 0;
}
.guideChannelImage {
background-color: rgba(255, 255, 255, 0.05);
bottom: 0.35em;
right: 0.35em;
top: 0.35em;
width: calc(100% - 0.7em);
border-radius: var(--smallerRadius);
.layout-mobile .guideChannelImage {
background-position: center;
width: calc(100% - var(--sidePadding));
right: 0;
}
.guide-channelHeaderCell {
background-color: rgba(255, 255, 255, 0.125);
margin: 0.35em 0.7em 0.7em 0.7em;
width: auto;
height: calc(4.42em - 0.7em);
border-radius: var(--smallRadius);
}
.guideChannelNumber {
font-size: 1em;
}
#guideTab {
padding-top: 3em !important;
}
.guide-channelHeaderCell:focus,
.programCell:focus {
.guide-channelHeaderCell:focus {
background-color: var(--highlightOutlineColor) !important;
}
.programCell:focus {
background-color: transparent !important;
}
.programCell:focus > .guideProgramName {
background-color: var(--highlightOutlineColor);
}
.emby-select-iconbutton {
background-color: var(--selectorBackgroundColor);
border: var(--defaultLighterBorder);
@@ -3735,12 +3749,12 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
padding: 0;
}
.headerTabs.sectionTabs {
display: grid;
.sectionTabs {
display: inline-grid;
height: var(--appBarHeight);
}
.layout-mobile .headerTabs.sectionTabs {
.layout-mobile .sectionTabs {
align-content: center;
}
@@ -3786,7 +3800,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
padding: 0 0.5em;
}
/* this prevents the section tabs from hiding all the way up */
/* this prevents the section tabs from hiding all the way up on phones (not-tablets)*/
.headroom--unpinned {
-webkit-transform: translateY(calc(-1 * var(--appBarHeight) - var(--borderWidth)));
transform: translateY(calc(-1 * var(--appBarHeight) - var(--borderWidth)));
@@ -3811,14 +3825,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
overflow: visible !important;
}
.layout-tv .sectionTabs {
/* this prevents the section tabs from being off-center in the music library
after I set the overflow to visible to fix visual glitches */
width: 70%;
margin-right: 2em;
}
.headerTabs.sectionTabs .emby-tab-button {
.sectionTabs .emby-tab-button {
display: inline-flex;
margin: 0.25em 0.5em;
padding: 0 1.25em;
@@ -3829,18 +3836,15 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
background-color: var(--darkerGradientPointAlpha);
}
.headerTabs.sectionTabs .emby-tab-button-active {
.sectionTabs .emby-tab-button-active {
margin: 0.25em 0.5em;
color: black;
background-color: var(--textColor);
}
.layout-mobile .headerTabs.sectionTabs .emby-tab-button:first-child {
margin-left: var(--sidePadding);
}
.layout-mobile .headerTabs.sectionTabs .emby-tab-button:last-child {
margin-right: var(--sidePadding);
/* this increases page top padding when section tabs are expanded */
.libraryPage:not(.noSecondaryNavPage) {
padding-top: calc(var(--appBarHeight) * 2 + 0.5em) !important;
}
@media (min-width: 75em) {
@@ -3851,14 +3855,28 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
align-self: center;
-webkit-justify-content: center;
justify-content: center;
/* this collapses the section tabs expanded earlier than the default 100em max-width */
margin-top: calc(-1 * var(--appBarHeight));
position: relative;
width: auto;
}
/* this reduces top page padding when section tabs are minimised */
.libraryPage:not(.noSecondaryNavPage):not(.layout-tv .libraryPage) {
padding-top: 6.8em !important;
/* this reduces page top padding when section tabs are collapsed */
.libraryPage:not(.noSecondaryNavPage) {
padding-top: calc(var(--appBarHeight) + 0.5em) !important;
}
/* this fixes the header like on desktop on larger tablet screens */
.headroom--unpinned {
-webkit-transform: translateY(0);
transform: translateY(0);
}
}
@media (min-width: 100em) {
/* this reduces top padding when section tabs are collapsed on TVs */
.layout-tv .libraryPage:not(.noSecondaryNavPage) {
padding-top: calc(var(--appBarHeight) + 0.5em) !important;
}
}
@@ -3867,16 +3885,27 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
.sectionTabs {
font-size: 100%;
}
/* this keeps the section tabs expanded on TVs under 100em width */
.layout-tv .sectionTabs {
margin-top: unset;
}
/* this increased top page padding when section tabs are maximised */
.libraryPage:not(.noSecondaryNavPage) {
padding-top: 9.5em !important;
}
/* this limits top page padding when section tabs always on TVs */
/* this increases page top padding when section tabs are expanded on TVs*/
.layout-tv .libraryPage:not(.noSecondaryNavPage) {
padding-top: 6em !important;
padding-top: calc(var(--appBarHeight) * 2 + 0.5em) !important;
}
}
@media (max-width: 75em) {
/* these margins are applied only on phones, not tablets*/
.layout-mobile .sectionTabs .emby-tab-button:first-child {
margin-left: var(--sidePadding);
}
.layout-mobile .sectionTabs .emby-tab-button:last-child {
margin-right: var(--sidePadding);
}
}
.layout-tv .headerLeft {
@@ -3914,22 +3943,13 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child {
z-index: -1;
}
.layout-mobile .headerTop {
height: calc(var(--appBarHeight) - 1em);
}
.headerTabs.sectionTabs {
.sectionTabs {
padding-bottom: 1.5em;
}
.layout-mobile .headerTabs.sectionTabs {
.layout-mobile .sectionTabs {
align-content: center;
}
.headroom--unpinned {
-webkit-transform: translateY(calc(-0.75 * var(--appBarHeight) - var(--borderWidth)));
transform: translateY(calc(-0.75 * var(--appBarHeight) - var(--borderWidth)));
}
}
.nowPlayingPage {

View File

@@ -32,16 +32,20 @@
.age-rating {
font-size: 0.8em;
font-family: "Archivo Narrow", sans-serif;
color: unset;
}
#slides-container {
width: calc(100vw - (2 * var(--sidePadding)));
height: 62%;
top: var(--appBarHeight);
top: calc(var(--appBarHeight) * 2 + 1.25em);
border: var(--defaultBorder);
border-radius: var(--largerRadius);
transition: all 0.125s, border 0s;
user-select: none;
position: absolute;
left: var(--sidePadding);
}
.logo-container {
@@ -59,28 +63,74 @@
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);
.pause-button {
top: 1em !important;
}
.tomato-rating {
.separator-icon {
font-size: 5px;
color: var(--dimTextColor);
}
.dot {
border-radius: 0.25em;
width: 0.375em;
height: 0.375em;
transition: width 0.5s;
opacity: 0.5;
background-color: var(--textColor) !important;
}
.dot.active {
width: 2em;
transform: none;
}
@media only screen and (max-width: 767px) and (orientation: portrait) {
.button-container {
bottom: 3em;
}
.tomato-rating,
.genre {
display: none;
}
.dots-container {
top: calc(50% + 19vh);
bottom: 6em;
}
.info-container {
bottom: 5em;
}
.logo-container {
top: calc(100% - 15em);
}
.backdrop {
transform-origin: center;
}
.left-arrow,
.right-arrow {
display: none !important;
}
}
@media (min-width: 75em) {
#slides-container {
top: calc(0.5 * var(--appBarHeight));
top: calc(var(--appBarHeight) + 1.25em);
}
.layout-tv #slides-container {
top: calc(var(--appBarHeight) * 2 + 1.25em);
}
}
@media (min-width: 100em) {
.layout-tv #slides-container {
top: calc(var(--appBarHeight) + 1.25em);
}
}
@@ -94,10 +144,4 @@
}
}
@media only screen and (max-width: 767px) and (orientation: portrait) {
.logo-container {
top: 50%;
}
}
/* this styles the media bar plugin - end */

View File

@@ -9,5 +9,9 @@
"editor.formatOnSave": true,
"prettier.useTabs": false,
"prettier.printWidth": 120,
"cSpell.words": [
"Jellyfin",
"Jellyseerr"
],
}
}