diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-14 15:42:20 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-14 15:42:20 +1000 |
| commit | b5a91d3ca57d1369d0b7b502112c4b4c9849d26c (patch) | |
| tree | 8ea45e54e0b0c826f65f54ebf82e41cb68163221 /scheme/score.py | |
| parent | feat: impl pip subcommand (diff) | |
| download | caelestia-cli-b5a91d3ca57d1369d0b7b502112c4b4c9849d26c.tar.gz caelestia-cli-b5a91d3ca57d1369d0b7b502112c4b4c9849d26c.tar.bz2 caelestia-cli-b5a91d3ca57d1369d0b7b502112c4b4c9849d26c.zip | |
internal: remove all legacy fish scripts
Diffstat (limited to 'scheme/score.py')
| -rwxr-xr-x | scheme/score.py | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/scheme/score.py b/scheme/score.py deleted file mode 100755 index 18ddc21..0000000 --- a/scheme/score.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python - -import sys - -from materialyoucolor.dislike.dislike_analyzer import DislikeAnalyzer -from materialyoucolor.hct import Hct -from materialyoucolor.quantize import ImageQuantizeCelebi -from materialyoucolor.utils.math_utils import difference_degrees, sanitize_degrees_int - - -class Score: - TARGET_CHROMA = 48.0 - WEIGHT_PROPORTION = 0.7 - WEIGHT_CHROMA_ABOVE = 0.3 - WEIGHT_CHROMA_BELOW = 0.1 - CUTOFF_CHROMA = 5.0 - CUTOFF_EXCITED_PROPORTION = 0.01 - - def __init__(self): - pass - - @staticmethod - def score(colors_to_population: dict) -> tuple[list[Hct], list[Hct]]: - desired = 14 - filter_enabled = False - dislike_filter = True - - colors_hct = [] - hue_population = [0] * 360 - population_sum = 0 - - for rgb, population in colors_to_population.items(): - hct = Hct.from_int(rgb) - colors_hct.append(hct) - hue = int(hct.hue) - hue_population[hue] += population - population_sum += population - - hue_excited_proportions = [0.0] * 360 - - for hue in range(360): - proportion = hue_population[hue] / population_sum - for i in range(hue - 14, hue + 16): - neighbor_hue = int(sanitize_degrees_int(i)) - hue_excited_proportions[neighbor_hue] += proportion - - # Score colours - scored_hct = [] - for hct in colors_hct: - hue = int(sanitize_degrees_int(round(hct.hue))) - proportion = hue_excited_proportions[hue] - - if filter_enabled and ( - hct.chroma < Score.CUTOFF_CHROMA - or proportion <= Score.CUTOFF_EXCITED_PROPORTION - ): - continue - - proportion_score = proportion * 100.0 * Score.WEIGHT_PROPORTION - chroma_weight = ( - Score.WEIGHT_CHROMA_BELOW - if hct.chroma < Score.TARGET_CHROMA - else Score.WEIGHT_CHROMA_ABOVE - ) - chroma_score = (hct.chroma - Score.TARGET_CHROMA) * chroma_weight - score = proportion_score + chroma_score - scored_hct.append({"hct": hct, "score": score}) - - scored_hct.sort(key=lambda x: x["score"], reverse=True) - - # Choose distinct colours - chosen_colors = [] - for difference_degrees_ in range(90, 0, -1): - chosen_colors.clear() - for item in scored_hct: - hct = item["hct"] - duplicate_hue = any( - difference_degrees(hct.hue, chosen_hct.hue) < difference_degrees_ - for chosen_hct in chosen_colors - ) - if not duplicate_hue: - chosen_colors.append(hct) - if len(chosen_colors) >= desired: - break - if len(chosen_colors) >= desired: - break - - # Get primary colour - primary = None - for cutoff in range(20, 0, -1): - for item in scored_hct: - if item["hct"].chroma > cutoff and item["hct"].tone > cutoff * 3: - primary = item["hct"] - break - if primary: - break - - # Choose distinct primaries - chosen_primaries = [primary] - for difference_degrees_ in range(90, 14, -1): - chosen_primaries = [primary] - for item in scored_hct: - hct = item["hct"] - duplicate_hue = any( - difference_degrees(hct.hue, chosen_hct.hue) < difference_degrees_ - for chosen_hct in chosen_primaries - ) - if not duplicate_hue: - chosen_primaries.append(hct) - if len(chosen_primaries) >= 3: - break - if len(chosen_primaries) >= 3: - break - - # Fix disliked colours - if dislike_filter: - for i, chosen_hct in enumerate(chosen_primaries): - chosen_primaries[i] = DislikeAnalyzer.fix_if_disliked(chosen_hct) - for i, chosen_hct in enumerate(chosen_colors): - chosen_colors[i] = DislikeAnalyzer.fix_if_disliked(chosen_hct) - - return chosen_primaries, chosen_colors - - -if __name__ == "__main__": - img = sys.argv[1] - mode = sys.argv[2] if len(sys.argv) > 2 else "hex" - - colours = Score.score(ImageQuantizeCelebi(img, 1, 128)) - for l in colours: - if mode != "hex": - print("".join(["\x1b[48;2;{};{};{}m \x1b[0m".format(*c.to_rgba()[:3]) for c in l])) - if mode != "swatch": - print(" ".join(["{:02X}{:02X}{:02X}".format(*c.to_rgba()[:3]) for c in l])) |