
black-forest-labs/ flux-2-dev/ text-to-image
Text to ImageBlack Forest Labs FLUX.2 Dev is the open-weight FLUX.2 model, pairing strong realism and crisp text with full control over quality and speed. Tune guidance from 0 to 20 and steps from 4 to 50, add prompt expansion or acceleration, and generate up to 4 images per call.
More settings (7)
$0.012 / megapixel · billed by each image's actual pixels

A cozy independent bookshop window at dusk, warm light spilling onto a quiet street. Neat stacks of colorful hardcover books, a sleeping tabby cat on a velvet cushion, trailing plants, and a hand-lettered wooden sign in the window that reads "NEW ARRIVALS" in cream paint. Realistic photograph, soft reflections on the glass, crisp lettering, rich detail.
Pricing
Unit price $0.012 / megapixel
Billed by the actual pixels of each image; larger sizes and more images cost more. 1024×1024 is about 1 megapixel.
Typically about $0.012 per image at default settings.
Each request temporarily reserves $0.012; you are charged for actual usage, usually within a minute: any unused amount is released and any usage above it is charged to your balance, even if that takes it below zero; while your balance is below zero, new requests are paused until a top-up covers it.
Failed generations are not charged.
API
Submit generation requests with this model ID.
/v1/model-tasksblack-forest-labs/flux-2-dev/text-to-image{
"model": "black-forest-labs/flux-2-dev/text-to-image",
"input": {
"prompt": "A cozy independent bookshop window at dusk, warm light spilling onto a quiet street. Neat stacks of colorful hardcover books, a sleeping tabby cat on a velvet cushion, trailing plants, and a hand-lettered wooden sign in the window that reads \"NEW ARRIVALS\" in cream paint. Realistic photograph, soft reflections on the glass, crisp lettering, rich detail.",
"acceleration": "regular",
"enable_prompt_expansion": false,
"guidance_scale": 2.5,
"image_size": "landscape_4_3",
"num_images": 1,
"num_inference_steps": 28,
"output_format": "png"
}
}Input schema
| Parameter | Type | Requirement | Default |
|---|---|---|---|
| prompt | string | Required | — |
| acceleration | string | Optional | regular |
| enable_prompt_expansion | boolean | Optional | false |
| guidance_scale | number | Optional | 2.5 |
| image_size | object | string | Optional | landscape_4_3 |
| num_images | integer | Optional | 1 |
| num_inference_steps | integer | Optional | 28 |
| output_format | string | Optional | png |
| seed | integer | Optional | — |
Response
The API returns a result or a pollable asynchronous task. See the examples and Schema below for the response mode and result fields.
Code examples
Async submission returns a task ID. Poll until status is completed, then retrieve the generated content from the result. Get your API key in the console.
# Use a new directory for each new generation. Rerunning here continues this task.
set -eu
test -s model-task-id.txt || python3 -c "import uuid; print(uuid.uuid4())" > model-task-id.txt
REQUEST_ID=$(cat model-task-id.txt)
# Idempotent: resending the same bytes with the same ID never charges twice.
curl --fail-with-body --retry 3 --retry-connrefused --request POST 'https://api.musespan.com/v1/model-tasks' \
--header "Authorization: Bearer $MUSESPAN_API_KEY" \
--header "X-Request-Id: $REQUEST_ID" \
--header "Content-Type: application/json" \
--data '{"model":"black-forest-labs/flux-2-dev/text-to-image","input":{"prompt":"A cozy independent bookshop window at dusk, warm light spilling onto a quiet street. Neat stacks of colorful hardcover books, a sleeping tabby cat on a velvet cushion, trailing plants, and a hand-lettered wooden sign in the window that reads \"NEW ARRIVALS\" in cream paint. Realistic photograph, soft reflections on the glass, crisp lettering, rich detail.","acceleration":"regular","enable_prompt_expansion":false,"guidance_scale":2.5,"image_size":"landscape_4_3","num_images":1,"num_inference_steps":28,"output_format":"png"}}'
# Poll every 5 seconds for up to 25 minutes until status is completed or failed.
# Still queued (with queue_position) 5 minutes after submission: failed with queue_timeout, not charged.
# No result 15 minutes after acceptance (or no confirmation 15 minutes after submission): failed with generation_timeout, not charged.
# Any failure is final: generate again in a new directory (a new X-Request-Id).
# A 404 means the POST did not arrive: rerun this script to resend it with the same ID.
curl --fail-with-body 'https://api.musespan.com/v1/model-tasks/'"$REQUEST_ID"'' --header "Authorization: Bearer $MUSESPAN_API_KEY"