Update __init__.py

This commit is contained in:
Dontdrunk
2025-02-17 22:17:46 +08:00
committed by GitHub
parent 992733d901
commit 208bf7fbf9
+7 -164
View File
@@ -1,171 +1,14 @@
import torch
import numpy as np
from enum import Enum
from .color_generator import NODE_CLASS_MAPPINGS as COLOR_NODES
from .dimension_calculator import NODE_CLASS_MAPPINGS as DIMENSION_NODES
class ColorMode(Enum):
HEX = "十六进制"
RGB = "RGB颜色"
HSL = "HSL颜色"
HSV = "HSV颜色"
CMYK = "CMYK颜色"
class ColorBackgroundGenerator:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"宽度": ("INT", {"default": 512, "min": 64, "max": 8192}),
"高度": ("INT", {"default": 512, "min": 64, "max": 8192}),
"颜色模式": (list(mode.value for mode in ColorMode), {"default": "RGB颜色"}),
# RGB/A inputs
"红色": ("INT", {"default": 255, "min": 0, "max": 255}),
"绿色": ("INT", {"default": 255, "min": 0, "max": 255}),
"蓝色": ("INT", {"default": 255, "min": 0, "max": 255}),
"透明度": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.1}),
# HSL inputs
"色相": ("INT", {"default": 0, "min": 0, "max": 360}),
"饱和度": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.1}),
"亮度": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.1}),
# HSV additional input
"明度": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.1}),
# CMYK inputs
"青色": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.1}),
"品红": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.1}),
"黄色": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.1}),
"黑色": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.1}),
# Color picker
"使用取色器": ("BOOLEAN", {"default": False}),
"颜色选择器": ("COLOR", {"default": "#FFFFFF"}),
}
}
RETURN_TYPES = ("IMAGE", "INT", "INT", "INT", "FLOAT")
RETURN_NAMES = ("图像", "红", "绿", "蓝", "透明度")
FUNCTION = "generate_background"
CATEGORY = "DONTDRUNK"
def hex_to_rgba(self, hex_color):
hex_color = hex_color.lstrip('#')
if len(hex_color) == 8:
r, g, b, a = tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4, 6))
return r, g, b, a/255
else:
r, g, b = tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))
return r, g, b, 1.0
def hsl_to_rgba(self, h, s, l, a=1.0):
h = h/360
def hue_to_rgb(p, q, t):
if t < 0:
t += 1
if t > 1:
t -= 1
if t < 1/6:
return p + (q - p) * 6 * t
if t < 1/2:
return q
if t < 2/3:
return p + (q - p) * (2/3 - t) * 6
return p
if s == 0:
r = g = b = l
else:
q = l * (1 + s) if l < 0.5 else l + s - l * s
p = 2 * l - q
r = hue_to_rgb(p, q, h + 1/3)
g = hue_to_rgb(p, q, h)
b = hue_to_rgb(p, q, h - 1/3)
return int(r * 255), int(g * 255), int(b * 255), a
def hsv_to_rgba(self, h, s, v, a=1.0):
h = h/360
i = int(h*6)
f = h*6 - i
p = v * (1-s)
q = v * (1-f*s)
t = v * (1-(1-f)*s)
if i % 6 == 0:
r, g, b = v, t, p
elif i % 6 == 1:
r, g, b = q, v, p
elif i % 6 == 2:
r, g, b = p, v, t
elif i % 6 == 3:
r, g, b = p, q, v
elif i % 6 == 4:
r, g, b = t, p, v
else:
r, g, b = v, p, q
return int(r * 255), int(g * 255), int(b * 255), a
def cmyk_to_rgba(self, c, m, y, k, a=1.0):
r = int(255 * (1-c) * (1-k))
g = int(255 * (1-m) * (1-k))
b = int(255 * (1-y) * (1-k))
return r, g, b, a
def generate_background(self, 宽度, 高度, 颜色模式,
红色, 绿色, 蓝色, 透明度,
色相, 饱和度, 亮度,
明度, 青色, 品红, 黄色, 黑色,
使用取色器, 颜色选择器):
if 使用取色器:
r, g, b, a = self.hex_to_rgba(颜色选择器)
else:
if 颜色模式 == "RGB颜色":
r, g, b, a = 红色, 绿色, 蓝色, 透明度
elif 颜色模式 == "HSL颜色":
r, g, b, a = self.hsl_to_rgba(色相, 饱和度, 亮度, 透明度)
elif 颜色模式 == "HSV颜色":
r, g, b, a = self.hsv_to_rgba(色相, 饱和度, 明度, 透明度)
elif 颜色模式 == "CMYK颜色":
r, g, b, a = self.cmyk_to_rgba(青色, 品红, 黄色, 黑色, 透明度)
elif 颜色模式 == "十六进制":
r, g, b, a = self.hex_to_rgba(颜色选择器)
# 确保颜色值在有效范围内
r = max(0, min(255, r))
g = max(0, min(255, g))
b = max(0, min(255, b))
a = max(0.0, min(1.0, a))
color = np.array([r, g, b, int(a * 255)]) / 255.0
image = np.ones((高度, 宽度, 4)) * color
image = torch.from_numpy(image).unsqueeze(0).float()
return (image, r, g, b, a)
class DimensionCalculator:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"宽度": ("INT", {"default": 512, "min": 1, "max": 8192}),
"高度": ("INT", {"default": 512, "min": 1, "max": 8192}),
}
}
RETURN_TYPES = ("INT", "INT", "INT")
RETURN_NAMES = ("宽度", "高度", "总像素")
FUNCTION = "calculate_dimensions"
CATEGORY = "DONTDRUNK"
def calculate_dimensions(self, 宽度, 高度):
pixels = 宽度 * 高度
return (宽度, 高度, pixels)
# 节点注册
NODE_CLASS_MAPPINGS = {
"DD-ColorBackgroundGenerator": ColorBackgroundGenerator,
"DD-DimensionCalculator": DimensionCalculator
**COLOR_NODES,
**DIMENSION_NODES
}
NODE_DISPLAY_NAME_MAPPINGS = {
"DD-ColorBackgroundGenerator": "DD 颜色背景生成器",
"DD-DimensionCalculator": "DD 尺寸计算器"
}
}
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']