Superside Prompt Slots
A 4,000-character prompt with four holes in it
- prompt
- info
Why you'd want a template instead of a prompt box
Editing models in 2026 read your prompt as an instruction, not a tag soup - which is why the good editing prompts have gotten long, structured and insufferably specific about skin, lighting and what must not change (prompt-engineering § Natural language). That long prompt is the asset. The three lines that change per run are the noise.
Prompt Slots keeps the long one in exactly one editable place with named {holes} in it, and lets the changing parts arrive on wires: a pose fragment from Superside Prompt Variants, a product description from a vision node, a SKU string. Fix the phrasing once and every variant of the run inherits the fix.
Like its sibling, this node makes no API call - no api_key, no fal bill. It's a string formatter that happens to ship inside a pack of fal.ai wrappers.
How it works
The template field contains placeholders written as {key}. Each of the four key widgets names the placeholder its matching slot input fills: key_1 is matched with slot_1, key_2 with slot_2, and so on. Defaults are pose and spec for the first two, which is exactly the try-on shape - one pose fragment, one framing/spec fragment.
Substitution is a straight exact-match replace: a placeholder can appear more than once and every occurrence gets the same value. Keys are case-sensitive, and each key widget is stripped of surrounding whitespace before use, so a trailing space after pose won't quietly break the match.
The interesting behaviour is what happens when things don't line up. An unfilled slot is removed, not left behind. If {pose} is in the template and nothing is wired into slot_1, the placeholder is deleted from the text rather than handed to the model as a literal {pose} - a failure you'd otherwise notice only on the bill. The info output names every mismatch it found: a placeholder in the template with nothing connected, a slot connected whose key the template never uses, or a {whatever} still sitting in the text after substitution. It opens with filled: pose, spec and lists the problems underneath - a wire that silently does nothing is the failure worth catching.
One sharp edge: substitution happens slot by slot, in order, on the same string. If a slot value contains brace-shaped text matching a later key - a slot_1 value with {spec} in it - a later slot will substitute into it, or the leftover scan will flag it. Don't pipe raw JSON with bare {word} patterns into a slot and expect it to pass through untouched.
Inputs and outputs
You set template and the four key names; the four slot_N inputs are the wiring side. They're declared as forced inputs, so they're socket-only - you can't type into them: this node exists to move text between nodes.
The prompt output goes into any STRING input that wants a prompt - a generator's prompt, the Z-Image inpaint node, or part1 of Superside Combine Prompt. The info output is diagnostic: wire it into a text-preview node, because nothing is drawn on this node's own body.
A shape that works: long instruction prompt in template with POSE: {pose} on its own line, key_1 = pose fed from Prompt Variants' text, key_2 = spec fed from whatever describes the current product.
Install
ComfyUI Manager: search "Superside". Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/Superside/comfyui-superside-nodes.git
cd comfyui-superside-nodes
pip install -r requirements.txt
Restart ComfyUI afterwards - the nodes only register on a restart - and you'll find it under the Superside category. The dependency list (fal-client>=1.0.0, pillow, numpy, torch, requests) is all for the fal-backed majority of the pack; this node needs none of it, but the pack installs as one unit. Update with git pull origin main in the pack folder, then restart.
On Windows portable, use the embedded interpreter rather than whatever pip is on your PATH: ..\..\python_embeded\python.exe -m pip install -r requirements.txt.
Things that bite
The biggest one: an empty slot leaves its label behind. Remove the placeholder and you get POSE: with nothing after it. Usually harmless - but if a slot is fed by a node that sometimes returns an empty string, put the placeholder on its own line, or move the label into the slot value itself.
Four slots is the ceiling; there's no key_5. Past that, chain into Superside Combine Prompt (a plain 4-part concatenator) or the pack's Prompt Box.
Mind the execution model too: like anything that isn't an output node, this one only runs when something downstream needs its output (comfyui-node-plumbing). Leave prompt unwired to go and inspect info, and you may find the node never executed at all.
Finally, unrelated to this node: workflows saved before the pack's text-display fix can fail with "an input value has the wrong type". Set the affected widget back to its default once and re-save.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| template | STRING | Your instruction prompt. POSE: {pose} FRAME: {spec} | Placeholders are {key}, matching the key_N widgets below. |
| key_1 | STRING | pose | — |
| key_2 | STRING | spec | — |
| key_3 | STRING | slot3 | — |
| key_4 | STRING | slot4 | — |
| slot_1opt | STRING | — | |
| slot_2opt | STRING | — | |
| slot_3opt | STRING | — | |
| slot_4opt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| info | STRING | — |