import re HEX_RE = re.compile(r"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$") class StringToColorCode: @classmethod def INPUT_TYPES(cls): return { "required": { "color_hex": ("STRING", {"forceInput": True}), } } RETURN_TYPES = ("COLORCODE",) RETURN_NAMES = ("color_code",) FUNCTION = "convert" CATEGORY = "utils/color" def convert(self, color_hex): value = self._first_value(color_hex).strip() match = HEX_RE.match(value) if not match: raise ValueError( f"String To ColorCode expected a hex color like #00FF00, got: {value!r}" ) hex_value = match.group(1) if len(hex_value) == 3: hex_value = "".join(ch * 2 for ch in hex_value) return (f"#{hex_value.upper()}",) @staticmethod def _first_value(value): if isinstance(value, (list, tuple)): value = value[0] if value else "" return str(value) NODE_CLASS_MAPPINGS = { "StringToColorCode": StringToColorCode, } NODE_DISPLAY_NAME_MAPPINGS = { "StringToColorCode": "String To ColorCode", }