diff --git a/common/frogarized/frogarized.py b/common/frogarized/frogarized.py index 013c746..cc3e488 100755 --- a/common/frogarized/frogarized.py +++ b/common/frogarized/frogarized.py @@ -8,6 +8,7 @@ import json import colorspacious import numpy as np +import numpy.typing as npt # Original values for the Solarized color scheme, # created by Ethan Schoonover (https://ethanschoonover.com/solarized/) @@ -59,43 +60,50 @@ SOLARIZED_RGB = np.array( parser = argparse.ArgumentParser( description="Generate a base16-theme based derived from Solarized" ) -parser.add_argument("--source", choices=["lab", "rgb"], default="lab") -parser.add_argument("--lightness_factor", type=float, default=1.0) -parser.add_argument("--chroma-factor", type=float, default=1.0) -parser.add_argument("--hue_shift", type=float, default=-75.0) -parser.add_argument("--polarity", choices=["dark", "light"], default="dark") -parser.add_argument( +_ = parser.add_argument("--source", choices=["lab", "rgb"], default="lab") +_ = parser.add_argument("--lightness_factor", type=float, default=1.0) +_ = parser.add_argument("--chroma-factor", type=float, default=1.0) +_ = parser.add_argument("--hue_shift", type=float, default=-75.0) +_ = parser.add_argument( + "--polarity", choices=["dark", "light"], default="dark" +) +_ = parser.add_argument( "--output", choices=["json", "truecolor"], default="truecolor" ) args = parser.parse_args() + +def cspace_convert( + array: npt.NDArray[np.float64], src: str, dst: str +) -> npt.NDArray[np.float64]: + return colorspacious.cspace_convert(array, src, dst) + + # Convert source to JCh color space if args.source == "lab": - solarized_jch = colorspacious.cspace_convert( - SOLARIZED_LAB, "CIELab", "JCh" - ) -elif args.source == "rgb": - solarized_jch = colorspacious.cspace_convert( - SOLARIZED_RGB, "sRGB255", "JCh" - ) + solarized_jch = cspace_convert(SOLARIZED_LAB, "CIELab", "JCh") +else: # rgb + solarized_jch = cspace_convert(SOLARIZED_RGB, "sRGB255", "JCh") + # Build frogarized theme -jch_factor = [args.lightness_factor, args.chroma_factor, 1] -jch_shift = [0, 0, args.hue_shift] -frogarzied_jch = np.vstack( +jch_factor: list[float] = [args.lightness_factor, args.chroma_factor, 1] +jch_shift: list[float] = [0, 0, args.hue_shift] +frogarized_jch = np.vstack( [solarized_jch[:8] * jch_factor + jch_shift, solarized_jch[8:]] ) # Convert frogarized to RGB -frogarized_srgb = colorspacious.cspace_convert( - frogarzied_jch, "JCh", "sRGB255" +frogarized_srgb = cspace_convert(frogarized_jch, "JCh", "sRGB255") +frogarized_rgb = np.asarray( + np.rint(np.clip(frogarized_srgb, 0, 255)), dtype=np.uint8 ) -frogarized_rgb = np.uint8(np.rint(np.clip(frogarized_srgb, 0, 255))) + if args.polarity == "light": frogarized_rgb = np.vstack([frogarized_rgb[7::-1], frogarized_rgb[8:]]) # Output -palette = {} +palette: dict[str, str] = {} for i in range(16): rgb = frogarized_rgb[i] r, g, b = rgb