Bytedance Seedance 2.0 Mini Video Edit API Documentation
Playground
Try it on WaveSpeedAI!Seedance 2.0 Mini Video Edit is ByteDance’s faster, lower-cost video editing model for prompt-guided video modification. It edits existing videos with cinematic multi-shot quality, AI camera control, consistent characters, 480P / 720P / 1080P / 4K output, 4-15s duration, and flexible aspect ratios. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
ByteDance Seedance 2.0 Mini Video Edit edits an existing video with a text prompt. Upload a source video, describe the edit you want, optionally add reference images or audio, and generate an edited video with selectable resolution, aspect ratio, and native audio settings.
- Need to generate from text instead? Try ByteDance Seedance 2.0 Mini Text-to-Video.
- Need to extend a video instead? Try ByteDance Seedance 2.0 Mini Video Extend.
- Need to generate from a start image instead? Try ByteDance Seedance 2.0 Mini Image-to-Video.
Why Choose This?
-
Prompt-based video editing
Edit an input video by describing the desired change in natural language. -
Reference-guided editing
Use optional reference images to guide subject identity, style, or visual direction. -
Audio reference support
Add optional reference audio to guide audio generation. -
Native audio generation
Generate native audio for the edited output, or preserve the input video’s audio track when audio generation is disabled. -
Flexible aspect ratios
Choose from16:9,9:16,4:3,3:4,1:1, and21:9, or let the output adapt to the input video. -
Resolution options
Generate edited videos in480p,720p,1080p, or4k.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Describe the edit you want applied to the input video. |
| video | Yes | URL of the input video to edit. Videos longer than 15 seconds are trimmed to 15 seconds. |
| reference_images | No | Optional reference image URLs to guide the edit, such as subject identity or style. |
| reference_audios | No | Optional reference audio URLs to guide audio generation. |
| aspect_ratio | No | Aspect ratio of the output video: 16:9, 9:16, 4:3, 3:4, 1:1, or 21:9. Adapts to the input if not specified. |
| resolution | No | Output video resolution: 480p, 720p, 1080p, or 4k. Default: 720p. |
| duration | No | Output video length in seconds. Range: 4–15. Auto-detected from the input video if not specified. |
| enable_web_search | No | Enable web search for real-time information. Default: false. |
| generate_audio | No | Whether to generate native audio for the edited output. Default: true. When set to false, the input video’s audio track is preserved on the output instead. |
How to Use
- Write your edit prompt — Describe the edit you want to apply to the input video.
- Upload the source video — Provide the video URL you want to edit.
- Add references optional — Upload reference images or reference audio when you need extra visual or audio guidance.
- Choose aspect ratio optional — Select an output aspect ratio, or leave it empty to adapt to the input video.
- Choose resolution — Select
480p,720p,1080p, or4k. - Set duration optional — Choose an output duration from
4to15seconds, or leave it empty for auto-detection. - Configure audio optional — Keep
generate_audioenabled for native audio generation, or disable it to preserve the input video’s audio track. - Submit — Generate the edited video.
Example Prompt
Change the scene into a cinematic rainy night atmosphere, with neon reflections on the street, soft camera motion, dramatic lighting, realistic color grading, and a polished film look.
Writing Effective Prompts
Editing keeps your source video and changes only what you name. Be precise about the scope, and describe the change as from A to B.
State the change plainly
Name exactly what to add, remove, or modify — and use an editing trigger word (add, remove, replace, change to, modify) so the intent is unambiguous.
- “Replace the man’s coffee cup with a book, keep everything else unchanged.”
- “Remove the subtitles.”
- “Change the background from a city street to a snowy forest.”
Use timestamps for partial edits
Confine a change to a time range so the rest of the clip is untouched.
- “From 4-6s, change the man’s action from drinking coffee to waving; leave the rest unchanged.”
Reference images for edits
Attach images to specify a replacement, and bind each explicitly (see below).
- “Replace the woman on the right with the person in @image1.”
Referencing uploaded assets
When you attach images, videos, or audio, bind each one explicitly in the prompt by its upload order — @image1, @video1, @audio1 — and say what it’s for. Don’t rely on labels drawn inside the image itself.
- “The knight in @image1 walks through the castle in @image2.”
- “Refer to @video1 for the camera movement only; keep its shot order.”
- “@image1 and @image2 are Character 1, voiced by @audio1.”
When a reference is already accurate, just point to it — no need to re-describe it in detail.
Audio edits
You can add, remove, or modify audio too.
- “Translate the dialogue to Spanish, keep lip movements matched, no subtitles.”
- “Remove the background music; keep only ambient and action sounds.”
Negative control
Positive descriptions work best, but you can suppress subtitles and audio:
- “No subtitles.”
- “No BGM — ambient and action sounds only.”
- “No audio.”
Weak vs. strong
| prompt | |
|---|---|
| weak | change the video |
| strong | Replace the red car in the video with a black motorcycle, matching its motion and speed. Keep the road, lighting, and camera movement unchanged. From 2s onward, add faint dust kicked up behind the rear wheel. Keep the original engine audio. |
Pricing
Price depends on selected resolution, input video duration, and output duration.
Rate per Counted Second
| Resolution | Cost |
|---|---|
| 480p | $0.0375 |
| 720p | $0.075 |
| 1080p | $0.1875 |
| 4k | $0.3750 |
Example Costs: 5s Input Video + 5s Output Duration
| Resolution | Cost |
|---|---|
| 480p | $0.375 |
| 720p | $0.75 |
| 1080p | $1.875 |
| 4k | $3.750 |
Example Costs: 10s Input Video + 10s Output Duration
| Resolution | Cost |
|---|---|
| 480p | $0.75 |
| 720p | $1.50 |
| 1080p | $3.75 |
| 4k | $7.50 |
Example Costs: 15s Input Video + 15s Output Duration
| Resolution | Cost |
|---|---|
| 480p | $1.125 |
| 720p | $2.25 |
| 1080p | $5.625 |
| 4k | $11.250 |
Best Use Cases
- Video restyling — Change the visual style, lighting, mood, or atmosphere of an existing video.
- Prompt-guided edits — Apply natural-language editing instructions to a source video.
- Reference-based edits — Use reference images to guide identity, style, or visual consistency.
- Audio-aware editing — Generate native audio or preserve the original input audio depending on the workflow.
- Creative video iteration — Test multiple edit directions from the same source video.
- Short-form content editing — Create polished edited clips for social, ads, concepts, and creative production.
Pro Tips
- Use a clear source video with visible subjects and stable motion.
- Keep the prompt focused on the exact edit you want.
- Add reference images when subject identity or visual style needs stronger guidance.
- Add reference audio when audio direction matters.
- Use
480pfor quick testing,720pfor standard output,1080pfor higher-resolution results, and4kfor maximum-resolution output. - Disable
generate_audiowhen you want to preserve the input video’s original audio track.
Related Models
- ByteDance Seedance 2.0 Mini Text-to-Video — Generate video directly from text prompts.
- ByteDance Seedance 2.0 Mini Video Extend — Continue an existing video with a new generated segment.
- ByteDance Seedance 2.0 Mini Image-to-Video — Generate video from a start image and prompt.
Notice: Use @image1, @image2, @audio1, etc. to reference your uploaded assets. The references will stay as plain text—don’t worry.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic ocean wave at sunrise, highly detailed",
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"aspect_ratio": "16:9",
"resolution": "720p",
"enable_web_search": false,
"generate_audio": true
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/bytedance/seedance-2.0-mini/video-edit" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; 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 type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
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
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | Describe the edit you want applied to the input video. | |
| video | string | Yes | - | URL of the input video to edit. Videos longer than 15s are trimmed to 15s. | |
| reference_images | array<string> | No | - | 0 ~ 9 items | Optional reference image URLs to guide the edit (subject identity, style, etc.). |
| reference_audios | array<string> | No | - | 0 ~ 3 items | Optional reference audio URLs to guide audio generation. |
| aspect_ratio | string | No | - | 16:9, 9:16, 4:3, 3:4, 1:1, 21:9 | Aspect ratio of the output video. Adapts to the input if not specified. |
| resolution | string | No | 720p | 480p, 720p, 1080p, 4k | Output video resolution. |
| enable_web_search | boolean | No | false | - | Enable web search for real-time information. |
| generate_audio | boolean | No | true | - | Whether to generate native audio for the edited output. Defaults to true. When set to false, the input video's audio track is preserved on the output instead. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |