Nodes/ComfyUI-Floyo-Flux2-API-node/FLUX.2 [pro] Text-to-Image
ComfyUI Node

FLUX.2 [pro] Text-to-Image

It's just a paid API call

By ritik-devsecops·Created 9 months ago·Updated 9 months ago· 1
FLUX.2 [pro] Text-to-Image
    • image
    prompt
    width1024
    height1024
    seed-1
    safety_tolerance2
    output_formatjpeg

    FLUX.2 [pro] is the tier of Black Forest Labs' November 2025 release that only runs on their servers. The open-weights Dev version needs 18–24GB VRAM even quantized and still takes minutes per image; pro just needs a key and a credit card. This node is a thin client for that API: you type a prompt, it phones home to api.bfl.ai/v1/flux-2-pro, and hands the finished image back as a normal IMAGE tensor. No model download, no VRAM, no sampler settings. That's the whole deal.

    What it actually does

    Under the hood there's a small HTTP client in the pack (Flux2API). Your graph builds a payload - prompt, width, height, seed, safety tolerance, output format - POSTs it to BFL with your key in an x-key header, then polls every second until the job is Ready or hits the 600-second timeout. When it's done it downloads the signed result URL and converts it to the IMAGE tensor ComfyUI expects. The example workflow in the repo is exactly one node feeding a Save Image.

    One correction while we're here: the README half-promises URL-based inputs and outputs, but the shipped code doesn't work that way. The edit nodes take tensors, and every node returns a tensor ready for Save Image. Trust the code, not the stale README.

    The inputs that matter

    • prompt - multiline text, the thing you're generating.
    • width / height - 64–2048 and they must be multiples of 16 (default 1024), with a 4MP total cap.
    • seed - -1 is random; set a positive integer to reproduce a result.
    • safety_tolerance - 0 (strict) to 6 (permissive), default 2. BFL's moderation dial.
    • output_format - jpeg or png, default jpeg.

    Notice what's missing: steps and guidance. That's not an oversight. Pro is BFL's curated quality tier - they tune the sampling server-side, and you pay for the privilege of not thinking about it. If you want the dials, that's what the flex nodes in this same pack exist for.

    Install

    The pack is on ComfyUI Manager under "ComfyUI-Floyo-Flux2-API-node", or by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/ritik-devsecops/ComfyUI-Floyo-Flux2-API-node
    cd ComfyUI-Floyo-Flux2-API-node
    pip install -r requirements.txt
    

    Dependencies are almost insultingly light - requests, Pillow, and numpy. No model files anywhere. The one thing you can't skip is an API key from api.bfl.ai. Put it in config.ini at the repo root or export it:

    export BFL_API_KEY=your_real_key_here
    

    Then restart ComfyUI. If the key is missing or still the <your_bfl_api_key_here> placeholder, you'll see a WARNING in your console.

    Where people get burned

    The big one: on any failure the node returns a black image, not an error. Bad key, moderation block, timeout, network hiccup - the code catches the exception, logs it to your ComfyUI terminal, and hands back a blank 512×512 tensor. A black result means the call failed; read the console before you rerun and pay again.

    That "pay again" is the other real gotcha. Each generation bills your BFL account, and pro requests aren't instant. Iterating a 50-prompt batch is a metered habit, not a free one. Also keep width/height multiples of 16 - an invalid dimension returns an "Error:" string that isn't an image and will trip up anything downstream.

    Should you use it?

    If you want genuine FLUX.2 quality and you don't have the hardware or the patience for the local Dev route, this is the cleanest path into the graph. If you'd rather run FLUX.2 locally, Klein 4B/9B is the community's answer - cheap, fast, editing included. Pro is the "I just want the result" option, and it's honest about being that.

    CategoryFloyo/Flux2 Pro

    Inputs (6)

    NameTypeDefaultDescription
    promptSTRINGDescribe what to generate.
    widthINT102464–2048Output width (multiple of 16, 64-2048).
    heightINT102464–2048Output height (multiple of 16, 64-2048).
    seedoptINT-1-1–4294967295-1 = random. Any other integer is reproducible.
    safety_toleranceoptINT20–6Moderation level 0 (strict) to 6 (permissive).
    output_formatoptCOMBOjpegOutput format.

    Outputs (1)

    NameTypeDescription
    imageIMAGE