Save Image (Websocket)
The Save Image that doesn't save anything (and that's the point)
- images
The name is a trap if you take it literally. Save Image (Websocket) doesn't write a PNG to disk - it ships the image out over ComfyUI's websocket as a preview and then does nothing else. That's not a bug, it's the entire job description. It's for setups where something else is listening: a headless server, a web frontend, a custom client that wants the finished image streamed to it instead of living in output/.
How it works
This is about as minimal as a ComfyUI node gets. One images input, no outputs, marked as an output node. Reading the source, it converts each image in the batch from ComfyUI's float tensor to a PNG and pushes it through the same progress-bar preview channel the frontend already uses for live previews - the ("PNG", image, None) payload that the browser displays in the image panel. Because it uses that existing websocket path, any client that already consumes ComfyUI's preview stream gets the final image with zero extra plumbing.
Two implementation details are worth knowing. It returns IS_CHANGED as time.time(), which means it always counts as changed - ComfyUI won't skip it on reruns where inputs look identical. And because it's an output node, everything feeding it is guaranteed to execute. That's the standard pattern for any node whose side effect (here, streaming) can't be detected from its return value.
When to reach for it
- You run ComfyUI headless or as a service, and a frontend polls the websocket for finished images.
- You're building an automation script and want the image delivered to your code rather than scraped from a folder.
- You want the "did it finish" semantics of an output node without filling disk with files.
If none of those apply - if you just want the image on disk so you can find it later - this node will frustrate you. Use the stock Save Image for that. This one's a delivery pipe, not a filing cabinet.
The honest take
It's a genuinely thin utility, and that's fine. The main confusion it creates is people dropping it into a workflow expecting a file. Check where the output actually went before assuming it broke: nothing was written, by design. It's also a nice illustration of ComfyUI's plumbing rules - the IS_CHANGED trick and the output-node guarantee are the same machinery that powers every always-rerun node in the ecosystem.
Installing it
It lives in the Nukun_ComfyUI_Nodes pack. ComfyUI Manager (search "Nukun"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/OnekoSL/Nukun_ComfyUI_Nodes
Restart ComfyUI. Dependencies are just numpy, Pillow, scipy, and PyWavelets - nothing to download. If your client never receives the image, check that it's actually subscribed to the preview/progress websocket messages, not just the queue-status feed; that's the usual disconnect.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — |
Outputs (0)
No outputs