arkennemasis fal · Flux LoRA Image to Image · $0.035/MP
Style transfer without training anything
- image
- images
- image_paths
- seed
- has_nsfw_concepts
- timings
- prompt
- info
Picture in, restyled picture out, with a pile of hosted LoRAs available to do the restyling. $0.035 per megapixel. Think of it as the cheap version of a custom fine-tune: instead of training on your reference set, you borrow someone else's LoRA and let the strength dial decide how much of it you get.
The two controls that matter
strength defaults to 0.85 with a range of 0.01–1, and the tooltip is refreshingly honest about the ends: 1.0 completely remakes the image, 0.0 preserves the original. That's your "how much of my photo survives" dial. Most useful work happens before either extreme - around 0.5–0.75 you keep the composition and lose the texture, which is what style transfer actually means in practice.
loras is a multiline JSON string of LoRA entries - each with the model file and a scale - merged together to make the final image. Empty leaves them out. It loads on fal's side, so it takes URLs; your local models/loras folder is not involved. This catches almost everyone the first time.
Everything else is standard: prompt for the target look, image_size (default square_hd) with image_size_width / image_size_height for custom, num_inference_steps 28 (1–50), guidance_scale 3.5 (0–35), seed, num_images 1–4, enable_safety_checker, output_format, acceleration. And the four pack-wide widgets: max_cost_usd (default 20, 0 = off), reuse_identical_run (on), extra_json, max_concurrent.
Outputs
images for your preview/save chain, image_paths for the files under output/fal/fal-ai_flux-lora_image-to-image/, then seed, has_nsfw_concepts, timings, prompt and info.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Manager users can search comfyui-arkennemasis and let it install the lot, or use Install via Git URL with the repo address. Restart ComfyUI when it's done. The fal nodes themselves need no pip packages - requirements.txt declares httpx for the Codex/ChatGPT side of the pack.
Key, one line in the .env in the folder that holds run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Then look under arkennemasis/fal/Image/Flux. There's no key field on the node, deliberately.
Where it trips people up
A batch comes in, one picture goes out. These image sockets want a single picture. Split batches upstream.
The square crop, again. image_size defaults to square_hd and the endpoint is told a size, so it isn't inheriting your input's aspect ratio. Set custom dimensions matching the source if you want the framing you had.
Runaway LoRA. A strong LoRA at 0.85 will erase the photograph's own character, including faces. Drop the scale or the strength one at a time so you know which caused it - and remember that two LoRAs at 0.8 each don't behave like one at 1.6.
The same result twice. reuse_identical_run served you the cached files because nothing about the request changed - including the LoRA scale, which is part of the identity check. Nudge anything real, or turn the option off for a fresh take.
Cost you didn't budget. $0.035 × megapixels × num_images. Iterating on a strength value is real money; change one variable at a time and keep num_images at 1 while you search.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to generate an image from. | |
| image_size | COMBO | square_hd | The size of the generated image. 'custom' uses the width and height below. |
| image_size_width | INT | 102416–14142 | Width in pixels when image_size is 'custom'. |
| image_size_height | INT | 102416–14142 | Height in pixels when image_size is 'custom'. |
| num_inference_steps | INT | 281–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. |
| 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. | |
| guidance_scale | FLOAT | 3.500–35 | 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. This is always set to 1 for streaming output. |
| enable_safety_checker | BOOLEAN | true | If set to true, the safety checker will be enabled. |
| output_format | COMBO | jpeg | The format of the generated image. |
| acceleration | COMBO | none | Acceleration level for image generation. 'regular' balances speed and quality. |
| image | IMAGE | URL of image to use for inpainting. or img2img | |
| strength | FLOAT | 0.850.01–1 | The 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. |
| 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 | — |
| seed | INT | — |
| has_nsfw_concepts | STRING | — |
| timings | STRING | — |
| prompt | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |