GPT Image Bridge · Generate
Text to image (or 9 reference images) via GPT, dropped back into your graph as a normal IMAGE
- provider
- reference_1
- reference_2
- reference_3
- reference_4
- reference_5
- reference_6
- reference_7
- reference_8
- reference_9
- image
- revised_prompt
- request_report
GPT Image Bridge · Generate is the workhorse of the pack: it takes a prompt, calls OpenAI's GPT Image model, and hands you back a perfectly normal ComfyUI IMAGE tensor. From the canvas it looks like any other generator - wire its image output into a preview node, a save node, your upscaler - but there's no sampler and no VRAM underneath. The generation happens on OpenAI's servers, and this node is the HTTP client that ferries it home.
The input it needs first is a provider, straight from either GPT Image Bridge · API Provider (your key) or GPT Image Bridge · Codex OAuth Provider (your Codex login). No provider, no call. Everything else is generation params, and they're the standard GPT Image set:
prompt- the actual text. The default "A cinematic image" is just a placeholder; type what you want.size-auto,1024x1024,1536x1024,1024x1536.autolets the service decide.quality-auto/low/medium/high.background-auto/opaque/transparent.output_format-png/jpeg/webp.moderation-auto/low.n- how many images per request, 1–8. Note the README's reality check: actual capability and cost are decided by the service, not by this slider.timeout_sec- 30–3600. In sync mode it's the request timeout; in async mode it's the total cap on submit + poll + fetch. And here's the gotcha: hitting that cap only stops the local wait. It does not cancel the remote task, and the node will not re-submit a POST that may have already created a paid image job.
Pure text-to-image vs. reference generation
This is where api_protocol: auto earns its keep. The node reads the situation and routes accordingly: a plain text-to-image call goes to /images/generations; if you connect reference images it switches to /responses (the multi-modal protocol); OAuth generation routes to /responses too. The service's revised prompt comes back in the revised_prompt output (empty when there isn't one).
The nine optional inputs are reference_1 through reference_9. The UI starts you with three and grows them as you connect, up to nine. A few rules you'll only learn from the error messages:
- They must connect contiguously from
reference_1. A gap -reference_1andreference_3but notreference_2- is rejected before any network request. - Each slot takes exactly one
IMAGE. Feed it a batch and it errors with a message telling you to spread the batch across the numbered slots. Annoying at first, but it guarantees canvas order, report order, and the remote request order all match. - References can be different sizes. Each one is encoded independently, so there's no need to pre-batch or resize anything.
Unlike the Edit node, there's no "base image" here - every reference is just generation context, none of them is being edited. If you want to modify an existing image, that's the Edit node's job.
Outputs
image- the generatedIMAGEtensor. Wire it to a Save Image node or keep it in the graph for post-processing.revised_prompt- the service's rewritten prompt, when it returns one. Useful for learning what the model actually wants to hear, or for seeding a local workflow.request_report- a string with the redacted protocol, endpoint, timing, and any error info. This is your debugging window: when a call fails, this is where the status code and request ID live (credentials and image payloads stripped).
Install
ComfyUI Manager → search GPT Image Bridge → install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Liu-Bot24/comfyui-gpt-image-bridge.git ComfyUI-GPT-Image-Bridge
cd ComfyUI-GPT-Image-Bridge && python -m pip install -r requirements.txt
Restart. Dependencies are just numpy and Pillow, and there are zero model downloads - the model isn't yours, it never was. That's simultaneously the point (GPT Image has no open weights, so this is the only door) and the honest tradeoff: every call is metered, your prompt leaves the machine, and the moderation that rejects your prompt is OpenAI's, applied at the source - no node setting can bypass it. If a provider refuses a parameter, request_report keeps the redacted status and error type so you can see exactly what the service didn't like.
The pack is young (v0.5.2, 2026) and barely has a community footprint yet, so expect the occasional sharp edge - but the generate node itself is refreshingly straightforward: provider in, prompt in, IMAGE out.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| provider | GPT_IMAGE_PROVIDER | — | |
| prompt | STRING | A cinematic image | — |
| size | COMBO | auto | 4 options: auto, 1024x1024, 1536x1024, 1024x1536 |
| quality | COMBO | auto | 4 options: auto, low, medium, high |
| background | COMBO | auto | 3 options: auto, opaque, transparent |
| output_format | COMBO | png | 3 options: png, jpeg, webp |
| moderation | COMBO | auto | 2 options: auto, low |
| n | INT | 11–8 | — |
| timeout_sec | INT | 30030–3600 | — |
| reference_1opt | IMAGE | — | |
| reference_2opt | IMAGE | — | |
| reference_3opt | IMAGE | — | |
| reference_4opt | IMAGE | — | |
| reference_5opt | IMAGE | — | |
| reference_6opt | IMAGE | — | |
| reference_7opt | IMAGE | — | |
| reference_8opt | IMAGE | — | |
| reference_9opt | IMAGE | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| revised_prompt | STRING | — |
| request_report | STRING | — |