Send to PS
Where your ComfyUI run becomes a Photoshop layer
- images
- alpha
- RGB
- ALPHA
Send to PS is the terminal node: it takes the finished IMAGE, writes PNGs, and hands the results back to the Photoshop side of the bridge.
People who want this setup aren't chasing a new model, they're chasing ergonomics: mask something in Photoshop, run a graph, get the result back as a new layer with alpha intact. That round-trip - selection in, layer out - is the actual product. The rest is plumbing that exists to stop it losing your pixels.
How it works
It's an output node (is_output_node), so it always executes - ComfyUI's cache resolves backwards from outputs, and nothing downstream has to ask for it. It's also the only node in the pack that touches the filesystem, and it's careful about the order: the tensor is validated before any file, journal entry or folder exists.
On a run that came from Photoshop, request_id is injected and the node checks identity against the frozen run before writing, then files each result with its batch index, dimensions, byte length and SHA-256. Those go to output/, because a business result has to survive ComfyUI's temp cleanup. On a plain local Queue there's no request_id, so it writes to temp/ and you get a preview. Which brings us to the pack's most common confusion: queue it locally and Photoshop receives nothing.
Each frame is written as {filename_prefix}_{random}_{index:03d}.png, atomically, with the API prompt and the workflow UI embedded as PNG text chunks - the same trick as SaveImage, so a result drags back onto the canvas as a working graph. Anything that re-encodes that PNG strips it right back out.
Inputs and outputs
- images (IMAGE) - required. The widget label is
RGB; it accepts RGB or RGBA. - alpha (MASK) - optional, label
ALPHA. 1 is opaque, 0 is transparent. - filename_prefix (
VPlugins), result_id (result), request_id - advanced. The last two are bridge identity: leave them.
Outputs RGB (IMAGE) and ALPHA (MASK) - pure pass-throughs so you can hang a preview or a downstream node off the same run. Connecting them does not send twice.
Alpha handling is where the sharp edges are. No alpha connected? Then an RGBA input's own transparency is used, and a plain RGB input gets a fully opaque alpha - so a transparent PNG straight off a loader keeps its alpha for free. A single alpha frame is broadcast across a matching batch, otherwise batch sizes must agree. And alpha is never resized: if you scale the RGB, you must scale the alpha through the same transform, or the run stops with an alpha-shape error telling you why. That one accounts for most of the support traffic in tools like this.
Limits, enforced rather than advisory: 64 megapixels per image, 64 results per run, 64 MiB per PNG. The encoder tries a fast pass and then a stronger one, and if a frame still doesn't fit it errors - it won't downscale your image or quietly drop the alpha to squeeze under the cap.
Install
ComfyUI Manager, search ComfyUI PS Bridge Nodes. Manual:
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
Windows portable users should install with .\python_embeded\python.exe -s -m pip install -r ... from the portable root. Then restart ComfyUI and Ctrl+F5. Two Python deps (rfc8785==0.1.4, jsonschema), no model downloads.
Two install gotchas that actually bite: don't end up with custom_nodes/comfyui-ps-bridge-nodes/comfyui-ps-bridge-nodes (the classic ZIP double-nest), and don't prune the repo when you copy it - the contract schema under docs/contracts/bridge-v3/ is loaded at runtime, so a hand-picked subset of files gives you import errors. Nodes appear under Add Node → 🔷PS Vplugins; needs a V3-API ComfyUI, classic canvas recommended.
Troubleshooting
Local Queue works, Photoshop gets nothing. Expected - no request_id, so the PNG is a temp preview. Start the run from Vplugins with the test-mode target connected.
The toolbar icon stays red. Both ends must support Bridge contract 3 (this pack is 0.3.2; the Vplugins/Photoshop component is a separate download), Vplugins must be running, and only one browser can own the test-mode target at a time. After a restart or a graph change, toggle test mode off and on again.
Alpha shape mismatch. Apply the same resize/crop to the alpha as to the RGB. A common version of this: you wired the alpha straight from the image loader while the RGB went through an upscale and a crop.
Your old workflow reports incompatible nodes. Legacy Adv_Request / Adv_SendToPS graphs are not migrated and never will be. Rebuild with the six current nodes.
Result too large. 64 megapixels per image - call it 8192×8192 - is the practical ceiling, enforced before anything is written.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| result_id | STRING | result | — |
| filename_prefix | STRING | VPlugins | — |
| request_id | STRING | — | |
| alphaopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| RGB | IMAGE | — |
| ALPHA | MASK | — |