EvoLink GPT Image 2 (Official)
GPT Image 2 Inside ComfyUI, No GPU Required
- image1
- image2
- image3
- image4
- image
- task_id
- status_info
- result_urls
- response_json
Here's the situation: you want GPT Image 2, and you cannot run it on your machine. There are no open weights to download, full stop. Your options are the model's own API, ComfyUI's Partner Nodes storefront, or a third-party gateway - and that's where EvoLink's official node comes in. It's an API-wrapper node: it sends your prompt (and optionally your reference images) to EvoLink's cloud, waits for the job, and drops the finished image back into your graph as a normal IMAGE tensor. No GPU, no checkpoint, no LoRA. The one thing you need is an API key (sk-...) from evolink.ai/dashboard/keys - with money behind it.
What it actually is
This is the official EvoLink node for OpenAI's gpt-image-2 model, doing both text-to-image and image-to-image. Don't confuse it with the "GPT Image 2" hype posts - the model's the model, the interesting part here is the plumbing. EvoLink's whole pitch is that the graph treats a cloud call like any other generator: you wire image into a Preview or Save node and it just works. If you want a closed frontier model sitting next to your local upscaler and masking, this is a clean way in.
Two things sell it over rolling your own script: reference images need no third-party image host, and the key stays out of your workflow JSON.
How it works
Under the hood it's a submit-then-poll client. The node POSTs your job to api.evolink.ai/v1/images/generations, gets back a task_id, then polls /v1/tasks/{id} until the job hits completed, and downloads the result into an IMAGE tensor. It shows a progress bar while it waits, which you'll appreciate during those 35-ish seconds at quality=low.
The image-to-image path is where it gets clever. Connect a Load Image to image1, and the node uploads your local image as a base64 PNG to EvoLink's own file channel (files-api.evolink.ai), which returns a temporary public URL that's auto-deleted after 72 hours. No imgbb, no third-party image host to register for - that friction from the older community node (torans/ComfyUI_EvoLink) is just gone.
The inputs that matter
You'll set most of these every run:
- prompt - the actual description or edit instruction. Supports CJK, up to 32,000 characters. This one's required.
- quality -
low/medium/high, and it maps directly to price. The README's advice is the right advice: debug atlow. - size -
auto(let the model decide), an aspect ratio like16:9, or exact pixels like1024x1024. - resolution -
1K/2K/4K, active when size is a ratio orauto. - n - how many images per run, 1 to 10.
- model -
gpt-image-2orgpt-image-2-beta.
The optional ones matter too: api_key you fill once - it's saved to a local config file and can stay blank forever after. image1 through image4 are your reference image sockets; plugging one in switches you to img2img. image_urls is the advanced route - paste one public URL per line, mixable with the sockets, up to 16 reference images total. timeout_seconds (default 300) is how long the node waits before giving up; timed-out tasks aren't charged.
The outputs
- image - the finished result as an
IMAGE, already downloaded locally. Connect this to a Preview Image or Save Image node, or you'll queue a job and see nothing. - task_id - a string for looking the job up in EvoLink's task logs, useful if you need to dispute a charge.
- status_info - a one-line summary: model, time taken, credits used, text2img vs img2img.
Installing it
Easiest route is ComfyUI Manager - search for EvoLink and install. Or, the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/deeplearning-goethe/comfyui-evolink.git
Then fully restart ComfyUI - close the console window, not just refresh the browser. The only dependency is requests, which ComfyUI ships with anyway. If you install via ZIP, make sure __init__.py sits directly inside custom_nodes/comfyui-evolink/ - a nested double-folder is the classic reason the node doesn't show up in the search.
Where people get burned
The biggest gotcha is self-inflicted: you run the workflow, it succeeds, and you see nothing because the image output isn't connected to a Preview or Save node. Re-running doesn't cost you twice though - unchanged parameters hit ComfyUI's cache, no new API request, no charge. Failed and timed-out jobs aren't charged either.
The HTTP error codes come back as plain messages: 401 means the key is dead or deleted, 402 means you're out of balance, 429 is rate limiting. Content moderation is worth knowing about - gpt-image-2 refuses at the source, so a filtered prompt or reference image fails the job (uncharged) and you adjust. There's no local bypass here, this is a closed model. And be decent about the key: it's your account balance. The node deliberately keeps it out of shared workflow JSON, so keep your field empty when you share, and rotate it at the dashboard if it ever leaks. As with any API-wrapper node, it's arbitrary Python that calls the network with a credential by design - worth a skim of the code before you hand it your key, even from the "official" vendor.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | 画面描述,支持中文;图生图时写修改要求。最长 32000 字符。 | |
| model | COMBO | gpt-image-2 | 2 options: gpt-image-2, gpt-image-2-beta |
| size | STRING | auto | auto(模型自定构图)/ 比例如 1:1、16:9 / 像素如 1024x1024 |
| resolution | COMBO | 1K | size 为比例或 auto 时生效 |
| quality | COMBO | low | 质量越高越贵;调试建议 low |
| n | INT | 11–10 | 一次生成几张 |
| api_keyopt | STRING | EvoLink API Key(sk- 开头)。首次填写后自动保存到本机配置,之后可留空。分享工作流前请清空此框,避免泄露 Key。获取:evolink.ai/dashboard/keys | |
| image1opt | IMAGE | 参考图 1:接「加载图像」即图生图 | |
| image2opt | IMAGE | 参考图 2(可选) | |
| image3opt | IMAGE | 参考图 3(可选) | |
| image4opt | IMAGE | 参考图 4(可选) | |
| image_urlsopt | STRING | 进阶:已有公网图片 URL 时每行贴一个,可与 image 口混用,共最多 16 张 | |
| timeout_secondsopt | INT | 30060–600 | 最长等待时间;生成失败或审核拦截的任务不扣费 |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | 生成结果(已下载落地,可直连保存节点) |
| task_id | STRING | EvoLink 任务 ID,可到 evolink.ai/zh/dashboard/logs 查询 |
| status_info | STRING | 人读状态摘要(模型/用时/消耗 credits) |
| result_urls | STRING | 结果原始链接,每行一个(24 小时过期) |
| response_json | STRING | 平台 GET /v1/tasks/{id} 的完整 JSON 响应(status/usage/results 等),供下游节点解析 |