66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
# random_resolution_selector.py
|
|
|
|
import time
|
|
import random
|
|
|
|
class RandomResolutionSelector:
|
|
last_seed = 0 # increment用
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"height": ("INT", {"default": 896, "min": 1}),
|
|
"width": ("INT", {"default": 1152, "min": 1}),
|
|
"random_toggle": ("BOOLEAN", {"default": True}),
|
|
"seed": ("INT", {"default": 0, "min": 0}),
|
|
"seed_behavior": (
|
|
["fixed", "randomize", "increment"],
|
|
{
|
|
"default": "randomize",
|
|
"label": "生成後の制御"
|
|
}
|
|
)
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("INT", "INT", "STRING",)
|
|
RETURN_NAMES = ("width", "height", "display",)
|
|
FUNCTION = "select"
|
|
CATEGORY = "custom/resolution"
|
|
|
|
def select(self, height, width, random_toggle, seed, seed_behavior):
|
|
# シードの決定方法
|
|
if seed_behavior == "randomize":
|
|
seed = random.randint(0, 1_000_000_000)
|
|
elif seed_behavior == "increment":
|
|
seed = RandomResolutionSelector.last_seed + 1
|
|
RandomResolutionSelector.last_seed = seed
|
|
# fixed はそのまま seed を使用
|
|
|
|
if random_toggle:
|
|
mode = seed % 3
|
|
if mode == 0:
|
|
mode_name = "original"
|
|
elif mode == 1:
|
|
mode_name = "swapped"
|
|
height, width = width, height
|
|
else:
|
|
mode_name = "square"
|
|
size = int((height + width) / 2)
|
|
height = width = size
|
|
else:
|
|
mode_name = "fixed"
|
|
|
|
display_text = f"width: {width}, height: {height} (seed: {seed}, mode: {mode_name})"
|
|
return (width, height, display_text)
|
|
|
|
# ノード登録
|
|
NODE_CLASS_MAPPINGS = {
|
|
"RandomResolutionSelector": RandomResolutionSelector
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"RandomResolutionSelector": "Random Resolution Selector"
|
|
}
|