From e4b289f31bcc6129e3d43df5eee2ddceb559d17d Mon Sep 17 00:00:00 2001 From: Toru Tamaki Date: Sun, 16 Aug 2026 10:19:02 +0900 Subject: [PATCH] add CleaningString --- __init__.py | 2 ++ nodes/cleaning_string.py | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 nodes/cleaning_string.py diff --git a/__init__.py b/__init__.py index 1cbad74..439fc80 100644 --- a/__init__.py +++ b/__init__.py @@ -1,6 +1,8 @@ +from .nodes.cleaning_string import CleaningString from .nodes.string_list_concat import StringListConcat, comfy_entrypoint __all__ = [ "StringListConcat", + "CleaningString", "comfy_entrypoint" ] diff --git a/nodes/cleaning_string.py b/nodes/cleaning_string.py new file mode 100644 index 0000000..63a38d0 --- /dev/null +++ b/nodes/cleaning_string.py @@ -0,0 +1,40 @@ +import re + +from typing_extensions import override +from comfy_api.latest import ComfyExtension, io + + +class CleaningString(io.ComfyNode): + """Cleans a string by normalizing line breaks, commas, and spaces.""" + + @classmethod + def define_schema(cls) -> io.Schema: + return io.Schema( + node_id="CleaningString", + display_name="Cleaning String", + category="tttamaki/string-list", + description="Cleans line breaks, empty comma-separated values, and repeated spaces", + inputs=[ + io.String.Input("string", multiline=True), + ], + outputs=[ + io.String.Output(), + ], + ) + + @classmethod + def execute(cls, string: str) -> io.NodeOutput: + result = re.sub(r"[\r\n]+", " ", string) + result = re.sub(r",[ \t]+,", ",", result) + result = re.sub(r" {2,}", " ", result) + return io.NodeOutput(result) + + +class CleaningStringExtension(ComfyExtension): + @override + async def get_node_list(self) -> list[type[io.ComfyNode]]: + return [CleaningString] + + +async def comfy_entrypoint() -> CleaningStringExtension: + return CleaningStringExtension()