From 5118c8da96312627b86c55738c02c6c8ac6809d0 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Wed, 29 Jan 2025 18:17:13 +1100 Subject: scheme: dynamic light theme Autodetect based on wallpaper Also resize wallpaper so faster And async magick blur so wallpaper doesnt block --- scheme/apply-scheme.fish | 1 - scheme/gen-scheme.fish | 10 ++++++++-- scheme/islight.py | 16 ++++++++++++++++ scheme/resizeimg.py | 29 +++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100755 scheme/islight.py create mode 100755 scheme/resizeimg.py (limited to 'scheme') diff --git a/scheme/apply-scheme.fish b/scheme/apply-scheme.fish index ecea2d5..462b4d8 100755 --- a/scheme/apply-scheme.fish +++ b/scheme/apply-scheme.fish @@ -79,7 +79,6 @@ end if test -d $CONFIG/gtk log 'Generating GTK+ schemes' gen-gtk $colours - $CONFIG/gtk/update-scheme.fish end # Reload programs if dynamic scheme diff --git a/scheme/gen-scheme.fish b/scheme/gen-scheme.fish index d8e8158..b0608e7 100755 --- a/scheme/gen-scheme.fish +++ b/scheme/gen-scheme.fish @@ -7,13 +7,19 @@ function nl-echo end end -. (dirname (status filename))/../util.fish +set -l src (dirname (status filename)) + +. $src/../util.fish set -l colour_names rosewater flamingo pink mauve red maroon peach yellow green teal sky sapphire blue lavender set -l layer_names text subtext1 subtext0 overlay2 overlay1 overlay0 surface2 surface1 surface0 base mantle crust test -f "$argv[1]" && set -l img "$argv[1]" || set -l img $CACHE/wallpaper/current -set -l colours_raw (okolors (realpath $img) -k 15 -w 0 -l 70,90,75,65,40,35,30,25,20,15,10,8,6) +set -l img ($src/resizeimg.py $img) + +$src/islight.py $img && set -l light_vals 40,6,8,10,45,50,55,60,65,70,75,80,85,90 || set -l light_vals 70,90,75,65,40,35,30,25,20,15,10,8,6 + +set -l colours_raw (okolors (realpath $img) -k 15 -w 0 -l $light_vals) set -l colours (string split ' ' $colours_raw[2])[2..] set -l layers (nl-echo $colours_raw | cut -f 1 -d ' ')[3..] diff --git a/scheme/islight.py b/scheme/islight.py new file mode 100755 index 0000000..1adcf3f --- /dev/null +++ b/scheme/islight.py @@ -0,0 +1,16 @@ +#!/bin/python + +import sys +from PIL import Image +from materialyoucolor.quantize import QuantizeCelebi +from materialyoucolor.score.score import Score +from materialyoucolor.hct import Hct +from resizeimg import resize + + +if __name__ == "__main__": + with Image.open(sys.argv[1]) as img: + img = resize(img)[0] + colours = QuantizeCelebi(list(img.getdata()), 128) + hct = Hct.from_int(Score.score(colours)[0]) + sys.exit(0 if hct.tone > 60 else 1) diff --git a/scheme/resizeimg.py b/scheme/resizeimg.py new file mode 100755 index 0000000..e18ffb8 --- /dev/null +++ b/scheme/resizeimg.py @@ -0,0 +1,29 @@ +#!/bin/python + +import sys +import math +from PIL import Image + + +def calc_size(w, h, b = 128): + ia = w * h + ba = b * b + s = math.sqrt(ba / ia) if ia > ba else 1 + return max(1, round(w * s)), max(1, round(h * s)) + + +def resize(img): + w, h = calc_size(img.width, img.height) + if w < img.width or h < img.height: + return img.resize((w, h), Image.Resampling.BICUBIC), True + return img, False + + +if __name__ == "__main__": + with Image.open(sys.argv[1]) as img: + img, resized = resize(img) + if resized: + img.save("/tmp/caelestia-resize.png") + print("/tmp/caelestia-resize.png") + else: + print(sys.argv[1]) -- cgit v1.2.3-freya