mirror of
https://github.com/ranaldsgift/KefinTweaks.git
synced 2026-11-05 15:52:47 +01:00
Add support for skin server versions, update readme
This commit is contained in:
@@ -98,7 +98,7 @@ The features in KefinTweaks which use local data caching are listed below, along
|
||||
- Home Screen
|
||||
- **Genres** [24h]:
|
||||
Genres are cached simply to reduce API calls to the server. This is not an expensive API call, but under most circumstances the results will be the same even across longer periods of time.
|
||||
- **Top People** [24h]:
|
||||
- **Top People** [7d]:
|
||||
In order to populate the "Top People" in your movie library, we fetch the Person data for every movie in your library. We build a list of all the People who appear in at least X number of items based on their type (Actor/Director/Writer). This is an expensive operation, and is longer as the size of your library grows.
|
||||
- Watchlist
|
||||
- **Watchlist Items** [5m]:
|
||||
@@ -413,6 +413,8 @@ Allow users to also customize various configuration options through the UI
|
||||
<hr>
|
||||
|
||||
### Version History
|
||||
- **v0.2.2**: Add support for skin server versions, fixes for HeaderTabs
|
||||
- **v0.2.1**: Caching improvements for Watchlist and Top People, Mobile UI fixes and Flatten TV Shows improvements
|
||||
- **v0.2.0**: New Features: Skin Manager, Collections on Details Page, Flatten TV Shows
|
||||
- **v0.1.3**: Improve Watchlist UI and Search UX
|
||||
- **v0.1.2**: Added proper support for Base URLs configured in Jellyfin
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
'use strict';
|
||||
|
||||
console.log('[KefinTweaks Injector] Initializing...');
|
||||
const versionNumber = "0.2.0";
|
||||
const versionNumber = "0.2.2";
|
||||
|
||||
// Configuration: Start with defaults, then merge user config
|
||||
// This allows new scripts to work out of the box without requiring config updates
|
||||
@@ -417,7 +417,7 @@
|
||||
|
||||
// Main initialization function
|
||||
async function initialize() {
|
||||
console.log('[KefinTweaks Injector] Starting initialization...');
|
||||
console.log(`[KefinTweaks Injector] Starting KefinTweaks v${versionNumber} initialization...`);
|
||||
|
||||
// Validate configuration
|
||||
if (!validateConfiguration()) {
|
||||
|
||||
+34
-8
@@ -2,7 +2,6 @@
|
||||
// Copy this entire file into your Jellyfin JS injector plugin
|
||||
// Modify the configuration below to enable/disable features and customize settings
|
||||
//
|
||||
// VERSION: 0.2.0
|
||||
// Full compatibility with Jellyfin 10.10.7
|
||||
// Untested compatibility with Jellyfin 10.11+
|
||||
//
|
||||
@@ -174,7 +173,8 @@
|
||||
// ============================================================================
|
||||
// Configure additional skins available in the skin manager
|
||||
// These will be merged with skins from userConfig.js
|
||||
// Each skin can have a single URL (string) or multiple URLs (array) for complex themes
|
||||
// Each skin's url field should be an array of objects with majorServerVersions and urls arrays
|
||||
// This allows you to specify different CSS bundles for different server versions
|
||||
// Each skin can also have colorSchemes array for color variations specific to that skin
|
||||
// Each skin should have an author field indicating who created the skin
|
||||
skins: [
|
||||
@@ -184,15 +184,25 @@
|
||||
{
|
||||
name: 'Custom Theme',
|
||||
author: 'username',
|
||||
url: 'https://cdn.jsdelivr.net/gh/username/custom-theme.css',
|
||||
url: [
|
||||
{
|
||||
majorServerVersions: [10, 11],
|
||||
urls: ['https://cdn.jsdelivr.net/gh/username/custom-theme.css']
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
},
|
||||
{
|
||||
name: 'Multi-file Theme',
|
||||
author: 'username',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/username/theme-base.css',
|
||||
'https://cdn.jsdelivr.net/gh/username/theme-extensions.css'
|
||||
{
|
||||
majorServerVersions: [10, 11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/username/theme-base.css',
|
||||
'https://cdn.jsdelivr.net/gh/username/theme-extensions.css'
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: [
|
||||
{
|
||||
@@ -205,6 +215,24 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'Version-Specific Theme',
|
||||
author: 'username',
|
||||
url: [
|
||||
{
|
||||
majorServerVersions: [10],
|
||||
urls: ['https://cdn.jsdelivr.net/gh/username/theme-v10.css']
|
||||
},
|
||||
{
|
||||
majorServerVersions: [11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/username/theme-v11.css',
|
||||
'https://cdn.jsdelivr.net/gh/username/theme-v11-fixes.css'
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
},
|
||||
*/
|
||||
],
|
||||
|
||||
@@ -272,8 +300,6 @@
|
||||
script.async = true;
|
||||
document.head.appendChild(script);
|
||||
|
||||
console.log('[KefinTweaks] Central configuration loaded. Available at window.KefinTweaksConfig');
|
||||
console.log('[KefinTweaks] Version 0.2.0 - Compatible with Jellyfin 10.10.7');
|
||||
|
||||
console.log('[KefinTweaks] Central configuration loaded. Available at window.KefinTweaksConfig');
|
||||
})();
|
||||
|
||||
|
||||
+157
-9
@@ -20,6 +20,142 @@
|
||||
const THEME_STORAGE_KEY = 'kefinTweaks_selectedTheme';
|
||||
const COLOR_SCHEMES_STORAGE_KEY = 'kefinTweaks_selectedColorScheme';
|
||||
|
||||
/**
|
||||
* Get the current major server version from ApiClient
|
||||
* @returns {number|null} The major version number (e.g., 10 for "10.10.X", 11 for "10.11.X"), or null if unavailable
|
||||
*/
|
||||
function getCurrentMajorServerVersion() {
|
||||
try {
|
||||
if (typeof ApiClient !== 'undefined' && ApiClient._serverVersion) {
|
||||
const versionParts = ApiClient._serverVersion.split('.');
|
||||
if (versionParts.length >= 2) {
|
||||
const majorVersion = parseInt(versionParts[1], 10);
|
||||
if (!isNaN(majorVersion)) {
|
||||
return majorVersion;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
WARN('Error getting server version:', error);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract URLs from skin configuration based on current server version
|
||||
* Supports both new structure (array of objects) and old structure (string/array of strings)
|
||||
* @param {Object} skin - The skin configuration object
|
||||
* @returns {Array<string>|null} Array of URLs to load, or null if no URLs
|
||||
*/
|
||||
function getSkinUrlsForCurrentVersion(skin) {
|
||||
if (!skin.url) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const currentMajorVersion = getCurrentMajorServerVersion();
|
||||
|
||||
// New structure: array of objects with majorServerVersions and urls
|
||||
if (Array.isArray(skin.url) && skin.url.length > 0 && typeof skin.url[0] === 'object' && skin.url[0].majorServerVersions) {
|
||||
// Find all URL objects that match the current server version
|
||||
const matchingUrlObjects = skin.url.filter(urlObj => {
|
||||
if (!urlObj.majorServerVersions || !Array.isArray(urlObj.majorServerVersions)) {
|
||||
return false;
|
||||
}
|
||||
return currentMajorVersion !== null && urlObj.majorServerVersions.includes(currentMajorVersion);
|
||||
});
|
||||
|
||||
if (matchingUrlObjects.length === 0) {
|
||||
if (currentMajorVersion !== null) {
|
||||
LOG(`No URL configuration found for skin '${skin.name}' on server version ${currentMajorVersion}`);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Merge all URLs from matching objects
|
||||
const allUrls = [];
|
||||
matchingUrlObjects.forEach(urlObj => {
|
||||
if (Array.isArray(urlObj.urls)) {
|
||||
allUrls.push(...urlObj.urls);
|
||||
} else if (urlObj.urls) {
|
||||
allUrls.push(urlObj.urls);
|
||||
}
|
||||
});
|
||||
|
||||
return allUrls.length > 0 ? allUrls : null;
|
||||
}
|
||||
|
||||
// Old structure: string or array of strings (backward compatibility)
|
||||
if (typeof skin.url === 'string') {
|
||||
return [skin.url];
|
||||
}
|
||||
if (Array.isArray(skin.url)) {
|
||||
return skin.url;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter skins based on the current server version
|
||||
* Checks majorServerVersions in the URL structure
|
||||
* @param {Array} skins - Array of skin configuration objects
|
||||
* @returns {Array} Filtered array of skins compatible with current server version
|
||||
*/
|
||||
function filterSkinsByServerVersion(skins) {
|
||||
const currentMajorVersion = getCurrentMajorServerVersion();
|
||||
|
||||
// If we can't determine the server version, include all skins (backward compatibility)
|
||||
if (currentMajorVersion === null) {
|
||||
WARN('Could not determine server version, showing all skins');
|
||||
return skins;
|
||||
}
|
||||
|
||||
return skins.filter(skin => {
|
||||
// Check if skin has URL configuration
|
||||
if (!skin.url) {
|
||||
// Skin with no URL (like Default) - check old majorServerVersions field for backward compatibility
|
||||
if (skin.majorServerVersions && Array.isArray(skin.majorServerVersions)) {
|
||||
const isSupported = skin.majorServerVersions.includes(currentMajorVersion);
|
||||
if (!isSupported) {
|
||||
LOG(`Skin '${skin.name}' is not supported for server version ${currentMajorVersion} (supports: ${skin.majorServerVersions.join(', ')})`);
|
||||
}
|
||||
return isSupported;
|
||||
}
|
||||
// No version info, include for backward compatibility
|
||||
return true;
|
||||
}
|
||||
|
||||
// New structure: check majorServerVersions in URL objects
|
||||
if (Array.isArray(skin.url) && skin.url.length > 0 && typeof skin.url[0] === 'object' && skin.url[0].majorServerVersions) {
|
||||
// Check if any URL object supports the current version
|
||||
const hasMatchingVersion = skin.url.some(urlObj => {
|
||||
if (!urlObj.majorServerVersions || !Array.isArray(urlObj.majorServerVersions)) {
|
||||
return false;
|
||||
}
|
||||
return urlObj.majorServerVersions.includes(currentMajorVersion);
|
||||
});
|
||||
|
||||
if (!hasMatchingVersion) {
|
||||
LOG(`Skin '${skin.name}' is not supported for server version ${currentMajorVersion}`);
|
||||
}
|
||||
return hasMatchingVersion;
|
||||
}
|
||||
|
||||
// Old structure: check top-level majorServerVersions field (backward compatibility)
|
||||
if (skin.majorServerVersions && Array.isArray(skin.majorServerVersions)) {
|
||||
const isSupported = skin.majorServerVersions.includes(currentMajorVersion);
|
||||
if (!isSupported) {
|
||||
LOG(`Skin '${skin.name}' is not supported for server version ${currentMajorVersion} (supports: ${skin.majorServerVersions.join(', ')})`);
|
||||
}
|
||||
return isSupported;
|
||||
}
|
||||
|
||||
// No version info specified, include for backward compatibility
|
||||
LOG(`Skin '${skin.name}' has no version information, including it for backward compatibility`);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
// Load and merge skin configurations
|
||||
function loadSkinConfig() {
|
||||
const userSkins = window.KefinTweaksUserConfig?.skins || [];
|
||||
@@ -46,6 +182,15 @@
|
||||
];
|
||||
}
|
||||
|
||||
// Filter skins based on current server version
|
||||
const skinsBeforeFilter = SKINS_CONFIG.length;
|
||||
SKINS_CONFIG = filterSkinsByServerVersion(SKINS_CONFIG);
|
||||
const skinsAfterFilter = SKINS_CONFIG.length;
|
||||
|
||||
if (skinsBeforeFilter !== skinsAfterFilter) {
|
||||
LOG(`Filtered skins by server version: ${skinsBeforeFilter} -> ${skinsAfterFilter} (removed ${skinsBeforeFilter - skinsAfterFilter} incompatible skins)`);
|
||||
}
|
||||
|
||||
LOG(`Loaded ${SKINS_CONFIG.length} skins (${userSkins.length} user + ${additionalSkins.length} additional)`);
|
||||
}
|
||||
|
||||
@@ -1445,16 +1590,19 @@
|
||||
|
||||
// Step 1: Load the new CSS first (gets cached and starts loading)
|
||||
requestAnimationFrame(() => {
|
||||
let cssUrls = [];
|
||||
if (Array.isArray(skin.url)) {
|
||||
LOG(`Loading skin with ${skin.url.length} CSS files: ${skin.name}`);
|
||||
cssUrls = skin.url;
|
||||
skin.url.forEach(url => loadSkinCSS(url, skin.name));
|
||||
} else {
|
||||
LOG(`Loading skin with single CSS file: ${skin.name}`);
|
||||
cssUrls = [skin.url];
|
||||
loadSkinCSS(skin.url, skin.name);
|
||||
const cssUrls = getSkinUrlsForCurrentVersion(skin);
|
||||
|
||||
if (!cssUrls || cssUrls.length === 0) {
|
||||
LOG(`No CSS URLs found for skin: ${skin.name}`);
|
||||
return;
|
||||
}
|
||||
|
||||
LOG(`Loading skin with ${cssUrls.length} CSS files: ${skin.name}`);
|
||||
cssUrls.forEach(url => {
|
||||
if (url) { // Skip null/empty URLs
|
||||
loadSkinCSS(url, skin.name);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
.layout-desktop .detailImageContainer .card {
|
||||
left: 3.3% !important;
|
||||
}
|
||||
+128
-28
@@ -16,7 +16,8 @@
|
||||
// Configure available skins for the display settings page
|
||||
// These skins will be merged with skins from the main KefinTweaks config
|
||||
// User-defined skins take priority over main config skins (no duplicates by name)
|
||||
// Each skin can have a single URL (string) or multiple URLs (array) for complex themes
|
||||
// Each skin's url field should be an array of objects with majorServerVersions and urls arrays
|
||||
// Example: url: [{ majorServerVersions: [10, 11], urls: ['url1.css', 'url2.css'] }]
|
||||
// Each skin can also have colorSchemes array for color variations specific to that skin
|
||||
// Each skin should have an author field indicating who created the skin
|
||||
skins: [
|
||||
@@ -30,34 +31,63 @@
|
||||
name: 'ElegantFin',
|
||||
author: 'lscambo13',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/ElegantFin-jellyfin-theme-build-latest-minified.css',
|
||||
'https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/media-bar-plugin-support-latest-min.css',
|
||||
'https://cdn.jsdelivr.net/gh/LitCastVlog/Flow@main/CSS/ScyFLow-RoundCastCrew.css',
|
||||
'https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/episodelist/episodes_grid.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/elegantKefin.css`
|
||||
{
|
||||
majorServerVersions: [10, 11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/ElegantFin-jellyfin-theme-build-latest-minified.css',
|
||||
'https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/media-bar-plugin-support-latest-min.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/elegantKefin.css`
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
},
|
||||
{
|
||||
name: 'NeutralFin',
|
||||
author: 'KartoffelChipss',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/KartoffelChipss/NeutralFin@latest/theme/neutralfin-minified.css',
|
||||
'https://cdn.jsdelivr.net/gh/KartoffelChipss/Jellyfin-Lucide@main/theme/jellyfin-lucide.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/neutralfin-kefin.css`
|
||||
],
|
||||
url: [
|
||||
{
|
||||
majorServerVersions: [10, 11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/KartoffelChipss/NeutralFin@latest/theme/neutralfin-minified.css',
|
||||
'https://cdn.jsdelivr.net/gh/KartoffelChipss/Jellyfin-Lucide@main/theme/jellyfin-lucide.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/neutralfin-kefin.css`
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
},
|
||||
{
|
||||
name: 'Jellypane',
|
||||
author: 'tedhinklater',
|
||||
url: 'https://cdn.jsdelivr.net/gh/tedhinklater/Jellypane@main/Jellypane.css',
|
||||
url: [
|
||||
{
|
||||
majorServerVersions: [10],
|
||||
urls: ['https://cdn.jsdelivr.net/gh/tedhinklater/Jellypane@main/Jellypane.css']
|
||||
},
|
||||
{
|
||||
majorServerVersions: [11],
|
||||
urls: ['https://cdn.jsdelivr.net/gh/tedhinklater/Jellypane@main/Jellypane10.11.css']
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
},
|
||||
{
|
||||
name: 'Jellyfish',
|
||||
author: 'n00bcodr',
|
||||
url: 'https://cdn.jsdelivr.net/gh/n00bcodr/jellyfish@main/theme.css',
|
||||
url: [
|
||||
{
|
||||
majorServerVersions: [10],
|
||||
urls: ['https://cdn.jsdelivr.net/gh/n00bcodr/jellyfish@main/theme.css']
|
||||
},
|
||||
{
|
||||
majorServerVersions: [11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/n00bcodr/jellyfish@main/theme.css',
|
||||
'https://cdn.jsdelivr.net/gh/n00bcodr/jellyfish@main/10.11_fixes.css'
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: [
|
||||
{
|
||||
name: 'Default',
|
||||
@@ -113,14 +143,22 @@
|
||||
name: 'Glassmorphism',
|
||||
author: 'alexyle',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/alexyle/jellyfin-theme@main/glassmorphism/theme.css',
|
||||
{
|
||||
majorServerVersions: [10, 11],
|
||||
urls: ['https://cdn.jsdelivr.net/gh/alexyle/jellyfin-theme@main/glassmorphism/theme.css']
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
},
|
||||
{
|
||||
name: 'Zombie',
|
||||
author: 'MakD',
|
||||
url: 'https://cdn.jsdelivr.net/gh/MakD/zombie-release@latest/zombie_revived.css',
|
||||
url: [
|
||||
{
|
||||
majorServerVersions: [10],
|
||||
urls: ['https://cdn.jsdelivr.net/gh/MakD/zombie-release@latest/zombie_revived.css']
|
||||
}
|
||||
],
|
||||
colorSchemes: [
|
||||
{
|
||||
name: 'Default',
|
||||
@@ -160,8 +198,21 @@
|
||||
name: 'Jamfin',
|
||||
author: 'JamsRepos',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/JamsRepos/Jamfin@latest/theme/complete.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/jamfin-kefin.css`
|
||||
{
|
||||
majorServerVersions: [10],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/JamsRepos/Jamfin@latest/theme/complete.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/jamfin-kefin.css`,
|
||||
`${KefinTweaksConfig.scriptRoot}skins/jamfin-kefin-10.css`
|
||||
]
|
||||
},
|
||||
{
|
||||
majorServerVersions: [11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/JamsRepos/Jamfin@latest/theme/complete.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/jamfin-kefin.css`
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
},
|
||||
@@ -169,8 +220,20 @@
|
||||
name: 'Scyfin',
|
||||
author: 'loof2736',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/loof2736/scyfin@latest/CSS/scyfin-theme.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/scyfin-kefin.css`
|
||||
{
|
||||
majorServerVersions: [10],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/loof2736/[email protected]/CSS/scyfin-theme.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/scyfin-kefin.css`
|
||||
]
|
||||
},
|
||||
{
|
||||
majorServerVersions: [11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/loof2736/scyfin@latest/CSS/scyfin-theme.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/scyfin-kefin.css`
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: [
|
||||
{
|
||||
@@ -188,13 +251,22 @@
|
||||
{
|
||||
name: 'Snow',
|
||||
url: 'https://cdn.jsdelivr.net/gh/loof2736/scyfin@latest/CSS/theme-snow.css'
|
||||
},
|
||||
{
|
||||
name: 'OLED',
|
||||
url: 'https://cdn.jsdelivr.net/gh/loof2736/scyfin@latest/CSS/theme-oled.css'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'Catppuccin',
|
||||
author: 'Catppuccin',
|
||||
url: 'https://jellyfin.catppuccin.com/theme.css',
|
||||
url: [
|
||||
{
|
||||
majorServerVersions: [10, 11],
|
||||
urls: ['https://jellyfin.catppuccin.com/theme.css']
|
||||
}
|
||||
],
|
||||
colorSchemes: [
|
||||
{
|
||||
name: 'Latte',
|
||||
@@ -218,8 +290,21 @@
|
||||
name: 'Flow',
|
||||
author: 'LitCastVlog',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/LitCastVlog/Flow@main/CSS/ScyFlow-main.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/flow-kefin.css`
|
||||
{
|
||||
majorServerVersions: [10],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/LitCastVlog/Flow@main/CSS/ScyFlow-oneliner.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/flow-kefin.css`
|
||||
]
|
||||
},
|
||||
{
|
||||
majorServerVersions: [11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/LitCastVlog/Flow@main/CSS/ScyFlow-oneliner.css',
|
||||
'https://cdn.jsdelivr.net/gh/LitCastVlog/Flow@main/CSS/ScyFlow-Compatibility.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/flow-kefin.css`
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: [
|
||||
{
|
||||
@@ -268,8 +353,13 @@
|
||||
name: 'Monochromic',
|
||||
author: 'CTalvio',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/presets/monochromic_preset.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/chromic-kefin.css`
|
||||
{
|
||||
majorServerVersions: [10, 11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/presets/monochromic_preset.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/chromic-kefin.css`
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
},
|
||||
@@ -277,8 +367,13 @@
|
||||
name: 'Kaleidochromic',
|
||||
author: 'CTalvio',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/presets/kaleidochromic_preset.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/chromic-kefin.css`
|
||||
{
|
||||
majorServerVersions: [10, 11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/presets/kaleidochromic_preset.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/chromic-kefin.css`
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
},
|
||||
@@ -286,8 +381,13 @@
|
||||
name: 'Novachromic',
|
||||
author: 'CTalvio',
|
||||
url: [
|
||||
'https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/presets/novachromic_preset.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/chromic-kefin.css`
|
||||
{
|
||||
majorServerVersions: [10, 11],
|
||||
urls: [
|
||||
'https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/presets/novachromic_preset.css',
|
||||
`${KefinTweaksConfig.scriptRoot}skins/chromic-kefin.css`
|
||||
]
|
||||
}
|
||||
],
|
||||
colorSchemes: []
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user