Minds · Audience Preferences
Minds · Audience Preferences
- images
- images_b
- videos
- videos_b
- selected_images
- selected_videos
- results_json
- preference_result
- selected_creatives
What this thing is
It's a preference test in a node. You give it 2–20 labelled alternatives - images, videos, hosted files, or plain text concepts - pick one or more Minds Audiences you've already built, ask a question, and get back a preference distribution per Audience. Then you send the winner downstream and save it.
That's a different job from anything else in ComfyUI. No sampler improves by running it; your GPU doesn't get warm. What you're buying is an answer to "which of these would my audience pick?" before you spend money showing any of them to a human. For ad creative and packaging, that's a real question with an expensive wrong answer.
Calibrate expectations before you wire it up. The pack is blunt about this, and it's the most trustworthy thing in its docs: these are estimated preferences among the alternatives you supplied, not measured clicks, conversions or sales. The result JSON even carries the line "Estimated preference among these alternatives; not measured ad performance." No confidence intervals are invented either - the field is literally null.
This is also the only research node in the pack that 0.2.2 hasn't deprecated. Everything else - the candidate nodes, Prepare, Run, Select, the two Selected outputs - is a compatibility shim now. If you're learning the pack today, learn this node.
How it works
It's a one-node wrapper around a five-stage pipeline that used to take five nodes: collect candidates, prepare a research draft, get it approved, run it, select winners.
The approval gate. Preparing a draft does not spend anything. The node returns a review payload, a dialog shows you the exact question, alternatives and Audiences, and - until you click approve - every output is an ExecutionBlocker. Nothing downstream executes. On the next queue, if reviewed_draft matches the draft's approval fingerprint, the run goes ahead. If you change the media, labels, question, context, language or Audiences, the fingerprint changes and you must review again. That's deliberate, and it's the reason this node can't silently test something you didn't read.
List protocol. INPUT_IS_LIST is on, and the media inputs take lists or batches. ComfyUI batches media into one Study rather than running one Study per item - four images on images is one test of four alternatives, not four tests. Settings are separate: feed it a list of questions and you get "Use one value per Minds setting; media inputs may contain lists or batches."
The inputs that matter
audience_ids - comma-separated UUIDs, up to 100, all distinct. Get them from Minds · Find Audiences; a name won't work.
question and context - the ask and the setup. Hard budget: context + one reference line per creative + question must fit 2,000 characters, and content is never silently shortened. With 20 candidates your reference lines alone eat a chunk of that.
labels_json - one label per native candidate, in order, distinct. assets_json - optional hosted files or text concepts, same manifest shape as the Hosted Assets node.
selection_audience_id and top_k - which Audience's winner you want downstream (leave blank when there's only one Audience; blank with multiple Audiences shows all results but blocks selection) and how deep the shortlist goes.
request_id - a UUID. This is your idempotency handle: same ID plus same inputs resumes a saved run instead of starting a new one.
reviewed_draft - the approval string from the review. Blank on first queue.
timeout_seconds - default 900, max 3600. Timing out costs only patience; re-queue to resume.
Outputs
selected_images and selected_videos are lists of native media, and unlike the older Selected Images node they tolerate different dimensions. results_json is the ranking for automation, preference_result is the structured object, and selected_creatives carries the candidates themselves.
Install
Manager → search comfyui-minds (publisher minds), or:
cd ComfyUI/custom_nodes
git clone https://github.com/minds-ai-co/ComfyUI-Minds
cd ComfyUI-Minds && pip install -r requirements.txt
export MINDS_API_KEY="your-key-here" # then restart ComfyUI
requests and Pillow. No checkpoints, no GPU cost, no model downloads - and no Mosaic checkpoint despite the author overlap. The key goes in the server process environment, never in a node field or a shared workflow JSON. That's the right pattern for this category, and this pack does it properly: the results iframe never receives the credential.
Common issues
"Set MINDS_API_KEY in the ComfyUI server environment before using Minds." Exported in a shell that isn't the one running ComfyUI, or still unset in the running process. Restart it.
"Use a new request ID and review again." You reused a request_id after editing inputs. New test, new UUID.
"Choose one result Audience ID for downstream creative selection." Multiple Audiences and a blank selection_audience_id. Results stay separate per Audience; there's no pooled winner to hand you.
More winners than top_k. Ties at the cutoff are all included. Intentional.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| audience_ids | STRING | — | |
| question | STRING | Which creative do you prefer? | — |
| context | STRING | — | |
| labels_json | STRING | ["Creative A", "Creative B"] | — |
| assets_json | STRING | [] | — |
| study_locale | COMBO | en | 9 options: ar, de, en, es, fr, ja, +3 |
| selection_audience_id | STRING | — | |
| top_k | INT | 11–20 | — |
| request_id | STRING | — | |
| reviewed_draft | STRING | — | |
| timeout_seconds | INT | 9005–3600 | — |
| imagesopt | IMAGE | — | |
| images_bopt | IMAGE | — | |
| videosopt | VIDEO | — | |
| videos_bopt | VIDEO | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| selected_images | IMAGE | — |
| selected_videos | VIDEO | — |
| results_json | STRING | — |
| preference_result | MINDS_CREATIVE_RESULT | — |
| selected_creatives | MINDS_CREATIVES | — |