Save Image to PC ⚡
\"Save Image to PC\" is a trap — this node uploads to a receiver server instead
- images
- saved_paths
Here's the trap in the name. If you google "save image to PC" you're picturing a node that writes a PNG somewhere on your own machine - same box, a folder you pick. Save Image to PC from ChrisColeTech/ComfyUI-Get-Random-File is not that. It's the network half of this pack: it encodes each image in memory and POSTs it over HTTP to a receiver profile - a separate little server the author calls a "comfy-media-receiver" - which writes the file on its side and decides the folder and filename from a save_key. Nothing lands in ComfyUI's output folder, and nothing touches local disk at all. If you run it cold, nothing you own receives a thing.
The real question is whether you run the receiver. Nothing else in this repository ships it. On first import the node writes a receiver_config.json beside the module, seeded with one template profile named "Home PC" pointing at http://100.81.23.51:8790 - an address in Tailscale's private 100.64/10 range, i.e. the author's own network. Out of the box that URL reaches nobody you control. To use this node you must (1) run a matching receiver HTTP API somewhere, and (2) edit that config file to point at it. And there's no README section for any of it - the README only documents the random-file and save-to-folder nodes. This is an author's personal multi-machine workflow that shipped inside a public pack. Consider yourself warned.
If you do have a receiver up, it works cleanly. Wire images in, and every frame of the batch gets encoded in memory (png, jpeg, or webp) and sent to the receiver's /api/v1/upload endpoint. The response confirms the write, and the node returns the saved path(s). Success means the receiver confirmed; failure is a loud RuntimeError naming the profile and URL.
The inputs you actually touch:
receiver_profile- a dropdown of enabled receivers from the config (the "Home PC" sample you see is just that template).save_key- which receiver-side save profile (destination folder + naming pattern) to use. The receiver owns routing; you don't type a path here.filename_prefix- base name for the uploaded files.format(png/jpeg/webp) plus thejpeg_quality/webp_qualitysliders.
The long tail of optional inputs - model_name, workflow_name, prompt, negative_prompt, seed, job_id, generation_id, sampler fields, width/height/steps/cfg - are identity metadata sent along so the receiver can name and file the output the way it wants. extra_metadata is a free-form JSON blob, and it must actually be JSON or the node errors out rather than sending garbage.
Output: saved_paths, a STRING with one saved path per file.
Install is the pack standard - ComfyUI Manager, search ComfyUI-Get-Random-File, restart, or git clone https://github.com/ChrisColeTech/ComfyUI-Get-Random-File into custom_nodes. requirements.txt only adds requests (the HTTP side) and imageio-ffmpeg; no model files to fetch. The setup pain isn't the install, it's the missing receiver.
Verdict: if this node shows up in a shared workflow you're trying to run, the pragmatic move is usually to swap it for the pack's own SaveImageToFolder - same family, writes locally to any absolute path, no network, no config. Keep Save Image to PC only if the workflow genuinely expects the receiver (which means someone else is running that server for you, or you are). The loud failure is at least honest: you'll know in one run whether the receiver exists.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| receiver_profile | COMBO | 1 options: Home PC | |
| save_key | STRING | default | — |
| filename_prefix | STRING | — | |
| model_name | STRING | — | |
| workflow_name | STRING | — | |
| prompt | STRING | — | |
| negative_prompt | STRING | — | |
| seed | INT | 00–9223372036854776000 | — |
| formatopt | COMBO | 3 options: png, jpeg, webp | |
| jpeg_qualityopt | INT | 921–100 | — |
| webp_qualityopt | INT | 921–100 | — |
| subfolderopt | STRING | — | |
| job_idopt | STRING | — | |
| generation_idopt | STRING | — | |
| widthopt | INT | 0 | — |
| heightopt | INT | 0 | — |
| stepsopt | INT | 0 | — |
| cfgopt | FLOAT | 0.00 | — |
| sampleropt | STRING | — | |
| scheduleropt | STRING | — | |
| extra_metadataopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| saved_paths | STRING | — |