arkennemasis fal · GPT Image 2 Edit · $0.01-0.41/image
The edit model that obeys, and one dropdown that triples the bill
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- mask
- images
- image_paths
- info
You cannot download GPT Image. It lives behind OpenAI's API, and this node is one of the ways it gets into a ComfyUI graph - feed it images, describe the edit, get images back. The reason to reach for it over a local Qwen-Edit or Flux Kontext is the same reason people use ChatGPT for image work: it follows instructions in plain language, handles text inside the picture, and doesn't need a reference LoRA to understand what you meant. The reason to hesitate is the price table.
What the node gives you
image_1 is a required socket and up to image_6 are optional; each carries a batch, the node sends them in socket order, and the endpoint allows a maximum of 16 input images overall. This is genuinely useful - an edit that says "match the lighting from the first picture and the jacket from the second" is the kind of thing a single-reference model can't do.
image_size is a dropdown of canonical sizes (square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9, auto, custom) with auto as the default, which infers the shape from your inputs. Pick custom and the image_size_width / image_size_height boxes (16–14142, stepped by 16) take over. If your whole workflow is "edit this photo and give it back the same shape," set this deliberately rather than trusting auto - the model will happily reframe your picture otherwise.
quality (auto / low / medium / high, default high) is the money dropdown, and I mean that literally. The pack's own price table for this node says a 1024×1024 image at low is about $0.015, at medium about $0.061, and at high about $0.219. Same prompt, same size, 14x the cost between ends. The default sits at the expensive end and OpenAI's own note is that quality "significantly affects cost." Start at medium, go to high only for the final pass - and note that a 3840×2160 at high is where the node's $0.41 top-of-range figure comes from.
num_images (1–4) multiplies all of that. output_format is png / jpeg / webp. background is auto / transparent / opaque - transparent is the one people forget exists and then fight with local matting nodes over. mask is an optional MASK input, "what part of the image to edit": wire a mask in and the edit is scoped to it.
Then the pack's shared controls: max_cost_usd (default $20, 0 disables), reuse_identical_run, extra_json, and max_concurrent (default 1 = one paid fal call at a time across the run).
Outputs: images (an IMAGE batch that wires into anything downstream), image_paths, and info, the JSON with request id, cost estimate, saved files and fal's full answer. Results are saved under output/fal/openai_gpt-image-2_edit/.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install httpx
ComfyUI Manager → search arkennemasis also works. The key goes in the .env in your install root (the folder with run_nvidia_gpu.bat):
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Restart ComfyUI. Worth saying out loud for anyone who skipped the intro: this is a third-party wrapper that sends your images to fal, which forwards them to OpenAI. If the pictures matter, that's the trade.
Where people get burned
- The price badge can't see your images. It shows the cost for a 1 MP picture at the settings you picked; the pre-run check measures the real thing and holds it against
max_cost_usd. Read the cap as the real guardrail and the badge as a hint. - "The seed didn't change anything." There's no seed on this node, and
reuse_identical_runis on by default - identical settings and identical input files means it returns the files you already paid for, even after a ComfyUI restart. Turn it off for a fresh take; leave it on and re-running a graph costs nothing. highby default. First experiments shouldn't be at the top quality tier. Drop to medium or low, get the prompt right, then spend once.- Everything in the graph queues at
max_concurrent: 1, and if one fal node fails, the queued ones never start - good for your balance, mildly annoying when you're batching.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt for image generation | |
| image_1 | IMAGE | The URLs of the images to use as a reference for the generation. A maximum of 16 images are allowed. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_size | COMBO | auto | The size of the generated image. Use 'auto' to infer from input images. 'custom' uses the width and height below. |
| image_size_width | INT | 102416–14142 | Width in pixels when image_size is 'custom'. |
| image_size_height | INT | 102416–14142 | Height in pixels when image_size is 'custom'. |
| background | COMBO | auto | Background for the generated image |
| quality | COMBO | high | Quality for the generated image. Use 'auto' to let the model pick the best quality for the prompt. |
| num_images | INT | 11–4 | Number of images to generate |
| output_format | COMBO | png | Output format for the images |
| image_2opt | IMAGE | The URLs of the images to use as a reference for the generation. A maximum of 16 images are allowed. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_3opt | IMAGE | The URLs of the images to use as a reference for the generation. A maximum of 16 images are allowed. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_4opt | IMAGE | The URLs of the images to use as a reference for the generation. A maximum of 16 images are allowed. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_5opt | IMAGE | The URLs of the images to use as a reference for the generation. A maximum of 16 images are allowed. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_6opt | IMAGE | The URLs of the images to use as a reference for the generation. A maximum of 16 images are allowed. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| maskopt | MASK | The URL of the mask image to use for the generation. This indicates what part of the image to edit. | |
| max_cost_usdopt | FLOAT | 20.00–100000 | Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap. |
| reuse_identical_runopt | BOOLEAN | true | If these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings. |
| extra_jsonopt | STRING | Advanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally. | |
| max_concurrentopt | INT | 11–32 | How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |