Cloud Fetch Images
The terminal that turns cloud handles back into pixels
- images
- images
- prompt_id
Cloud Fetch Images is the node where a cloud workflow stops being a stack of promises and becomes actual pixels on your screen. It's the terminal of the pack - the node that takes your CLOUD_IMAGE handle, appends a SaveImage to the accumulated workflow, submits the whole graph to Comfy Cloud, polls it to completion, downloads every output PNG, and stacks them into a single IMAGE tensor batch. From there the result is just a normal image batch: wire it into Preview Image, a local Save Image, or further local post-processing.
You'll end most image workflows with this node. The pattern is: Cloud Checkpoint Loader → Cloud CLIP Text Encode (×2) → Cloud Empty Latent → Cloud KSampler Graph → Cloud VAE Decode → Cloud Fetch Images. Only the last node submits anything; everything upstream is just assembling JSON. That's why this node has a timeout input and the others don't - it's the one actually waiting on a remote job.
The inputs that matter
- images (
CLOUD_IMAGE) - the handle from a Cloud VAE Decode (or Cloud Empty Image, Cloud Image Scale By, and friends). - filename_prefix - default
cloud_fetch; names the downloaded files so multiple runs don't clobber each other. - poll_interval (default 3s) - status-check cadence. Leave it alone.
- timeout (seconds, default 1800) - the ceiling on how long you'll wait. This is the one to raise for slow models.
Outputs: images (IMAGE) - the stacked batch, ready for local nodes; prompt_id (STRING) - the cloud job ID for debugging.
How it works
Under the hood it merges the handle's accumulated node dict, appends SaveImage, POSTs to /api/prompt, then polls /api/job/{id}/status - printing each state transition to your console (queued_waiting → allocated → preparing → executing → success) - and finally walks the history_v2 response to find and download the output images via /api/view. It even has an IS_CHANGED method that hashes the assembled workflow, so ComfyUI knows to re-run it (and re-submit to the cloud) when your chain changes. One important quirk: the node hashes the whole chain, so editing any upstream node forces a fresh cloud submission - which is exactly what you want, and why you should expect a new job (and new cost) every run.
How to install
cd ComfyUI/custom_nodes
git clone https://github.com/Dobidop/ComfyUI-CloudAPI-worker
Copy config.json.example to config.json, paste an API key from https://platform.comfy.org/profile/api-keys, restart. Or install via ComfyUI Manager. Dependencies: requests, Pillow, safetensors.
Common issues
- "No output images found in history" - the job ran but produced nothing, or the node couldn't find the images in the response. Check the console for the truncated raw history dump it prints to diagnose.
- Timeout on slow models - the README's own numbers: Wan 2.2 14B I2V with the 4-step LoRA finishes in ~70–100s, but without the LoRA it can take 8–10 minutes. If your job is in that league, raise
timeoutpreemptively. - Unexpected charges - every run is a fresh cloud submission. Comfy Cloud and its API run on metered GPU time, so iterating on prompts in the cloud costs real money in a way local generation doesn't. Fine for the jobs that justify it; a terrible default for casual iteration.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | CLOUD_IMAGE | — | |
| filename_prefix | STRING | cloud_fetch | — |
| poll_interval | FLOAT | 3.00.5–60 | — |
| timeout | INT | 180010–7200 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| prompt_id | STRING | — |