Seedance 2.0 — Start-End Frame to Video
curl --request POST \
--url https://api.muvi.video/v1/jobs/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {
"prompt": "<string>",
"start_frame_url": "<string>",
"end_frame_url": "<string>",
"duration": "<string>",
"resolution": "<string>",
"fps": "<string>"
}
}
'import requests
url = "https://api.muvi.video/v1/jobs/submit"
payload = {
"model": "<string>",
"input": {
"prompt": "<string>",
"start_frame_url": "<string>",
"end_frame_url": "<string>",
"duration": "<string>",
"resolution": "<string>",
"fps": "<string>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
input: {
prompt: '<string>',
start_frame_url: '<string>',
end_frame_url: '<string>',
duration: '<string>',
resolution: '<string>',
fps: '<string>'
}
})
};
fetch('https://api.muvi.video/v1/jobs/submit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"jobId": "<string>",
"status": "<string>",
"estimatedCompletionTime": "<string>",
"costMicroCents": 123
}Seedance 2.0
Seedance 2.0 — Start-End Frame to Video
Generate a smooth video transition between a start frame and an end frame with ByteDance’s Seedance 2.0 model
POST
/
v1
/
jobs
/
submit
Seedance 2.0 — Start-End Frame to Video
curl --request POST \
--url https://api.muvi.video/v1/jobs/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {
"prompt": "<string>",
"start_frame_url": "<string>",
"end_frame_url": "<string>",
"duration": "<string>",
"resolution": "<string>",
"fps": "<string>"
}
}
'import requests
url = "https://api.muvi.video/v1/jobs/submit"
payload = {
"model": "<string>",
"input": {
"prompt": "<string>",
"start_frame_url": "<string>",
"end_frame_url": "<string>",
"duration": "<string>",
"resolution": "<string>",
"fps": "<string>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
input: {
prompt: '<string>',
start_frame_url: '<string>',
end_frame_url: '<string>',
duration: '<string>',
resolution: '<string>',
fps: '<string>'
}
})
};
fetch('https://api.muvi.video/v1/jobs/submit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"jobId": "<string>",
"status": "<string>",
"estimatedCompletionTime": "<string>",
"costMicroCents": 123
}Generate a smooth video transition between two frames with ByteDance’s Seedance 2.0. Provide a start image, an end image, and a prompt describing the motion in between.
| Property | Value |
|---|---|
| Provider | ByteDance |
| Model | Seedance 2.0 |
| Capability | Start-End Frame to Video |
| Base Cost | 240,000 micro-cents/second ($0.24/sec) |
| Processing Time | ~300 seconds |
Request Body
string
required
Model slug. Use
bytedance/seedance-2.0/start-end-frame-to-video for start-end frame to video generation.object
required
Input parameters for start-end frame to video generation.
Hide properties
Hide properties
string
required
Text description of the motion or transition (max 5000 characters).
string
required
URL of the start frame image.
string
required
URL of the end frame image.
string
Video duration in seconds. Default:
5. Options: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.string
Output resolution. Default:
720p. Options: 720p, 1440p.string
Frames per second. Default:
24. Options: 24, 30, 60.string
HTTPS URL to receive a webhook notification when the job completes or fails.
Pricing
Base cost: 240,000 micro-cents per second ($0.24/sec)finalCost = baseCost × duration × resolution × fps
| Factor | Option | Multiplier |
|---|---|---|
| Duration | 4 | 4x |
5 | 5x | |
6 | 6x | |
7 | 7x | |
8 | 8x | |
9 | 9x | |
10 | 10x | |
11 | 11x | |
12 | 12x | |
13 | 13x | |
14 | 14x | |
15 | 15x | |
| Resolution | 720p | 1x |
1440p | 2x | |
| FPS | 24 | 1x |
30 | 1.1x | |
60 | 1.25x |
Default cost: 5 seconds, 720p, 24 fps = 240,000 × 5 × 1 × 1 = 1,200,000 micro-cents ($1.20)
Response
string
Unique identifier for the submitted job.
string
Initial job status. Always
"pending" on successful submission.string
ISO 8601 timestamp of the estimated completion time.
number
The cost of the job in micro-cents.
Code Examples
curl -X POST https://api.muvi.video/v1/jobs/submit \
-H "Authorization: Bearer $PIXELBYTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "bytedance/seedance-2.0/start-end-frame-to-video",
"input": {
"prompt": "The flower opens its petals as morning sunlight gradually fills the scene",
"start_frame_url": "https://example.com/image.jpg",
"end_frame_url": "https://example.com/image.jpg",
"duration": "5",
"resolution": "720p",
"fps": "24"
}
}'
import requests
response = requests.post(
"https://api.muvi.video/v1/jobs/submit",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"model": "bytedance/seedance-2.0/start-end-frame-to-video",
"input": {
"prompt": "The flower opens its petals as morning sunlight gradually fills the scene",
"start_frame_url": "https://example.com/image.jpg",
"end_frame_url": "https://example.com/image.jpg",
"duration": "5",
"resolution": "720p",
"fps": "24"
}
}
)
data = response.json()
print(data)
const response = await fetch("https://api.muvi.video/v1/jobs/submit", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "bytedance/seedance-2.0/start-end-frame-to-video",
input: {
prompt: "The flower opens its petals as morning sunlight gradually fills the scene",
start_frame_url: "https://example.com/image.jpg",
end_frame_url: "https://example.com/image.jpg",
duration: "5",
resolution: "720p",
fps: "24"
}
})
});
const data = await response.json();
console.log(data);
