Kling 4.0 is LIVE — Unbelievably Real Video | Try Now →

bytedance/seedream-v4/edit

Seedream V4 Edit is state-of-the-art image editing model that outperforms Nano Banana in fidelity and edit quality. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Image Editing
Input

The size of the generated image in pixels (width*height). To match the size of an existing image, specify its dimensions explicitly; automatic resizing to match the image is not supported.

Idle

$0.027per run·~37 / $1

Next:

ExamplesView all

Create a retro collectible toy packaging design for this robot: place the same robot inside a vintage cardboard window box with bold 1950s space-age graphics, stars and rockets, and the title "BOLT-7 SPACE ROBOT" in chunky retro letters. Product photo on a shelf.

Create a retro collectible toy packaging design for this robot: place the same robot inside a vintage cardboard window box with bold 1950s space-age graphics, stars and rockets, and the title "BOLT-7 SPACE ROBOT" in chunky retro letters. Product photo on a shelf.

Redraw this landscape in a hand-painted anime film style with soft cel shading, fluffy cumulus clouds, lush saturated greens and sparkling water, keeping the lake, forest and mountains composition.

Redraw this landscape in a hand-painted anime film style with soft cel shading, fluffy cumulus clouds, lush saturated greens and sparkling water, keeping the lake, forest and mountains composition.

Show this smartwatch worn on a runner's wrist during an early morning jog along a city waterfront, the screen displaying a heart rate of 142 bpm and the time 6:45, sweat droplets, motion blur background, sporty commercial photography. No logos.

Show this smartwatch worn on a runner's wrist during an early morning jog along a city waterfront, the screen displaying a heart rate of 142 bpm and the time 6:45, sweat droplets, motion blur background, sporty commercial photography. No logos.

Change the car's color to glossy crimson red and move it to a winding coastal highway above turquoise sea at golden hour. Keep the car's exact design and angle, no logos.

Change the car's color to glossy crimson red and move it to a winding coastal highway above turquoise sea at golden hour. Keep the car's exact design and angle, no logos.

Keep the barista's face, beard and apron. Have him proudly present a cappuccino with a detailed rosetta latte art toward the camera, with warm morning sunlight streaming into the cafe and steam rising from the cup. Blank chalkboard behind him.

Keep the barista's face, beard and apron. Have him proudly present a cappuccino with a detailed rosetta latte art toward the camera, with warm morning sunlight streaming into the cafe and steam rising from the cup. Blank chalkboard behind him.

Related Models

README

Seedream V4 Edit

Seedream 4.0/Edit is a specialized image-to-image model for accurate edits to existing images - swap outfits and accessories, adjust hair or makeup, recolor or re-materialize products, and replace interior finishes like floors, walls, or furniture while maintaining subject identity, lighting, and overall composition.

Highlights

  • High fidelity on people & products: Reliable skin tones, fabric/material details, logos, and fine edges.
  • Production-friendly consistency: Generate multiple variants quickly with locked camera/look and brand color grading.
  • Structured prompts that scale: Works best when the goal is clear up front (action + object + target feature + constraints).

Use cases

  • Portrait & influencer workflows: Outfit/makeup/hair changes, branded KV series, quick campaign variants.
  • E-commerce & product teams: Colorways, material/texture swaps, packaging updates.
  • Interior/archviz: Wall/floor finish replacements, upholstery changes, lighting-aware set dressing.
  • Marketing & growth: Fast A/B testing with consistent brand color and camera setup.

Price

Only $0.027 per image!!!

How to use

  1. Prepare source: Upload the base images (Up to 10 images).
  2. Set size: The maximum size of the image is 8192 * 8192.
  3. Write a clear prompt: Write clearly in the prompt about object, feature, and constraints.

Prompt patterns (copy-ready)

Use: change action + change object + target feature + constraints (keep/avoid)

Portrait (KV series)

portrait KV series, {STYLE} style, consistent color grading {BRAND_COLOR}, fixed camera look (85mm shallow depth), interchangeable persona: {PERSONA}, reserved lower-third text “{NAME} — {ROLE}”

Change Clothes / Jewellery / Makeup

Outfit swap for portrait, replace clothing with {OUTFIT_DESC}; keep pose and composition; accessories {JEWELRY_DESC}; makeup/hair {MAKEUP_HAIR}; preserve skin tone and lighting; clean edges, no artifacts

Background Replacement

Background replacement for subject, keep subject edges; new environment: {SCENE_DESC}; match light direction and color temperature; soft contact shadows; no haloing

Interior / Outdoor Replacement

Interior finish swap, update wall {WALL_MATERIAL}, floor {FLOOR_MATERIAL}, furniture upholstery {FABRIC}; layout and lighting unchanged; realistic PBR textures

Recommended Resolutions

Aspect RatioExact (W×H)Exact PixelsRounded (W×H, ÷64)Rounded Pixels
1:11448 × 14482,096,7041408 × 14081,982,464
3:21773 × 11822,095,6861728 × 11521,990,656
4:31672 × 12542,096,6881664 × 12162,023,424
16:91936 × 10892,108,3041920 × 10882,088,960
21:92212 × 9482,096,9762176 × 9602,088,960
1:11024 × 10241,048,5761024 × 10241,048,576
3:21254 × 8361,048,3441216 × 8321,011,712
4:31182 × 8871,048,4341152 × 8961,032,192
16:91365 × 7681,048,3201344 × 7681,032,192
21:91564 × 6701,047,8801536 × 640983,040
1:1323 × 323104,329320 × 320102,400
3:2397 × 264104,808384 × 25698,304
4:3374 × 280104,720448 × 320143,360
16:9432 × 243104,976448 × 256114,688
21:9495 × 212104,940576 × 256147,456
Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Seedream v4 Edit API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/bytedance/seedream-v4/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 Seedream v4 Edit below.

HTTP example
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"
    ]
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/bytedance/seedream-v4/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
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/bytedance/seedream-v4/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"
        ]
}),
});
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));
}
Python example
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"
    ]
}

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/bytedance/seedream-v4/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)

Seedream v4 Edit API — Frequently asked questions

What is the Seedream v4 Edit API?

Seedream v4 Edit is a ByteDance model for image editing, exposed as a REST API on WaveSpeedAI. Seedream V4 Edit is state-of-the-art image editing model that outperforms Nano Banana in fidelity and edit quality. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Seedream v4 Edit API?

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 Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/bytedance/bytedance-seedream-v4-edit.

How much does Seedream v4 Edit cost per run?

Seedream v4 Edit starts at $0.027 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.

What inputs does Seedream v4 Edit accept?

Key inputs: `prompt`, `images`, `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/bytedance/bytedance-seedream-v4-edit.

How long does Seedream v4 Edit take to generate?

Reported generation time on WaveSpeedAI is around 27 seconds per request. This is an estimate, not a latency guarantee; queue time and input settings can change the total wait. live status is visible in the prediction record.

Can I use Seedream v4 Edit outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (ByteDance). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.

llms.txt — bytedance/seedream-v4/edit for AI agents and LLMs