External Image (ComfyUI Deploy)
The img2img input that eats URLs and base64 — the workhorse of deployed workflows
- default_value
- image
This is the one you'll reach for in almost every deployed workflow: "External Image" is the input node that lets your API callers hand you a source image. It accepts an image URL or a base64 data URI, decodes it, and returns a standard IMAGE tensor ready for img2img, inpainting, ControlNet, or anything else that wants a picture. It's the deployed-workflow equivalent of ComfyUI's LoadImage - except the file comes from a caller, not from your input folder.
If you've seen any ComfyDeploy workflow tutorial, you've seen this node. It's the input_image that sits at the start of every image-in/image-out API, and it's the template the whole External family is built around. Understanding it means understanding the pattern: the caller's image arrives through the node's input_id, and the node does the dirty work of turning bytes into a tensor.
How it works
It tries a small list of sources in order: input_id (which the backend populates with the caller's value), then default_value_url. For each, if it starts with http it fetches the image; if it starts with data:image/png;base64, (or jpeg/jpg), it base64-decodes it. Then it transposes EXIF orientation, forces RGB, normalizes to 0–1 floats, and returns a batch-of-one tensor. If everything fails, it falls back to the wired-in default_value instead of erroring - the same lenient pattern as the rest of the pack.
Inputs and output
input_id- defaultinput_image. The key callers use to send the image; it's also tried as a URL source.default_value- an IMAGE to use when no URL is supplied.default_value_url- a second URL slot, handy for testing locally with a fixed image.- Optional:
display_name,description- what the dashboard shows for this input.
Output: image (IMAGE), straight into your VAE encode / img2img chain.
Installing it
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/BennyKok/comfyui-deploy.git
Restart ComfyUI, or install "ComfyUI Deploy" via ComfyUI Manager. No models, no key, no extra deps.
Where people get burned
The RGB forcing is the quiet detail: the node calls .convert("RGB"), which drops any alpha channel. A PNG with transparency comes in flattened against black - invisible until you look at a composited result. If your workflow needs the alpha, use the External Image Alpha node instead; it's a sibling in the same pack that keeps the fourth channel.
Second gotcha: the lenient fallback. Bad URL, expired signed link, wrong base64 - you get the default image and the run "succeeds," which is exactly how a caller's wrong input becomes a subtly wrong result instead of a clear error. When debugging a deployed workflow that returns baffling images, suspect this node first and check the console for fetch failures. And keep your public endpoints tight: this node will happily pull any URL you point it at, so gate who can actually invoke your deployment.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| input_id | STRING | input_image | — |
| default_valueopt | IMAGE | — | |
| display_nameopt | STRING | — | |
| descriptionopt | STRING | — | |
| default_value_urlopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |