Nodes/ComfyUI-Minds/Minds · Combine Candidates
ComfyUI Node

Minds · Combine Candidates

Merging a Minds Shortlist Into One Test

By minds-ai-co·Created 3 days ago·Updated 2 days ago· 0
Minds · Combine Candidates
  • first
  • second
  • creatives

What it's for

You want one question - "which of these four?" - and you want it answered in one test. But your four candidates got here as two batches of two, from two different branches of the graph, or as two images and two videos. This node glues two candidate collections into one.

It's a two-input join with no settings at all, which sounds trivial until you hit the reason it exists: a Minds preference test is one question with 2–20 alternatives, and the alternative list has to be assembled in one place. Combine is that place.

One thing to know up front, because it changes how much you should invest here: in 0.2.2 this node is marked DEPRECATED = True in the pack's __init__.py, along with the other compatibility nodes. It still loads and still works - the pack's docs promise older workflows keep running - but new graphs use Minds · Audience Preferences, which accepts images, images_b, videos and videos_b directly and has no need for a merge step. If you're building fresh, use the big node. If you inherited a workflow that feeds a MINDS_CREATIVES chain, this is the merger.

How it works

Under the hood MINDS_CREATIVES isn't media - it's a Python list of dicts, one per candidate, each carrying a label, a kind (image, video, url or text), the encoded bytes and checksum of the copy that gets uploaded, and a native reference to the original tensor or VIDEO object for downstream selection. That's why it survives a round trip through the graph: the pixels you eventually save are the ones you generated, not the PNG that was encoded for upload.

combine does exactly this:

return (validate_creatives([*first, *second]),)

First input's candidates in their existing order, then second's. Then the same validation every creative node runs: the count has to land between 1 and 20, and every label has to be a distinct, non-empty string of 200 characters or fewer. Capping at 20 isn't this node being fussy - 20 is the API's hard candidate limit per question.

Order matters more than it looks. The first input's items come first, and every downstream ranking, distribution and tie-break is expressed against that order. If "Original" and "Revision" end up inverted in the study, the results read inverted too.

This is the plumbing-doc pattern in miniature: one typed wire carrying a bundle instead of a dozen wires carrying parts. The cost is the same as any bundle - you can no longer eyeball what's inside. Combining the wrong two branches produces a perfectly valid test of four candidates, one of which you didn't mean to include.

Inputs and outputs

first and second - both MINDS_CREATIVES. Both required; neither is optional, so you can't use this as a one-armed pass-through.

creatives - one MINDS_CREATIVES output, the concatenation. It feeds:

  • Minds · Prepare Creative Test in the classic four-node chain, or
  • another Combine, if you're stacking more than two sources - chain them, but remember the combined total still has to top out at 20.

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

Then restart ComfyUI with MINDS_API_KEY set in its environment. Dependencies are requests and Pillow only - no checkpoints, nothing to download.

Common issues

"Give every creative a distinct, non-empty label (up to 200 characters)." The single most common failure. Each candidate node is validated alone, so ["A", "B"] plus ["A", "B"] passes twice and then dies here. The node's own description says it: keep labels unique across both inputs. Rename the second batch - "A rev", "B rev".

"Supply 1–20 creative candidates." You combined too much. Do the arithmetic before you wire a third merge: 3 batches of 8 is 24, and no amount of re-wiring gets that past the API.

Downstream says the selection needs matching dimensions. That's not Combine's fault, but combining candidates that came from different resolutions is how you get there. Check which output node you're using - Minds · Selected Images concatenates into one IMAGE batch and needs matching sizes, while Minds · Selected Video keeps tied winners as separate videos.

Everything runs but the test rejects the draft. Labels over 200 characters, or a stray blank label from a JSON typo in one of the upstream candidate nodes, get past your eye and stop at validation. Print the labels by feeding the same JSON into a text node if you can't see the problem.

CategoryMinds/Creatives

Inputs (2)

NameTypeDefaultDescription
firstMINDS_CREATIVES—
secondMINDS_CREATIVES—

Outputs (1)

NameTypeDescription
creativesMINDS_CREATIVES—