# Seedance 2.0 Image to Video > Seedance 2.0 animates a starting frame image into video, with optional end frame for controlled transitions. Supports synchronized audio generation. ## Overview - **Endpoint**: `https://api.runflow.io/v1/run/bytedance/seedance/2.0/image-to-video` - **Model ID**: `bytedance/seedance/2.0/image-to-video` - **Provider**: ByteDance - **License**: commercial - **Last Updated**: 2026-04-08 ## Pricing - **Base price**: $0.1/second - **Note**: Per second of video ## Input Schema ### `image_url` (image, required) The URL of the starting frame image to animate. Supported formats: JPEG, PNG, WebP. Max 30 MB. ### `prompt` (string, required) The text prompt describing the desired motion and action for the video. ### `end_image_url` (image, optional) The URL of the image to use as the last frame of the video. When provided, the generated video will transition from the starting image to this ending image. Supported formats: JPEG, PNG, WebP. Max 30 MB. ### `aspect_ratio` (string, optional) The aspect ratio of the generated video. Auto infers from the input image. - **Default**: `auto` - **Options**: `auto`, `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16` ### `duration` (string, optional) Duration of the video in seconds. Supports 4 to 15 seconds, or auto. - **Default**: `auto` - **Options**: `auto`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `13`, `14`, `15` ### `resolution` (string, optional) Video resolution - 480p for faster generation, 720p for balance. - **Default**: `720p` - **Options**: `480p`, `720p` ### `generate_audio` (boolean, optional) Whether to generate synchronized audio for the video. - **Default**: `true` ### `seed` (string, optional) Random seed for reproducibility. ### `end_user_id` (string, optional) The unique user ID of the end user. ## Usage Examples ### cURL ```bash curl -X POST https://api.runflow.io/v1/run/bytedance/seedance/2.0/image-to-video \ -H "Authorization: Bearer $RUNFLOW_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A professional headshot, soft studio lighting", "image_url": "https://example.com/input.jpg" }' ``` ### Python ```python import requests response = requests.post( "https://api.runflow.io/v1/run/bytedance/seedance/2.0/image-to-video", headers={"Authorization": "Bearer RUNFLOW_API_KEY"}, json={ "prompt": "A professional headshot, soft studio lighting", "image_url": "https://example.com/input.jpg", }, ) data = response.json() print(data["video"]["url"]) ``` ### JavaScript ```javascript const response = await fetch( "https://api.runflow.io/v1/run/bytedance/seedance/2.0/image-to-video", { method: "POST", headers: { "Authorization": "Bearer RUNFLOW_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ prompt: "A professional headshot, soft studio lighting", image_url: "https://example.com/input.jpg", }), } ); const data = await response.json(); console.log(data.video.url); ``` ## Additional Resources - [Playground](https://www.runflow.io/models/bytedance/seedance/2.0/image-to-video) - [API Reference](https://www.runflow.io/models/bytedance/seedance/2.0/image-to-video/api) - [Documentation](https://www.runflow.io/docs)