# bytedance/seedance-2.0/image-to-video > Transform static images into consistent cinematic visuals. bytedance/seedance-2.0/image-to-video uses precise multimodal control to extract composition and style. It overcomes generation randomness, supporting complex camera movements, realistic physics, and natural motion simulation. Whether in intense action sequences or multi-shot narratives, the model maintains strict consistency in character traits and physical inertia. Combined with native audio beat-sync, it perfectly aligns editing rhythm with visual tension for stable, high-impact output. ## Overview - **Endpoint**: `https://api.shortapi.ai/api/v1/job/create` - **Model ID**: `bytedance/seedance-2.0/image-to-video` - **Category**: image-to-video - **Kind**: inference ## Pricing Std: $0.24 per second, Fast: $0.20 per second For more details, please check our pricing page. ## API Information This model can be used via our HTTP API or more conveniently via our client libraries. See the input and output schema below, as well as the usage examples. ### Input Schema The API accepts the following input parameters: - **`mode`** (`string`, _optional_): Video generation mode - Default: `std` - Options: "std", "fast" - **`prompt`** (`string`, _required_): Text prompt. - Examples: "An action shot of a black lab swimming..." - **`duration`** (`int`, _optional_): Video duration - Default: `5` - Range: `4` to `15` - **`aspect_ratio`** (`string`, _optional_): The aspect ratio of the generated video frame (width:height) - Default: `16:9` - Options: "21:9", "16:9", "9:16", "4:3", "1:1", "3:4" - **`image_urls`** (`list`, _required_): Reference image URLs. The total number of `image_urls` and `audio_urls` must be ≤ 12 - **`is_first_last_frame`** (`bool`, _optional_): When is_first_last_frame is true, the first and last frame mode is enabled. image_urls can only have 1 to 2 images, audio_urls must be empty, the aspect_ratio parameter will be ignored, the input value will not take effect, and it will be automatically set to auto - Default: `false` - Options: "true", "false" - **`audio_urls`** (`list`, _optional_): Audio reference URL. Available when is_first_last_frame is false. Supported formats: MP3, WAV. Maximum duration: 15 seconds. Audio-only use is not allowed, at least one image is required. The total number of `image_urls` and `audio_urls` must be ≤ 12 ### Output Schema The API returns a JSON response with a `job_id` for tracking the request status. **Create Job Response:** ```json { "code": 0, "data": { "amount": "0.02", "job_id": "" } } ``` **Query Job Result (when status is 2, meaning succeeded):** ```json { "code": 0, "data": { "status": 2, "result": { "images": [{ "url": "https://..." }] } } } ``` ## Use Example To use this model, make an HTTP POST request to the API endpoint, then poll for results using the returned `job_id`. ### Bash (cURL) ```bash # Step 1: Create a job response=$(curl --request POST \ --url https://api.shortapi.ai/api/v1/job/create \ --header "Authorization: Bearer $SHORTAPI_KEY" \ --header "Content-Type: application/json" \ --data '{ "model": "bytedance/seedance-2.0/image-to-video", "args": { "prompt": "The architectural line drawing smoothly evolves into a photorealistic modern city at sunset. Colors bleed into the sketch, textures of glass and steel emerge on the flowing skyscrapers. Warm golden hour sunlight begins to glow from the windows, and the river transitions from white to reflecting the city lights. Cinematic, smooth transition, high detail.", "image_urls": ["https://file.shortapi.ai/assets/examples/bytedance/seedance-2.0/image-to-video-image1.png","https://file.shortapi.ai/assets/examples/bytedance/seedance-2.0/image-to-video-image2.png"] }, "callback_url": "CALLBACK_URL" }') JOB_ID=$(echo "$response" | grep -o '"job_id": *"[^"]*"' | sed 's/"job_id": *//; s/"//g') # Step 2: Poll for results curl --request GET \ --url "https://api.shortapi.ai/api/v1/job/query?id=$JOB_ID" \ --header "Authorization: Bearer $SHORTAPI_KEY" ``` ### JavaScript (Fetch API) ```javascript // Step 1: Create a job const response = await fetch(`https://api.shortapi.ai/api/v1/job/create`, { method: "POST", headers: { "Authorization": `Bearer ${SHORTAPI_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "model": "bytedance/seedance-2.0/image-to-video", "args": { "prompt": "The architectural line drawing smoothly evolves into a photorealistic modern city at sunset. Colors bleed into the sketch, textures of glass and steel emerge on the flowing skyscrapers. Warm golden hour sunlight begins to glow from the windows, and the river transitions from white to reflecting the city lights. Cinematic, smooth transition, high detail.", "image_urls": ["https://file.shortapi.ai/assets/examples/bytedance/seedance-2.0/image-to-video-image1.png","https://file.shortapi.ai/assets/examples/bytedance/seedance-2.0/image-to-video-image2.png"] }, "callback_url": "CALLBACK_URL" }) }); const data = await response.json(); const JOB_ID = data.job_id; // Step 2: Poll for results const result = await fetch(`https://api.shortapi.ai/api/v1/job/query?id=${JOB_ID}`, { method: "GET", headers: { "Authorization": `Bearer ${SHORTAPI_KEY}` } }); const resultData = await result.json(); console.log(resultData); ``` ### Python (Requests) ```python import requests # Step 1: Create a job url = "https://api.shortapi.ai/api/v1/job/create" payload = { "model": "bytedance/seedance-2.0/image-to-video", "args": { "prompt": "The architectural line drawing smoothly evolves into a photorealistic modern city at sunset. Colors bleed into the sketch, textures of glass and steel emerge on the flowing skyscrapers. Warm golden hour sunlight begins to glow from the windows, and the river transitions from white to reflecting the city lights. Cinematic, smooth transition, high detail.", "image_urls": ["https://file.shortapi.ai/assets/examples/bytedance/seedance-2.0/image-to-video-image1.png","https://file.shortapi.ai/assets/examples/bytedance/seedance-2.0/image-to-video-image2.png"] }, "callback_url": "CALLBACK_URL" } headers = { "Authorization": f"Bearer {SHORTAPI_KEY}", "Content-Type": "application/json" } response = requests.post(url, headers=headers, json=payload) data = response.json() JOB_ID = data.get("job_id") # Step 2: Poll for results result_url = f"https://api.shortapi.ai/api/v1/job/query?id={JOB_ID}" result = requests.get(result_url, headers={"Authorization": f"Bearer {SHORTAPI_KEY}"}) print(result.json()) ```