aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pywal/backends/fast_colorthief.py50
-rw-r--r--pywal/colors.py10
-rw-r--r--pywal/templates/colors-rofi-dark.rasi5
-rw-r--r--pywal/templates/colors-rofi-light.rasi5
4 files changed, 69 insertions, 1 deletions
diff --git a/pywal/backends/fast_colorthief.py b/pywal/backends/fast_colorthief.py
new file mode 100644
index 0000000..b68ff02
--- /dev/null
+++ b/pywal/backends/fast_colorthief.py
@@ -0,0 +1,50 @@
+"""
+Generate a colorscheme using fast_colorthief.
+"""
+import logging
+import sys
+
+try:
+ import fast_colorthief
+
+except ImportError:
+ logging.error("fast_colorthief wasn't found on your system.")
+ logging.error("Try another backend. (wal --backend)")
+ sys.exit(1)
+
+from .. import util
+
+
+def gen_colors(img):
+ """ Ask backend to generate 16 colors. """
+ raw_colors = fast_colorthief.get_palette(img, 16)
+
+ return [util.rgb_to_hex(color) for color in raw_colors]
+
+
+def adjust(cols, light):
+ """Create palette."""
+ cols.sort(key=util.rgb_to_yiq)
+ raw_colors = [*cols, *cols]
+
+ if light:
+ raw_colors[0] = util.lighten_color(cols[0], 0.90)
+ raw_colors[7] = util.darken_color(cols[0], 0.75)
+
+ else:
+ for color in raw_colors:
+ color = util.lighten_color(color, 0.40)
+
+ raw_colors[0] = util.darken_color(cols[0], 0.80)
+ raw_colors[7] = util.lighten_color(cols[0], 0.60)
+
+ raw_colors[8] = util.lighten_color(cols[0], 0.20)
+ raw_colors[15] = raw_colors[7]
+
+ return raw_colors
+
+
+def get(img, light=False):
+ """Get colorscheme."""
+ cols = gen_colors(img)
+ return adjust(cols, light)
diff --git a/pywal/colors.py b/pywal/colors.py
index 49e5571..8688b4b 100644
--- a/pywal/colors.py
+++ b/pywal/colors.py
@@ -18,11 +18,19 @@ def list_backends():
os.scandir(os.path.join(MODULE_DIR, "backends"))
if "__" not in b.name]
+def normalize_img_path(img: str):
+ """Normalizes the image path for output."""
+ if os.name == 'nt':
+ # On Windows, the JSON.dump ends up outputting un-escaped backslash breaking
+ # the ability to read colors.json. Windows supports forward slash, so we can
+ # use that for now
+ return img.replace('\\', '/')
+ return img
def colors_to_dict(colors, img):
"""Convert list of colors to pywal format."""
return {
- "wallpaper": img,
+ "wallpaper": normalize_img_path(img),
"alpha": util.Color.alpha_num,
"special": {
diff --git a/pywal/templates/colors-rofi-dark.rasi b/pywal/templates/colors-rofi-dark.rasi
index 302d44f..fde6881 100644
--- a/pywal/templates/colors-rofi-dark.rasi
+++ b/pywal/templates/colors-rofi-dark.rasi
@@ -73,6 +73,11 @@
padding: 1px;
}}
+#element-text, element-icon {{
+ background-color: inherit;
+ text-color: inherit;
+}}
+
#element.normal.normal {{
background-color: @normal-background;
text-color: @normal-foreground;
diff --git a/pywal/templates/colors-rofi-light.rasi b/pywal/templates/colors-rofi-light.rasi
index d4f89af..ff592d7 100644
--- a/pywal/templates/colors-rofi-light.rasi
+++ b/pywal/templates/colors-rofi-light.rasi
@@ -73,6 +73,11 @@
padding: 1px;
}}
+#element-text, element-icon {{
+ background-color: inherit;
+ text-color: inherit;
+}}
+
#element.normal.normal {{
background-color: @normal-background;
text-color: @normal-foreground;