Prompt Mixer dAIly v2 (Dynamic CSV)
CSV wildcards where your headers are the placeholders
- 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
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_064ports 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_outputshides 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.
Inputs (70)
| Name | Type | Default | Description |
|---|---|---|---|
| csv_path | STRING | — | |
| template | STRING | A portrait with {Skin}, {Haircolor} hair, and {Eyes} eyes. Scene: {Locate}. Tip: click Refresh CSV after changing headers. | — |
| flat_mode | BOOLEAN | true | — |
| show_attribute_outputs | BOOLEAN | true | — |
| seed | INT | 00–18446744073709550000 | — |
| schema_json | STRING | [] | — |
| attr_001opt | STRING | — | |
| attr_002opt | STRING | — | |
| attr_003opt | STRING | — | |
| attr_004opt | STRING | — | |
| attr_005opt | STRING | — | |
| attr_006opt | STRING | — | |
| attr_007opt | STRING | — | |
| attr_008opt | STRING | — | |
| attr_009opt | STRING | — | |
| attr_010opt | STRING | — | |
| attr_011opt | STRING | — | |
| attr_012opt | STRING | — | |
| attr_013opt | STRING | — | |
| attr_014opt | STRING | — | |
| attr_015opt | STRING | — | |
| attr_016opt | STRING | — | |
| attr_017opt | STRING | — | |
| attr_018opt | STRING | — | |
| attr_019opt | STRING | — | |
| attr_020opt | STRING | — | |
| attr_021opt | STRING | — | |
| attr_022opt | STRING | — | |
| attr_023opt | STRING | — | |
| attr_024opt | STRING | — | |
| attr_025opt | STRING | — | |
| attr_026opt | STRING | — | |
| attr_027opt | STRING | — | |
| attr_028opt | STRING | — | |
| attr_029opt | STRING | — | |
| attr_030opt | STRING | — | |
| attr_031opt | STRING | — | |
| attr_032opt | STRING | — | |
| attr_033opt | STRING | — | |
| attr_034opt | STRING | — | |
| attr_035opt | STRING | — | |
| attr_036opt | STRING | — | |
| attr_037opt | STRING | — | |
| attr_038opt | STRING | — | |
| attr_039opt | STRING | — | |
| attr_040opt | STRING | — | |
| attr_041opt | STRING | — | |
| attr_042opt | STRING | — | |
| attr_043opt | STRING | — | |
| attr_044opt | STRING | — | |
| attr_045opt | STRING | — | |
| attr_046opt | STRING | — | |
| attr_047opt | STRING | — | |
| attr_048opt | STRING | — | |
| attr_049opt | STRING | — | |
| attr_050opt | STRING | — | |
| attr_051opt | STRING | — | |
| attr_052opt | STRING | — | |
| attr_053opt | STRING | — | |
| attr_054opt | STRING | — | |
| attr_055opt | STRING | — | |
| attr_056opt | STRING | — | |
| attr_057opt | STRING | — | |
| attr_058opt | STRING | — | |
| attr_059opt | STRING | — | |
| attr_060opt | STRING | — | |
| attr_061opt | STRING | — | |
| attr_062opt | STRING | — | |
| attr_063opt | STRING | — | |
| attr_064opt | STRING | — |
Outputs (66)
| Name | Type | Description |
|---|---|---|
| PROMPT | STRING | — |
| USED_JSON | STRING | — |
| ATTR_001 | STRING | — |
| ATTR_002 | STRING | — |
| ATTR_003 | STRING | — |
| ATTR_004 | STRING | — |
| ATTR_005 | STRING | — |
| ATTR_006 | STRING | — |
| ATTR_007 | STRING | — |
| ATTR_008 | STRING | — |
| ATTR_009 | STRING | — |
| ATTR_010 | STRING | — |
| ATTR_011 | STRING | — |
| ATTR_012 | STRING | — |
| ATTR_013 | STRING | — |
| ATTR_014 | STRING | — |
| ATTR_015 | STRING | — |
| ATTR_016 | STRING | — |
| ATTR_017 | STRING | — |
| ATTR_018 | STRING | — |
| ATTR_019 | STRING | — |
| ATTR_020 | STRING | — |
| ATTR_021 | STRING | — |
| ATTR_022 | STRING | — |
| ATTR_023 | STRING | — |
| ATTR_024 | STRING | — |
| ATTR_025 | STRING | — |
| ATTR_026 | STRING | — |
| ATTR_027 | STRING | — |
| ATTR_028 | STRING | — |
| ATTR_029 | STRING | — |
| ATTR_030 | STRING | — |
| ATTR_031 | STRING | — |
| ATTR_032 | STRING | — |
| ATTR_033 | STRING | — |
| ATTR_034 | STRING | — |
| ATTR_035 | STRING | — |
| ATTR_036 | STRING | — |
| ATTR_037 | STRING | — |
| ATTR_038 | STRING | — |
| ATTR_039 | STRING | — |
| ATTR_040 | STRING | — |
| ATTR_041 | STRING | — |
| ATTR_042 | STRING | — |
| ATTR_043 | STRING | — |
| ATTR_044 | STRING | — |
| ATTR_045 | STRING | — |
| ATTR_046 | STRING | — |
| ATTR_047 | STRING | — |
| ATTR_048 | STRING | — |
| ATTR_049 | STRING | — |
| ATTR_050 | STRING | — |
| ATTR_051 | STRING | — |
| ATTR_052 | STRING | — |
| ATTR_053 | STRING | — |
| ATTR_054 | STRING | — |
| ATTR_055 | STRING | — |
| ATTR_056 | STRING | — |
| ATTR_057 | STRING | — |
| ATTR_058 | STRING | — |
| ATTR_059 | STRING | — |
| ATTR_060 | STRING | — |
| ATTR_061 | STRING | — |
| ATTR_062 | STRING | — |
| ATTR_063 | STRING | — |
| ATTR_064 | STRING | — |