Files
ShammiG-ComfyUI_Text_Tools_SG/Text_Tools_Merge_Text_Multi_SG.py
2025-12-03 19:16:32 +05:30

105 lines
4.5 KiB
Python

class TextToolsMergeTextMultiSG:
"""
A ComfyUI node with dynamic text inputs controlled by enable toggles.
"""
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"text_order": (["Sequential", "Custom"],),
"custom_order": ("STRING", {"default": "1,2,3", "multiline": False}),
"separator": ("STRING", {"default": ", ", "multiline": False}),
"insert_separator": (["None", "Before", "After", "Between", "Before and After", "Before and Between", "After and Between", "Before, Between, After"], {"default": "Before, Between, After"}),
"text_1": ("STRING", {"multiline": True, "default": ""}),
"⬆️_enable_1": ("BOOLEAN", {"default": True}),
"text_2": ("STRING", {"multiline": True, "default": ""}),
"⬆️_enable_2": ("BOOLEAN", {"default": True}),
},
"optional": {
"text_3": ("STRING", {"multiline": True, "default": ""}),
"⬆️_enable_3": ("BOOLEAN", {"default": True}),
"text_4": ("STRING", {"multiline": True, "default": ""}),
"⬆️_enable_4": ("BOOLEAN", {"default": True}),
"text_5": ("STRING", {"multiline": True, "default": ""}),
"⬆️_enable_5": ("BOOLEAN", {"default": True}),
},
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("merged_text",)
FUNCTION = "merge_texts"
CATEGORY = "text"
def merge_texts(self, text_order, separator, insert_separator, text_1="", text_2="", text_3="", text_4="", text_5="",
**kwargs):
"""
Merges multiple text inputs based on order and custom separator position.
"""
# Extract enable values from kwargs
enable_1 = kwargs.get("⬆️_enable_1", True)
enable_2 = kwargs.get("⬆️_enable_2", True)
enable_3 = kwargs.get("⬆️_enable_3", True)
enable_4 = kwargs.get("⬆️_enable_4", True)
enable_5 = kwargs.get("⬆️_enable_5", True)
custom_order = kwargs.get("custom_order", "1,2,3")
# Collect all texts and their enable states
all_texts = [text_1, text_2, text_3, text_4, text_5]
all_enables = [enable_1, enable_2, enable_3, enable_4, enable_5]
# Get only active texts based on enable state
texts = []
for i in range(10):
if all_enables[i] and all_texts[i]:
texts.append((i, all_texts[i]))
# Determine the order
if text_order == "Sequential":
ordered_texts = [text for idx, text in texts]
else: # Custom order
try:
order_indices = [int(x.strip()) - 1 for x in custom_order.split(",")]
ordered_texts = []
for idx in order_indices:
for text_idx, text in texts:
if text_idx == idx:
ordered_texts.append(text)
break
except:
ordered_texts = [text for idx, text in texts]
# Apply separator positioning
if not ordered_texts:
merged = ""
elif insert_separator == "None":
merged = "".join(ordered_texts)
elif insert_separator == "Before":
merged = separator + "".join(ordered_texts)
elif insert_separator == "After":
merged = "".join(ordered_texts) + separator
elif insert_separator == "Between":
merged = separator.join(ordered_texts)
elif insert_separator == "Before and After":
merged = separator + "".join(ordered_texts) + separator
elif insert_separator == "Before and Between":
merged = separator + separator.join(ordered_texts)
elif insert_separator == "After and Between":
merged = separator.join(ordered_texts) + separator
elif insert_separator == "Before, Between, After":
merged = separator + separator.join(ordered_texts) + separator
else:
merged = "".join(ordered_texts)
return (merged,)
# Node registration
NODE_CLASS_MAPPINGS = {
"Text Tools Merge Text Multi-SG": TextToolsMergeTextMultiSG
}
NODE_DISPLAY_NAME_MAPPINGS = {
"Text Tools Merge Text Multi-SG": "Text Tools Merge Text Multi-SG"
}