""" colors from https://stackoverflow.com/a/33295456/4398037 """ import random color_string = """#B88183 #922329 #5A0007 #D7BFC2 #D86A78 #FF8A9A #3B000A #E20027 #943A4D #5B4E51 #B05B6F #FEB2C6 #D83D66 #895563 #FF1A59 #FFDBE5 #CC0744 #CB7E98 #997D87 #6A3A4C #FF2F80 #6B002C #A74571 #C6005A #FF5DA7 #300018 #B894A6 #FF90C9 #7C6571 #A30059 #DA007C #5B113C #402334 #D157A0 #DDB6D0 #885578 #962B75 #A97399 #D20096 #E773CE #AA5199 #E704C4 #6B3A64 #FFA0F2 #6F0062 #B903AA #C895C5 #FF34FF #320033 #DBD5DD #EEC3FF #BC23FF #671190 #201625 #F5E1FF #BC65E9 #D790FF #72418F #4A3B53 #9556BD #B4A8BD #7900D7 #A079BF #958A9F #837393 #64547B #3A2465 #353339 #BCB1E5 #9F94F0 #9695C5 #0000A6 #000035 #636375 #00005F #97979E #7A7BFF #3C3E6E #6367A9 #494B5A #3B5DFF #C8D0F6 #6D80BA #8FB0FF #0045D2 #7A87A1 #324E72 #00489C #0060CD #789EC9 #012C58 #99ADC0 #001325 #DDEFFF #59738A #0086ED #75797C #BDC9D2 #3E89BE #8CD0FF #0AA3F7 #6B94AA #29607C #404E55 #006FA6 #013349 #0AA6D8 #658188 #5EBCD1 #456D75 #0089A3 #B5F4FF #02525F #1CE6FF #001C1E #203B3C #A3C8C9 #00A6AA #00C6C8 #006A66 #518A87 #E4FFFC #66E1D3 #004D43 #809693 #15A08A #00846F #00C2A0 #00FECF #78AFA1 #02684E #C2FFED #47675D #00D891 #004B28 #8ADBB4 #0CBD66 #549E79 #1A3A2A #6C8F7D #008941 #63FFAC #1BE177 #006C31 #B5D6C3 #3D4F44 #4B8160 #66796D #71BB8C #04F757 #001E09 #D2DCD5 #00B433 #9FB2A4 #003109 #A3F3AB #456648 #51A058 #83A485 #7ED379 #D1F7CE #A1C299 #061203 #1E6E00 #5EFF03 #55813B #3B9700 #4FC601 #1B4400 #C2FF99 #788D66 #868E7E #83AB58 #374527 #98D058 #C6DC99 #A4E804 #76912F #8BB400 #34362D #4C6001 #DFFB71 #6A714A #222800 #6B7900 #3A3F00 #BEC459 #FEFFE6 #A3A489 #9FA064 #FFFF00 #61615A #FFFFFE #9B9700 #CFCDAC #797868 #575329 #FFF69F #8D8546 #F4D749 #7E6405 #1D1702 #CCAA35 #CCB87C #453C23 #513A01 #FFB500 #A77500 #D68E01 #B79762 #7A4900 #372101 #886F4C #A45B02 #E7AB63 #FAD09F #C0B9B2 #938A81 #A38469 #D16100 #A76F42 #5B4534 #5B3213 #CA834E #FF913F #953F00 #D0AC94 #7D5A44 #BE4700 #FDE8DC #772600 #A05837 #EA8B66 #391406 #FF6832 #C86240 #29201D #B77B68 #806C66 #FFAA92 #89412E #E83000 #A88C85 #F7C9BF #643127 #E98176 #7B4F4B #1E0200 #9C6966 #BF5650 #BA0900 #FF4A46 #F4ABAA #000000 #452C2C #C8A1A1""" def get_all_colors(): colors = [] for c in color_string.split("\n"): colors.append(c.strip()) return colors def get_random_color() -> str: return random.choice(get_all_colors()) ## color math from ## https://stackoverflow.com/a/56678483/4398037 def gamma_correction(value: float) -> float: value /= 255 if value < 0.04045: return value / 12.92 else: return ((value + 0.055) / 1.055) ** 2.4 def get_luminance(rgb: tuple[int, ...]) -> float: r, g, b = list(map(gamma_correction, rgb)) return 0.2126 * r + 0.7152 * g + 0.0722 * b def get_percieved_lightness(rgb: tuple[int, ...]) -> float: Y = get_luminance(rgb) if Y <= (216 / 24389): return Y * (24389 / 27) else: return Y ** (1 / 3) * 116 - 16 def is_bright_color(bg_color: str) -> bool: bg_color = bg_color[1:] rgb = tuple(int(bg_color[i:i + 2], 16) for i in (0, 2, 4)) return get_percieved_lightness(rgb) > 50