Nodes/dAIly Prompt & Token Utils/Prompt Mixer dAIly v2 (Dynamic CSV)
ComfyUI Node

Prompt Mixer dAIly v2 (Dynamic CSV)

CSV wildcards where your headers are the placeholders

By DailyMok·Created 7 months ago·Updated 3 months ago· 0
Prompt Mixer dAIly v2 (Dynamic CSV)
    • PROMPT
    • USED_JSON
    • ATTR_001
    • ATTR_002
    • ATTR_003
    • ATTR_004
    • ATTR_005
    • ATTR_006
    • ATTR_007
    • ATTR_008
    • ATTR_009
    • ATTR_010
    • ATTR_011
    • ATTR_012
    • ATTR_013
    • ATTR_014
    • ATTR_015
    • ATTR_016
    • ATTR_017
    • ATTR_018
    • ATTR_019
    • ATTR_020
    • ATTR_021
    • ATTR_022
    • ATTR_023
    • ATTR_024
    • ATTR_025
    • ATTR_026
    • ATTR_027
    • ATTR_028
    • ATTR_029
    • ATTR_030
    • ATTR_031
    • ATTR_032
    • ATTR_033
    • ATTR_034
    • ATTR_035
    • ATTR_036
    • ATTR_037
    • ATTR_038
    • ATTR_039
    • ATTR_040
    • ATTR_041
    • ATTR_042
    • ATTR_043
    • ATTR_044
    • ATTR_045
    • ATTR_046
    • ATTR_047
    • ATTR_048
    • ATTR_049
    • ATTR_050
    • ATTR_051
    • ATTR_052
    • ATTR_053
    • ATTR_054
    • ATTR_055
    • ATTR_056
    • ATTR_057
    • ATTR_058
    • ATTR_059
    • ATTR_060
    • ATTR_061
    • ATTR_062
    • ATTR_063
    • ATTR_064
    ◄csv_path►
    ◄templateA portrait with {Skin}, {Haircolor} hair, and {Eyes} eyes. Scene: {Locate}. Tip: click Refresh CSV after changing headers.►
    ◄flat_modetrue►
    ◄show_attribute_outputstrue►
    ◄seed0►
    ◄schema_json[]►
    ◄attr_001►
    ◄attr_002►
    ◄attr_003►
    ◄attr_004►
    ◄attr_005►
    ◄attr_006►
    ◄attr_007►
    ◄attr_008►
    ◄attr_009►
    ◄attr_010►
    ◄attr_011►
    ◄attr_012►
    ◄attr_013►
    ◄attr_014►
    ◄attr_015►
    ◄attr_016►
    ◄attr_017►
    ◄attr_018►
    ◄attr_019►
    ◄attr_020►
    ◄attr_021►
    ◄attr_022►
    ◄attr_023►
    ◄attr_024►
    ◄attr_025►
    ◄attr_026►
    ◄attr_027►
    ◄attr_028►
    ◄attr_029►
    ◄attr_030►
    ◄attr_031►
    ◄attr_032►
    ◄attr_033►
    ◄attr_034►
    ◄attr_035►
    ◄attr_036►
    ◄attr_037►
    ◄attr_038►
    ◄attr_039►
    ◄attr_040►
    ◄attr_041►
    ◄attr_042►
    ◄attr_043►
    ◄attr_044►
    ◄attr_045►
    ◄attr_046►
    ◄attr_047►
    ◄attr_048►
    ◄attr_049►
    ◄attr_050►
    ◄attr_051►
    ◄attr_052►
    ◄attr_053►
    ◄attr_054►
    ◄attr_055►
    ◄attr_056►
    ◄attr_057►
    ◄attr_058►
    ◄attr_059►
    ◄attr_060►
    ◄attr_061►
    ◄attr_062►
    ◄attr_063►
    ◄attr_064►

    The v1 prompt mixer in this pack is a solid CSV wildcard node, but it has one structural quirk: the attributes it knows about are hardcoded to the example columns, so a CSV with different headers leaves you stuck inside its little box. Prompt Mixer dAIly v2 (Dynamic CSV) is the author's fix, and it's a good one. Your CSV headers become the placeholders - rename a column and the node follows - so any CSV you already have works instead of one that matches the template.

    What changed, and why it's worth it

    Everything in v2 flows from one idea: read the headers, build the node around them. The big wins:

    • Headers as placeholders. If your CSV has a column called Setting, you write {Setting} in the template. No fixed inventory of attribute names to stay inside.
    • Dynamic inputs and outputs. The node grows attr_001…attr_064 ports to match your columns (or however many it needs), and an ATTR_* output per column so you can wire a specific picked value elsewhere in the graph.
    • Empty columns are allowed. A column can stay empty and its value gets supplied from upstream nodes instead - handy when one attribute shouldn't come from the file.
    • File picker + refresh. You can pick a CSV from a browser-style dialog, which copies it into the pack's local csv/ folder, and a Refresh button reloads the current file without re-copying. The template autocompletes {...} from the loaded headers, and the node keeps its size when you reload.
    • Toggle the noise. show_attribute_outputs hides the attribute ports when you only care about the prompt, which keeps the graph from turning into a cable spaghetti monster.

    Inputs that matter

    • csv_path (STRING) - the CSV to load, absolute or relative to the ComfyUI root. v2 keeps the same path semantics as v1.
    • template (STRING, multiline) - write it with {HeaderName} placeholders matching your CSV columns.
    • flat_mode (BOOLEAN) - ON merges everything to a single line; OFF preserves your paragraphs and line breaks.
    • show_attribute_outputs (BOOLEAN) - toggle the per-column output ports on or off.
    • seed (INT) - pick the same seed, get the same combination. This is the whole reproducibility story, so set it deliberately if you plan to re-run or compare batches.
    • schema_json (STRING) - the internal schema the dynamic ports are built from; you'll normally leave it as [] and let the node populate it from the CSV.

    Outputs are PROMPT (STRING, always the first one - wire this to your text encoder), USED_JSON (STRING, the picked values plus seed for your metadata), and the dynamic ATTR_* outputs. That USED_JSON is the feature that keeps you honest in a batch: attach it to the image metadata and "which prompt made this one?" stops being a mystery.

    A quick note on v1 vs v2

    If you're starting fresh, start with v2 - it does everything v1 does plus the dynamic headers. The author kept v1 around for existing workflows, not because it's better. If you're using v1 only because a shared workflow references it, swap and don't look back.

    Installation

    Same pack, same install: ComfyUI Manager, search "dAIly Prompt & Token Utils" (or just "dAIly"). Or manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/DailyMok/ComfyUI-dAIly.git
    

    Restart ComfyUI. No model files or heavy dependencies.

    Gotchas

    Two things trip people up. If you change a CSV's headers after the node loaded, the ports and placeholders can go stale - hit Refresh (the template default literally tells you to "click Refresh CSV after changing headers") before you blame the output. And keep the encoding happy: UTF-8-SIG is preferred, so save from Excel as "CSV UTF-8" or you'll be debugging mojibake in your options instead of generating.

    CategoryPrompt/Utility

    Inputs (70)

    NameTypeDefaultDescription
    csv_pathSTRING—
    templateSTRINGA portrait with {Skin}, {Haircolor} hair, and {Eyes} eyes. Scene: {Locate}. Tip: click Refresh CSV after changing headers.—
    flat_modeBOOLEANtrue—
    show_attribute_outputsBOOLEANtrue—
    seedINT00–18446744073709550000—
    schema_jsonSTRING[]—
    attr_001optSTRING—
    attr_002optSTRING—
    attr_003optSTRING—
    attr_004optSTRING—
    attr_005optSTRING—
    attr_006optSTRING—
    attr_007optSTRING—
    attr_008optSTRING—
    attr_009optSTRING—
    attr_010optSTRING—
    attr_011optSTRING—
    attr_012optSTRING—
    attr_013optSTRING—
    attr_014optSTRING—
    attr_015optSTRING—
    attr_016optSTRING—
    attr_017optSTRING—
    attr_018optSTRING—
    attr_019optSTRING—
    attr_020optSTRING—
    attr_021optSTRING—
    attr_022optSTRING—
    attr_023optSTRING—
    attr_024optSTRING—
    attr_025optSTRING—
    attr_026optSTRING—
    attr_027optSTRING—
    attr_028optSTRING—
    attr_029optSTRING—
    attr_030optSTRING—
    attr_031optSTRING—
    attr_032optSTRING—
    attr_033optSTRING—
    attr_034optSTRING—
    attr_035optSTRING—
    attr_036optSTRING—
    attr_037optSTRING—
    attr_038optSTRING—
    attr_039optSTRING—
    attr_040optSTRING—
    attr_041optSTRING—
    attr_042optSTRING—
    attr_043optSTRING—
    attr_044optSTRING—
    attr_045optSTRING—
    attr_046optSTRING—
    attr_047optSTRING—
    attr_048optSTRING—
    attr_049optSTRING—
    attr_050optSTRING—
    attr_051optSTRING—
    attr_052optSTRING—
    attr_053optSTRING—
    attr_054optSTRING—
    attr_055optSTRING—
    attr_056optSTRING—
    attr_057optSTRING—
    attr_058optSTRING—
    attr_059optSTRING—
    attr_060optSTRING—
    attr_061optSTRING—
    attr_062optSTRING—
    attr_063optSTRING—
    attr_064optSTRING—

    Outputs (66)

    NameTypeDescription
    PROMPTSTRING—
    USED_JSONSTRING—
    ATTR_001STRING—
    ATTR_002STRING—
    ATTR_003STRING—
    ATTR_004STRING—
    ATTR_005STRING—
    ATTR_006STRING—
    ATTR_007STRING—
    ATTR_008STRING—
    ATTR_009STRING—
    ATTR_010STRING—
    ATTR_011STRING—
    ATTR_012STRING—
    ATTR_013STRING—
    ATTR_014STRING—
    ATTR_015STRING—
    ATTR_016STRING—
    ATTR_017STRING—
    ATTR_018STRING—
    ATTR_019STRING—
    ATTR_020STRING—
    ATTR_021STRING—
    ATTR_022STRING—
    ATTR_023STRING—
    ATTR_024STRING—
    ATTR_025STRING—
    ATTR_026STRING—
    ATTR_027STRING—
    ATTR_028STRING—
    ATTR_029STRING—
    ATTR_030STRING—
    ATTR_031STRING—
    ATTR_032STRING—
    ATTR_033STRING—
    ATTR_034STRING—
    ATTR_035STRING—
    ATTR_036STRING—
    ATTR_037STRING—
    ATTR_038STRING—
    ATTR_039STRING—
    ATTR_040STRING—
    ATTR_041STRING—
    ATTR_042STRING—
    ATTR_043STRING—
    ATTR_044STRING—
    ATTR_045STRING—
    ATTR_046STRING—
    ATTR_047STRING—
    ATTR_048STRING—
    ATTR_049STRING—
    ATTR_050STRING—
    ATTR_051STRING—
    ATTR_052STRING—
    ATTR_053STRING—
    ATTR_054STRING—
    ATTR_055STRING—
    ATTR_056STRING—
    ATTR_057STRING—
    ATTR_058STRING—
    ATTR_059STRING—
    ATTR_060STRING—
    ATTR_061STRING—
    ATTR_062STRING—
    ATTR_063STRING—
    ATTR_064STRING—