From 1ed8a3ccd44aecd78098a462c0c49a261d290f2e Mon Sep 17 00:00:00 2001 From: Northumber Date: Sun, 4 May 2025 22:55:51 +0200 Subject: [PATCH] add boolean to indexes node --- __init__.py | 5 +++- nodes/boolean_list_to_indexes.py | 46 ++++++++++++++++++++++++++++++++ requirements.txt | 3 ++- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 nodes/boolean_list_to_indexes.py diff --git a/__init__.py b/__init__.py index ce381d1..fb87470 100644 --- a/__init__.py +++ b/__init__.py @@ -9,6 +9,7 @@ from .nodes.from_dir_image_list import LoadImagesFromDirList from .nodes.extract_metadata_by_key import ExtractMetadataByKey from .nodes.sum_integers import SumIntegers from .nodes.from_dir_with_index_batch import LoadImagesFromDirByIndexBatch +from .nodes.boolean_list_to_indexes import BooleanIndexesToString NODE_CLASS_MAPPINGS = { @@ -16,13 +17,15 @@ NODE_CLASS_MAPPINGS = { "ExtractMetadataByKey": ExtractMetadataByKey, "SumIntegers": SumIntegers, "LoadImagesFromDirByIndexBatch": LoadImagesFromDirByIndexBatch, + "BooleanIndexesToString": BooleanIndexesToString, } NODE_DISPLAY_NAME_MAPPINGS = { "LoadImagesFromDirList": "Load Image List from Directory", "ExtractMetadataByKey": "Extract Metadata value by key", "SumIntegers": "Sum Integers", - "LoadImagesFromDirByIndexBatch": "Load Image batch from Directory with indexes" + "LoadImagesFromDirByIndexBatch": "Load Image batch from Directory with indexes", + "BooleanIndexesToString": "Boolean list to index string" } __all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"] diff --git a/nodes/boolean_list_to_indexes.py b/nodes/boolean_list_to_indexes.py new file mode 100644 index 0000000..5ab6add --- /dev/null +++ b/nodes/boolean_list_to_indexes.py @@ -0,0 +1,46 @@ +""" + This node receives a list of bools (string) and returns indexes count (formatted for the node LoadImagesFromDirByIndexBatch) +""" + +class BooleanIndexesToString: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "bool_list": ("STRING", {"default": ""}), + } + } + + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("index_string",) + FUNCTION = "get_indexes" + CATEGORY = "util" + + + def get_indexes(self, bool_list: str): + s = bool_list.strip().replace(" ", "") + # If input contains any commas, split by commas + if "," in s: + tokens = s.split(",") + elif all(c in "01" for c in s): + tokens = list(s) + elif set(s.lower()) <= set("truefalse"): + tokens = [] + i = 0 + while i < len(s): + if s[i:i+4].lower() == "true": + tokens.append("true") + i += 4 + elif s[i:i+5].lower() == "false": + tokens.append("false") + i += 5 + else: + i += 1 + else: + tokens = [] + + + true_values = {"true", "1"} + indexes = [str(i) for i, v in enumerate(tokens) if v.lower() in true_values] + return (",".join(indexes),) diff --git a/requirements.txt b/requirements.txt index 354fd77..17a6598 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pillow -numpy \ No newline at end of file +numpy +torch