Cloud Workflow
Paste your API JSON, rent a GPU, keep the graph
- image
- first_image
- result_json
The name is doing real work this time. Cloud Workflow is the whole-graph counterpart to Cloud Offload's drag-a-box feature: you paste the JSON of an API-format ComfyUI workflow into it, it runs the entire thing on a rented GPU runner - RunPod by default, Vast.ai if you configure it - and hands you back the first image plus a JSON blob describing what the remote run produced. No API key to paste into the node, no credentials in your workflow file. The pack is a thin HTTP client for the separate Cloud Offload coordinator, which owns all the provider credentials.
Why reach for it: mostly when the workflow is too heavy for your card - video, Flux-size models, big batches - and you don't want to rebuild it for Comfy Cloud or babysit a rental. It's the "call a whole pipeline remotely" move from the API-node family, except instead of hitting a vendor's image endpoint you're renting an actual headless ComfyUI that runs your actual graph. For a one-off job, pasting a JSON blob beats re-architecting anything.
How it works
You give it the API-format workflow - the "Save (API Format)" export, a non-empty JSON object, not the canvas workflow. If you wire the optional image input, it gets uploaded as a content-addressed artifact and exposed to the remote workflow under input_filename (default cloud_input.png), so a Load Image node expecting that filename picks it up where it's meant to. The coordinator runs free preflight, then shows a rental confirmation panel: ten-second countdown, recommended provider/GPU/region, hourly price, estimated total cost and time, prepared-cache coverage. You can Start now, cancel, or pick a different GPU, and the coordinator enforces hard hourly/total-cost/paid-runtime limits you set in the action bar. Then the remote ComfyUI executes, relaying progress and previews back, and cancelling the local prompt cancels the remote run too.
The inputs that matter
workflow_api_json- the whole job. Must be valid JSON and a non-empty object.provider-auto/runpod/vast.ai;autolets the coordinator pick.input_filename- the name the remote workflow sees your uploaded image under.timeout_seconds- 1 to 86400, default 3600. Your safety valve.image(optional) - the input image, if your workflow needs one.
Outputs
first_image (IMAGE) - the first image artifact the workflow produced, decoded back into a tensor so you can wire it straight into a Preview or Save node. result_json (STRING) - the full result as pretty JSON: artifact records rather than base64 job data. One thing to know: if the workflow produced no image at all, you get a 1x1 black placeholder tensor instead of a crash - so "the image came back black" sometimes just means "there was no image to come back."
Install
Install the pack via ComfyUI Manager (search "Cloud Offload") or clone it, then restart:
cd ComfyUI/custom_nodes
git clone https://github.com/jethac/ComfyUI-Cloud-Offload.git
The pack's requirements are tiny - requests and safetensors, with torch/numpy/Pillow from ComfyUI - and there are no model downloads. But the node is useless without the coordinator running as its own service:
python -m cloud_offload serve --host 127.0.0.1
The pack finds it via CLOUD_OFFLOAD_URL, then ~/.cloud-offload/service.json, then the localhost default http://127.0.0.1:11435 (never Ollama's 11434).
Gotchas
Bad or empty workflow JSON fails fast and free - "Invalid API workflow JSON" / "must be a non-empty object" - before any paid worker is provisioned, which is exactly the behavior you want from a metered tool. The rental confirmation is mandatory the first time and reappears whenever price, cost, capacity, region, or storage materially changes; hiding the normal confirmation does not disable the hard limits. The runner image must contain every custom node and model the workflow references - the default runner is model-agnostic (pinned ComfyUI plus the bridge nodes), so anything installed in that image can ride along.
One honest caveat: this pack is brand new - zero impressions on comfy.icu as of this writing, no community thread traffic yet - so treat it as early-adopter tooling. The design is careful (free preflight before paid work, confirmation with hard limits), but it hasn't been battle-tested by a crowd yet.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| workflow_api_json | STRING | {} | — |
| provider | COMBO | auto | 3 options: auto, runpod, vast.ai |
| input_filename | STRING | cloud_input.png | — |
| timeout_seconds | INT | 36001–86400 | — |
| imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| first_image | IMAGE | — |
| result_json | STRING | — |