Runware Upload Image
The boring node that makes the whole cloud pack work
- image
- image_uuid
This is the least glamorous node in the entire ComfyUI-Runware pack, and honestly one of the most useful. Runware Upload Image takes any IMAGE tensor you feed it and uploads it to Runware's media storage, returning a UUID string. That's the entire job: image in, image_uuid out. No model, no parameters, no API cost beyond a storage call. If you've ever wondered how a cloud inference API is supposed to see your reference image - the one sitting in your local ComfyUI graph - this is the bridge.
The thing is, most of the pack's image nodes don't need it. seedImage, maskImage, referenceImages, and frameImages all accept plain IMAGE tensors directly, and the SDK handles the upload for you under the hood. So when do you reach for the explicit upload node? Two cases. First, the Runware (custom) escape hatch (RunwareCustom) takes raw JSON, and its media inputs are URLs or UUIDs - to feed it an image you must upload it yourself first, which is exactly what this node produces. Second, if you're going to reuse one reference image across many runs or many nodes, uploading once and passing around a UUID is cheaper and faster than re-uploading the same tensor every time.
How it works
Under the hood it's a single call to the SDK's media storage endpoint. The node converts your IMAGE tensor to a data URI, sends it with an upload operation, and the response's mediaUUID comes back as the output string:
image (IMAGE) → Runware Upload Image → image_uuid (STRING)
The UUID is reusable - that's the point. Save it, paste it into a RunwareCustom request's JSON, or feed it to any node in the pack that accepts a media UUID. It's the same identifier the API uses internally, so anything you can do with an uploaded asset you can do with this output.
Using it
There are no inputs to explain beyond the one image socket - wire in Load Image, or the output of any generation node. The output is a plain string, so it shows up in a Show Text node and can be hard-coded back into workflows later. A common pattern:
- Load Image a reference photo.
- Run it through Runware Upload Image.
- Grab the UUID and drop it into a Runware (custom) node's
request_jsonunder whatever field the model wants (e.g."imageUUID": "..."). - Pull the result out of the returned JSON with Runware Get.
Install and API key
Installation is the same as the rest of the pack - it's one custom node folder:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Restart ComfyUI (or install Runware from ComfyUI Manager). You'll need an API key from runware.ai/api-keys, set in ComfyUI Settings → Runware API key, via the RUNWARE_API_KEY environment variable, or through runware auth login. Without a key you'll get the same "No Runware API key" error every node in the pack throws.
Gotchas
Because it's a paid API, every upload is technically a billable storage operation - in practice it's near-free, but don't hammer it inside a loop that re-uploads the same image 500 times. The output is a UUID string, not an image; if you need the image back locally, that's what Runware Load Image (URL) is for. And be careful hard-coding UUIDs into saved workflows: Runware storage has a TTL, so a stale UUID from weeks ago will eventually 404. Re-run the upload node if a custom request starts failing with an unknown-media error.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image_uuid | STRING | — |