FLUX.2 [flex] Edit delivers precise image-to-image editing from Black Forest Labs—apply natural-language instructions and exact hex color control for consistent, studio-quality results. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Idle

$0.12per run·~83 / $10

Transform this image into a divine surreal Renaissance-inspired scene while keeping the original statue and museum structure unchanged. Enhance the lighting with warm celestial rays, soft volumetric beams, and floating dust particles for a sacred atmosphere. Introduce subtle ethereal glow around the marble surface, enriching texture without altering the sculpture’s form. Deepen shadows and add gentle atmospheric haze to create a timeless, mystical mood. Overall style: divine surrealism, sacred Renaissance ambience, warm dramatic light, ethereal museum atmosphere.

Transform this clean sci-fi corridor into a post-apocalyptic derelict environment while keeping the original architecture and perspective. Add damaged metal surfaces, subtle rust, broken light panels, scattered sparks, and flickering emergency red lights. Introduce atmospheric smoke, dust haze, and deeper shadows to enhance tension and drama. Shift the color palette toward darker tones with hints of red and amber, creating a dangerous, abandoned sci-fi atmosphere. Overall style: post-apocalyptic sci-fi corridor, damaged high-tech interior, cinematic moody lighting, immersive dystopian ambience.

Transform this strawberry photo into a high-end Godiva-style black and gold luxury dessert, no real brand, advertisement, while keeping the original strawberries and composition unchanged. Darken the background into a deep matte black with rich cinematic shadows, directing all highlights toward the fruit. Add refined golden rim lighting and subtle metallic accents for a premium chocolate-brand atmosphere. Enhance the strawberries’ gloss and richness, giving them a decadent, jewel-like shine without exaggeration. Overall style: luxury dessert aesthetic, elegant high-contrast mood, premium gourmet presentation.

Transform the scene into a Makoto Shinkai–style cinematic realism: ultra-detailed sky with dramatic clouds, glowing sunlight beams breaking through, vibrant and transparent colors, enhanced atmospheric depth, lens-flare highlights, high-saturation meadow with shimmering flowers, gentle breeze motion in the girl’s dress and hair, rich contrast and emotional light, filmic composition. blurry, distorted anatomy, extra limbs, artificial texture, overexposed light, monochrome, muddy colors

“Transform this image into a Scandinavian design exhibition poster. Keep the product as the hero object, but redesign the entire composition with bold Nordic minimalism: large clean negative space, muted beige and warm natural tones, modern geometric layout, soft ambient daylight, subtle shadows. Add refined Scandinavian-style typography at the top or sides (non-existing text), using thin sans-serif fonts and grid-based alignment. The overall feeling should be calm, elegant, curated—like a Copenhagen or Stockholm design fair poster. No clutter, no glossy commercial style; focus on shape, material, and minimalist beauty.
FLUX.2 [flex] Edit is a configurable image editing model built on FLUX.2 [flex], aimed at teams that need fine control over how edits are applied. It can work with one or multiple reference images and lets you tune quality–speed trade-offs, making it a good fit for style-heavy, budget-conscious production workflows.
Multi-image product and lifestyle compositions
Brand asset refinement with style or reference images
Typography and layout touch-ups in existing designs
E-commerce and marketing visuals that need frequent updates
• Multi-image aware composition
Combine several reference images in a single edit when building product collages or style transfers. You can point to specific references by index (for example, “use the background from image 2 and the typography from image 4”) or simply describe them in the prompt.
• Adjustable quality and speed
Control inference steps based on how complex the edit is: quick colour swaps or minor clean-up can run with fewer steps, while dense multi-image edits can use higher settings for extra detail.
• Guidance control for edits
Decide how strictly the model should follow your instructions versus preserving the original look. Dial guidance lower for looser, creative reinterpretations; raise it when you want near-literal edits.
• Strong text and layout handling
Well suited for fixing signage, labels, and UI text inside images, keeping typography sharp while updating wording, colours, or layout.
• Natural language plus hex colour control
Describe edits in plain language (“make the jacket match the blue from our brand palette”) and use hex codes when you need exact corporate colours for products, UI elements, or backgrounds.
• LoRA- and pipeline-friendly
Works smoothly with LoRA adapters for brand or domain-specific styles, and its configurable nature makes it easy to slot into larger editing pipelines that need both flexibility and cost control.
• Output ready for production
Exports JPEG so edited assets can go straight into design tools, websites, or print-oriented workflows without extra conversion.
Simple per-image billing:
Mix and match FLUX.2 models for a full generate-and-edit workflow:
Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/flux-2-flex/edit with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Flux 2 Flex Edit below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"images": [
"https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
],
"seed": -1
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/flux-2-flex/edit" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-d "$REQUEST_BODY")
TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL=$(printf '%s' "$TASK" | jq -r '.urls.get // empty')
if [ -z "$RESULT_URL" ]; then
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
fi
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
-H "Authorization: Bearer $WAVESPEED_API_KEY")
RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
case "$STATUS" in
completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
failed|cancelled|timeout) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
created|processing) sleep 2 ;;
*) printf 'Unexpected status: %s
' "$STATUS" >&2; exit 1 ;;
esac
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/flux-2-flex/edit";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');
async function requestJson(url, options = {}) {
const response = await fetch(url, options);
if (!response.ok) throw new Error(await response.text());
return response.json();
}
// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"images": [
"https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
],
"seed": -1
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
`https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;
// 2. Poll until the prediction finishes.
while (true) {
const resultBody = await requestJson(resultUrl, {
headers: { "Authorization": `Bearer ${apiKey}` },
});
const result = resultBody.data ?? resultBody;
if (result.status === "completed") {
console.log(result.outputs);
break;
}
if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
await new Promise(resolve => setTimeout(resolve, 2000));
}import json
import os
import time
from urllib.request import Request, urlopen
api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"images": [
"https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
],
"seed": -1
}
def request_json(url, data=None):
request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
with urlopen(request) as response:
return json.load(response)
# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/wavespeed-ai/flux-2-flex/edit", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"
# 2. Poll until the prediction finishes.
while True:
result_body = request_json(result_url)
result = result_body.get("data", result_body)
status = result.get("status")
if status == "completed":
print(result.get("outputs", []))
break
if status in {"failed", "cancelled", "timeout"}:
raise RuntimeError(result)
if status not in {"created", "processing"}:
raise RuntimeError(f"Unexpected status: {status}")
time.sleep(2)Flux 2 Flex Edit is a WaveSpeedAI model for image editing, exposed as a REST API on WaveSpeedAI. FLUX.2 [flex] Edit delivers precise image-to-image editing from Black Forest Labs—apply natural-language instructions and exact hex color control for consistent, studio-quality results. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.
POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/wavespeed-ai/flux-2-flex-edit.
Flux 2 Flex Edit starts at $0.12 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.
Key inputs: `prompt`, `images`, `seed`, `enable_base64_output`, `enable_sync_mode`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/wavespeed-ai/flux-2-flex-edit.
Median end-to-end generation time on WaveSpeedAI is around 25 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.
Commercial usage rights depend on the model's license, set by its provider (WaveSpeedAI). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.