PS Prompt
The text box Photoshop can type into
- text
A prompt is a value, and values in ComfyUI don't want to live in twenty places. PS Prompt is the pack's version of that idea: one multiline text field, one STRING output, and a binding that lets the Photoshop side write into it. Drop it in, wire text into whatever accepts a string, done.
It's part of ComfyUI PS Bridge Nodes, the ComfyUI half of Vplugins - a local Photoshop↔ComfyUI bridge. The node itself needs nothing from Photoshop to work; you can use it as a plain text source for a graph you're still building.
How it works
The node holds a string and returns it. That's the honest description. What makes it a bridge node is the three advanced fields next to the text: param_id, label, and source_json. Together they're the address Vplugins uses to find this widget. param_id defaults to prompt, and source_json defaults to {"kind":"canonical","key":"prompt"} - that pairing is what declares "this text box is the canonical prompt parameter of the workflow." When the Photoshop panel runs your graph, the controller writes the typed prompt into that widget, and the node hands it downstream.
So: edit it by hand while you iterate, and let Photoshop drive it once you're connected. Same node, same wire.
Inputs and outputs
- text - the field. Multiline.
Enterinserts a newline,Ctrl+Entercommits and closes the editor. IME input, selection, copy and paste all behave. - param_id (
prompt), label (Prompt), source_json - advanced, machine-managed. Don't rename them unless you're authoring the matching workflow definition.
Output: text (STRING). Wire it into a CLIP Text Encode (after converting that node's text widget to an input), a text-concatenation node, or anything else that takes STRING.
One deliberate limitation, and it matters if you came from A1111: dynamic prompt expansion is off. {red|blue|green}, wildcard files, that whole world - none of it expands here. The string comes out exactly as it went in. For a bridge node that's the right call. If Photoshop sent a prompt, the model should get that prompt, not whatever a randomizer decided. If you want wildcards, expand them upstream with a node that does it explicitly, and feed the result into your encoder - PS Prompt is not the place.
Two more rules worth knowing. There's no input socket on these fields on purpose - this is a literal value, not something you patch into from elsewhere, so it can't silently get two sources. And you get one PS Prompt per workflow; add a second and the graph is rejected, not merged.
Install
Manager search for ComfyUI PS Bridge Nodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/AIGCTV/comfyui-ps-bridge-nodes.git
cd comfyui-ps-bridge-nodes
python -m pip install -r requirements.txt
Then restart ComfyUI and hard-refresh the browser. The pack needs a ComfyUI with the V3 node API and wants the classic canvas; there are no model downloads. Nodes live under Add Node → 🔷PS Vplugins.
Troubleshooting
You typed a prompt and the sampler got something else. Under a Bridge run, the parameter sync is supposed to overwrite this widget - the prompt comes from Photoshop. Re-run without a bridge request (plain Queue) if you want to debug your own text. A quick local check that doesn't need Photoshop at all is the bundled example_workflows/PS_Bridge_Roundtrip.json.
The text never reaches the encoder. The output is a socket; the text box is a widget. If you wired the node but left CLIP Text Encode reading from its own widget, two prompts exist and the encoder wins. Convert that widget to an input and connect text to it.
Wildcards do nothing. Correct behavior, see above.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| param_id | STRING | prompt | — |
| label | STRING | Prompt | — |
| source_json | STRING | {"kind":"canonical","key":"prompt"} | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |