Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Flux General Image to Image · $0.075/MP
ComfyUI Node

arkennemasis fal · Flux General Image to Image · $0.075/MP

Img2img with the whole extension drawer open

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Flux General Image to Image · $0.075/MP
  • image
  • fill_image_fill_image_1
  • fill_image_fill_image_2
  • fill_image_fill_image_3
  • fill_image_fill_image_4
  • fill_image_fill_image_5
  • fill_image_fill_image_6
  • reference_image
  • images
  • image_paths
  • timings
  • has_nsfw_concepts
  • prompt
  • seed
  • info
◄prompt►
◄image_sizesquare_hd►
◄image_size_width1024►
◄image_size_height1024►
◄num_inference_steps28►
◄seed-1►
◄loras►
◄control_loras►
◄controlnets►
◄controlnet_unions►
◄ip_adapters►
◄easycontrols►
◄guidance_scale3.50►
◄real_cfg_scale3.50►
◄use_real_cfgfalse►
◄use_cfg_zerofalse►
◄num_images1►
◄enable_safety_checkertrue►
◄reference_strength0.65►
◄reference_start0.00►
◄reference_end1.00►
◄base_shift0.50►
◄max_shift1.15►
◄output_formatpng►
◄use_beta_schedulefalse►
◄schedulereuler►
◄negative_prompt►
◄nag_scale3.00►
◄nag_tau2.50►
◄nag_alpha0.25►
◄nag_end0.25►
◄strength0.85►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

Flux Dev image-to-image is $0.03/MP and takes a source photo and a prompt. This node is the same base model at $0.075/MP, and what you're paying the extra four and a half cents for is the ability to attach a LoRA, a ControlNet, an IP-Adapter or an EasyControl to that img2img pass.

If you don't need one of those, close this page and use ArkFal_fal_ai_flux_dev_image_to_image. That's not a knock - it's the whole selection criterion for this endpoint.

What's here

image is required: the initial image, and the one that sets the colour and content. strength defaults to 0.85, defined exactly as you'd expect - 1.0 completely remakes the image, 0.0 preserves the original. The tooltip adds "only used if the image_url is provided", which on this node is always.

Then the reason you're here, all as optional JSON fields:

  • loras - extra LoRAs merged into the generation.
  • control_loras - LoRAs that consume a control image.
  • controlnets and controlnet_unions - each with the tooltip's own warning: only one is supported at the moment.
  • ip_adapters - IP-Adapter entries.
  • easycontrols - EasyControl inputs.

Empty leaves each out, and empty is the correct value until you have something specific. The gotcha that surprises everyone the first time: these take URLs fal can download from. A LoRA in your local models/loras folder can't be reached. It has to be on Hugging Face, your own storage, an S3 bucket - somewhere with a public URL.

The knobs inherited from the general endpoint

