Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

16colors2shades #601

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions pywal/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ def get_args():
"flag is used: Go through the images in order "
"instead of shuffled.")

arg.add_argument("--nine", action="store_true",
help="Use 9 color output. ")

arg.add_argument("--recursive", action="store_true",
help="When pywal is given a directory as input and this "
"flag is used: Search for images recursively in "
Expand Down Expand Up @@ -175,7 +178,7 @@ def parse_args(parser):
if args.i:
image_file = image.get(args.i, iterative=args.iterative,
recursive=args.recursive)
colors_plain = colors.get(image_file, args.l, args.backend,
colors_plain = colors.get(image_file, args.l, args.nine, args.backend,
sat=args.saturate)

if args.theme:
Expand All @@ -186,7 +189,7 @@ def parse_args(parser):

if args.w:
cached_wallpaper = util.read_file(os.path.join(CACHE_DIR, "wal"))
colors_plain = colors.get(cached_wallpaper[0], args.l, args.backend,
colors_plain = colors.get(cached_wallpaper[0], args.l, args.nine, args.backend,
sat=args.saturate)

if args.b:
Expand Down
23 changes: 5 additions & 18 deletions pywal/backends/colorthief.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
logging.error("Try another backend. (wal --backend)")
sys.exit(1)

from .. import colors
from .. import util


Expand All @@ -36,29 +37,15 @@ def gen_colors(img):
return [util.rgb_to_hex(color) for color in raw_colors]


def adjust(cols, light):
def adjust(cols, light, nine):
"""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)
return colors.generic_adjust(raw_colors, light, nine)

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):
def get(img, light=False, nine=False):
"""Get colorscheme."""
cols = gen_colors(img)
return adjust(cols, light)
return adjust(cols, light, nine)
8 changes: 4 additions & 4 deletions pywal/backends/colorz.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ def gen_colors(img):
return [util.rgb_to_hex([*color[0]]) for color in raw_colors]


def adjust(cols, light):
def adjust(cols, light, nine):
"""Create palette."""
raw_colors = [cols[0], *cols, "#FFFFFF",
"#000000", *cols, "#FFFFFF"]

return colors.generic_adjust(raw_colors, light)
return colors.generic_adjust(raw_colors, light, nine)


def get(img, light=False):
def get(img, light=False, nine=False):
"""Get colorscheme."""
cols = gen_colors(img)

Expand All @@ -40,4 +40,4 @@ def get(img, light=False):
logging.error("Try another backend or another image. (wal --backend)")
sys.exit(1)

return adjust(cols, light)
return adjust(cols, light, nine)
8 changes: 4 additions & 4 deletions pywal/backends/haishoku.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,16 @@ def gen_colors(img):
return [util.rgb_to_hex(col[1]) for col in palette]


def adjust(cols, light):
def adjust(cols, light, nine):
"""Create palette."""
cols.sort(key=util.rgb_to_yiq)
raw_colors = [*cols, *cols]
raw_colors[0] = util.lighten_color(cols[0], 0.40)

return colors.generic_adjust(raw_colors, light)
return colors.generic_adjust(raw_colors, light, nine)


def get(img, light=False):
def get(img, light=False, nine=False):
"""Get colorscheme."""
cols = gen_colors(img)
return adjust(cols, light)
return adjust(cols, light, nine)
8 changes: 4 additions & 4 deletions pywal/backends/schemer2.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,20 @@ def gen_colors(img):
return subprocess.check_output([*cmd, img]).splitlines()


def adjust(cols, light):
def adjust(cols, light, nine):
"""Create palette."""
cols.sort(key=util.rgb_to_yiq)
raw_colors = [*cols[8:], *cols[8:]]

return colors.generic_adjust(raw_colors, light)
return colors.generic_adjust(raw_colors, light, nine)


def get(img, light=False):
def get(img, light=False, nine=False):
"""Get colorscheme."""
if not shutil.which("schemer2"):
logging.error("Schemer2 wasn't found on your system.")
logging.error("Try another backend. (wal --backend)")
sys.exit(1)

cols = [col.decode('UTF-8') for col in gen_colors(img)]
return adjust(cols, light)
return adjust(cols, light, nine)
30 changes: 6 additions & 24 deletions pywal/backends/wal.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import subprocess
import sys

from .. import colors
from .. import util


Expand Down Expand Up @@ -54,34 +55,15 @@ def gen_colors(img):
return [re.search("#.{6}", str(col)).group(0) for col in raw_colors[1:]]


def adjust(colors, light):
def adjust(cols, light, nine):
"""Adjust the generated colors and store them in a dict that
we will later save in json format."""
raw_colors = colors[:1] + colors[8:16] + colors[8:-1]
raw_colors = cols[:1] + cols[8:16] + cols[8:-1]

# Manually adjust colors.
if light:
for color in raw_colors:
color = util.saturate_color(color, 0.5)
return colors.generic_adjust(raw_colors, light, nine)

raw_colors[0] = util.lighten_color(colors[-1], 0.85)
raw_colors[7] = colors[0]
raw_colors[8] = util.darken_color(colors[-1], 0.4)
raw_colors[15] = colors[0]

else:
# Darken the background color slightly.
if raw_colors[0][1] != "0":
raw_colors[0] = util.darken_color(raw_colors[0], 0.40)

raw_colors[7] = util.blend_color(raw_colors[7], "#EEEEEE")
raw_colors[8] = util.darken_color(raw_colors[7], 0.30)
raw_colors[15] = util.blend_color(raw_colors[15], "#EEEEEE")

return raw_colors


def get(img, light=False):
def get(img, light=False, nine=False):
"""Get colorscheme."""
colors = gen_colors(img)
return adjust(colors, light)
return adjust(colors, light, nine)
62 changes: 46 additions & 16 deletions pywal/colors.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,23 +52,52 @@ def colors_to_dict(colors, img):
}


def generic_adjust(colors, light):
def generic_adjust(colors, light, nine):
"""Generic color adjustment for themers."""
if light:
for color in colors:
color = util.saturate_color(color, 0.60)
color = util.darken_color(color, 0.5)

colors[0] = util.lighten_color(colors[0], 0.95)
colors[7] = util.darken_color(colors[0], 0.75)
colors[8] = util.darken_color(colors[0], 0.25)
colors[15] = colors[7]

if nine:
colors[0] = util.lighten_color(colors[0], 0.95)
colors[7] = util.darken_color(colors[0], 0.75)
colors[8] = util.darken_color(colors[0], 0.25)
colors[15] = colors[7]

else:

colors[0] = util.lighten_color(colors[0], 0.75)
colors[7] = util.darken_color(colors[0], 0.50)
colors[8] = util.darken_color(colors[0], 0.25)
colors[1] = util.darken_color(colors[1], 0.25)
colors[2] = util.darken_color(colors[2], 0.25)
colors[3] = util.darken_color(colors[3], 0.25)
colors[4] = util.darken_color(colors[4], 0.25)
colors[5] = util.darken_color(colors[5], 0.25)
colors[6] = util.darken_color(colors[6], 0.25)
colors[15] = util.darken_color(colors[0], 0.75)

else:
colors[0] = util.darken_color(colors[0], 0.80)
colors[7] = util.lighten_color(colors[0], 0.75)
colors[8] = util.lighten_color(colors[0], 0.25)
colors[15] = colors[7]
if nine:
colors[0] = util.darken_color(colors[0], 0.80)
colors[7] = util.lighten_color(colors[0], 0.75)
colors[8] = util.lighten_color(colors[0], 0.25)
colors[15] = colors[7]

else:

colors[0] = util.darken_color(colors[0], 0.75)
colors[7] = util.lighten_color(colors[0], 0.50)
colors[8] = util.lighten_color(colors[0], 0.25)
colors[1] = util.darken_color(colors[1], 0.25)
colors[2] = util.darken_color(colors[2], 0.25)
colors[3] = util.darken_color(colors[3], 0.25)
colors[4] = util.darken_color(colors[4], 0.25)
colors[5] = util.darken_color(colors[5], 0.25)
colors[6] = util.darken_color(colors[6], 0.25)
colors[15] = util.lighten_color(colors[0], 0.75)


return colors

Expand All @@ -83,15 +112,16 @@ def saturate_colors(colors, amount):
return colors


def cache_fname(img, backend, light, cache_dir, sat=""):
def cache_fname(img, backend, nine, light, cache_dir, sat=""):
"""Create the cache file name."""
color_type = "light" if light else "dark"
color_num = "9" if nine else "16"
file_name = re.sub("[/|\\|.]", "_", img)
file_size = os.path.getsize(img)

file_parts = [file_name, color_type, backend,
file_parts = [file_name, color_num, color_type, backend,
sat, file_size, __cache_version__]
return [cache_dir, "schemes", "%s_%s_%s_%s_%s_%s.json" % (*file_parts,)]
return [cache_dir, "schemes", "%s_%s_%s_%s_%s_%s_%s.json" % (*file_parts,)]


def get_backend(backend):
Expand All @@ -118,10 +148,10 @@ def palette():
print("\n")


def get(img, light=False, backend="wal", cache_dir=CACHE_DIR, sat=""):
def get(img, light=False, nine=False, backend="wal", cache_dir=CACHE_DIR, sat=""):
"""Generate a palette."""
# home_dylan_img_jpg_backend_1.2.2.json
cache_name = cache_fname(img, backend, light, cache_dir, sat)
cache_name = cache_fname(img, backend, nine, light, cache_dir, sat)
cache_file = os.path.join(*cache_name)

if os.path.isfile(cache_file):
Expand All @@ -143,7 +173,7 @@ def get(img, light=False, backend="wal", cache_dir=CACHE_DIR, sat=""):

logging.info("Using %s backend.", backend)
backend = sys.modules["pywal.backends.%s" % backend]
colors = getattr(backend, "get")(img, light)
colors = getattr(backend, "get")(img, light, nine)
colors = colors_to_dict(saturate_colors(colors, sat), img)

util.save_file_json(colors, cache_file)
Expand Down
53 changes: 53 additions & 0 deletions pywal/templates/colors--nodim-alacritty.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
colors:

primary:
background: "{background}"
foreground: "{foreground}"

cursor:
text: CellBackground
cursor: CellForeground

vi_mode_cursor:
text: CellBackground
cursor: CellForeground

search:
matches:
foreground: '{color0}'
background: '{color15}'
focused_match:
foreground: CellBackground
background: CellForeground

bar:
foreground: '{color8}'
background: '{color7}'

line_indicator:
foreground: None
background: None

selection:
text: CellBackground
background: CellForeground

normal:
black: "{color0}"
red: "{color1}"
green: "{color2}"
yellow: "{color3}"
blue: "{color4}"
magenta: "{color5}"
cyan: "{color6}"
white: "{color7}"

bright:
black: "{color8}"
red: "{color9}"
green: "{color10}"
yellow: "{color11}"
blue: "{color12}"
magenta: "{color13}"
cyan: "{color14}"
white: "{color15}"
Loading