50 lines
2.1 KiB
Python
50 lines
2.1 KiB
Python
"""
|
|
Multi Bool Panel — 1ノードに複数の名前付きbooleanトグルを持つComfyUIカスタムノード。
|
|
各トグルは独立したBOOLEAN出力ソケットを持つ。slot_countでトグル数を調整できる。
|
|
名前フィルタによる一括操作(他ノードのbooleanウィジェット / bypass / mute)は
|
|
フロントエンド拡張 (web/js/multi_bool_panel.js) が担当する。
|
|
"""
|
|
|
|
MAX_SLOTS = 20
|
|
|
|
|
|
class SolidlimeMultiBoolPanel:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
required = {
|
|
"slot_count": ("INT", {"default": 4, "min": 1, "max": MAX_SLOTS, "step": 1}),
|
|
"name_filter": ("STRING", {"default": "", "multiline": False}),
|
|
"broadcast_mode": (["off", "widgets", "bypass", "mute"], {"default": "off"}),
|
|
"auto_apply": ("BOOLEAN", {"default": False}),
|
|
"all_switch": ("BOOLEAN", {"default": False}),
|
|
}
|
|
for i in range(1, MAX_SLOTS + 1):
|
|
required[f"label_{i}"] = ("STRING", {"default": "", "multiline": False})
|
|
required[f"switch_{i}"] = ("BOOLEAN", {"default": False})
|
|
return {"required": required}
|
|
|
|
RETURN_TYPES = ("STRING",) + ("BOOLEAN",) * MAX_SLOTS
|
|
RETURN_NAMES = ("Labels",) + tuple(f"Switch {i}" for i in range(1, MAX_SLOTS + 1))
|
|
FUNCTION = "execute"
|
|
CATEGORY = "Logic"
|
|
|
|
def execute(self, **kwargs):
|
|
slot_count = max(1, min(MAX_SLOTS, int(kwargs.get("slot_count", 4))))
|
|
all_switch = bool(kwargs.get("all_switch", False))
|
|
labels_out = []
|
|
out = []
|
|
for i in range(1, MAX_SLOTS + 1):
|
|
if i > slot_count:
|
|
out.append(False)
|
|
continue
|
|
label = str(kwargs.get(f"label_{i}", "") or "")
|
|
val = bool(kwargs.get(f"switch_{i}", False)) or all_switch
|
|
out.append(val)
|
|
if val and label:
|
|
labels_out.append(label)
|
|
return (", ".join(labels_out),) + tuple(out)
|
|
|
|
|
|
NODE_CLASS_MAPPINGS = {"SolidlimeMultiBoolPanel": SolidlimeMultiBoolPanel}
|
|
NODE_DISPLAY_NAME_MAPPINGS = {"SolidlimeMultiBoolPanel": "Multi Bool Panel"}
|