AutoDownload2Client
Get your images off a rented GPU without ever touching its disk
- image
The file-picker dance is the worst part of renting a GPU. You gen on a Vast.ai box or a RunPod instance, and every image lands in the server's output folder - then you scp it, or log into a file browser, or sync a whole directory just to look at one render. AutoDownload2Client skips all of that. It's a single output node that pushes the finished image straight down the websocket to your browser and triggers a silent download. Nothing is written to the server's disk, ever.
It's a niche tool, and it's unapologetically that. If you run ComfyUI on your own machine, you don't need it - regular Save Image is strictly better (more on why in a minute). But the moment your generation box is a rented Linux server, this node saves you a genuinely annoying workflow step on every single run.
How it works
The mechanism is small enough to read in one sitting, which is rare and comforting. auto_download.py takes your IMAGE tensor, converts it to a PIL image in memory, encodes it as PNG bytes, base64-encodes those, and fires them at the browser via PromptServer.instance.send_sync("auto_download_direct", ...) - the same websocket your ComfyUI page is already connected to. The bundled web/auto_download.js listens for that event, turns the base64 back into a Blob, and clicks a hidden <a download> link. That's the whole trick: it reuses the connection you already have open, so there are no files, no temp directories, and nothing left behind on the box.
It also means the preview works despite zero server-side files - the JavaScript feeds the object URL straight into the node's image display. Output nodes always run (that's the plumbing rule the engine applies to OUTPUT_NODE = True nodes like this one), so you can drop it at the end of any graph and trust it fires.
The inputs that matter
There are only two, both required:
image(IMAGE) - the tensor to send. Wire this from yourVAE Decodeoutput, exactly where you'd otherwise hook aPreview ImageorSave Image.filename_prefix(STRING, defaultComfyUI2Client) - the start of the downloaded filename. The node appends a timestamp and.png, so you get something likeComfyUI2Client_26_0820_1930_00.png.
There are no outputs - this is a terminal node, nothing wires out of it. The IMAGE you feed it can carry a batch, but be warned: it loops over the tensor and fires one browser download per frame. A batch of eight means eight popups.
Install
From ComfyUI Manager, search for AutoDownload2Client. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/iwindy910/ComfyUI-AutoDownload2Client
pip install -r custom_nodes/ComfyUI-AutoDownload2Client/requirements.txt
Then restart ComfyUI and search for the node by its display name, AutoDownload2Client. The requirements file is just numpy and Pillow - both already ship with ComfyUI, so this is one of the rare packs with effectively zero dependency risk.
Gotchas
The README's browser setup is not optional. Go to your browser's download settings, point the download location somewhere you want, and disable "Ask where to save each file". If you leave that on, every run pops a save dialog per image, which defeats the entire point.
The other caveat is the one the README doesn't shout about: this node rides your browser session. If you queue the workflow from the API or run headless, there's no listener on the other end - send_sync broadcasts into the void, nothing downloads, and no error is raised. You must be looking at the workflow in a browser.
Two quieter traps worth knowing. First, Pillow's plain PNG save writes no metadata, so the client-downloaded file won't contain the embedded workflow or seed that a normal Save Image output carries - drag it back into ComfyUI and you get a bare image, not your graph. If you want that recoverability, keep a Save Image in the graph too and let this node be the convenience copy. Second, the preview-matching code splits the filename on underscores to find the right node, so a filename_prefix containing _ can make the preview land on the wrong node. Keep prefixes unique and underscore-free.
Is it safe to install? The whole thing is ~50 lines of open source, it calls no external APIs, and the only thing that leaves the box is your own image going to your own browser. In an ecosystem with real malware history, that's about as transparent as a custom node gets.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| filename_prefix | STRING | ComfyUI2Client | — |
Outputs (0)
No outputs