PVL String List To String
Join a list of strings back into one
- STRING
Lists are great until a node wants a single string. PVL String List To String takes a list of strings on its input and joins them into one string with a delimiter you choose. It's the exact inverse of the pack's PVL String To String List, and the two are designed to be a round trip: split a string into a list, process the items, join them back.
It's from pvlprk/comfyui-pvl-api-nodes ("ComfyUI Assistant Node"), part of the same string toolkit as the concat nodes - but with an important difference: this one works on lists (variable length), where the concat nodes work on a fixed number of wired slots.
How it works
The node declares INPUT_IS_LIST, so ComfyUI hands it a Python list of strings rather than a single value. That means the texts input accepts an actual list output - the kind produced by the pack's String To String List, a wildcard loop, or any node that emits a STRING list. It then joins every element with your delimiter:
texts- the list input.delimiter- default[++](the pack's bracket convention, so commas and pipes inside your content don't collide with the join token).- Output - one
STRING.
It's defensive about garbage: None elements become empty strings, and an empty list returns an empty string rather than erroring. So a partially-wired upstream won't kill the run.
Why you'd need this
The round-trip pattern is the main event. Say you split a big prompt into a list, run each item through something that rearranges or filters them, and now need one clean string to feed a text encoder or a filename. This is the closing bracket. It's also useful when a node hands you a list and you simply want to see it - collapsing a list to a delimited string and previewing it is a quick way to debug what a wildcard loop is actually passing around.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/pvlprk/comfyui-pvl-api-nodes
restart, or install via ComfyUI Manager (search "ComfyUI Assistant Node"). No models, no dependencies.
Where it trips people up
- The input must actually be a list. If you wire a plain single string in, the behavior isn't what you'd hope - this node expects the "list" flavor of
STRING. Keep the inverse node (String To String List) handy for the other direction. [++]is not,. If you join with the default and feed the result somewhere that expected commas, nothing breaks - you just get bracketed output and a confused downstream. Pick the delimiter to match the consumer.- It doesn't add trailing or leading content - pure
delimiter.join(list). If you want a prefix/suffix, concat after the join.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| texts | STRING | — | |
| delimiter | STRING | [++] | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |