Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Flux 2 Klein 4B Base Edit LoRA · $0.016/MP
ComfyUI Node

arkennemasis fal · Flux 2 Klein 4B Base Edit LoRA · $0.016/MP

Attach a style LoRA to an edit, for double the price

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Flux 2 Klein 4B Base Edit LoRA · $0.016/MP
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • images
  • image_paths
  • timings
  • has_nsfw_concepts
  • seed
  • prompt
  • info
◄prompt►
◄negative_prompt►
◄guidance_scale5.00►
◄seed-1►
◄num_inference_steps28►
◄image_sizesquare_hd►
◄image_size_width1024►
◄image_size_height1024►
◄num_images1►
◄accelerationregular►
◄enable_safety_checkertrue►
◄output_formatpng►
◄loras►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

This is the base edit endpoint with a loras box bolted on: the un-distilled Klein 4B that edits a photo and, additionally, applies up to three LoRA weights from URLs. The price reflects it - $0.016 per megapixel against $0.009 for the same edit without a LoRA. Roughly double, for attaching weights.

Whether that's worth it depends entirely on what you're attaching. A realism or skin LoRA on an edit is a real change in output. A LoRA that was trained on the wrong size model is a very expensive way to get mush.

The LoRA box, and the trap in it

loras is a multi-line JSON box, not a file picker, and that's the first thing to grasp: the pack can't see your ComfyUI models/loras folder, because the weights have to be reachable by URL for fal to fetch them. In practice that means a direct download link from a model host. The field is fal's own list format with a maximum of three entries - check the model page for the exact shape fal expects - and leaving it empty is fine if you just want the plain edit.

The trap that costs people real money: 4B and 9B LoRAs are not interchangeable. People mixed them on CivitAI for weeks around launch, and the result isn't a subtle quality dip, it's a broken image. If the LoRA card says FLUX.2-klein-base-9B, it belongs on the 9B base nodes in this pack, not here. Size is one axis, base-vs-distilled is another; a LoRA trained on base 4B is at home on this node.

The rest of the inputs

prompt - command language, not scene description. remove blur and noise, fix exposure and color profile, micro-contrast. Name what must not change, or the model will invent a new subject for you.

negative_prompt and guidance_scale (5) - present because this is a base model with a real unconditional pass. The distilled nodes next door don't have these fields at all.

image_1 … image_6 - the first four are used, batches ride along each socket, order is instruction.

image_size - defaults to square_hd even though the tooltip says an unset size falls back to the input's dimensions. Set it deliberately if the frame matters. custom uses the width/height boxes.

num_inference_steps (28 - the community runs base at 50, and steps are free at per-megapixel billing), acceleration, seed, num_images, output_format, enable_safety_checker.

Outputs

images (the edited IMAGE batch), image_paths (STRING), timings, has_nsfw_concepts, seed (INT), prompt (STRING) and info (JSON with request id, estimate, saved files and fal's full response).

Install

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

Restart ComfyUI; it lands under arkennemasis → fal → Image → Flux. ComfyUI-Manager → Install via Git URL with the same repo also works. The only pinned dependency in the pack is httpx, for its ChatGPT/Codex nodes - the fal provider talks HTTP with the standard library.

Key in the .env next to run_nvidia_gpu.bat:

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

Where people get burned

Stacking without checking the size. Three 9B LoRAs on a 4B base endpoint is the classic expensive mistake. Klein does tolerate LoRA stacking better than Z-Image - the community ran three at full strength without burning - but only when they match the model.

A bad URL failing late. The weights have to download on fal's side, so a private or rate-limited link is a failed run you still waited for. Test with one LoRA before you build a stack.

Cost creeping up. You're now at $0.016/MP plus 1MP of input per edit, so a 1MP edit is about $0.032 and num_images multiplies it. Keep max_cost_usd low while testing - the check happens before upload, so a tripped cap is free. And if a rerun looks suspiciously instant and identical, that's reuse_identical_run serving the cached result rather than charging again.

Categoryarkennemasis/fal/Image/Flux

Inputs (23)

NameTypeDefaultDescription
promptSTRINGThe prompt to edit the image.
negative_promptSTRINGNegative prompt for classifier-free guidance. Describes what to avoid in the image. Empty leaves it out.
guidance_scaleFLOAT5.000–20Guidance scale for classifier-free guidance.
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 generated image. If not provided, uses the input image size. '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 image generation.
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. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
lorasSTRINGList of LoRA weights to apply (maximum 3). JSON. Empty leaves it out.
image_2optIMAGEThe URLs of the images for editing. A maximum of 4 images are allowed. 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. 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. 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. 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. 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—
timingsSTRING—
has_nsfw_conceptsSTRING—
seedINT—
promptSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.