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

FAL GPT Image 2.5 Flare Edit (Soze)

The fast one, and usually the one you want

By SozeInc·Created 2 years ago·Updated 15 days ago· 11
FAL GPT Image 2.5 Flare Edit (Soze)
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • image_7
  • image_8
  • image_9
  • image_10
  • image_11
  • image_12
  • image_13
  • image_14
  • image_15
  • image_16
  • image_batch
  • mask
  • images
  • alpha_mask
  • image_urls
  • image_count
  • status
◄prompt►
◄image_sizeauto►
◄qualityhigh►
◄num_images1►
◄output_formatpng►
◄backgroundauto►
◄width0►
◄height0►
◄output_compression-1►
◄sync_modefalse►

You can't download GPT Image. No weights, no HuggingFace repo, no GGUF - if you want it, something has to call it over the network. This node is that something: it takes a prompt and up to 16 reference images, POSTs them to fal.ai's openai/gpt-image-2.5/flare/edit endpoint, and hands the result back as a normal IMAGE you can wire into your existing graph.

It's the official ComfyUI API Nodes minus the middleman: a third-party pack wrapping fal directly, so you bring your own fal account and pay fal per image - no Comfy credits, no login. If you've used the official GPT Image partner node and resented the markup, that's the trade.

What it's actually doing

Structurally it's an HTTP client, and "Flare" is just which endpoint it hits. Flare and Sunburst are the two 2.5 edit variants and they share one base class here: byte-identical request bodies, identical published prices, one differing line - the endpoint string. So the choice between them is entirely about which one fal routes you to.

It's more than a thin wrapper, though: references get uploaded to fal and passed as image_urls, an optional MASK goes up as mask_url, results come back with alpha intact, and anything at a mismatched size is resized to the first so you get one clean batch. Submits retry with backoff rather than dying on the first blip.

The inputs worth setting

prompt is the edit instruction - say what changes, not what the picture is. There's no negative prompt; these models don't take one.

quality is the one that costs money. GPT Image 2.5 has five tiers, and per the author's tooltip, 2.5's high matches GPT Image 2's medium. Coming from an old GPT Image 2 workflow that ran high, you want max here - 4x the price. high is the default and a sane one. auto works but hides the tier you were billed for, so the node stops estimating cost when you pick it.

image_size defaults to auto, inferring the canvas from your references. The presets resolve smaller than you'd expect - the tooltip flags landscape_16_9 as 1088x608 - so when output size matters for a composite, set width and height instead (both, multiples of 16, up to 3840). Then num_images (1–10, billed each), output_format, and background.

References go in image_1…image_16, or as a single image_batch. Slots win: connect any image_N and the batch is ignored, with a note in the status widget. Either way, only the first 16 frames count.

Outputs

images is the batch - all N results stacked into one IMAGE, so Preview or Save Image downstream just works. alpha_mask is the cut-out in ComfyUI's 1 - alpha LoadImage convention, so a transparent-background render gives you a usable mask instead of a flattened backdrop. image_urls is newline-joined result URLs, image_count is how many landed, and status is the first thing to read when something's off - a headline plus a timestamped transcript of uploads, retries, delivered size and a cost estimate.

Install

ComfyUI Manager, search ComfyUI_Soze (listed as "Quality of Life Nodes for ComfyUI"), or do it by hand:

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

No model downloads - this node is pure network. But the requirements drag in torchaudio, moviepy>=1.0.3 and azure-storage-blob whether or not you ever touch the pack's video, audio or ComfyDeploy nodes.

Then the key: either FAL_KEY in the environment ComfyUI runs in, or a config.ini at the repo root (gitignored, so it won't travel with the clone):

[API]
FAL_KEY = <your_fal_key>

The node sits under FAL/ImageGeneration.

Where people get burned

A failure is a black square, not an exception. Blank prompt, no references, an upload failure, an API error - every early-out returns a 64x64 black image with image_count 0 and the reason in status. Save Image will cheerfully write that to disk. In a batch, branch on image_count.

A bad key looks like an upload problem. The fal client is created lazily, so a missing FAL_KEY or an empty fal balance first appears as "every reference upload failed," with the real cause buried in status.

A mask that won't upload kills the run. Masked edits abort rather than silently degrading into a full-frame repaint. Right call, but a transient hiccup costs you the whole call.

Your images leave the machine. They go to fal, then to OpenAI, and OpenAI's filter applies no matter who's proxying - there's no abliterating a closed model. sync_mode keeps results out of fal's request history and returns data URIs instead of public URLs; that's a real knob, it just changes where your output lives, not where your input went.

Custom sizes come back snapped. fal rounds to multiples of 16 and clamps to its pixel bounds, then bills the delivered size. The node tells you when what you asked for isn't what came back.

CategoryFAL/ImageGeneration

Inputs (28)

NameTypeDefaultDescription
promptSTRING—
image_sizeCOMBOauto'auto' infers size from the input images. Presets resolve small (landscape_16_9 is 1088x608) - set width/height when the canvas matters.
qualityCOMBOhighGPT Image 2.5 has five tiers. Its 'high' matches GPT Image 2's 'medium'; to match GPT Image 2 at 'high', use 'max' (4x the cost of 'high').
num_imagesINT11–10Billed per image.
output_formatCOMBOpng3 options: png, jpeg, webp
backgroundCOMBOauto'transparent' needs png or webp. The cut-out comes back on the alpha_mask output.
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_11optIMAGEReference image slot 11. Overrides image_batch when connected.
image_12optIMAGEReference image slot 12. Overrides image_batch when connected.
image_13optIMAGEReference image slot 13. Overrides image_batch when connected.
image_14optIMAGEReference image slot 14. Overrides image_batch when connected.
image_15optIMAGEReference image slot 15. Overrides image_batch when connected.
image_16optIMAGEReference image slot 16. Overrides image_batch when connected.
image_batchoptIMAGEOptional IMAGE batch, one reference per frame (first 16 used). Ignored if any image_N slot is connected.
maskoptMASKOptional mask of the region to edit. Sent as mask_url.
widthoptINT00–3840Custom canvas width. Set both width and height to override image_size; 0 = use image_size. Aspect ratio must stay within 3:1.
heightoptINT00–3840Custom canvas height. See width.
output_compressionoptINT-1-1–1000-100, jpeg and webp only. -1 = fal default.
sync_modeoptBOOLEANfalseIf True, FAL returns images as data URIs instead of public URLs, and keeps them out of request history.

Outputs (5)

NameTypeDescription
imagesIMAGE—
alpha_maskMASK—
image_urlsSTRING—
image_countINT—
statusSTRING—