Join List Ovum
Join List Ovum — one string from a Python list, separator of your choosing
- py_list
- STRING
JoinListOvum is the "collapse a Python list into a single string" node, in its current non-deprecated form. Give it a list and a separator; it hands back one STRING with every element turned into text and glued together. It's the modern successor to the pack's deprecated JoinList class and the natural partner to JoinBatchOvum - this one is the Python-list-object flavor, sitting in ovum/lists/python for when your list arrives as a single value rather than a Comfy batch.
The mechanics are unexciting and that's the point: iterate the list, stringify each element, join with the separator. Non-strings are converted ([1, 2, 3] works), and the separator defaults to "," when left blank, mirroring JavaScript's Array.join. Want no separator at all? Pass an empty string explicitly.
Inputs and output
py_list- the list to join. Must be a real Python list or it raisesValueError.separator- aSTRINGwidget. Blank → comma; empty string → no separator; anything else (e.g.", "," | ","\n") is used verbatim.
Output: a single STRING.
Why you'll use it
The most useful thing you can do with a joined list is hand it to a prompt or filename builder. A few patterns that come up constantly:
- Prompt assembly. Join a list of style tags or LORA-trigger words into one prompt string, then pass it to your CLIP text encoder. Combined with the pack's Python String Format node you can slot the joined result into a template like
"best quality, {arg0}, masterpiece". - Multiline summaries. Join with
"\n"and display the result in a text node for a clean one-string log of what the workflow did. - Filename components. Join tags with
_to build a save name, then wire it into your saver.
The family tree, in case you're confused
This pack ships a small zoo of near-identical list utilities because it went through refactors. The plain names (JoinList, IndexOf, ListSlice, ...) are deprecated; the *Ovum names are current; and the *BatchOvum variants are the Comfy-batch flavors while the plain *Ovum ones are the Python-list flavors. For joining, you have exactly two current choices: JoinBatchOvum and this node. Same inputs, same output - pick whichever matches how your list was built.
Also worth knowing: like all the pack's NewPointer list nodes, this one never caches (IS_CHANGED returns NaN), so it re-runs every execution. Fresh output in loops, slightly more work than a cached node would be.
Install and gotchas
Part of comfy-ovum:
cd ComfyUI/custom_nodes
git clone https://github.com/sfinktah/comfy-ovum
or via ComfyUI Manager → comfy-ovum, restart. No models, no keys.
Two failure modes to expect: the ValueError: Input must be a Python list if you wire in a non-list, and surprise commas when you leave the separator blank expecting none. Both are easy to fix once you know the node's defaults.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| py_list | * | — | |
| separator | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |