Minds · Hosted Assets / Concepts
Minds Hosted Assets and Text Concepts
- creatives
What it is
Every other candidate node in this pack wants pixels out of your graph. This one wants a URL, or a paragraph of text.
That's the whole point. Half the interesting questions in creative testing aren't about something you just generated - they're about something you already shipped. Which of the two banner ads that ran last quarter actually lands? Which packaging mockup? You don't want to route a finished JPEG through VAE Decode to satisfy a node's input type. You paste an HTTPS link.
The other half is cheaper still: text concepts. Instead of generating a video to test a video idea, you describe two approaches in words and let the Audience tell you which framing wins. The pack's own docs are honest about what that means - text concepts test the supplied words, not a finished video. It's a script test, not a spot test.
Deprecation note, since it's easy to miss: in 0.2.2 this node carries DEPRECATED = True. It still loads, but new workflows use Minds · Audience Preferences, which has its own assets_json field and doesn't need a separate node. Reach for this one when you're maintaining an older graph, or when you specifically want the assets manifest isolated in its own node.
How it works
You give it a JSON array. Each object must be exactly one of two shapes - no extra fields, no missing ones:
[
{"label": "Video A", "url": "https://your-host.example/video-a.mp4", "mimeType": "video/mp4"},
{"label": "Story", "text": "A customer explains the problem and demonstrates the solution."}
]
The node's asset_manifest is strict about this, and strict in ways that will bite you. For URL entries it requires https (plain http is rejected), a hostname, no embedded username or password, no #fragment, and a mimeType starting with image/ or video/. Text entries run 1–20,000 characters. Then the whole lot goes through the same validation as native candidates: distinct labels, 200 characters max, at most 20 alternatives.
For URLs, the node itself doesn't download anything - it hands the URL to the Minds API, which imports the file into durable account storage. The docs note private-network destinations are refused at the API. That's the actual mechanism worth understanding: your hosted file gets copied into the account, so the link doesn't need to stay alive, and the 100 MB hosted-import limit applies instead of the 50 MB local-upload limit you get when the bytes go through ComfyUI.
Inputs and outputs
assets_json - one multiline string, default []. This is the only input; there's nothing else to set.
creatives - a MINDS_CREATIVES output, feeding Prepare Creative Test (or a Combine if you're mixing these with generated images).
The catch to plan around: URL and text candidates carry no native media. They live in the manifest and get ranked like everything else, but they cannot become an IMAGE or VIDEO downstream. If your shortlist might include a hosted file, don't wire it into a save path.
Install
Manager → search comfyui-minds (publisher minds), or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/minds-ai-co/ComfyUI-Minds
cd ComfyUI-Minds && pip install -r requirements.txt
Restart with MINDS_API_KEY in the server process environment. Two dependencies, requests and Pillow, and no model files at all - a genuinely light install compared to the average custom node.
Common issues
"Each asset needs label/text, or label/url/mimeType, and no other fields." Almost always a helpful extra key - "name", "type", "caption" - or a typo like "mime_type". The set has to match exactly.
"Use an HTTPS image/video file without embedded login details." Signed URLs with credentials in them, http:// links, and URLs with a # in them all trip this. Re-host the file plainly.
JSON syntax. It's a text field in a node; a trailing comma or smart quotes from a chat app is a legitimate failure mode. Validate it in any JSON viewer before pasting.
The test runs but you have nothing to select. Expected for URL and text candidates - no native media means no IMAGE or VIDEO output. The ranking is still there in results_json.
HTTP 413 from the client. That's the asset exceeding the upload limit; hosted imports cap at 100 MB, local encodes at 50 MB.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| assets_json | STRING | [] | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| creatives | MINDS_CREATIVES | — |