arkennemasis fal · Flux Kontext LoRA · $0.035/image
The node for the LoRAs nobody ported to the newer editors
- image
- images
- image_paths
- timings
- has_nsfw_concepts
- seed
- prompt
- info
Kontext got superseded as an editing model, and its LoRA library didn't go anywhere. That's the entire reason this node exists. The Depth reference LoRA, the Zoom Out LoRA, and a pile of Flux style LoRAs - watercolour, ink, brand looks - were trained against Kontext and were never retrained for Qwen-Image-Edit or Klein. If you want them, you need a Kontext endpoint, and this is the one with a LoRA field.
It's the same base and roughly the same price as the plain Kontext node: $0.035 per megapixel, which their tag rounds to about three and a half cents a megapixel. You're paying a cent more than ...kontext_dev for the loras input.
The one field that changes everything
loras takes JSON - the LoRAs to merge into the generation, and the tooltip notes you can list several and they'll be merged together. Empty leaves it out, and empty is perfectly valid if you're just here for a cheap Kontext.
The gotcha, and it's the one that stops people dead the first time: fal has to be able to download those files. A LoRA sitting in your ComfyUI models/loras folder is a local path; the endpoint can't see it. You need a URL - a Hugging Face repo, your own bucket, any host that serves the file. Check whether the LoRA you want has a published URL on its model page before you build a workflow around it, because the ones that only exist as a CivitAI download are, practically speaking, unavailable to this endpoint.
The rest of the node is Kontext as usual: image required (up to 14142px per side), prompt - the edit instruction - resolution_mode defaulting to match_input so the output keeps your input's shape (auto picks from a preset list matched to the input's aspect ratio), acceleration none, num_inference_steps 30, guidance_scale 2.5 (Flux guidance, not CFG), seed -1, num_images, enable_safety_checker on, output_format png here.
When a Kontext LoRA is the right call
A style you can't get any other way. Flux style LoRAs trained on Kontext are still excellent, and a two-and-a-half-cent edit is cheaper than retraining anything.
Zoom Out and depth-reference workflows. These are the two the community keeps naming when someone asks why Kontext is still installed. Zoom Out in particular does something the newer editors don't: push the composition outwards from a subject without re-inventing the subject.
Character consistency across a series. Kontext's architecture puts reference images in-context rather than through an adapter, so identity holds across successive edits with minimal drift. That predates Klein, and it still works.
Where a Kontext LoRA isn't the right call: if you're doing plain instruction editing, the newer models do it better and the LoRA-free Kontext node in this pack is cheaper. Bringing a LoRA in just slows the edit down.
Outputs
images plus image_paths (written to output/fal/fal-ai_flux-kontext-lora/), and then the diagnostics: timings, has_nsfw_concepts, seed, prompt, info - request id, cost estimate, saved files and fal's complete 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 it's for the pack's Codex nodes - the fal provider runs on Python's standard library and downloads no weights of its own.
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env next to run_nvidia_gpu.bat (portable build) or your ComfyUI folder. The key is never a widget on these nodes, which is intentional: a key typed into a node gets saved into any workflow you export.
Money and the usual traps
$0.035/MP, so 1024×1024 ≈ 3.5¢ and a 2048-wide render ≈ 14¢; the price badge on the node follows num_images. max_cost_usd (default $20, 0 = no cap) blocks the run before anything is uploaded if the estimate is over it.
reuse_identical_run defaults on: the same image bytes, same prompt and same LoRA JSON return the file you already paid for rather than charging again. That's the behaviour you want while you're nudging the rest of the graph, and a surprise if you queued a re-run hoping for a fresh sample. Turn it off for that.
And the licence reminder, because it applies to anything built on this base: Kontext [dev] is covered by BFL's non-commercial licence, alongside Fill, Canny, Depth and Redux. Personal work, fine. Client delivery, read the current terms first.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | The URL of the image to edit. Max width: 14142px, Max height: 14142px, Timeout: 20s | |
| prompt | STRING | The prompt to edit the image. | |
| num_inference_steps | INT | 3010–50 | The number of inference steps to perform. |
| seed | INT | -1-1–2147483647 | The 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. |
| guidance_scale | FLOAT | 2.500–20 | The 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. |
| num_images | INT | 11–4 | The number of images to generate. |
| enable_safety_checker | BOOLEAN | true | If 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_format | COMBO | png | The format of the generated image. |
| loras | STRING | The 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. | |
| acceleration | COMBO | none | The speed of the generation. The higher the speed, the faster the generation. |
| resolution_mode | COMBO | match_input | Determines how the output resolution is set for image editing. - `auto`: The model selects an optimal resolution from a predefined set that best matches the input image's aspect ratio. This is the recommended setting for most use cases as it's what the model was trained on. - `match_input`: The model will attempt to use the same resolution as the input image. The resolution will be adjusted to be compatible with the |
| max_cost_usdopt | FLOAT | 20.00–100000 | Safety 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_runopt | BOOLEAN | true | If 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_jsonopt | STRING | Advanced: 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_concurrentopt | INT | 11–32 | How 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)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| timings | STRING | — |
| has_nsfw_concepts | STRING | — |
| seed | INT | — |
| prompt | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |