Skip to content

String Function 🐍

Documentation

  • Class name: StringFunction|pysssss
  • Category: utils
  • Output node: True

The String Function node provides utilities for manipulating strings, including appending, replacing, and optionally tidying tags within given text inputs. It abstracts complex string operations into a simple interface, catering to a variety of text processing needs.

Input types

Required

  • action
    • Specifies the string manipulation action to perform, such as appending or replacing content in the text inputs.
    • Comfy dtype: COMBO[STRING]
    • Python dtype: Tuple[List[str], Dict]
  • tidy_tags
    • Determines whether to clean up HTML tags in the text inputs, offering options to either tidy them or leave them as is.
    • Comfy dtype: COMBO[STRING]
    • Python dtype: Tuple[List[str], Dict]
  • text_a
    • The primary text input for manipulation.
    • Comfy dtype: STRING
    • Python dtype: str
  • text_b
    • The secondary text input for manipulation, used in conjunction with 'text_a'.
    • Comfy dtype: STRING
    • Python dtype: str

Optional

  • text_c
    • An optional third text input for manipulation.
    • Comfy dtype: STRING
    • Python dtype: str

Output types

  • string
    • Comfy dtype: STRING
    • The result of the string manipulation, returned as a single string.
    • Python dtype: str

Usage tips

Source code

class StringFunction:
    @classmethod
    def INPUT_TYPES(s):
        return {
            "required": {
                "action": (["append", "replace"], {}),
                "tidy_tags": (["yes", "no"], {}),
                "text_a": ("STRING", {"multiline": True, "dynamicPrompts": False}),
                "text_b": ("STRING", {"multiline": True, "dynamicPrompts": False}),
            },
            "optional": {
                "text_c": ("STRING", {"multiline": True, "dynamicPrompts": False})
            }
        }

    RETURN_TYPES = ("STRING",)
    FUNCTION = "exec"
    CATEGORY = "utils"
    OUTPUT_NODE = True

    def exec(self, action, tidy_tags, text_a, text_b, text_c=""):
        # Converted inputs are sent as the string of 'undefined' if not connected
        if text_a == "undefined":
            text_a = ""
        if text_b == "undefined":
            text_b = ""
        if text_c == "undefined":
            text_c = ""

        tidy_tags = tidy_tags == "yes"
        out = ""
        if action == "append":
            out = (", " if tidy_tags else "").join(filter(None, [text_a, text_b, text_c]))
        else:
           if text_c is None:
               text_c = ""
           if text_b.startswith("/") and text_b.endswith("/"):
               regex = text_b[1:-1]
               out = re.sub(regex, text_c, text_a)
           else:
               out = text_a.replace(text_b, text_c)
        if tidy_tags:
            out = out.replace("  ", " ").replace(" ,", ",").replace(",,", ",").replace(",,", ",")
        return {"ui": {"text": (out,)}, "result": (out,)}