FLUX 3 Video Edit applies prompt-guided changes to existing videos while preserving motion, timing, and framing, supporting precise video modification, visual style updates, scene refinements, creative edits, ads, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Idle
$0.03per run·~33 / $1
Transform the video into a surreal Art Nouveau fantasy while preserving the woman’s exact identity, face, hairstyle, walking motion, timing, pose, and original camera movement. Replace the modern art gallery with an ornate glass conservatory filled with giant curved flowers, elegant golden vine structures, stained-glass panels, and soft botanical mist. Change her black blazer and trousers into a sophisticated emerald-green Art Nouveau dress with flowing layered fabric and delicate gold embroidery. Transform the red umbrella into a large translucent crimson flower shaped like an umbrella, with visible petal texture and a slender golden stem. Keep her original actions unchanged: walking, stopping, looking forward, opening the object, and resting it over her shoulder. Elegant emerald, crimson, and gold palette, cinematic botanical fantasy, refined materials, soft volumetric light, realistic fabric movement, highly detailed, sophisticated rather than cartoonish.
FLUX 3 Video Edit makes targeted changes to an existing video using natural-language instructions. Change an object's appearance, adjust the environment, or restyle a scene while preserving the source motion, timing, and framing.
Prompt-guided video editing
Edit an existing video by describing the changes you want in natural language.
Motion and timing preservation
Keep the source video's motion, pacing, camera movement, and framing while applying visual changes.
Targeted visual changes
Modify objects, environments, style, lighting, or scene details without generating a new clip from scratch.
Simple 720p workflow
Upload a short MP4 video, write an edit prompt, and receive a 720p edited video.
Focused short-clip editing
Designed for short video edits where the original timing and structure should remain consistent.
| Parameter | Required | Description |
|---|---|---|
| video | Yes | Source MP4 video to edit. The input must be under 50 MB and under 15 seconds. |
| prompt | Yes | Natural-language edit instruction describing the changes to apply. Maximum length: 4096 characters. |
The output is a 720p edited video. This endpoint does not expose duration, resolution, aspect ratio, audio-generation, or seed controls. Output timing follows the source clip.
50 MB and under 15 seconds.Pricing is based on input video duration.
The price is $0.03 per billable second for 720p video.
| Input Duration | Billable Seconds | Cost |
|---|---|---|
| 1s | 1 | $0.03 |
| 5s | 5 | $0.15 |
| 5.1s | 6 | $0.18 |
| 10s | 10 | $0.30 |
| 14.5s | 15 | $0.45 |
prompt does not add a separate charge. Billing is based on input duration, not a post-generation measurement of the output.
video and prompt are required.50 MB and under 15 seconds.Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/black-forest-labs/flux-3/video-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 3 Video Edit below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"prompt": "A cinematic shot of a city at sunset, soft golden light"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/black-forest-labs/flux-3/video-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="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
# 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|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/black-forest-labs/flux-3/video-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({
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"prompt": "A cinematic shot of a city at sunset, soft golden light"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `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", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
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 = {
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"prompt": "A cinematic shot of a city at sunset, soft golden light"
}
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/black-forest-labs/flux-3/video-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 = 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", "deleted"}:
raise RuntimeError(result)
time.sleep(2)Flux 3 Video Edit is a Black Forest Labs model for video editing, exposed as a REST API on WaveSpeedAI. FLUX 3 Video Edit applies prompt-guided changes to existing videos while preserving motion, timing, and framing, supporting precise video modification, visual style updates, scene refinements, creative edits, ads, and production workflows. 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/black-forest-labs/black-forest-labs-flux-3-video-edit.
Flux 3 Video Edit starts at $0.030 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`, `video`. 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/black-forest-labs/black-forest-labs-flux-3-video-edit.
Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.
Commercial usage rights depend on the model's license, set by its provider (Black Forest Labs). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.