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

arkennemasis fal · Flux 2 · $0.012/MP

The fal Flux 2 node in ComfyUI

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Flux 2 · $0.012/MP
    • images
    • image_paths
    • seed
    • prompt
    • timings
    • has_nsfw_concepts
    • info
    ◄prompt►
    ◄guidance_scale2.50►
    ◄seed-1►
    ◄num_inference_steps28►
    ◄image_sizelandscape_4_3►
    ◄image_size_width1024►
    ◄image_size_height1024►
    ◄num_images1►
    ◄accelerationregular►
    ◄enable_prompt_expansionfalse►
    ◄enable_safety_checkertrue►
    ◄output_formatpng►
    ◄max_cost_usd20.0►
    ◄reuse_identical_runtrue►
    ◄extra_json►
    ◄max_concurrent1►

    Flux 2 Dev is the model nobody could run. A 32B rectified-flow transformer with a Mistral-3 24B vision-language model as its text encoder adds up to roughly 53GB before you've loaded anything else, and the community's verdict at launch wasn't "bad model" - it was "obviously the best open image model in existence and too resource hungry for most people to use." That's the entire case for this node. Same weights, somebody else's GPU, twelve dollars a gigapixel of output.

    What it is

    One node from the arkennemasis pack, wired straight to fal's fal-ai/flux-2 endpoint. Text in, images out. It does text-to-image only - if you want to hand it a photo and describe a change, that's this node's sibling, Flux 2 Edit.

    It's also the quality ceiling of the family: stronger at composing from multiple references, better at character sheets, and less prone to the anatomy wobble that Klein picked up in exchange for being fast. You're renting the big model, not the small one.

    How the run goes

    Nothing reaches fal until it's free to fail: the node checks FAL_KEY, validates inputs, prices the run against your cap, and only then uploads and submits the one billed call. It polls off the UI thread so Cancel works, retries 429s and 5xx with backoff, and writes results to output/fal/fal-ai_flux-2/. Every request also lands in output/fal/_requests.jsonl - which is how the companion Recover Result node collects a job for free after a restart.

    The inputs that matter

    prompt - write it as sentences, not tag soup. Flux 2's encoder is an LLM reading a chat turn, so beach, woman, camera, sitting, black dress lands worse than "A realistic photo of a woman sitting on a beach. She is looking at the camera. The ocean is behind her." Prompt weighting like ((face:1.4)) does nothing here.

    num_inference_steps - 28 by default. Billing is per megapixel of output, so steps cost you wall time, not money. Bump them if the render is coming out thin.

    guidance_scale - 2.5, and don't reach for your SDXL instincts here. This is not a CFG 7 model.

    image_size - presets plus custom, which then uses image_size_width / image_size_height. The widget bounds go very high; fal's own doc for this endpoint says the sides should sit between 512 and 2048, so live in that range. And mind the money: 1024×1024 is 1MP, so $0.012, and num_images multiplies it.

    acceleration (none / regular / high) - the speed dial. regular is sane; high when you're iterating and will re-run the keeper.

    enable_prompt_expansion - off by default. It hands your prompt to an LLM to be rewritten longer. Nice for a lazy one-liner, actively annoying when you wrote exactly what you wanted.

    enable_safety_checker - on. Disabling it requires authorization on your fal account; unauthorized requests are checked anyway, and flagged images come back as black squares rather than an error. Getting a black image is the filter, not a bug.

    Outputs

    images is the IMAGE output (a batch if you asked for several) - wire it into SaveImage, an upscaler, or anything else. image_paths is the saved file path as a string. seed comes back as an INT so you can lock a good one, prompt echoes what the model actually saw, timings is fal's timing blob, has_nsfw_concepts reports what the checker thought, and info is JSON with 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 and the node appears under arkennemasis → fal → Image → Flux. ComfyUI-Manager can install the pack by Git URL instead. Its requirements.txt is just httpx, which is for the pack's ChatGPT/Codex nodes - the fal provider uses the standard library, so nothing new lands in your Python environment.

    Then, in the .env beside run_nvidia_gpu.bat (portable) or in your ComfyUI folder:

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

    Where people get burned

    "No FAL_KEY found" means the .env isn't where the node looks - the ComfyUI folder or its parent. No, there's no key field on the node; that's on purpose, so keys can't end up embedded in shared workflow JSON.

    Re-running the same thing and getting the same image is reuse_identical_run doing its job: identical inputs and the files still sitting in output/fal means you get them back instead of a second bill. Turn it off (or change the seed) for a fresh take.

    A run that stops before uploading is max_cost_usd, default $20. Lower it to a couple of dollars while you're experimenting - the check happens before the paid call, so an over-budget run costs nothing.

    Fanning out 30 variants at once is how you meet rate limits. Leave max_concurrent at 1, or raise it deliberately - and note that once any fal node fails, the ones still waiting don't start.

    Categoryarkennemasis/fal/Image/Flux

    Inputs (16)

    NameTypeDefaultDescription
    promptSTRINGThe prompt to generate an image from.
    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.
    num_inference_stepsINT284–50The number of inference steps to perform.
    image_sizeCOMBOlandscape_4_3The 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.
    accelerationCOMBOregularThe acceleration level to use for the image generation.
    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.
    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.