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

arkennemasis fal · Flux 2 Turbo Edit · $0.008/MP

Instruction editing at a fraction of a cent, if you mind the aspect ratio

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Flux 2 Turbo Edit · $0.008/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►
◄image_sizesquare_hd►
◄image_size_width1024►
◄image_size_height1024►
◄num_images1►
◄enable_prompt_expansionfalse►
◄enable_safety_checkertrue►
◄output_formatpng►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

Give it a photo and a sentence, get the photo back with the sentence applied. FLUX.2 [dev] does single-reference and multi-reference editing in the same checkpoint - that unification is the thing that made the Flux 2 line matter, because you stop maintaining a separate generator and editor. This node wraps the turbo variant of it at $0.008 per megapixel of input and output.

That pricing detail matters more than it looks. Input images are resized to 1MP, and you pay for the input too: a 512×512 source plus a 1024×1024 output is 1MP in + 1MP out = $0.016. Still nothing, but the price badge is honest about it, so trust the badge.

The honest comparison

If you run Klein locally, you already have an instruction editor that's faster and free. Kontext LoRAs, Qwen-Image-Edit, Klein 9B - the local editing space is crowded and good. What this node gives you that none of those do is FLUX.2 dev-grade comprehension without a 53GB fp16 pair and a 48GB card, and multi-image edits where each reference is a separate socket you can wire independently.

So: reach for it when your machine can't hold Flux 2 dev, or when you want to edit somebody's photo without setting up a local stack at all. Stay local when the picture can't leave your machine, or when you're doing a hundred iterations and the per-call metering starts to annoy you.

Editing with more than one image

image_1 is required; image_2 through image_6 are optional sockets, and fal only uses the first four. Each socket can carry a batch, and pictures are numbered in socket order - the first frame on socket 1 is picture one, and so on.

In practice this is how you do "put this jacket on this person" or "match this room's lighting": reference the subject on one socket and the thing to transfer on the next, then say what you want in the prompt. The model preserves identity across the references, which is the part that used to require a LoRA.

There's no mask here. If you need to protect specific pixels, this isn't the node - see the general inpainting or Kontext LoRA inpaint nodes in the same pack.

The aspect-ratio trap

image_size defaults to square_hd. Your source photo is probably not square. Leave this alone and you've asked for a square remake of a 16:9 picture, and the model will reframe your shot to get there. Set image_size to match your input, or pick custom and type the source dimensions into image_size_width / image_size_height. There's no "match the input" option on this endpoint.

That's a big enough deal that the pack ships a separate arkennemasis Match Aspect node whose whole job is measuring the image being edited and pinning the generator's output to that shape. On this node, checking the aspect ratio is step one of every workflow.

The rest of the settings are the usual: prompt, guidance_scale at 2.5 (Flux guidance, not CFG - don't set it to 7), seed at -1, num_images up to 4, enable_prompt_expansion off, enable_safety_checker on, output_format at png.

Outputs

images and image_paths for the graph and the files on disk (in output/fal/fal-ai_flux-2_turbo_edit/), plus seed, prompt (post-expansion), timings, has_nsfw_concepts, and info carrying the request id, cost estimate, saved files, and fal's raw answer.

Install

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

Restart ComfyUI, or use ComfyUI-Manager → Install via Git URL. Only httpx is declared in requirements.txt and that's for the pack's Codex nodes - the fal nodes run on Python's standard library and download no weights.

# FAL_KEY goes in .env, not in a node widget
FAL_KEY=your-key-from-fal.ai/dashboard/keys

Portable build: the folder with run_nvidia_gpu.bat.

Things that catch people out

Cached results. reuse_identical_run is on by default, so re-queuing unchanged inputs + the same picture bytes returns the file you already paid for. Turn it off for a fresh take - with a random seed, that's the difference between a new edit and the same one.

Connecting a batch to a single-image socket. The node stops with a clear message rather than guessing; pick your frame first with a ComfyUI image-select node.

Expecting a mask. There's no mask input, so a "fix just the eyes" prompt will re-render more of the picture than you asked for. That's a property of instruction editing, not of this node - the models that edit from a sentence can't promise the rest of the frame is untouched. The mask-based nodes in this pack exist for exactly that reason.

Categoryarkennemasis/fal/Image/Flux

Inputs (20)

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.
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.
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.