ferrybig icon

KiCad dark mode generator

ferrybig | PRO | 08/13/26 10:27:23 AM UTC | 0 ⭐ | 12935 👁️ | Never ⏰ | []
JavaScript |

1.53 KB

|

None

|

0 👍

/

0 👎

const culori = require("culori");
let data = require("./user.json");
 
for (const k in data.schematic) {
    const item = data.schematic[k];
    let match_start = 0;
 
    if (typeof item !== 'string') {
        continue;
    } else if (item.startsWith('rgb(')) {
        match_start = 4;
    } else if (item.startsWith('rgba(')) {
        match_start = 5;
    } else {
        continue;
    }
 
    const parsed = item.substring(match_start, item.length - 1)
        .replace(/ /g, '')
        .split(',')
        .map(v => parseFloat(v));
 
    // 1. Create an sRGB object from the parsed array
    const srgbColor = {
        mode: 'rgb',
        r: parsed[0] / 255,
        g: parsed[1] / 255,
        b: parsed[2] / 255,
        alpha: parsed[3] !== undefined ? parsed[3] : 1
    };
 
    // 2. Convert to Oklch space
    const oklchColor = culori.oklch(srgbColor);
 
    // 3. Invert only the Lightness (L) component (range 0.0 - 1.0)
    oklchColor.l = 1.0 - oklchColor.l;
 
        // make everything darker
        oklchColor.l = Math.max(oklchColor.l * 1.2 - 0.2, 0);
 
        // Shift hue
        // oklchColor.h += 180;
 
    // 4. Convert back to sRGB
    const invertedSrgb = culori.rgb(oklchColor);
 
    // 5. Re-scale to 0-255 bounds and format values
    const r = Math.round(invertedSrgb.r * 255);
    const g = Math.round(invertedSrgb.g * 255);
    const b = Math.round(invertedSrgb.b * 255);
    
    let stringified;
    if (parsed.length === 4) {
        stringified = `rgba(${r},${g},${b},${parsed[3]})`;
    } else {
        stringified = `rgb(${r},${g},${b})`;
    }
 
    data.schematic[k] = stringified;
}
 
console.log(JSON.stringify(data, null, '\t'));
 

Comments