Send Image (WebSocket)
Get your result out over the socket, no disk write
- images
The mirror image of loading an image without touching disk: this one sends your finished image back out the same WebSocket the client is already listening on. No Save Image, no output folder, no second HTTP request to fetch the file. The picture pops out of the socket as PNG bytes the instant the node runs.
This is the "receiving images" half of Acly's ComfyUI Nodes for External Tooling. The pack turns ComfyUI into a headless backend for apps that don't want to deal with its filesystem, and it's the machinery behind tools like the Krita AI Diffusion plugin - which is why you'll find this node in a pack whose whole point is round-tripping images cleanly. If your external tool already holds an open WebSocket to ComfyUI (which it does, that's how it watches progress), this is the zero-friction way to receive the output on that same connection.
How it works
When the node executes, it does two things. First it pushes one binary WebSocket message per image in the batch: the PNG data prefixed with two 32-bit big-endian integers (values 1 and 2) that mark it as image data. Then it sends a JSON executed message naming this node and listing the outputs with "source": "websocket". Your client reads the binary frames as the images and uses the JSON as the "we're done, here's what you got" signal.
The README is explicit that this is a client WebSocket transport - it only reaches the socket the requesting client opened. That's the right tool when you control both ends and want the lowest-latency path. If your images are large or you'd rather pull them over plain HTTP, the pack's Save Image to Cache node is the alternative Acly recommends for exactly that ("typically faster than WebSocket, especially for large images"). For small-to-medium outputs, the socket is simplest.
The inputs and outputs that matter
images(IMAGE) - the batch to send. Wire your VAE Decode straight in. Batches are supported; you'll get one binary frame per image.format(defaultPNG) - the encoding for the transmitted bytes. PNG is the default and what the README documents; leave it unless you have a specific reason.
This is an output node - it has no output sockets, because its job is the side effect of transmitting, not producing a value for the next node. In the graph it's a terminal, like Save Image. You don't wire anything after it.
How to install it
The pack installs as a unit. ComfyUI Manager: search ComfyUI Nodes for External Tooling, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Acly/comfyui-tooling-nodes.git
then restart. No models, no heavy dependencies - this is transport code.
Common issues & troubleshooting
Nothing shows up on the client. This only sends over the WebSocket the client opened to ComfyUI. If you're testing by opening the workflow in the browser and expecting a preview tile, that's not what this does - it's meant to be consumed by code reading the socket. Make sure your client is actually reading binary frames, not just JSON.
The binary frame confuses your parser. Remember the two leading 32-bit big-endian ints (1 and 2) before the PNG payload - strip those header bytes, and what remains is a valid PNG. The executed JSON message that follows tells you the frames belong to this node.
Large images feel slow or drop. WebSocket isn't the fastest path for big payloads. Switch to Save Image to Cache and pull the result over HTTP from /api/etn/image/{id} - that's the exact case Acly built the cache nodes for.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| format | COMBO | PNG | 2 options: PNG, JPEG |
Outputs (0)
No outputs