Seedance - Image to Video
Animate a first frame into video with ByteDance's Seedance models, optionally key-framing between a first and a last frame.
Looking for reference-driven generation instead (free-form image, video and audio references with no frames)? See Seedance - Text to Video.
Endpoint
Request Headers
| Field | Value |
|---|---|
| API-KEY | <api-key> |
| Content-Type | application/json |
Request Parameters
| Field Name | Type | Example | Description | Required |
|---|---|---|---|---|
| type | string | IMAGE_TO_VIDEO | Feature identifier | ✔️ |
| model | string | bytedance/seedance-2.5 | AI model to use: bytedance/seedance-2.5, bytedance/seedance-2.0, bytedance/seedance-2.0-fast or bytedance/seedance-2.0-mini | ✔️ |
| conversationId | string | IMAGE_TO_VIDEO | Conversation context | ✔️ |
| promptObject.prompt | string | The cat rides the wave toward the camera | Text description guiding the animation. Max 5000 characters | ✔️ |
| promptObject.resolution | string | 720p | Output resolution. Allowed values depend on the model (see the table below) | ✔️ |
| promptObject.duration | number | 5 | Video duration in seconds. Allowed range depends on the model (see the table below) | ✔️ |
| promptObject.imageUrl | string | images/first.png | S3 object key (not a public URL) returned by the Asset API — upload the file first, then pass the returned path. The opening frame to animate. Must be at least 300px wide — the provider rejects narrower images | ✔️ |
| promptObject.imageTailUrl | string | images/last.png | S3 object key (not a public URL) returned by the Asset API — upload the file first, then pass the returned path. An optional closing frame to key-frame toward. Must be at least 300px wide — the provider rejects narrower images | ❌ |
| promptObject.ratio | string | 16:9 | Aspect ratio of the output video: 16:9, 4:3, 1:1, 3:4, 9:16 or 21:9, plus 9:21 on the bytedance/seedance-2.0 family. Omit the field to let the provider choose the ratio. Not supported by bytedance/seedance-2.5 — the output ratio follows imageUrl instead; omit this field for that model | ❌ |
| promptObject.generateAudio | boolean | true | Generate dialogue, ambience and sound effects alongside the video. Defaults to true | ❌ |
| promptObject.seed | number | 12345 | Random seed for reproducible generation. Integer from 0 to 4294967295, or -1 for random. Not supported by bytedance/seedance-2.5 | ❌ |
| promptObject.watermark | boolean | false | Whether to add an AI-generated watermark to the output video | ❌ |
The accepted resolution and duration differ between the four variants:
| Model | Resolutions | Duration (s) |
|---|---|---|
bytedance/seedance-2.5 | 480p, 720p | 4-30 |
bytedance/seedance-2.0 | 480p, 720p, 1080p, 4K | 4-15 |
bytedance/seedance-2.0-fast | 480p, 720p | 4-15 |
bytedance/seedance-2.0-mini | 480p, 720p | 4-15 |
Code Examples
Image to Video (first frame only)
- cURL
- JavaScript
- Python
curl --location 'https://api.1min.ai/api/features' \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
"type": "IMAGE_TO_VIDEO",
"model": "bytedance/seedance-2.5",
"conversationId": "IMAGE_TO_VIDEO",
"promptObject": {
"prompt": "The cat rides the wave toward the camera",
"resolution": "720p",
"duration": 5,
"generateAudio": true,
"imageUrl": "images/2026_08_13_first_frame.png"
}
}'
fetch('https://api.1min.ai/api/features', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'API-KEY': 'YOUR_API_KEY'
},
body: JSON.stringify({
type: 'IMAGE_TO_VIDEO',
model: 'bytedance/seedance-2.5',
conversationId: 'IMAGE_TO_VIDEO',
promptObject: {
prompt: 'The cat rides the wave toward the camera',
resolution: '720p',
duration: 5,
generateAudio: true,
imageUrl: 'images/2026_08_13_first_frame.png'
}
})
})
import requests
url = "https://api.1min.ai/api/features"
headers = {
"Content-Type": "application/json",
"API-KEY": "YOUR_API_KEY"
}
data = {
"type": "IMAGE_TO_VIDEO",
"model": "bytedance/seedance-2.5",
"conversationId": "IMAGE_TO_VIDEO",
"promptObject": {
"prompt": "The cat rides the wave toward the camera",
"resolution": "720p",
"duration": 5,
"generateAudio": True,
"imageUrl": "images/2026_08_13_first_frame.png"
}
}
response = requests.post(url, headers=headers, json=data)
Image to Video (first + last frame)
- cURL
- JavaScript
- Python
curl --location 'https://api.1min.ai/api/features' \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
"type": "IMAGE_TO_VIDEO",
"model": "bytedance/seedance-2.0",
"conversationId": "IMAGE_TO_VIDEO",
"promptObject": {
"prompt": "The character walks from the doorway to the window",
"resolution": "1080p",
"duration": 10,
"ratio": "16:9",
"generateAudio": true,
"seed": 12345,
"imageUrl": "images/doorway.png",
"imageTailUrl": "images/window.png"
}
}'
fetch('https://api.1min.ai/api/features', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'API-KEY': 'YOUR_API_KEY'
},
body: JSON.stringify({
type: 'IMAGE_TO_VIDEO',
model: 'bytedance/seedance-2.0',
conversationId: 'IMAGE_TO_VIDEO',
promptObject: {
prompt: 'The character walks from the doorway to the window',
resolution: '1080p',
duration: 10,
ratio: '16:9',
generateAudio: true,
seed: 12345,
imageUrl: 'images/doorway.png',
imageTailUrl: 'images/window.png'
}
})
})
import requests
url = "https://api.1min.ai/api/features"
headers = {
"Content-Type": "application/json",
"API-KEY": "YOUR_API_KEY"
}
data = {
"type": "IMAGE_TO_VIDEO",
"model": "bytedance/seedance-2.0",
"conversationId": "IMAGE_TO_VIDEO",
"promptObject": {
"prompt": "The character walks from the doorway to the window",
"resolution": "1080p",
"duration": 10,
"ratio": "16:9",
"generateAudio": True,
"seed": 12345,
"imageUrl": "images/doorway.png",
"imageTailUrl": "images/window.png"
}
}
response = requests.post(url, headers=headers, json=data)
Interactive Playground
API Playground
https://api.1min.ai/api/featuresAsset API path to the opening frame
Asset API path to an optional closing frame
1080p and 4K are only accepted by bytedance/seedance-2.0
bytedance/seedance-2.5 accepts 4-30s; every other variant accepts 4-15s
Leave unset to let the provider choose the ratio. Not supported by bytedance/seedance-2.5 — the output follows imageUrl instead
Generate dialogue, ambience and sound effects alongside the video
Fixed seed for reproducible generation. Not supported by bytedance/seedance-2.5
Add an AI-generated watermark to the output video
Generated cURL Command:
curl -X POST "https://api.1min.ai/api/features" \
-H "API-KEY: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"type": "IMAGE_TO_VIDEO",
"model": "bytedance/seedance-2.5",
"conversationId": "IMAGE_TO_VIDEO",
"promptObject": {
"prompt": "The cat rides the wave toward the camera",
"resolution": "720p",
"duration": 5,
"generateAudio": true,
"imageUrl": "images/2026_08_13_first_frame.png"
}
}'
Response
{
"aiRecord": {
"uuid": "b574969b-4992-4173-9e62-7ebd4782103e",
"userId": "2f57c2a4-1fff-48e7-972f-3c1d6c59bced",
"teamId": "eb48d89f-1bb7-4d82-9b25-481971a0e97a",
"model": "bytedance/seedance-2.5",
"type": "IMAGE_TO_VIDEO",
"metadata": {
"credit": 12000000,
"duration": 5,
"resolution": "720p",
"executionTime": 51.884
},
"rating": null,
"feedback": null,
"conversationId": null,
"status": "SUCCESS",
"createdAt": "2026-08-13T16:47:28.018Z",
"aiRecordDetail": {
"promptObject": {
"prompt": "The cat rides the wave toward the camera",
"ratio": "16:9",
"duration": 5,
"resolution": "720p",
"generateAudio": true,
"imageUrl": "images/2026_08_13_first_frame.png"
},
"resultObject": [
"development/videos/2026_08_13_23_48_59_722_158922.mp4"
],
"responseObject": {
"task_id": "3f2aK9mR",
"credits": 100,
"processing_time": 51
}
},
"additionalData": null,
"temporaryUrl": "https://s3.us-east-1.amazonaws.com/asset.1min.ai/development/videos/2026_08_13_23_48_59_722_158922.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=..."
}
}