Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Flux 2 Edit · $0.012/MP
ComfyUI Node

arkennemasis fal · Flux 2 Edit · $0.012/MP

Instruction editing that keeps image quality, not the face

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Flux 2 Edit · $0.012/MP
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • images
  • image_paths
  • seed
  • prompt
  • timings
  • has_nsfw_concepts
  • info
◄prompt►
◄guidance_scale2.50►
◄seed-1►
◄num_inference_steps28►
◄image_sizesquare_hd►
◄image_size_width1024►
◄image_size_height1024►
◄num_images1►
◄accelerationregular►
◄enable_prompt_expansionfalse►
◄enable_safety_checkertrue►
◄output_formatpng►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

People who edit for a living still say Flux 2 Dev at fp8 is the best local edit model by a mile - and they also say it's too heavy to use. Both are true. This node is the way to get the first without the second: the multi-reference editing strength of the 32B model, on someone else's card, for about a cent and a half an edit.

What it does

Instruction-based editing. You hand it one to four pictures and a sentence describing the change, and it re-renders the file with that change applied. The multi-reference part is the real differentiator - this is the model that composes from several images at once, which is why it handles character sheets and "put this object in that scene" tasks that smaller editors fumble.

The inputs that matter

prompt - the whole game, and the most-messed-up field on the node. Describe the action on the file, not a scene to imagine. Direct, technical, post-processing language works far better than a vibe: remove blur and noise, fix exposure and color profile, shadow recovery. If you describe the subject instead of the edit, the model slides into generator mode and invents a new person. And when it's a scene edit, name what must not move: "Zoom out until the sneakers are visible. Maintain the faces. Maintain the posture."

image_1 (required) through image_6 - sockets, but fal's endpoint only uses the first four. Each socket can carry a whole batch, and they're sent in socket order, so the first picture on socket 1 is reference number 1. Which one you put where matters; that's the ordering.

image_size - square_hd by default, with custom driving image_size_width / image_size_height. For a 1024×1024 output, that's 1MP.

num_inference_steps (28), guidance_scale (2.5), acceleration (none/regular/high), enable_prompt_expansion (off - this one rewrites your careful edit instruction, so leave it alone), output_format, enable_safety_checker (flagged images come back black).

What it costs, exactly

This endpoint bills per megapixel of input and output, and inputs get resized to 1MP. So a 1024×1024 render from a 512×512 reference is 1MP in plus 1MP out: about $0.024. That's the number to keep in your head, because the node's price badge follows your image_size and num_images, not your reference image. Four references are still 1MP of input - you're paying for one, not four.

Outputs

images is the edited image (a batch if num_images > 1) - straight into SaveImage or a comparison board. image_paths gives you the file on disk, seed lets you reproduce a take, prompt echoes the instruction, timings is fal's timing JSON, has_nsfw_concepts reports the checker's read, and info carries the request id, estimate, saved files and fal's full answer.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis

Restart, and look under arkennemasis → fal → Image → Flux. ComfyUI-Manager → Install via Git URL → the same repo works if you'd rather not touch a terminal. requirements.txt is one line, httpx, and that's for the pack's ChatGPT nodes; fal runs on Python's standard library, so nothing else to install.

Key goes in the .env next to run_nvidia_gpu.bat:

FAL_KEY=your-key-from-fal.ai/dashboard/keys

Where people get burned

Identity drift is the documented weakness of this model, and it's legitimate: it does not hold a face the way Qwen-Image-Edit does. The result looks more real, but the character's features and expression shift. If face preservation is the job, that's a Qwen edit model, not this one. Elsewhere the community's fix is a dedicated consistency LoRA, which is what the LoRA-flavoured variants in this pack are for.

A warm colour shift on edits is reproducible on this model regardless of precision - the output comes back slightly warmer than the source. Match it back with a colour/histogram node against the original if you're cutting edits into a sequence.

Moving parts get re-rendered with a new, plausible version. The prompt fix is explicit negatives: keep the faces, keep the posture, don't change the background.

Repeated identical runs return cached files because reuse_identical_run is on by default. That's a feature - it also means a wasted run is never charged twice - but flip it off when you want a different take from the same instruction. And keep max_cost_usd modest while you're dialling in a prompt; the check happens before upload, so a run that trips the cap is free.

Categoryarkennemasis/fal/Image/Flux

Inputs (22)

NameTypeDefaultDescription
promptSTRINGThe prompt to edit the image.
guidance_scaleFLOAT2.500–20Guidance Scale is a measure of how close you want the model to stick to your prompt when looking for a related image to show you.
seedINT-1-1–2147483647The seed to use for the generation. If not provided, a random seed will be used. -1 leaves it to the model.
num_inference_stepsINT284–50The number of inference steps to perform.
image_sizeCOMBOsquare_hdThe size of the image to generate. The width and height must be between 512 and 2048 pixels. 'custom' uses the width and height below.
image_size_widthINT102416–14142Width in pixels when image_size is 'custom'.
image_size_heightINT102416–14142Height in pixels when image_size is 'custom'.
num_imagesINT11–4The number of images to generate.
accelerationCOMBOregularThe acceleration level to use for the image generation.
enable_prompt_expansionBOOLEANfalseIf set to true, the prompt will be expanded for better results.
enable_safety_checkerBOOLEANtrueIf set to true, the safety checker will be enabled. Disabling it requires account authorization; unauthorized requests are always checked, and images flagged as unsafe are returned as black images.
output_formatCOMBOpngThe format of the generated image.
image_1IMAGEThe URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
image_2optIMAGEThe URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
image_3optIMAGEThe URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
image_4optIMAGEThe URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
image_5optIMAGEThe URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
image_6optIMAGEThe URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
max_cost_usdoptFLOAT20.00–100000Safety 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_runoptBOOLEANtrueIf 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_jsonoptSTRINGAdvanced: 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_concurrentoptINT11–32How 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 (7)

NameTypeDescription
imagesIMAGE—
image_pathsSTRING—
seedINT—
promptSTRING—
timingsSTRING—
has_nsfw_conceptsSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.