From b46cf23259cf52582c3a38b6a08ea34853242d62 Mon Sep 17 00:00:00 2001 From: LaVie024 <62406970+LaVie024@users.noreply.github.com> Date: Wed, 25 Jun 2025 04:50:05 +0000 Subject: [PATCH] Add Compare Values node --- comfy_extras/nodes_logic_ops.py | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/comfy_extras/nodes_logic_ops.py b/comfy_extras/nodes_logic_ops.py index 0c0e8017a..12aae0c1e 100644 --- a/comfy_extras/nodes_logic_ops.py +++ b/comfy_extras/nodes_logic_ops.py @@ -34,6 +34,41 @@ class BooleanLogicGate: def apply_operation(self, value1: bool, value2: bool, mode: str) -> tuple[bool]: return (self._OPS[mode](value1, value2),) +class CompareValues: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "valueA": (any, ), + "valueB": (any, ), + "mode": (["A == B", "A != B", "A > b", "A >= b", "a < B", "a <= B"],) + } + } + + RETURN_TYPES = ("BOOLEAN",) + RETURN_NAMES = ("output",) + CATEGORY = "utils/logic" + FUNCTION = "compare" + + _OPS = { + "A == B": lambda a, b: a == b, + "A != B": lambda a, b: a != b, + "A > b": lambda a, b: a > b, + "A >= b": lambda a, b: a >= b, + "a < B": lambda a, b: a < b, + "a <= B": lambda a, b: a <= b, + } + + def compare(self, valueA, valueB, mode: str) -> tuple[bool]: + if isinstance(valueA, str) and isinstance(valueB, (int, float)): + try: valueA = float(valueA) + except ValueError as e: raise ValueError("Failed to convert valueA to float.") from e + elif isinstance(valueB, str) and isinstance(valueA, (int, float)): + try: valueB = float(valueB) + except ValueError as e: raise ValueError("Failed to convert valueB to float.") from e + + return (self._OPS[mode](valueA, valueB),) + class BooleanSwitch: @classmethod def INPUT_TYPES(cls): @@ -63,12 +98,14 @@ class OutputExists: NODE_CLASS_MAPPINGS = { "BooleanLogicGate": BooleanLogicGate, + "CompareValues": CompareValues, "BooleanSwitch": BooleanSwitch, "OutputExists": OutputExists, } NODE_DISPLAY_NAME_MAPPINGS = { "BooleanLogicGate": "Boolean Logic Gate", + "CompareValues": "Compare Values", "BooleanSwitch": "Boolean Switch", "OutputExists": "Output Exists", }