feat: add newline_wrapped_separator advanced option to Dynamic String Concat

Wraps a custom string with LF on both sides between joined inputs, e.g. (input) LF (text) LF (input). Takes precedence over newline_between_inputs and separator.
This commit is contained in:
moonwhaler
2026-08-08 21:23:39 +02:00
parent aec4b447a0
commit bd59dd67f1
+14 -2
View File
@@ -46,6 +46,12 @@ class DynamicStringConcat:
"default": False,
"tooltip": "Join inputs with a linefeed (\\n) instead of 'separator' (join mode only).",
}),
"newline_wrapped_separator": ("STRING", {
"default": "", "multiline": False,
"tooltip": "Advanced. If non-empty, joins inputs as LF + this text + LF, e.g. "
"'(input) LF (text) LF (input)'. Takes precedence over "
"'newline_between_inputs' and 'separator' (join mode only).",
}),
"prefix": ("STRING", {
"default": "", "multiline": False,
"tooltip": "Prepended to the final result.",
@@ -70,7 +76,8 @@ class DynamicStringConcat:
OUTPUT_NODE = False
def concatenate(self, separator=" ", ignore_empty=True, strip_whitespace=True,
newline_between_inputs=False, prefix="", suffix="", template="", **kwargs):
newline_between_inputs=False, newline_wrapped_separator="",
prefix="", suffix="", template="", **kwargs):
slots = {}
for key, value in kwargs.items():
if not key.startswith("input_"):
@@ -93,7 +100,12 @@ class DynamicStringConcat:
ordered = [slots[k] for k in sorted(slots.keys())]
if ignore_empty:
ordered = [s for s in ordered if s]
join_char = "\n" if newline_between_inputs else separator
if newline_wrapped_separator:
join_char = f"\n{newline_wrapped_separator}\n"
elif newline_between_inputs:
join_char = "\n"
else:
join_char = separator
body = join_char.join(ordered)
result = f"{prefix}{body}{suffix}"