Files
MeeeyoAI-ComfyUI_StringOps/meyo_node_Computational.py
T
2025-02-22 21:28:36 +08:00

195 lines
5.5 KiB
Python

import math
import random
#======宽度高度调整
class StandardSize:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"width": ("INT",),
"height": ("INT",),
"size_option": (["小尺寸", "中尺寸", "大尺寸"], {"default": "中尺寸"}), # 下拉选择框
},
"optional": {},
}
RETURN_TYPES = ("INT", "INT")
FUNCTION = "resize_image"
CATEGORY = "Meyo/Image"
def resize_image(self, width, height, size_option):
# 根据选择的选项调整尺寸像尺寸
if size_option == "小尺寸":
if width / height >= 1.23:
return (768, 512)
elif 0.82 < width / height < 1.23:
return (768, 768)
else:
return (512, 768)
elif size_option == "中尺寸":
if width / height >= 1.23:
return (1216, 832)
elif 0.82 < width / height < 1.23:
return (1216, 1216)
else:
return (832, 1216)
elif size_option == "大尺寸":
if width / height >= 1.23:
return (1600, 1120)
elif 0.82 < width / height < 1.23:
return (1600, 1600)
else:
return (1120, 1600)
#======比较数值
class CompareInt:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"input_float": ("FLOAT", {"default": 4.0}),
"range": ("STRING", {"default": "3.5-5.5"}),
},
"optional": {},
}
RETURN_TYPES = ("STRING",)
FUNCTION = "compare_float_to_range"
CATEGORY = "Meeeyo/Number"
def compare_float_to_range(self, input_float, range):
try:
if '-' in range:
lower_bound, upper_bound = map(float, range.split('-'))
else:
lower_bound = upper_bound = float(range)
if input_float < lower_bound:
return ("小",)
elif input_float > upper_bound:
return ("大",)
else:
return ("中",)
except ValueError:
return ("Error: Invalid input format.",)
#======规范数值
class FloatToInteger:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"float_value": ("FLOAT", {"default": 3.14}),
"operation": (["四舍五入", "取大值", "取小值", "最近32倍"], {"default": "四舍五入"}),
},
"optional": {},
}
RETURN_TYPES = ("INT",)
FUNCTION = "convert_float_to_integer"
CATEGORY = "Meeeyo/Number"
def IS_CHANGED():
return float("NaN")
def convert_float_to_integer(self, float_value, operation):
if operation == "四舍五入":
result = round(float_value)
elif operation == "取大值":
result = math.ceil(float_value)
elif operation == "取小值":
result = math.floor(float_value)
elif operation == "最近32倍":
result = round(float_value / 32) * 32
return (result,)
#======生成范围数组
class GenerateNumbers:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"range_rule": ("STRING", {"default": "3|1-10"}),
"mode": (["顺序", "随机"], {"default": "顺序"}),
"prefix_suffix": ("STRING", {"default": "|"}),
},
"optional": {},
}
RETURN_TYPES = ("STRING",)
FUNCTION = "generate_numbers"
CATEGORY = "Meeeyo/Number"
def IS_CHANGED():
return float("NaN")
def generate_numbers(self, range_rule, mode, prefix_suffix):
try:
start_str, range_str = range_rule.split('|')
start = int(start_str)
end_range = list(map(int, range_str.split('-')))
if len(end_range) == 1:
end = end_range[0]
numbers = [str(i).zfill(start) for i in range(1, end + 1)]
else:
start_range, end = end_range
numbers = [str(i).zfill(start) for i in range(start_range, end + 1)]
if prefix_suffix.strip():
prefix, suffix = prefix_suffix.split('|')
else:
prefix, suffix = "", ""
if mode == "随机":
random.shuffle(numbers)
numbers = [f"{prefix}{num}{suffix}" for num in numbers]
result = '\n'.join(numbers)
return (result,)
except ValueError:
return ("",)
#======范围内随机数
class GetRandomIntegerInRange:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"range_str": ("STRING", {"default": "0-10"}),
},
"optional": {},
}
RETURN_TYPES = ("INT", "STRING")
FUNCTION = "get_random_integer_in_range"
CATEGORY = "Meeeyo/Number"
def IS_CHANGED():
return float("NaN")
def get_random_integer_in_range(self, range_str):
try:
start, end = map(int, range_str.split('-'))
if start > end:
start, end = end, start
random_int = random.randint(start, end)
return (random_int, str(random_int))
except ValueError:
return (0, "0")