Nodes/SF ComfyUI Nodes/SF Prompt List
ComfyUI Node

SF Prompt List

Up to 50 text boxes, one comma-joined string

By Stillfront·Created 3 months ago·Updated 3 days ago· 1
SF Prompt List
    • text
    ◄inputcount5►
    ◄prompt_1►
    ◄prompt_2►
    ◄prompt_3►
    ◄prompt_4►
    ◄prompt_5►
    ◄prompt_6►
    ◄prompt_7►
    ◄prompt_8►
    ◄prompt_9►
    ◄prompt_10►
    ◄prompt_11►
    ◄prompt_12►
    ◄prompt_13►
    ◄prompt_14►
    ◄prompt_15►
    ◄prompt_16►
    ◄prompt_17►
    ◄prompt_18►
    ◄prompt_19►
    ◄prompt_20►
    ◄prompt_21►
    ◄prompt_22►
    ◄prompt_23►
    ◄prompt_24►
    ◄prompt_25►
    ◄prompt_26►
    ◄prompt_27►
    ◄prompt_28►
    ◄prompt_29►
    ◄prompt_30►
    ◄prompt_31►
    ◄prompt_32►
    ◄prompt_33►
    ◄prompt_34►
    ◄prompt_35►
    ◄prompt_36►
    ◄prompt_37►
    ◄prompt_38►
    ◄prompt_39►
    ◄prompt_40►
    ◄prompt_41►
    ◄prompt_42►
    ◄prompt_43►
    ◄prompt_44►
    ◄prompt_45►
    ◄prompt_46►
    ◄prompt_47►
    ◄prompt_48►
    ◄prompt_49►
    ◄prompt_50►

    Anyone who's done prompt A/B testing in ComfyUI knows the pain: you want to flip one term and see what it does, but the string lives in a single giant text box and editing it is a museum of find-and-replace. SF Prompt List is the boring, effective fix. It gives you a stack of separate text boxes, and on every run it joins the non-empty ones into a single comma-separated string. Mute a box, the output changes. Bypass one, same thing. You can literally rerun with one word removed by deleting a box's contents instead of surgery on a long prompt.

    How it works

    Under the hood it's genuinely simple: the node defines 50 inputs (prompt_1 through prompt_50), takes an inputcount telling it how many to process, skips any that are empty or whitespace, and returns ",".join(...). The clever part is the front-end. The pack ships a small JavaScript extension that hides every box beyond inputcount - so you set the count to 3 and the node shows three tidy inputs, not fifty empty ones. That's the whole trick, and it's a good one. It's the same pattern the ROADMAP lists as the pack's first feature, so this node is basically the pack's founding idea.

    The inputs that matter

    • inputcount - an integer from 2 to 50, default 5. This controls how many boxes show and how many get processed. Only the first inputcount boxes are ever read, so a box 7 of 50 that still has text is ignored, not included.
    • prompt_1 … prompt_50 - multiline text boxes. Order in the output is the box order, and empty boxes are skipped entirely, which means you can leave slots unused without getting stray commas.

    Output is a single STRING named text - wire it straight into a CLIP text encoder or a prompt concatenation node. Because it's comma-joined, the result slots into almost any SD/SDXL/Flux-style positive prompt without extra formatting.

    Installing it

    Part of the SF ComfyUI Nodes pack from Stillfront. Easiest via ComfyUI Manager: search "SF ComfyUI Nodes" → Install → restart. Manual:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Stillfront/comfyui-sf-nodes.git
    cd comfyui-sf-nodes
    pip install -r requirements.txt
    

    No models, no API keys, no dependencies beyond what ComfyUI already has.

    Common issues

    Two things trip people up. First, the node only shows boxes you can actually see - if you set inputcount to 3 and then connect something to prompt_5, that connection is ignored because only the first 3 are processed. Keep your wiring inside the count. Second, the hiding behavior lives in the JS extension, so if you're running a weird ComfyUI front-end or a version that doesn't load web/, you'll see all fifty boxes at once (it still works, just ugly). And remember it's a comma joiner, not a template engine - if you need newlines between items, this isn't the node; a plain "combine strings" node with a newline delimiter is.

    CategoryStillfront/Utils

    Inputs (51)

    NameTypeDefaultDescription
    inputcountINT52–50—
    prompt_1STRING—
    prompt_2STRING—
    prompt_3STRING—
    prompt_4STRING—
    prompt_5STRING—
    prompt_6STRING—
    prompt_7STRING—
    prompt_8STRING—
    prompt_9STRING—
    prompt_10STRING—
    prompt_11STRING—
    prompt_12STRING—
    prompt_13STRING—
    prompt_14STRING—
    prompt_15STRING—
    prompt_16STRING—
    prompt_17STRING—
    prompt_18STRING—
    prompt_19STRING—
    prompt_20STRING—
    prompt_21STRING—
    prompt_22STRING—
    prompt_23STRING—
    prompt_24STRING—
    prompt_25STRING—
    prompt_26STRING—
    prompt_27STRING—
    prompt_28STRING—
    prompt_29STRING—
    prompt_30STRING—
    prompt_31STRING—
    prompt_32STRING—
    prompt_33STRING—
    prompt_34STRING—
    prompt_35STRING—
    prompt_36STRING—
    prompt_37STRING—
    prompt_38STRING—
    prompt_39STRING—
    prompt_40STRING—
    prompt_41STRING—
    prompt_42STRING—
    prompt_43STRING—
    prompt_44STRING—
    prompt_45STRING—
    prompt_46STRING—
    prompt_47STRING—
    prompt_48STRING—
    prompt_49STRING—
    prompt_50STRING—

    Outputs (1)

    NameTypeDescription
    textSTRING—