Nodes/Quality of Life Nodes for ComfyUI/FAL GPT Image 2 Edit (Soze)
ComfyUI Node

FAL GPT Image 2 Edit (Soze)

Reference images in, edited images back — with actual text in them

By SozeInc·Created 2 years ago·Updated 8 days ago· 10
FAL GPT Image 2 Edit (Soze)
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • image_7
  • image_8
  • image_9
  • image_10
  • image_batch
  • mask
  • images
  • image_urls
  • image_count
  • status
prompt
image_sizeauto
qualityhigh
num_images1
output_formatpng
sync_modefalse

The sibling FAL GPT Image 2 node switches to edit mode the moment you connect an image. This node is that edit mode, unambiguously: it wraps openai/gpt-image-2/edit on fal, takes up to ten reference images, and returns the edited result as a real IMAGE batch in your graph. If your workflow is always an edit - restyle this product shot, redo the signage in that photo - you reach for this one directly instead of leaning on the mode switch.

The appeal is the same as the text-to-image variant: hosted frontier model, no local VRAM, results land back in ComfyUI as tensors. And it's paid - every run bills against your fal account, so this is a "use it for the jobs it's genuinely best at" node, not a toy.

How it works

The inputs that matter are near-identical to the parent node: prompt, image_size (auto infers from your input images - usually the right answer for edits), quality, num_images (1–8), output_format (png/jpeg/webp). Then the references: ten image_N slots or an image_batch, with individual slots taking precedence when both are connected. A mask input is optional and gets sent as the edit mask, which is what lets you constrain edits to a region rather than letting the model go wild across the whole frame.

The critical difference from its parent: this node requires at least one reference image. No images connected, and it skips cleanly with a "no reference images connected" status instead of erroring - but it won't generate anything either. The parent's auto-switch can be a footgun when you forget to wire a reference; this node makes the contract explicit.

Mechanically it's the same pipeline as the rest of the FAL pack: your images upload to fal, the API edits, and the results download back as an IMAGE batch alongside image_urls (newline-joined) and image_count. sync_mode returns data URIs instead of public URLs if you want self-contained output. Live status text on the node body keeps you honest about where in the pipeline it is - upload, submit, download.

When it's worth it

GPT Image 2's superpower is text rendering, so the edits that justify the cost are the ones with words: signage, labels, packaging, UI mockups where the model writes legible type into the image. It's also notably good at following multi-image instructions when you cite several references. For simple inpainting or region edits on a budget, a local SDXL/Qwen-Edit pipeline is cheaper and faster - this node earns its money when the edit contains text that has to be correct.

Getting it running and gotchas

Same pack install and key setup as the parent:

cd ComfyUI/custom_nodes
git clone https://github.com/SozeInc/ComfyUI_Soze.git
pip install -r ComfyUI_Soze/requirements.txt

Set FAL_KEY in your environment, in a .env in the repo root, or in config.ini under [API]:

[API]
FAL_KEY = your_key_here

The two failure modes you'll actually meet: uploads failing (shown per-slot in status, and if every upload fails the node says so and returns a placeholder) and a missing reference image leaving you with a skipped run and nothing to show for it. Both are visible in the status output before you start debugging blindly. And remember the mask only matters if the model's interpretation of "edit" needs a region - leave it disconnected for whole-image restyles.

CategoryFAL/ImageGeneration

Inputs (18)

NameTypeDefaultDescription
promptSTRING
image_sizeCOMBOauto'auto' infers size from input images.
qualityCOMBOhigh4 options: auto, low, medium, high
num_imagesINT11–8
output_formatCOMBOpng3 options: png, jpeg, webp
image_1optIMAGEReference image slot 1. Overrides image_batch when connected.
image_2optIMAGEReference image slot 2. Overrides image_batch when connected.
image_3optIMAGEReference image slot 3. Overrides image_batch when connected.
image_4optIMAGEReference image slot 4. Overrides image_batch when connected.
image_5optIMAGEReference image slot 5. Overrides image_batch when connected.
image_6optIMAGEReference image slot 6. Overrides image_batch when connected.
image_7optIMAGEReference image slot 7. Overrides image_batch when connected.
image_8optIMAGEReference image slot 8. Overrides image_batch when connected.
image_9optIMAGEReference image slot 9. Overrides image_batch when connected.
image_10optIMAGEReference image slot 10. Overrides image_batch when connected.
image_batchoptIMAGEOptional IMAGE batch. Each frame is uploaded as a reference. Ignored if any image_N slot is connected.
maskoptMASKOptional mask. Sent as mask_url.
sync_modeoptBOOLEANfalseIf True, FAL returns images as data URIs instead of public URLs.

Outputs (4)

NameTypeDescription
imagesIMAGE
image_urlsSTRING
image_countINT
statusSTRING