Because this is the general pipeline, you also get the sampling and conditioning controls that Flux Dev img2img doesn't have:

  • guidance_scale 3.5 and real_cfg_scale 3.5 with use_real_cfg (false). Enabling real CFG applies classical SD-style CFG, and the tooltip warns it increases both generation time and price for the same output.
  • use_cfg_zero (false), which applies CFG-Zero-star initialisation - the arXiv id is in the tooltip.
  • negative_prompt with the NAG family: nag_scale (3), nag_tau (2.5), nag_alpha (0.25), nag_end (0.25). This is the honest way to use negatives on a guidance-distilled model - the tooltip says NAG is the default path for the negative prompt, and the community advice is not to push nag_scale past 3.
  • reference_image with reference_strength (0.65), reference_start (0.0) and reference_end (1.0), plus six optional fill_image_* sockets.
  • scheduler (euler), base_shift (0.5), max_shift (1.15), use_beta_schedule (false).
  • image_size (square_hd default, custom with width and height), num_inference_steps 28, seed -1, num_images (capped at 1 - the tooltip notes it's fixed for streaming), enable_safety_checker, output_format png.

Outputs

images, image_paths (files land in output/fal/fal-ai_flux-general_image-to-image/), timings, has_nsfw_concepts, prompt, seed, info - request id, estimate, saved files, fal's full response.

Install

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

Restart ComfyUI, or ComfyUI-Manager → Install via Git URL. The pack's only declared dependency is httpx and that's for the Codex nodes; the fal provider uses Python's standard library. No weights download and no GPU load.

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

in the .env next to run_nvidia_gpu.bat (portable build) or your ComfyUI folder - never a node widget, so the key can't be saved into a shared workflow.

Cost discipline

At $0.075/MP: 1024×1024 ≈ 7.5¢, 1536×1536 ≈ 18¢. Add use_real_cfg and it climbs for the same picture. max_cost_usd (default $20; 0 disables) blocks the run before anything is uploaded if the estimate is over. The node's price badge follows your image_size and num_images.

reuse_identical_run (default on) returns the previously paid result when the settings and image bytes match - genuinely useful while you're testing the wiring of the rest of the graph, and confusing if you forgot it's there. max_concurrent (default 1) keeps paid fal calls serialised across the whole run, which is the sane default when each one costs real money.

Troubleshooting

It says "is not valid JSON". One of the six JSON fields is malformed. Validate it somewhere else first; the node can't tell you what the field was expecting.

Nothing changed. strength at 0.85 with a vague prompt gets you a re-render. Say what should differ.

My LoRA did nothing. Check that the URL is publicly fetchable. Fal's downloader doesn't have your session or your API key for arbitrary hosts.

Categoryarkennemasis/fal/Image/Flux

Inputs (44)

NameTypeDefaultDescription
promptSTRINGThe prompt to generate an image from.
image_sizeCOMBOsquare_hdThe size of the generated image. '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_inference_stepsINT281–50The number of inference steps to perform.
seedINT-1-1–2147483647The same seed and the same prompt given to the same version of the model will output the same image every time. -1 leaves it to the model.
lorasSTRINGThe LoRAs to use for the image generation. You can use any number of LoRAs and they will be merged together to generate the final image. JSON. Empty leaves it out.
control_lorasSTRINGThe LoRAs to use for the image generation which use a control image. You can use any number of LoRAs and they will be merged together to generate the final image. JSON. Empty leaves it out.
controlnetsSTRINGThe controlnets to use for the image generation. Only one controlnet is supported at the moment. JSON. Empty leaves it out.
controlnet_unionsSTRINGThe controlnet unions to use for the image generation. Only one controlnet is supported at the moment. JSON. Empty leaves it out.
ip_adaptersSTRINGIP-Adapter to use for image generation. JSON. Empty leaves it out.
easycontrolsSTRINGEasyControl Inputs to use for image generation. JSON. Empty leaves it out.
guidance_scaleFLOAT3.500–20The CFG (Classifier Free Guidance) 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.
real_cfg_scaleFLOAT3.500–5The CFG (Classifier Free Guidance) 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.
use_real_cfgBOOLEANfalseUses classical CFG as in SD1.5, SDXL, etc. Increases generation times and price when set to be true. If using XLabs IP-Adapter v1, this will be turned on!.
use_cfg_zeroBOOLEANfalseUses CFG-zero init sampling as in https://arxiv.org/abs/2503.18886.
num_imagesINT11–10The number of images to generate. This is always set to 1 for streaming output.
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.
reference_strengthFLOAT0.65-3–3Strength of reference_only generation. Only used if a reference image is provided.
reference_startFLOAT0.000–1The percentage of the total timesteps when the reference guidance is to bestarted.
reference_endFLOAT1.000–1The percentage of the total timesteps when the reference guidance is to be ended.
base_shiftFLOAT0.500.01–5Base shift for the scheduled timesteps
max_shiftFLOAT1.150.01–5Max shift for the scheduled timesteps
output_formatCOMBOpngThe format of the generated image.
use_beta_scheduleBOOLEANfalseSpecifies whether beta sigmas ought to be used.
schedulerCOMBOeulerScheduler for the denoising process.
negative_promptSTRINGNegative prompt to steer the image generation away from unwanted features. By default, we will be using NAG for processing the negative prompt. Empty leaves it out.
nag_scaleFLOAT3.001.01–10The scale for NAG. Higher values will result in a image that is more distant to the negative prompt.
nag_tauFLOAT2.50The tau for NAG. Controls the normalization of the hidden state. Higher values will result in a less aggressive normalization, but may also lead to unexpected changes with respect to the original image. Not recommended to change this value.
nag_alphaFLOAT0.250.01–1The alpha value for NAG. This value is used as a final weighting factor for steering the normalized guidance (positive and negative prompts) in the direction of the positive prompt. Higher values will result in less steering on the normalized guidance where lower values will result in considering the positive prompt guidance more.
nag_endFLOAT0.250.01–1The proportion of steps to apply NAG. After the specified proportion of steps has been iterated, the remaining steps will use original attention processors in FLUX.
imageIMAGEURL of image to use for inpainting. or img2img
strengthFLOAT0.850.01–1The strength to use for inpainting/image-to-image. Only used if the image_url is provided. 1.0 is completely remakes the image while 0.0 preserves the original.
fill_image_fill_image_1optIMAGEURLs of images to be filled for redux prompting Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
fill_image_fill_image_2optIMAGEURLs of images to be filled for redux prompting Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
fill_image_fill_image_3optIMAGEURLs of images to be filled for redux prompting Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
fill_image_fill_image_4optIMAGEURLs of images to be filled for redux prompting Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
fill_image_fill_image_5optIMAGEURLs of images to be filled for redux prompting Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
fill_image_fill_image_6optIMAGEURLs of images to be filled for redux prompting Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
reference_imageoptIMAGEURL of Image for Reference-Only
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—
timingsSTRING—
has_nsfw_conceptsSTRING—
promptSTRING—
seedINT—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.