Requires DashScope Python SDK ≥ 1.25.8 before running the code below. Older versions may show "url error, please check url!" errors. Install the SDK.
Copy
import osfrom http import HTTPStatusfrom dashscope import VideoSynthesisimport dashscope# The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region. Get your URL: https://www.alibabacloud.com/help/en/model-studio/image-to-video-by-first-and-last-frame-api-referencedashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'# API keys differ by region. Get your API key: https://www.alibabacloud.com/help/en/model-studio/get-api-keyapi_key = os.getenv("DASHSCOPE_API_KEY", "YOUR_API_KEY")print('please wait...')rsp = VideoSynthesis.call(api_key=api_key, model="wan2.2-kf2v-flash", prompt="A cute blue monster with a slightly sad expression stands in the rain. The camera slowly zooms in and stops on the moment it looks up at the sky.", first_frame_url="https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260126/ixdxvt/wan-kf2v-blue-1.png", last_frame_url="https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260126/nhtdrc/wan-kf2v-blue-2.png", duration=5, # Fixed at 5 seconds. Do not change. prompt_extend=True, watermark=True)print(rsp)if rsp.status_code == HTTPStatus.OK: print("video_url:", rsp.output.video_url)else: print('Failed, status_code: %s, code: %s, message: %s' % (rsp.status_code, rsp.code, rsp.message))
Requires DashScope Java SDK ≥ 2.22.6 before running the code below. Older versions may show "url error, please check url!" errors. Install the SDK.
Copy
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;import com.alibaba.dashscope.exception.ApiException;import com.alibaba.dashscope.exception.InputRequiredException;import com.alibaba.dashscope.exception.NoApiKeyException;import com.alibaba.dashscope.utils.JsonUtils;import com.alibaba.dashscope.utils.Constants;public class Image2Video { static { // The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region. Get your URL: https://www.alibabacloud.com/help/en/model-studio/image-to-video-by-first-and-last-frame-api-reference Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"; } // If you have not set an environment variable, replace the line below with: apiKey="sk-xxx" // API keys differ by region. Get your API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key static String apiKey = System.getenv("DASHSCOPE_API_KEY"); public static void image2video() throws ApiException, NoApiKeyException, InputRequiredException { VideoSynthesis vs = new VideoSynthesis(); VideoSynthesisParam param = VideoSynthesisParam.builder() .apiKey(apiKey) .model("wan2.2-kf2v-flash") .prompt("A cute blue monster with a slightly sad expression stands in the rain. The camera slowly zooms in and stops on the moment it looks up at the sky.") .firstFrameUrl("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260126/ixdxvt/wan-kf2v-blue-1.png") .lastFrameUrl("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260126/nhtdrc/wan-kf2v-blue-2.png") .resolution("720P") .promptExtend(true) .watermark(true) .build(); System.out.println("please wait..."); VideoSynthesisResult result = vs.call(param); System.out.println(JsonUtils.toJson(result)); } public static void main(String[] args) { try { image2video(); } catch (ApiException | NoApiKeyException | InputRequiredException e) { System.out.println(e.getMessage()); } System.exit(0); }}
Step 1: Create a task to get the task ID
Copy
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \ -H 'X-DashScope-Async: enable' \ -H "Authorization: Bearer $DASHSCOPE_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "model": "wan2.2-kf2v-flash", "input": { "first_frame_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260126/ixdxvt/wan-kf2v-blue-1.png", "last_frame_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260126/nhtdrc/wan-kf2v-blue-2.png", "prompt": "A cute blue monster with a slightly sad expression stands in the rain. The camera slowly zooms in and stops on the moment it looks up at the sky." }, "parameters": { "resolution": "720P", "prompt_extend": true, "watermark": true }}'
Step 2: Get the result using the task IDReplace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours, Replace {WorkspaceId} with your actual workspace ID.
Copy
curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id} \--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Sample output
video_url expires after 24 hours. Download the video promptly.
Supported models: All models.Generates smooth videos from first-frame and last-frame images.Parameters:
first_frame_url: Required. Provide the first-frame image.
last_frame_url: Required. Provide the last-frame image.
prompt: Optional (recommended). Controls how the video changes over time.
Prompt
First frame
Last frame
Output video
Realistic style. A curious black kitten looks up at the sky. The camera starts at eye level and gradually rises until it captures the kitten’s curious gaze from above.
import osfrom http import HTTPStatusfrom dashscope import VideoSynthesisimport dashscope# The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region. Get your URL: https://www.alibabacloud.com/help/en/model-studio/image-to-video-by-first-and-last-frame-api-referencedashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'# API keys differ by region. Get your API key: https://www.alibabacloud.com/help/en/model-studio/get-api-keyapi_key = os.getenv("DASHSCOPE_API_KEY", "YOUR_API_KEY")def sample_async_call_kf2v(): # Asynchronous call returns a task_id rsp = VideoSynthesis.async_call(api_key=api_key, model="wan2.2-kf2v-flash", prompt="Realistic style. A curious black kitten looks up at the sky. The camera starts at eye level and gradually rises until it captures the kitten’s curious gaze from above.", first_frame_url="https://wanx.alicdn.com/material/20250318/first_frame.png", last_frame_url="https://wanx.alicdn.com/material/20250318/last_frame.png", duration=5, # Fixed at 5 seconds. Do not change. prompt_extend=True, watermark=True) print(rsp) if rsp.status_code == HTTPStatus.OK: print("task_id: %s" % rsp.output.task_id) else: print('Failed, status_code: %s, code: %s, message: %s' % (rsp.status_code, rsp.code, rsp.message)) # Wait for asynchronous task to complete rsp = VideoSynthesis.wait(task=rsp, api_key=api_key) print(rsp) if rsp.status_code == HTTPStatus.OK: print(rsp.output.video_url) else: print('Failed, status_code: %s, code: %s, message: %s' % (rsp.status_code, rsp.code, rsp.message))if __name__ == '__main__': sample_async_call_kf2v()
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;import com.alibaba.dashscope.exception.ApiException;import com.alibaba.dashscope.exception.InputRequiredException;import com.alibaba.dashscope.exception.NoApiKeyException;import com.alibaba.dashscope.utils.JsonUtils;import com.alibaba.dashscope.utils.Constants;public class Image2Video { static { // The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region. Get your URL: https://www.alibabacloud.com/help/en/model-studio/image-to-video-by-first-and-last-frame-api-reference Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"; } // If you have not set an environment variable, replace the line below with: apiKey="sk-xxx" // API keys differ by region. Get your API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key static String apiKey = System.getenv("DASHSCOPE_API_KEY"); public static void image2video() throws ApiException, NoApiKeyException, InputRequiredException { VideoSynthesis vs = new VideoSynthesis(); VideoSynthesisParam param = VideoSynthesisParam.builder() .apiKey(apiKey) .model("wan2.2-kf2v-flash") .prompt("Realistic style. A curious black kitten looks up at the sky. The camera starts at eye level and gradually rises until it captures the kitten’s curious gaze from above.") .firstFrameUrl("https://wanx.alicdn.com/material/20250318/first_frame.png") .lastFrameUrl("https://wanx.alicdn.com/material/20250318/last_frame.png") .resolution("720P") .promptExtend(true) .watermark(true) .build(); // Asynchronous call VideoSynthesisResult task = vs.asyncCall(param); System.out.println(JsonUtils.toJson(task)); System.out.println("please wait..."); // Get result VideoSynthesisResult result = vs.wait(task, apiKey); System.out.println(JsonUtils.toJson(result)); } public static void main(String[] args) { try { image2video(); } catch (ApiException | NoApiKeyException | InputRequiredException e) { System.out.println(e.getMessage()); } System.exit(0); }}
Step 1: Create a task to get the task ID
Copy
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \ -H 'X-DashScope-Async: enable' \ -H "Authorization: Bearer $DASHSCOPE_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "model": "wan2.2-kf2v-flash", "input": { "first_frame_url": "https://wanx.alicdn.com/material/20250318/first_frame.png", "last_frame_url": "https://wanx.alicdn.com/material/20250318/last_frame.png", "prompt": "Realistic style. A curious black kitten looks up at the sky. The camera starts at eye level and gradually rises until it captures the kitten’s curious gaze from above." }, "parameters": { "resolution": "720P", "prompt_extend": true, "watermark": true }}'
Step 2: Get the result using the task IDReplace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours, Replace {WorkspaceId} with your actual workspace ID.
Copy
curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id} \--header "Authorization: Bearer $DASHSCOPE_API_KEY"
import osfrom http import HTTPStatus# DashScope SDK >= 1.23.4from dashscope import VideoSynthesisimport dashscopedashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'# Get the DashScope API key (which is your Model Studio API key) from an environment variable.api_key = os.getenv("DASHSCOPE_API_KEY")# ========== Image input method (choose one) ==========# [Method 1] Use a public image URLfirst_frame_url = "https://wanx.alicdn.com/material/20250318/first_frame.png"last_frame_url = "https://wanx.alicdn.com/material/20250318/last_frame.png"# [Method 2] Use a local file path (file:// + file path)# Use an absolute path:# first_frame_url = "file://" + "/path/to/your/first_frame.png" # Linux/macOS# last_frame_url = "file://" + "C:/path/to/your/last_frame.png" # Windows# Or use a relative path:# first_frame_url = "file://" + "./first_frame.png" # Use your actual path.# last_frame_url = "file://" + "./last_frame.png" # Use your actual path.def sample_sync_call_kf2v(): print('please wait...') rsp = VideoSynthesis.call(api_key=api_key, model="wan2.2-kf2v-flash", prompt="Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.", first_frame_url=first_frame_url, last_frame_url=last_frame_url, resolution="720P", prompt_extend=True) print(rsp) if rsp.status_code == HTTPStatus.OK: print(rsp.output.video_url) else: print('Failed, status_code: %s, code: %s, message: %s' % (rsp.status_code, rsp.code, rsp.message))if __name__ == '__main__': sample_sync_call_kf2v()
Dimensions: Determined by the first-frame image and the resolution setting.
The model preserves the first-frame's aspect ratio and scales total pixel count to the target. Output dimensions are adjusted automatically to be divisible by 16 (encoding requirement).
Example: 750×1000 input (3:4) with resolution="720P" (target ≈920K pixels) may output 816×1104 (≈0.739 ratio, ≈900K pixels, both divisible by 16).
Q: How do I generate a video with a specific aspect ratio (such as 3:4)?
A: The API doesn't support direct aspect ratio control -- only resolution.The resolution parameter controls pixel count, not aspect ratio. The model preserves the first-frame's aspect ratio (first_frame_url) with minor adjustments for encoding (dimensions must be multiples of 16). For 3:4 video, upload a 3:4 first-frame image.
Example: 750×1000 input (3:4) with resolution="720P" (target ≈920K pixels) may output 816×1104 (≈0.739 ratio, ≈900K pixels, both divisible by 16).
Q: Why do I get a “url error, please check url!” error when running the SDK code?
A: Ensure your SDK version meets the minimum requirement: DashScope Python SDK ≥ 1.25.8 or DashScope Java SDK ≥ 2.22.6. Older versions may show "url error, please check url!" errors. Upgrade the SDK.