FLUX.2 [dev] Edit enables 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.024per run·~41 / $1

Transform this neon sign image into a cinematic title card while keeping the original text and composition. Enhance the lighting with dramatic film-noir contrast, soft neon bloom, and deeper shadows in the surrounding environment. Increase the wet ground reflection, making it glossier and more cinematic with stronger color diffusion. Add subtle atmospheric elements such as light fog, faint rain particles, and a richer nighttime palette with deep blues and magentas. Overall style: cinematic movie opening title, moody film lighting, atmospheric neon glow, high-end visual storytelling.

Transform this perfume photo into a Dior-style luxury white-background campaign image while keeping the original bottle shape and composition. Replace the current background with a pure, soft white studio backdrop. Enhance the lighting with bright, diffused beauty light, creating clean highlights and elegant glass reflections. Refine the bottle’s glass clarity and edges with Dior-like high-end minimalism, adding subtle gold accents and premium gloss. Reduce distractions and create a pristine, airy atmosphere with gentle shadows and a polished luxury aesthetic. Overall style: Dior perfume campaign, pure white luxury minimalism, luminous high-fashion product photography.

Transform this mechanical engine illustration into a futuristic cyberpunk technical blueprint while keeping all original mechanical structures intact. Add neon blue and magenta line accents, holographic overlays, glowing circuit patterns, and subtle HUD interface elements around the engine parts. Enhance the lighting with cool, high-tech highlights and soft ambient glow. Refine edges to look more digitally drafted while preserving real mechanical accuracy. Overall style: cyberpunk engineering schematic, holographic blueprint, sci-fi UI design.

Transform this futuristic cityscape into a Dune-style desert imperial metropolis while preserving the overall skyline and building silhouettes. Replace the environment with a vast golden desert landscape, adding sand dunes, wind erosion, and drifting dust. Shift the lighting to harsh, cinematic desert sunlight with long shadows and a warm, sand-colored palette. Add subtle hints of ancient mega-architecture and monolithic structures, blending futuristic forms with a monumental desert-empire aesthetic. Introduce atmospheric spice haze, heat distortion, and distant sandstorms to enhance scale and mystique. Overall style: Dune desert megacity, epic imperial architecture, harsh sunlit sci-fi minimalism, mythic and atmospheric.

Transform this interior photo into a realistic MUJI-style natural minimalism while keeping the original layout and furniture. Use real-photography lighting with soft natural daylight, avoiding cinematic or stylized filters. Shift the color palette to low-saturation cream beige and warm natural wood tones, maintaining a clean and airy atmosphere. Increase the sense of lightness and openness through balanced exposure, subtle highlights, and softened shadows. Refine textures to look natural and tactile—cotton fabrics, raw wood, and simple ceramics—without exaggeration. Overall style: MUJI real-life minimalism, calm neutral tones, uncluttered space, natural warmth and everyday authenticity.
FLUX.2 [dev] Edit is the lean editing companion to FLUX.2 [dev] Text-to-Image: a lightweight, open-source model that updates existing images quickly while keeping their core look intact. It is built for day-to-day production tasks where you need reliable edits at scale without burning GPU budget.
Instead of regenerating images from scratch, FLUX.2 [dev] Edit focuses on local changes. You feed it an image plus an edit prompt (and, when supported, a mask or strength setting); it modifies only the requested areas, keeping layout, characters, and overall style stable so assets remain recognisable across versions.
Change lighting, colour, clothing, props, or background details with short text instructions, replacing manual retouching and pixel-level editing.
Refresh campaigns, seasonal variants, or A/B test creatives while preserving character identity, composition, and brand language across all outputs.
Built on the same open FLUX.2 stack, making it straightforward to plug into internal tools, debug behaviour, or extend with custom logic.
The compact dev architecture keeps inference costs low, which is ideal for batch processing, automation, and always-on backend services.
Accepts standard image formats and returns JPEG or PNG, so edited results fit directly into web, design, and post-production workflows.
Seed control plus fixed prompts make it easy to recreate previous edits or generate controlled variations for QA, experimentation, and asset refreshes.
Simple per-image billing:
Combine FLUX.2 [dev] Edit with the rest of the FLUX.2 lineup for a full generate-and-refine workflow:
FLUX.2 [dev] Text-to-Image – lightweight base model optimised for speed and LoRA training.
FLUX.2 Flex Text-to-Image – more flexible, style-rich generation for creative exploration.
FLUX.2 Flex Edit – powerful image editing with a broader stylistic range.
FLUX.2 Pro Text-to-Image – higher-capacity model for maximum-quality hero shots and demanding production use.
FLUX.2 Pro Edit – premium editing for detailed, high-fidelity transformations.
Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/flux-2-dev/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 Dev 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-dev/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-dev/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-dev/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 Dev Edit is a WaveSpeedAI model for image editing, exposed as a REST API on WaveSpeedAI. FLUX.2 [dev] Edit enables 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-dev-edit.
Flux 2 Dev Edit starts at $0.024 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-dev-edit.
Median end-to-end generation time on WaveSpeedAI is around 13 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.