ImgBB Upload
Get your local image onto the internet so Luma's API will accept it
- image
- image_url
The Luma API only accepts images as URLs. It has no file-upload endpoint, no way to receive a tensor - your local image has to exist on the public internet before their servers can look at it. ImgBBUpload is the pack's bridge for that gap: it takes an IMAGE tensor straight from ComfyUI (e.g. a LoadImage output or the image output of LumaImageGeneration), uploads it to ImgBB, and hands you back the hosted image_url string. From there the URL flows into Reference, CharacterReference, or directly into an image-to-video node.
This is the node that trips up newcomers the most, because it's a required extra step for image workflows and it's the only one that needs a second API key (an ImgBB key from api.imgbb.com, on top of your Luma key). Annoying, yes - but it's inherent to how hosted image APIs work, and the README points at ImgBB specifically as the suggested host.
The inputs that matter
image- the IMAGE tensor. Note it uploadsimage[0], the first frame of the batch, so a multi-image batch silently uploads only its first image.api_key- your ImgBB key. Required; a missing one raises "API Key is required" before anything is uploaded.expire- boolean toggle for temporary uploads. Off by default (permanent upload).expiration_time- only used whenexpireis on. Default is 60 seconds, with a 60–15,552,000 range. If you enable expiry and forget to bump this, your image vanishes a minute after upload - the classic footgun here. Set it to hours or days if you want the URL to stay alive long enough for Luma to fetch and render it.
There's a single output: image_url (STRING).
How it works
It's adapted from a community node (revirevy/Comfyui_saveimage_imgbb), and the mechanism is straightforward: it converts the tensor to a PIL image, base64-encodes it, POSTs it to api.imgbb.com/1/upload with your key (plus an expiration parameter if toggled), and returns the uploaded URL. Nothing runs locally beyond that upload - and nothing in this node costs Luma credits, only whatever ImgBB's free tier allows.
Installing
Part of the pack: ComfyUI Manager → search "ComfyUI-LumaAI-API", or clone into ComfyUI/custom_nodes and pip install -r requirements.txt. Dependencies are the pack's usual requests, numpy, Pillow (which is what converts and encodes the image). Get an ImgBB API key at api.imgbb.com.
Common issues
- "API Key is required" - you don't have an ImgBB key yet, or the input is empty. This is a separate key from your Luma key, easy to confuse.
- URL dead by the time Luma fetches it -
expireis on with the 60-second default. Either turn expiry off or raiseexpiration_time. - Only the first image uploaded - the node handles
image[0]. If you expected a whole batch, you'll need to loop it or pick frames explicitly. - ImgBB quota errors - the free tier limits uploads/hour; the error message from ImgBB is surfaced in the exception, so read it before assuming the node is broken.
- Privacy note - uploads are publicly accessible by design (that's the point: Luma needs to fetch them). Don't send anything you need kept private; for sensitive work you'd self-host the image and skip this node.
Small node, big role: it's the step between "image on my disk" and "image Luma can actually use," and the whole image-to-video and image-reference side of the pack falls over without it.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| api_key | STRING | — | |
| expire | BOOLEAN | false | — |
| expiration_time | INT | 6060–15552000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image_url | STRING | — |