def convert_oomox_to_base16(colorscheme: ColorScheme, theme_name=None):
    theme_name = theme_name or colorscheme.get('NAME') or 'themix_base16'
    base16_theme = {}

    base16_theme["scheme-name"] = base16_theme["scheme-author"] = \
        theme_name
    base16_theme["scheme-slug"] = base16_theme["scheme-name"].split(
        '/')[-1].lower()

    for oomox_key, base16_key in OOMOX_TO_BASE16_TRANSLATION.items():
        base16_theme[base16_key] = colorscheme[oomox_key]

    base16_theme['base03'] = mix_theme_colors(base16_theme['base00'],
                                              base16_theme['base05'], 0.5)

    if get_lightness(base16_theme['base01']) > get_lightness(
            base16_theme['base00']):
        base16_theme['base04'] = hex_darker(base16_theme['base00'], 20)
    else:
        base16_theme['base04'] = hex_darker(base16_theme['base00'], -20)

    base16_theme['base0F'] = hex_darker(
        mix_theme_colors(base16_theme['base08'], base16_theme['base09'], 0.5),
        20)

    for key, value in colorscheme.items():
        base16_theme[f'themix_{key}'] = value

    # from pprint import pprint; pprint(base16_theme)

    return base16_theme
Ejemplo n.º 2
0
def convert_oomox_to_base16(colorscheme):
    base16_theme = {}

    base16_theme["scheme-name"] = base16_theme["scheme-author"] = \
        colorscheme["NAME"]
    base16_theme["scheme-slug"] = base16_theme["scheme-name"].split(
        '/')[-1].lower()

    for oomox_key, base16_key in OOMOX_TO_BASE16_TRANSLATION.items():
        base16_theme[base16_key] = colorscheme[oomox_key]

    base16_theme['base03'] = mix_theme_colors(base16_theme['base00'],
                                              base16_theme['base05'], 0.5)

    if get_lightness(base16_theme['base01']) > get_lightness(
            base16_theme['base00']):
        base16_theme['base04'] = hex_darker(base16_theme['base00'], 20)
    else:
        base16_theme['base04'] = hex_darker(base16_theme['base00'], -20)

    base16_theme['base0F'] = hex_darker(
        mix_theme_colors(base16_theme['base08'], base16_theme['base09'], 0.5),
        20)

    return base16_theme
Ejemplo n.º 3
0
    def _generate_terminal_palette_callback(  # noqa  pylint: disable=too-many-locals
        cls,
        hex_palette,
        template_path,
        inverse_palette,
        result_callback,
    ):
        gray_colors = get_gray_colors(hex_palette)
        bright_colors = set(hex_palette)
        bright_colors.difference_update(gray_colors)
        bright_colors = list(bright_colors)
        ACCURACY = 40  # pylint: disable=invalid-name
        hex_palette += [hex_darker(c, ACCURACY) for c in gray_colors]
        hex_palette += [hex_darker(c, -ACCURACY) for c in gray_colors]
        reference_palette = import_xcolors(
            os.path.join(TERMINAL_TEMPLATE_DIR, template_path))
        result_palette = {}
        if inverse_palette:
            reference_palette['foreground'], reference_palette['background'] = \
                reference_palette['background'], reference_palette['foreground']
        is_dark_bg = is_dark(reference_palette['background'])

        max_possible_lightness = 255 * 3
        new_bg_color, _diff = find_closest_color(
            reference_palette['background'], hex_palette)
        # @TODO: use real lightness from HSV or Lab color model
        lightness_delta = sum(int_list_from_hex(new_bg_color)) * (1 if is_dark_bg else -1) + \
            max_possible_lightness // 4
        # max_possible_lightness // 6
        min_lightness = max_possible_lightness // 38
        max_lightness = max_possible_lightness - min_lightness
        if is_dark_bg:
            min_lightness = lightness_delta
        else:
            max_lightness = max_possible_lightness - lightness_delta

        for key, value in reference_palette.items():
            if key not in [
                    'color0', 'color7', 'color8', 'color15', 'foreground',
                    'background'
            ]:
                closest_color, _diff = find_closest_color(
                    value,
                    bright_colors,
                    min_lightness=min_lightness,
                    max_lightness=max_lightness)
            else:
                closest_color, _diff = find_closest_color(value, hex_palette)
            result_palette[key] = closest_color

        gc.collect()
        result_callback(result_palette)
