Animate images with Seedance 2.5 Image-to-Video API powered by ByteDance. Use a required first frame, optional end frame, 4–30 second duration, sound, and 480p or 720p output.
ByteDance Seedance 2.5 Image-to-Video API transforms a required first-frame image into a polished video clip for developers and creative teams. An optional final frame can guide how the shot concludes, while flexible quality, duration, and generated-sound controls support production workflows on Bestimage AI. The API is suited to product animation, brand content, social video, character motion, and automated creative applications.
Note A first-frame image is required. The end frame is optional, and this model does not expose an aspect ratio control. Please ensure your images and prompts comply with ByteDance's content safety guidelines.
Seedance 2.5 vs. Seedance 2.0 Image-to-Video
Both models animate source images through ByteDance video generation.
Seedance 2.5 provides first-frame input, optional end-frame guidance, flexible output quality and duration, and
generated-sound control in its current Bestimage AI workflow.
Seedance 2.5 vs. Veo 3.1 Fast Image-to-Video
Veo 3.1 Fast provides rapid animation within Google's model family.
Seedance 2.5 offers a ByteDance alternative with optional final-frame guidance and integrated sound control for
image-led production workflows.
Seedance 2.5 vs. Kling Image-to-Video
Kling supports image-driven character and scene animation. Seedance 2.5
differentiates through a focused Bestimage AI API workflow with clear first-frame, optional end-frame, duration, quality,
and sound controls.
Seedance 2.5 vs. Runway Image-to-Video
Runway combines image animation with interactive editing tools. Seedance
2.5 Image-to-Video API is built for repeatable programmatic requests and scalable integration into products and
automated pipelines.
Seedance 2.5 vs. Pika Image-to-Video
Pika offers creator-oriented image animation experiences. Seedance 2.5
provides a developer-focused API for product, social, brand, and character animation with optional endpoint guidance.
// Step 1: Submit generation request
const response = await fetch('https://api.flaq.ai/api/v1/video/task', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
model_name: 'seedance-v2.5-image-to-video',
prompt: 'Gentle camera push-in; leaves rustle softly in the breeze',
resolution: '720p',
duration: 8,
sound: true,
image_url: 'https://example.com/first-frame.jpg',
image_end_url: 'https://example.com/last-frame.jpg'
})
});
const { data } = await response.json();
const taskId = data.task_id;
// Step 2: Poll for results
const taskId = data.task_id;
const pollResult = async (taskId) => {
const res = await fetch(`https://api.flaq.ai/api/v1/video/${taskId}`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
return res.json();
};
while (true) {
const pollResultData = await pollResult(taskId);
const status = pollResultData.data.task_status;
if (status === 'succeed') {
console.log(pollResultData.data.task_result.videos[].);
;
}
(status === ) {
.(pollResultData..);
;
}
( (resolve, ));
}
# Step 1: Submit generation request
import requests
response = requests.post(
'https://api.flaq.ai/api/v1/video/task',
headers={
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
json={
'model_name': 'seedance-v2.5-image-to-video',
'prompt': 'Gentle camera push-in; leaves rustle softly in the breeze',
'resolution': '720p',
'duration': 8,
'sound': True,
'image_url': 'https://example.com/first-frame.jpg',
'image_end_url': 'https://example.com/last-frame.jpg'
}
)
result = response.json()
task_id = result['data']['task_id']
# Step 1: Submit generation request
curl -X POST https://api.flaq.ai/api/v1/video/task \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model_name": "seedance-v2.5-image-to-video",
"prompt": "Gentle camera push-in; leaves rustle softly in the breeze",
"resolution": "720p",
"duration": 8,
"sound": true,
"image_url": "https://example.com/first-frame.jpg",
"image_end_url": "https://example.com/last-frame.jpg"
}'
# Step 2: Poll for results
# Replace {task_id} with the task_id returned from the submit response
curl -X GET "https://api.flaq.ai/api/v1/video/{task_id}" \
-H "Authorization: Bearer YOUR_API_KEY"
# Step 2: Poll for results
task_id = response.json()['data']['task_id']
poll_url = f"https://api.flaq.ai/api/v1/video/{task_id}"
while True:
poll_result = requests.get(poll_url, headers={'Authorization': 'Bearer YOUR_API_KEY'}).json()
status = poll_result['data']['task_status']
if status == 'succeed':
print(poll_result['data']['task_result']['videos'][0]['url'])
break
if status == 'failed':
print(poll_result['data']['task_status_msg'])
break
time.sleep(10)