Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Flux 2 Klein 9B · $0.006/MP
ComfyUI Node

arkennemasis fal · Flux 2 Klein 9B · $0.006/MP

The daily driver, at six tenths of a cent per megapixel

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

    Six tenths of a cent per megapixel. A 1024×1024 image out of Klein 9B, the model that became the default local editor for the first half of 2026, costs about $0.006 through this node. If you're going to use exactly one Klein node in this pack, this is the one - better detail, better skin, better prompt comprehension than the 4B, four-step sampling, in and out fast enough to feel interactive.

    You are, however, looking at the non-commercial one. Klein's four checkpoints split two ways: 4B is Apache 2.0 and 9B is BFL's non-commercial licence. On fal that's mostly academic - you're paying per call under fal's terms - but it matters if you ever plan to move the workflow in-house or ship weights, which is why the 4B nodes exist next to this one.

    The inputs

    prompt - Klein's text encoder is a Qwen3 LLM reading your prompt like a chat message, not a CLIP tag list. Sentences win. "A realistic photo of a woman sitting on a beach. She is looking at the camera. The ocean is behind her" beats a comma-separated pile, and prompt weighting is disabled for this encoder - ((face:1.4)) is a no-op, as are masterpiece, best quality and repeated words.

    num_inference_steps - 4, and this is the field to touch. Distilled Klein at 4 steps is fast and occasionally produces extra fingers or a third arm; the fix that circulated at launch was 8 steps, and it's a good fix. Fal bills per megapixel, not per step, so 8 steps costs the same six tenths of a cent and a couple more seconds. Do this before you decide the model has bad anatomy.

    image_size - presets with landscape_4_3 as the default, or custom with image_size_width / image_size_height. Native range is around 1-2MP; the community's clean spots were 1056×1584 and 1792×1392.

    num_images - the multiplier, and at this price the right way to work: four 1MP takes is under two and a half cents.

    output_format - png, jpeg or webp. seed - -1 by default. Klein gives real variety across seeds, so batching and picking works.

    enable_safety_checker - on. Flagged images come back as black squares rather than errors, and disabling the checker requires account authorisation on fal; unauthorised requests are checked anyway.

    No guidance_scale and no negative_prompt on this node, and that's the model, not the wrapper: guidance is distilled into the weights, so there's no unconditional pass and a negative prompt would do nothing. Klein is also not uncensored out of the box - locally, the ecosystem's answer is community LoRAs.

    Outputs

    images is the IMAGE output (a batch if num_images > 1) - wire it to SaveImage, an upscaler, or a contact sheet. image_paths is the saved location as a STRING, timings is fal's timing JSON, has_nsfw_concepts reports the checker, seed is an INT you can lock, prompt echoes what the model received, and info is JSON carrying the request id, cost estimate, saved files and fal's full answer.

    Install

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

    Restart ComfyUI and it appears under arkennemasis → fal → Image → Flux. ComfyUI-Manager → Install via Git URL with the same repo is the alternative. The pack declares one dependency, httpx, for its ChatGPT/Codex nodes; fal itself runs on Python's standard library, so your environment stays as it is.

    Key, in the .env next to run_nvidia_gpu.bat:

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

    Where people get burned

    Anatomy, and the wrong fix. It's the model's known weak spot, and it isn't prompt-fixable - the shape is set in the first step or two. Steps, batches and a hand inpaint are what work.

    A signature in the corner. Klein likes to add a mark to the bottom-right of stylised images, and with no negative prompt there's nothing to forbid it. Crop or inpaint.

    Treating fal's 4 steps as the model's best. It's the model's fast setting. The default ComfyUI template runs 4, but nobody claims it's the ceiling.

    Paying twice. reuse_identical_run is on by default: same settings and same files still in output/fal means you're served the previous result instead of charged. Flip it off for a fresh take, and remember max_cost_usd blocks an over-budget run before anything is uploaded - so a tripped cap is free.

    Categoryarkennemasis/fal/Image/Flux

    Inputs (13)

    NameTypeDefaultDescription
    promptSTRINGThe prompt to generate an image from.
    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_stepsINT44–8The number of inference steps to perform.
    image_sizeCOMBOlandscape_4_3The size of the image to generate. '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.
    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—
    timingsSTRING—
    has_nsfw_conceptsSTRING—
    seedINT—
    promptSTRING—
    infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.