ComfyUI Node

ImgBB Upload

Get your local image onto the internet so Luma's API will accept it

By lumalabs·Created 2 years ago·Updated about a year ago· 213
ImgBB Upload
  • image
  • image_url
api_key
expirefalse
expiration_time60

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 uploads image[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 when expire is 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 - expire is on with the 60-second default. Either turn expiry off or raise expiration_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.

Categoryimage/upload

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
api_keySTRING
expireBOOLEANfalse
expiration_timeINT6060–15552000

Outputs (1)

NameTypeDescription
image_urlSTRING