Files
solidlime-ComfyUI-MultiBool…/multi_bool_panel.py
T

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"}