Ejemplo n.º 4
0
 def _generate_terminal_palette(cls, template_path, image_path, quality,
                                use_whole_palette):
     hex_palette = cls.get_image_palette(image_path, quality,
                                         use_whole_palette)[:]
     gray_colors = get_gray_colors(hex_palette)
     ACCURACY = 40  # pylint: disable=invalid-name
     hex_palette += [hex_darker(c, ACCURACY) for c in gray_colors]
     hex_palette += [hex_darker(c, -ACCURACY) for c in gray_colors]
     reference_palette = import_xcolors(
         os.path.join(TERMINAL_TEMPLATE_DIR, template_path))
     result_palette = {}
     for key, value in reference_palette.items():
         closest_color, _diff = find_closest_color(value, hex_palette)
         result_palette[key] = closest_color
     gc.collect()
     return result_palette
Ejemplo n.º 5
0
def convert_oomox_to_base16(colorscheme):
    base16_theme = {}

    base16_theme["scheme-name"] = base16_theme["scheme-author"] = \
        colorscheme["NAME"]
    base16_theme["scheme-slug"] = base16_theme["scheme-name"].split('/')[-1].lower()

    for oomox_key, base16_key in OOMOX_TO_BASE16_TRANSLATION.items():
        base16_theme[base16_key] = colorscheme[oomox_key]

    base16_theme['base03'] = mix_theme_colors(
        base16_theme['base00'], base16_theme['base05'], 0.5
    )

    if get_lightness(base16_theme['base01']) > get_lightness(base16_theme['base00']):
        base16_theme['base04'] = hex_darker(base16_theme['base00'], 20)
    else:
        base16_theme['base04'] = hex_darker(base16_theme['base00'], -20)

    base16_theme['base0F'] = hex_darker(mix_theme_colors(
        base16_theme['base08'], base16_theme['base09'], 0.5
    ), 20)

    return base16_theme
Ejemplo n.º 6
0
    def _generate_terminal_palette(  # pylint: disable=too-many-arguments,too-many-locals,too-many-branches
            cls, template_path, image_path, quality, use_whole_palette, inverse_palette
    ):
        start_time = time()

        if str(quality).startswith('colorz'):
            hex_palette = cls._get_colorz_lib_palette(
                image_path, color_count=int(quality.split('colorz')[1])
            )
        elif str(quality).startswith('colorthief'):
            hex_palette = cls._get_colorthief_palette(
                image_path, color_count=int(quality.split('colorthief')[1]) + 1
            )
        elif quality == 'haishoku':
            hex_palette = cls._get_haishoku_palette(image_path)
        elif str(quality).startswith('all_'):
            _quality = quality.split('_')[1]
            if _quality == 'low':
                quality_per_plugin = [100, 16, 16]
            elif _quality == 'medium':
                quality_per_plugin = [200, 32, 32]
            else:
                raise NotImplementedError()
            hex_palette = cls._get_all_available_palettes(
                image_path=image_path, use_whole_palette=use_whole_palette,
                quality_per_plugin=quality_per_plugin
            )
        else:
            hex_palette = cls.get_image_palette(image_path, int(quality), use_whole_palette)[:]

        print("{} quality, {} colors found, took {:.8f}s".format(
            quality, len(hex_palette), (time() - start_time)
        ))

        gray_colors = get_gray_colors(hex_palette)
        bright_colors = set(hex_palette)
        bright_colors.difference_update(gray_colors)
        bright_colors = list(bright_colors)
        ACCURACY = 40  # pylint: disable=invalid-name
        hex_palette += [hex_darker(c, ACCURACY) for c in gray_colors]
        hex_palette += [hex_darker(c, -ACCURACY) for c in gray_colors]
        reference_palette = import_xcolors(os.path.join(TERMINAL_TEMPLATE_DIR, template_path))
        result_palette = {}
        if inverse_palette:
            reference_palette['foreground'], reference_palette['background'] = \
                reference_palette['background'], reference_palette['foreground']
        is_dark_bg = is_dark(reference_palette['background'])

        max_possible_lightness = 255 * 3
        new_bg_color, _diff = find_closest_color(reference_palette['background'], hex_palette)
        # @TODO: use real lightness from HSV or Lab color model
        lightness_delta = sum(int_list_from_hex(new_bg_color)) * (1 if is_dark_bg else -1) + \
            max_possible_lightness // 4
        # max_possible_lightness // 6
        min_lightness = max_possible_lightness // 38
        max_lightness = max_possible_lightness - min_lightness
        if is_dark_bg:
            min_lightness = lightness_delta
        else:
            max_lightness = max_possible_lightness - lightness_delta

        for key, value in reference_palette.items():
            if key not in ['color0', 'color7', 'color8', 'color15', 'foreground', 'background']:
                closest_color, _diff = find_closest_color(
                    value, bright_colors, min_lightness=min_lightness, max_lightness=max_lightness
                )
            else:
                closest_color, _diff = find_closest_color(value, hex_palette)
            result_palette[key] = closest_color

        gc.collect()
        return result_palette