EvoLink Upload Image (Official)
The EvoLink Upload Node You Probably Don't Need (Yet)
- image1
- image2
- image3
- image4
- image5
- image6
- image7
- image8
- image_urls
- count
First, the honest headline: for normal image-to-image you do not need this node. The EvoLink pack's whole trick is that you wire a Load Image straight into image1 of EvoLink GPT Image 2 and the local file rides up through EvoLink's own upload channel automatically. This node exists for the edge case where you want the upload as its own step - when your workflow is complicated enough that you need public URLs as a first-class value you can route around.
What it does
It takes local images, pushes them through EvoLink's official file channel, and hands you back the temporary public URLs as text. Think of it as "expose these images to the internet for 72 hours." That expiry is deliberate: files are auto-deleted after three days, and there's no third-party image host (no imgbb, no signup) in the path. The default quota is 2,000 uploaded files.
How it works
Under the hood it's plain and slightly inelegant in a way that works fine: each image is encoded as a base64 PNG data URI and POSTed one at a time to files-api.evolink.ai/api/v1/files/upload/base64, which returns a file_url. ComfyUI IMAGE tensors get converted frame-by-frame to PNG, so a batch input uploads every frame. One request per image, each with a 120-second timeout.
The inputs and outputs
Inputs are minimal:
- image1 (required) - the image(s) to upload; accepts a batch.
- image2 through image8 - seven more sockets if you need to upload a pile at once. Note the asymmetry: the generation node accepts reference images on just four sockets, so this node's eight are a genuine extension for heavy multi-reference setups.
- api_key - same story as everywhere in this pack: fill once, it's saved to a local config file, leave it blank after that.
Outputs:
- image_urls - a
STRINGwith the public URLs, one per line. - count - an
INTtelling you how many files got uploaded, which is handy if a batch silently came up short.
Where it fits in a workflow
The natural target is the image_urls text input on EvoLink GPT Image 2 (or any cloud node that accepts URLs), which lets you mix uploaded images with pre-existing public URLs up to the API's 16-reference limit. That's a genuinely useful pattern for "place my subject into a new scene" workflows with more references than four sockets allow. If you're not hitting that ceiling, skip this node - it's extra moving parts with nothing to gain.
Installing it
Same pack as the generator, so one install covers both:
cd ComfyUI/custom_nodes
git clone https://github.com/deeplearning-goethe/comfyui-evolink.git
Then restart ComfyUI fully (console window closed, not just a browser refresh). The only dependency is requests, already present in a normal ComfyUI install. In ComfyUI Manager you can just search EvoLink.
Gotchas worth knowing
Two real ones. First, the 72-hour expiry means any URL you produce is a time bomb in a saved workflow - a workflow that references an uploaded image today will find it dead by the weekend. Second, there's a default 2,000-file upload quota, and the error message will cheerfully point you at support for a raise when you hit it. And the usual API-node hygiene applies: this thing takes your key and phones home by design, so keep the api_key field empty when you share workflows - the node reads your local config file instead, and the key never has to travel in the workflow JSON.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image1 | IMAGE | 要上传的图片(可接 batch) | |
| api_keyopt | STRING | EvoLink API Key(sk- 开头)。首次填写后自动保存到本机配置,之后可留空。分享工作流前请清空此框,避免泄露 Key。获取:evolink.ai/dashboard/keys | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| image4opt | IMAGE | — | |
| image5opt | IMAGE | — | |
| image6opt | IMAGE | — | |
| image7opt | IMAGE | — | |
| image8opt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image_urls | STRING | — |
| count | INT | — |