Text-to-video

更新时间:
复制 MD 格式

The Wan text-to-video models accept multimodal input (text, images, and audio) and generate videos up to 15 seconds long at up to 1080P resolution.

  • Core capabilities: Generates videos from 2 to 15 seconds long, at 480P, 720P, or 1080P resolution. Supports intelligent prompt rewriting and watermarking.

  • Audio capabilities: Automatically dubs videos or accepts custom audio files for synchronized audio and video. (wan2.7/wan2.6/wan2.5)

  • Multi-shot narrative: Creates videos with multiple shots while keeping the main subject consistent across transitions. (wan2.7/wan2.6)

Quick access: Try it online (China (Beijing) | Singapore | US (Virginia)) | API reference | Prompt guide

Getting started

Input prompt

Output video (multi-shot, audio-enabled)

Shot 1 The sequence opens with an extreme long shot. The camera starts at a low angle near the ground and moves forward across the grassland while tilting upward. As the camera rises from ground level to a slightly elevated position, the cheetah enters the frame from the left. This shot establishes a clear spatial relationship by placing the cheetah and the fleeing antelope on the same path. Shot 2 The camera descends to a near-ground level and tracks to the right, parallel to the cheetah. The cheetah is kept consistently left of center, which creates a continuous lateral shift in the background. For a period, the camera movement remains steady to enhance the sense of speed and spatial continuity. Shot 3 While still moving to the right, the camera executes a slight arc along the inside of the cheetah's path. This movement creates a subtle orbiting effect in the frame as the camera continues to follow the subject. Shot 4 The camera gradually slows its lateral movement and becomes relatively stable while simultaneously zooming in. This action narrows the focus to the shrinking distance between the cheetah and the antelope. Shot 5 The camera again moves forward and slightly downward, hugging the ground to close the distance between the two animals. The shot stops at the critical point just as the cheetah's forelimbs are about to reach the antelope's hindquarters, which creates intense pressure and tension. This action is synchronized with a crescendoing symphonic score, a densifying drumbeat, and the sounds of wind and footsteps that drive the rhythm. In the final moment, the music volume drops, leaving only ambient and rhythmic sounds to create a brief pause.

Before making an API call, get an API key and set it as an environment variable. To use an SDK, install the DashScope SDK. All examples use asynchronous calls that submit a video generation task and poll for the result.

Python SDK

Important

Ensure that your DashScope SDK for Python is version 1.25.16 or later before you run the following code.

If the version is too low, errors such as "url error, please check url!" may occur. To update the SDK, see Install the SDK.

import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope

# The following URL is for the Beijing region. URLs differ by region.
dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'
# API keys vary by region. To obtain an API key, visit https://help.aliyun.com/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY", "YOUR_API_KEY")

print('please wait...')
rsp = VideoSynthesis.call(api_key=api_key,
                          model='wan2.7-t2v-2026-04-25',
                          prompt='Shot 1: Start with a long shot. The camera begins at a low angle near the ground and moves forward, advancing over the grassland while simultaneously moving upward. The perspective gradually rises from ground level to a slightly elevated position, bringing a cheetah into the frame from the left. The cheetah and a fleeing antelope ahead are on the same pursuit path, establishing a clear foreground-background spatial relationship. Shot 2: Move down to a position near the ground and pan right, following the cheetah\'s movement. Maintain a steady, lateral tracking shot, keeping the subject slightly left of the frame\'s center. The background shows a continuous lateral movement effect. The camera movement stays stable for a while to enhance the sense of speed and spatial continuity. Shot 3: While continuing to move right, execute a slight arc movement along the inside of the cheetah\'s path. This creates a subtle orbiting effect in the frame, but the camera always moves in the same direction as the subject. Shot 4: Gradually slow the lateral movement, transitioning to a relatively stable camera position. At the same time, zoom in, progressively narrowing the visual focus to the shrinking distance between the cheetah and the antelope. Shot 5: Move forward and slightly downward again, closing in on the space between the two animals near the ground. Freeze the frame at the critical moment just as the cheetah\'s forelimbs are about to reach the antelope\'s hind legs, creating a strong sense of pressure and tension. This is accompanied by a swelling symphonic score, an increasingly dense drumbeat, and the sounds of wind and footsteps to build the rhythm. In the final moments, the music fades, leaving only ambient and rhythmic sounds for a brief pause.',
                          resolution="720P",
                          ratio="16:9",
                          duration=15,
                          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))

Java SDK

Important

Ensure that your DashScope SDK for Java is version 2.22.14 or later before you run the following code.

If the version is too low, errors such as "url error, please check url!" may occur. To update the SDK, see Install the SDK.

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 Text2Video {

    static {
        // The following URL is for the Beijing region. URLs differ by region.
        Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
    }

    // If you have not configured environment variables, replace the following line with your Model Studio API key: apiKey="sk-xxx"
    // The API keys are different for each region. To obtain an API key, see https://help.aliyun.com/en/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void text2video() throws ApiException, NoApiKeyException, InputRequiredException {
        VideoSynthesis vs = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.7-t2v-2026-04-25")
                        .prompt("Shot 1: Open with a long shot. The camera starts at a low angle near the ground, moves forward across the grassland, and simultaneously tilts up. The perspective rises from ground level to a slightly elevated position, bringing a cheetah into the frame from the left. The cheetah and a fleeing antelope are now on the same pursuit path, establishing a clear spatial relationship between them. Shot 2: The camera moves down, returning to near ground level. It then pans right, tracking the cheetah's movement in a steady, parallel follow shot. The subject stays just left of center frame, creating a continuous lateral motion in the background. The camera remains stable for a while to emphasize the sense of speed and spatial continuity. Shot 3: While continuing to pan right, the camera makes a slight arcing movement along the inside of the cheetah's path. This creates a subtle circling effect in the frame, but the camera always moves in the same direction as the subject. Shot 4: Gradually slow the lateral movement, transitioning to a relatively stable camera position. Simultaneously, zoom in, compressing the visual focus onto the shrinking distance between the cheetah and the antelope. Shot 5: The camera moves forward and slightly down again, closing in on the space between the two animals near the ground. It freezes at the critical moment when the cheetah's forelimbs are just about to reach the antelope, creating intense pressure and tension. The scene is accompanied by a swelling symphonic score, a quickening drumbeat, and the sounds of wind and footsteps to drive the rhythm. In the final moments, the music fades, leaving only ambient and rhythmic sounds for a brief pause.")
                        .duration(15)
                        .resolution("720P")
                        .ratio("16:9")
                        .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 {
            text2video();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

Step 1: Create a task to get the task ID

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.7-t2v-2026-04-25",
    "input": {
        "prompt": "Shot 1: Opening with an extreme long shot. The camera starts from a low position close to the ground and moves forward, pushing in towards the prairie while simultaneously moving upward. The viewpoint gradually rises from ground level to a slightly elevated position, allowing the cheetah to enter the frame from the left on the same chase path as the fleeing antelope ahead. This establishes a clear foreground-background spatial relationship. Shot 2: Move down to return to a position close to the ground, and move right along the cheetah''s direction of motion, maintaining a stable, parallel tracking shot from the side. The subject remains consistently to the left of the center of the frame, creating a continuous lateral movement effect in the background. During this phase, the camera movement remains steady for a period to enhance the sense of speed and spatial continuity. Shot 3: While continuing to move right, execute a slight arcing movement along the inside of the cheetah''s path. This creates a subtle orbiting effect in the frame while always keeping the same direction as the subject. Shot 4: Gradually slow down the lateral movement and transition to a relatively stable camera position. Simultaneously, execute a zoom-in, progressively compressing the visual focus onto the shrinking distance between the cheetah and the antelope. Shot 5: Move forward again and slightly downward, getting close to the ground to close in on the space between the two animals. Freeze the frame at the critical moment when the cheetah''s forelegs are about to reach the antelope''s rear, creating a strong sense of pressure and tension. This is accompanied by a gradually intensifying symphonic score, an increasingly dense drumbeat, and the sounds of wind and footsteps to drive the rhythm. In the final stage, lower the music, leaving only ambient and rhythmic sounds to create a brief pause."
    },
    "parameters": {
        "resolution": "720P",
        "ratio": "16:9",
        "prompt_extend": true,
        "watermark": true,
        "duration": 15
    }
}'

Step 2: Retrieve the result using the task ID

Replace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours.

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Sample code: wan2.6 and earlier models

Python SDK

Important

Ensure that your DashScope SDK for Python is version 1.25.16 or later before you run the following code.

If the version is too low, errors such as "url error, please check url!" may occur. To update the SDK, see Install the SDK.

import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope

# The following URL is for the Beijing region. URLs differ by region.
dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'
# The API key varies by region. For more information about how to get an API key, see https://help.aliyun.com/zh/model-studio/get-api-key.
api_key = os.getenv("DASHSCOPE_API_KEY", "YOUR_API_KEY")

print('please wait...')
rsp = VideoSynthesis.call(api_key=api_key,
                          model='wan2.6-t2v',
                          prompt='A thrilling detective chase story with cinematic storytelling. Shot 1 [0-3s]: Wide shot of a rainy New York street at night, neon lights flickering, a detective in a black trench coat walking briskly. Shot 2 [3-6s]: Medium shot of the detective entering an old building, rain soaking his coat, the door closing slowly behind him. Shot 3 [6-9s]: Close-up of the detectives focused, determined eyes as distant sirens wail and he frowns slightly in thought. Shot 4 [9-12s]: Medium shot of the detective moving carefully down a dim hallway, his flashlight illuminating the path ahead. Shot 5 [12-15s]: Close-up of the detective discovering a key clue, his face lighting up with sudden realization.',
                          size="1280*720",
                          duration=15,
                          shot_type="multi",
                          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))

Java SDK

Important

Ensure that your DashScope SDK for Java is version 2.22.14 or later before you run the following code.

If the version is too low, errors such as "url error, please check url!" may occur. To update the SDK, see Install the SDK.

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 Text2Video {

    static {
        // The following URL is for the Beijing region. URLs differ by region.
        Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
    }

    // If you have not configured environment variables, replace the following line with apiKey="sk-xxx". Use your Model Studio API key.
    // The API key varies by region. For more information about how to get an API key, see https://help.aliyun.com/zh/model-studio/get-api-key.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void text2video() throws ApiException, NoApiKeyException, InputRequiredException {
        VideoSynthesis vs = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.6-t2v")
                        .prompt("A thrilling detective chase story with cinematic storytelling. Shot 1 [0-3s]: Wide shot of a rainy New York street at night, neon lights flickering, a detective in a black trench coat walking briskly. Shot 2 [3-6s]: Medium shot of the detective entering an old building, rain soaking his coat, the door closing slowly behind him. Shot 3 [6-9s]: Close-up of the detectives focused, determined eyes as distant sirens wail and he frowns slightly in thought. Shot 4 [9-12s]: Medium shot of the detective moving carefully down a dim hallway, his flashlight illuminating the path ahead. Shot 5 [12-15s]: Close-up of the detective discovering a key clue, his face lighting up with sudden realization.")
                        .duration(15)
                        .size("1280*720")
                        .shotType("multi")
                        .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 {
            text2video();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

Step 1: Create a task to get the task ID

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.6-t2v",
    "input": {
        "prompt": "A thrilling detective chase story with cinematic storytelling. Shot 1 [0-3s]: Wide shot of a rainy New York street at night, neon lights flickering, a detective in a black trench coat walking briskly. Shot 2 [3-6s]: Medium shot of the detective entering an old building, rain soaking his coat, the door closing slowly behind him. Shot 3 [6-9s]: Close-up of the detectives focused, determined eyes as distant sirens wail and he frowns slightly in thought. Shot 4 [9-12s]: Medium shot of the detective moving carefully down a dim hallway, his flashlight illuminating the path ahead. Shot 5 [12-15s]: Close-up of the detective discovering a key clue, his face lighting up with sudden realization."
    },
    "parameters": {
        "size": "1280*720",
        "prompt_extend": true,
        "watermark": true,
        "duration": 15,
        "shot_type":"multi"
    }
}'

Step 2: Retrieve the result using the task ID

Replace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours.

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Sample output

video_url is valid for 24 hours. Download the video promptly.
{
    "request_id": "c1209113-8437-424f-a386-xxxxxx",
    "output": {
        "task_id": "966cebcd-dedc-4962-af88-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-sh.oss-accelerate.aliyuncs.com/xxx.mp4?Expires=xxx",
         ...
    },
    ...
}

Availability

  • Supported models vary by region. Resources are isolated between regions. For supported models in each region, see the Model Studio console.

  • When making a call, make sure your model, endpoint URL, and API key all belong to the same region. Cross-region calls fail.

Note

The sample code in this topic applies to the China (Beijing) region.

Core capabilities

Create multi-shot videos

Supported models: wan2.7 and wan2.6 series.

Description: Automatically switches between shots — for example, from a wide shot to a close-up. Ideal for music videos and cinematic narratives.

Parameters:

  • wan2.7: The shot_type parameter is not required. Describe shot structure in the prompt using natural language, such as timestamps to define shots. If the prompt does not contain shot structure descriptions, the model analyzes semantics and automatically determines whether to generate a single-shot or multi-shot video.

  • wan2.6: The shot_type parameter must be set to "multi", and the prompt_extend parameter must be set to true to enable intelligent rewriting to optimize shot descriptions.

Input prompt

Output video (wan2.7)

A vision of harmony between future technology and nature. Shot 1 [0-2s]: Wide shot of an aerial garden in a futuristic city, floating plants swaying gently in the breeze. Shot 2 [2-4s]: A robot gardener carefully trims plants with precise, graceful movements. Shot 3 [4-7s]: Sunlight streams through a transparent dome, illuminating the entire garden and showcasing the perfect fusion of technology and nature. Shot 4 [7-10s]: The camera pulls back to reveal the grand scale of the entire futuristic city, with the aerial garden as just one part of it.

This is a martial arts film clip centered on a hardcore duel. On a stone clearing under the midday sun, two men charge at each other. One strikes with his palm, but his opponent spins and blocks with his arm, the impact kicking up dust from the ground. They then exchange rapid punches and palm strikes in a tight space. One leaps into the air for a series of heavy kicks, forcing his opponent to cross his arms to block and slide back several meters, leaving clear white marks on the stone surface. Finally, they stand apart, breathing heavily and locking eyes. The scene presents a realistic action texture with sharp lighting, creating a tone that shifts from powerful explosion to a tense standoff.

This is a school film clip centered on the tentative feelings of a teenage crush. As the sun sets over the playground, two people stand side-by-side. The boy, holding a basketball, asks with a shifting gaze, 'Are you going to the party next week?' The girl, fiddling with a lock of her hair, tentatively replies, 'If... you're going, then I'll go.' Hearing her answer, the boy swallows, his joy barely suppressed as he tries to force a calm expression, staring into the distance. The scene is rendered in clear, natural warm tones, creating a delicate and restrained mood of first love.

Python SDK

Ensure that your DashScope SDK for Python is version 1.25.16 or later. To update the SDK, see Install the SDK .
import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope

# The following URL is for the Beijing region. URLs differ by region.
dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'

# If you have not configured environment variables, replace the following line with api_key="sk-xxx". Use your Model Studio API key.
# The API key varies by region. For more information about how to get an API key, see https://help.aliyun.com/zh/model-studio/get-api-key.
api_key = os.getenv("DASHSCOPE_API_KEY")

def sample_async_call_t2v():
    # Asynchronous invocation that returns a task_id.
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model='wan2.7-t2v-2026-04-25',
                                    prompt='A vision of harmony between future technology and nature. Shot 1 [0-2s]: Wide shot of an aerial garden in a futuristic city, floating plants swaying gently in the breeze. Shot 2 [2-4s]: A robot gardener carefully trims plants with precise, graceful movements. Shot 3 [4-7s]: Sunlight streams through a transparent dome, illuminating the entire garden and showcasing the perfect fusion of technology and nature. Shot 4 [7-10s]: The camera pulls back to reveal the grand scale of the entire futuristic city, with the aerial garden as just one part of it.',
                                    resolution='720P',
                                    ratio='16:9',
                                    duration=10,
                                    prompt_extend=True,
                                    watermark=True,
                                    negative_prompt="",
                                    seed=12345)
    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 the 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_t2v()

Java SDK

Ensure that your DashScope SDK for Java is version 2.22.14 or later. To update the SDK, see Install the SDK .
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 Text2Video {
    static {
        // The following URL is for the Beijing region. URLs differ by region.
        Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
    }

    // If you have not configured environment variables, replace the following line with apiKey="sk-xxx". Use your Model Studio API key.
    // The API key varies by region. For more information about how to get an API key, see https://help.aliyun.com/zh/model-studio/get-api-key.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void text2video() throws ApiException, NoApiKeyException, InputRequiredException {
        VideoSynthesis vs = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.7-t2v-2026-04-25")
                        .prompt("A vision of harmony between future technology and nature. Shot 1 [0-2s]: Wide shot of an aerial garden in a futuristic city, floating plants swaying gently in the breeze. Shot 2 [2-4s]: A robot gardener carefully trims plants with precise, graceful movements. Shot 3 [4-7s]: Sunlight streams through a transparent dome, illuminating the entire garden and showcasing the perfect fusion of technology and nature. Shot 4 [7-10s]: The camera pulls back to reveal the grand scale of the entire futuristic city, with the aerial garden as just one part of it.")
                        .negativePrompt("")
                        .resolution("720P")
                        .ratio("16:9")
                        .duration(10)
                        .promptExtend(true)
                        .watermark(true)
                        .seed(12345)
                        .build();
        // Asynchronous invocation
        VideoSynthesisResult task = vs.asyncCall(param);
        System.out.println(JsonUtils.toJson(task));
        System.out.println("please wait...");

        // Get the result
        VideoSynthesisResult result = vs.wait(task, apiKey);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            text2video();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

Step 1: Create a task to get the task ID

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.7-t2v-2026-04-25",
    "input": {
        "prompt": "A vision of harmony between future technology and nature. Shot 1 [0-2s]: Wide shot of an aerial garden in a futuristic city, floating plants swaying gently in the breeze. Shot 2 [2-4s]: A robot gardener carefully trims plants with precise, graceful movements. Shot 3 [4-7s]: Sunlight streams through a transparent dome, illuminating the entire garden and showcasing the perfect fusion of technology and nature. Shot 4 [7-10s]: The camera pulls back to reveal the grand scale of the entire futuristic city, with the aerial garden as just one part of it."
    },
    "parameters": {
        "resolution": "720P",
        "ratio": "16:9",
        "watermark": true,
        "prompt_extend": true,
        "duration": 10
    }
}'

Step 2: Retrieve the result using the task ID

Replace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours.

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Sample code: wan2.6

Python SDK

Ensure that your DashScope SDK for Python is version 1.25.16 or later. To update the SDK, see Install the SDK .
import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope

# The following URL is for the Beijing region. URLs differ by region.
dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'

# If you have not configured the environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx"
# API keys vary by region. To obtain an API key, see https://help.aliyun.com/zh/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

def sample_async_call_t2v():
    # Make an asynchronous invocation to return a task_id.
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model='wan2.6-t2v',
                                    prompt='Show a beautiful vision of the future where technology and nature coexist in harmony. Shot 1 [0-2s]: A panoramic view of a hanging garden in a futuristic city, with floating plants swaying in the breeze. Shot 2 [2-4s]: A robot gardener meticulously prunes the plants with precise and elegant movements. Shot 3 [4-7s]: Sunlight streams through a transparent dome, illuminating the entire garden and showcasing the perfect fusion of technology and nature. Shot 4 [7-10s]: The camera pulls back to reveal the magnificent view of the entire futuristic city, of which the hanging garden is just one part.',
                                    size='1280*720',
                                    duration=10,
                                    shot_type='multi',
                                    prompt_extend=True,
                                    watermark=True,
                                    negative_prompt="",
                                    seed=12345)
    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 the 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_t2v()

Java SDK

Ensure that your DashScope Java SDK version is 2.22.14 or later. To update the SDK, see Install the SDK .
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 Text2Video {
    static {
        // The following URL is for the Beijing region. URLs differ by region.
        Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
    }

    // If you have not configured the environment variable, replace the following line with your Model Studio API key: apiKey="sk-xxx"
    // API keys vary by region. To obtain an API key, see https://help.aliyun.com/zh/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void text2video() throws ApiException, NoApiKeyException, InputRequiredException {
        VideoSynthesis vs = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.6-t2v")
                        .prompt("Show a beautiful vision of the future where technology and nature coexist in harmony. Shot 1 [0-2s]: A panoramic view of a hanging garden in a futuristic city, with floating plants swaying in the breeze. Shot 2 [2-4s]: A robot gardener meticulously prunes the plants with precise and elegant movements. Shot 3 [4-7s]: Sunlight streams through a transparent dome, illuminating the entire garden and showcasing the perfect fusion of technology and nature. Shot 4 [7-10s]: The camera pulls back to reveal the magnificent view of the entire futuristic city, of which the hanging garden is just one part.")
                        .negativePrompt("")
                        .size("1280*720")
                        .duration(10)
                        .shotType("multi")
                        .promptExtend(true)
                        .watermark(true)
                        .seed(12345)
                        .build();
        // Asynchronous invocation
        VideoSynthesisResult task = vs.asyncCall(param);
        System.out.println(JsonUtils.toJson(task));
        System.out.println("please wait...");

        // Get the result
        VideoSynthesisResult result = vs.wait(task, apiKey);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            text2video();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

Step 1: Create a task to get the task ID

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.6-t2v",
    "input": {
        "prompt": "Show a beautiful vision of the future where technology and nature coexist in harmony. Shot 1 [0-2s]: A panoramic view of a hanging garden in a futuristic city, with floating plants swaying in the breeze. Shot 2 [2-4s]: A robot gardener meticulously prunes the plants with precise and elegant movements. Shot 3 [4-7s]: Sunlight streams through a transparent dome, illuminating the entire garden and showcasing the perfect fusion of technology and nature. Shot 4 [7-10s]: The camera pulls back to reveal the magnificent view of the entire futuristic city, of which the hanging garden is just one part."
    },
    "parameters": {
        "size": "1280*720",
        "prompt_extend": true,
        "watermark": true,
        "duration": 10,
        "shot_type": "multi"
    }
}'

Step 2: Retrieve the result using the task ID

Replace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours.

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Synchronize audio and video

Supported models: wan2.7, wan2.6, and wan2.5 series.

Description: Characters in photos can "speak" or sing, with mouth movements matching the audio. For more examples, see Video audio generation.

Parameters:

  • Provide an audio file: Set audio_url. The model synchronizes mouth movements with the audio file.

  • Automatic dubbing: Without an audio_url, the model automatically generates audio-enabled video by default — adding background sound effects, music, or voices based on the visual content.

Input example

Output video (audio-enabled video)

Input prompt: An epic yet adorable scene. A tiny, cute cartoon cat general wears intricately detailed golden armor and a slightly oversized helmet. He stands bravely on a cliff. He rides a small but heroic warhorse and says: "Dark clouds hang over the snow-capped mountains of Qinghai. A lonely fortress gazes toward the Yumen Pass. Golden armor pierced by sandstorms of a hundred battles. We will not return until Loulan is conquered.". Below the cliff, a massive, endless army of mice charges forward with makeshift weapons. This is a dramatic, large-scale battle scene inspired by ancient Chinese epics. Dark clouds gather above snowy peaks in the distance. The overall mood is a humorous, epic blend of "adorable" and "majestic".

Input audio:

Python SDK

Ensure that your DashScope SDK for Python is version 1.25.16 or later. To update the SDK, see Install the SDK .
import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope

# The following URL is for the Beijing region. URLs differ by region.
dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'

# If you have not configured environment variables, replace the following line with api_key="sk-xxx". Use your Model Studio API key.
# The API key varies by region. For more information about how to get an API key, see https://help.aliyun.com/zh/model-studio/get-api-key.
api_key = os.getenv("DASHSCOPE_API_KEY")

def sample_async_call_t2v():
    # Asynchronous invocation that returns a task_id.
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model='wan2.7-t2v-2026-04-25',
                                    prompt='An epic yet adorable scene. A tiny, cute cartoon cat general wears intricately detailed golden armor and a slightly oversized helmet. He stands bravely on a cliff. He rides a small but heroic warhorse and says: "Dark clouds hang over the snow-capped mountains of Qinghai. A lonely fortress gazes toward the Yumen Pass. Golden armor pierced by sandstorms of a hundred battles. We will not return until Loulan is conquered.". Below the cliff, a massive, endless army of mice charges forward with makeshift weapons. This is a dramatic, large-scale battle scene inspired by ancient Chinese epics. Dark clouds gather above snowy peaks in the distance. The overall mood is a humorous, epic blend of "adorable" and "majestic".',
                                    audio_url='https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250923/hbiayh/%E4%BB%8E%E5%86%9B%E8%A1%8C.mp3',
                                    resolution='720P',
                                    ratio='16:9',
                                    duration=10,
                                    prompt_extend=True,
                                    watermark=True,
                                    negative_prompt="",
                                    seed=12345)
    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 the 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_t2v()

Java SDK

Ensure that your DashScope SDK for Java is version 2.22.14 or later. To update the SDK, see Install the SDK .
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 Text2Video {
    static {
        // The following URL is for the Beijing region. URLs differ by region.
        Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
    }

    // If you have not configured environment variables, replace the following line with apiKey="sk-xxx". Use your Model Studio API key.
    // The API key varies by region. For more information about how to get an API key, see https://help.aliyun.com/zh/model-studio/get-api-key.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void text2video() throws ApiException, NoApiKeyException, InputRequiredException {
        VideoSynthesis vs = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.7-t2v-2026-04-25")
                        .prompt("An epic yet adorable scene. A tiny, cute cartoon cat general wears intricately detailed golden armor and a slightly oversized helmet. He stands bravely on a cliff. He rides a small but heroic warhorse and says: \"Dark clouds hang over the snow-capped mountains of Qinghai. A lonely fortress gazes toward the Yumen Pass. Golden armor pierced by sandstorms of a hundred battles. We will not return until Loulan is conquered.\". Below the cliff, a massive, endless army of mice charges forward with makeshift weapons. This is a dramatic, large-scale battle scene inspired by ancient Chinese epics. Dark clouds gather above snowy peaks in the distance. The overall mood is a humorous, epic blend of \"adorable\" and \"majestic\".")
                        .audioUrl("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250923/hbiayh/%E4%BB%8E%E5%86%9B%E8%A1%8C.mp3")
                        .negativePrompt("")
                        .resolution("720P")
                        .ratio("16:9")
                        .duration(10)
                        .promptExtend(true)
                        .watermark(true)
                        .seed(12345)
                        .build();
        // Asynchronous invocation
        VideoSynthesisResult task = vs.asyncCall(param);
        System.out.println(JsonUtils.toJson(task));
        System.out.println("please wait...");

        // Get the result
        VideoSynthesisResult result = vs.wait(task, apiKey);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            text2video();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

Step 1: Create a task to get the task ID

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.7-t2v-2026-04-25",
    "input": {
        "prompt": "An epic yet adorable scene. A tiny, cute cartoon cat general wears intricately detailed golden armor and a slightly oversized helmet. He stands bravely on a cliff. He rides a small but heroic warhorse and says: \"Dark clouds hang over the snow-capped mountains of Qinghai. A lonely fortress gazes toward the Yumen Pass. Golden armor pierced by sandstorms of a hundred battles. We will not return until Loulan is conquered.\". Below the cliff, a massive, endless army of mice charges forward with makeshift weapons. This is a dramatic, large-scale battle scene inspired by ancient Chinese epics. Dark clouds gather above snowy peaks in the distance. The overall mood is a humorous, epic blend of \"adorable\" and \"majestic\".",
        "audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250923/hbiayh/%E4%BB%8E%E5%86%9B%E8%A1%8C.mp3"
    },
    "parameters": {
        "resolution": "720P",
        "ratio": "16:9",
        "watermark": true,
        "prompt_extend": true,
        "duration": 10
    }
}'

Step 2: Retrieve the result using the task ID

Replace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours.

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Sample code: wan2.6

Python SDK

Ensure that your DashScope SDK for Python is version 1.25.16 or later. To update the SDK, see Install the SDK .
import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope

# The following URL is for the Beijing region. The URLs for other regions are different. To obtain the URL for your region, visit: https://help.aliyun.com/en/model-studio/text-to-video-api-reference
dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'

# If you have not configured the environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx"
# The API keys are different for each region. To obtain an API key, visit: https://help.aliyun.com/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

def sample_async_call_t2v():
    # Make an asynchronous invocation to return a task_id.
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model='wan2.6-t2v',
                                    prompt='An epic and cute scene. A small, cute cartoon cat general, wearing exquisite, detailed golden armor and a slightly oversized helmet, stands bravely on a cliff. He is riding a small but heroic warhorse and says, "The long clouds of Qinghai darken the snowy mountains, A lonely city looks out towards the Jade Gate Pass. The yellow sand has pierced golden armor in a hundred battles, Until we defeat the Loulan, we will not return." Below the cliff, a vast and endless army of mice is charging forward with makeshift weapons. This is a dramatic, large-scale battle scene inspired by ancient Chinese war epics. In the distance, over the snowy mountains, the sky is filled with dark clouds. The overall atmosphere is a humorous and epic fusion of "cute" and "domineering".',
                                    audio_url='https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250923/hbiayh/Army_March.mp3',
                                    size='1280*720',
                                    duration=10,
                                    prompt_extend=True,
                                    watermark=True,
                                    negative_prompt="",
                                    seed=12345)
    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 the 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_t2v()

Java SDK

Ensure that your DashScope SDK for Java is version 2.22.14 or later. To update the SDK, see Install the SDK .
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 Text2Video {
    static {
        // The following URL is for the Beijing region. URLs differ by region.
        Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
    }

    // If the environment variable is not configured, replace the following line with your Model Studio API key: apiKey="sk-xxx"
    // The API key varies by region. To obtain an API key, visit https://help.aliyun.com/en/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void text2video() throws ApiException, NoApiKeyException, InputRequiredException {
        VideoSynthesis vs = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.6-t2v")
                        .prompt("An epic and cute scene. A small, adorable cartoon cat general, wearing exquisite golden armor and a slightly oversized helmet, stands bravely on a cliff. He is riding a small but heroic warhorse and says, 'The long clouds of Qinghai darken the snowy mountains, a lone fortress gazes at Yumen Pass. My golden armor is worn from a hundred battles in the yellow sand. I will not return until we have conquered Loulan.' Below the cliff, a vast and endless army of mice charges forward with makeshift weapons. This is a dramatic, large-scale battle scene inspired by ancient Chinese war epics. In the distance, over the snowy mountains, the sky is filled with dark clouds. The overall atmosphere is a humorous and epic blend of 'cute' and 'domineering'.")
                        .audioUrl("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250923/hbiayh/From_the_Army.mp3")
                        .negativePrompt("")
                        .size("1280*720")
                        .duration(10)
                        .promptExtend(true)
                        .watermark(true)
                        .seed(12345)
                        .build();
        // Asynchronous invocation.
        VideoSynthesisResult task = vs.asyncCall(param);
        System.out.println(JsonUtils.toJson(task));
        System.out.println("please wait...");

        // Obtain the result.
        VideoSynthesisResult result = vs.wait(task, apiKey);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            text2video();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

Step 1: Create a task to get the task ID

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.6-t2v",
    "input": {
        "prompt": "An epically cute scene. A small, cute cartoon kitten general, wearing exquisitely detailed gold armor and a slightly oversized helmet, stands bravely on a cliff. He is riding a small but heroic warhorse and says: ''The long clouds over Qinghai darken the snowy mountains, and the lonely city gazes at Yumen Pass. My golden armor is worn from a hundred battles in the yellow sand, but I will not return until Loulan is conquered.'' Below the cliff, a vast and endless army of mice is charging forward with makeshift weapons. This is a dramatic, large-scale battle scene inspired by ancient Chinese war epics. In the distance, over the snowy mountains, the sky is filled with dark clouds. The overall atmosphere is a comical and epic fusion of ''cute'' and ''domineering''.",
        "audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250923/hbiayh/from_the_army.mp3"
    },
    "parameters": {
        "size": "1280*720",
        "watermark": true,
        "prompt_extend": true,
        "duration": 10
    }
}'

Step 2: Retrieve the result using the task ID

Replace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours.

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Generate silent videos

Supported models: wan2.2 series, wanx2.1 series.

Description: Best for scenarios that need only visual content, such as dynamic posters and silent short videos.

Parameters: The wan2.2 and earlier models generate silent videos by default. No additional configuration is needed.

Input prompt

Output video (silent video)

Rim light, low contrast, medium close-up, daylight, left-heavy composition, clean single-person shot, warm tones, soft light, sunny day light, side light, daytime. A young girl sits in a field of tall grass with two fluffy donkeys standing behind her. The girl, about eleven or twelve, wears a simple floral dress, her hair in two braids, and has an innocent smile. She sits cross-legged, gently touching the wildflowers beside her. The donkeys are sturdy, their ears pricked up, curiously looking toward the camera. Sunlight bathes the field, creating a warm and natural scene.

Python SDK

Ensure that your DashScope SDK for Python is version 1.25.16 or later. To update the SDK, see Install the SDK .
import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope

# The following URL is for the Beijing region. URLs differ by region.
dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'

# If you have not configured environment variables, replace the following line with api_key="sk-xxx". Use your Model Studio API key.
# The API key varies by region. For more information about how to get an API key, see https://help.aliyun.com/zh/model-studio/get-api-key.
api_key = os.getenv("DASHSCOPE_API_KEY")

def sample_async_call_t2v():
    # Asynchronous invocation that returns a task_id.
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model='wan2.2-t2v-plus',
                                    prompt='Rim light, low contrast, medium close-up, daylight, left-heavy composition, clean single-person shot, warm tones, soft light, sunny day light, side light, daytime. A young girl sits in a field of tall grass with two fluffy donkeys standing behind her. The girl, about eleven or twelve, wears a simple floral dress, her hair in two braids, and has an innocent smile. She sits cross-legged, gently touching the wildflowers beside her. The donkeys are sturdy, their ears pricked up, curiously looking toward the camera. Sunlight bathes the field, creating a warm and natural scene.',
                                    prompt_extend=True,
                                    size='832*480',
                                    negative_prompt="",
                                    watermark=True,
                                    seed=12345)
    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 the 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_t2v()

Java SDK

Ensure that your DashScope SDK for Java is version 2.22.14 or later. To update the SDK, see Install the SDK .
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 Text2Video {
    static {
        // The following URL is for the Beijing region. URLs differ by region.
        Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
    }

    // If you have not configured environment variables, replace the following line with apiKey="sk-xxx". Use your Model Studio API key.
    // The API key varies by region. For more information about how to get an API key, see https://help.aliyun.com/zh/model-studio/get-api-key.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void text2video() throws ApiException, NoApiKeyException, InputRequiredException {
        VideoSynthesis vs = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.2-t2v-plus")
                        .prompt("Rim light, low contrast, medium close-up, daylight, left-heavy composition, clean single-person shot, warm tones, soft light, sunny day light, side light, daytime. A young girl sits in a field of tall grass with two fluffy donkeys standing behind her. The girl, about eleven or twelve, wears a simple floral dress, her hair in two braids, and has an innocent smile. She sits cross-legged, gently touching the wildflowers beside her. The donkeys are sturdy, their ears pricked up, curiously looking toward the camera. Sunlight bathes the field, creating a warm and natural scene.")
                        .size("832*480")
                        .promptExtend(true)
                        .watermark(true)
                        .seed(12345)
                        .build();
        // Asynchronous invocation
        VideoSynthesisResult task = vs.asyncCall(param);
        System.out.println(JsonUtils.toJson(task));
        System.out.println("please wait...");

        // Get the result
        VideoSynthesisResult result = vs.wait(task, apiKey);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            text2video();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

Step 1: Create a task to get the task ID

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.2-t2v-plus",
    "input": {
        "prompt": "Rim light, low contrast, medium close-up, daylight, left-heavy composition, clean single-person shot, warm tones, soft light, sunny day light, side light, daytime. A young girl sits in a field of tall grass with two fluffy donkeys standing behind her. The girl, about eleven or twelve, wears a simple floral dress, her hair in two braids, and has an innocent smile. She sits cross-legged, gently touching the wildflowers beside her. The donkeys are sturdy, their ears pricked up, curiously looking toward the camera. Sunlight bathes the field, creating a warm and natural scene."
    },
    "parameters": {
        "size": "832*480",
        "prompt_extend": true,
        "watermark": true
    }
}'

Step 2: Retrieve the result using the task ID

Replace {task_id} with the task_id value returned by the previous API call. The task_id is valid for queries for 24 hours.

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Input audio

Output video

  • Number of videos: One.

  • Format: MP4. For more information, see Video specifications.

  • URL expiration: 24 hours.

  • Video dimensions:

    • The wan2.7 model uses the resolution and ratio parameters.

    • The wan2.6 and earlier models use the size parameter.

Billing and rate limiting

  • For free quota and pricing details, see Wanx-Text-to-Video.

  • For model rate limiting, see Wanx Series.

  • Billing details:

    • Input is free. Output is billed per successfully generated video second.

    • Failed model calls or processing errors do not incur charges or consume free quota.

    • Text-to-video also supports savings plans.

API reference

Text-to-video API reference

FAQ

Q: What code changes are needed to upgrade from wan2.6 to wan2.7?

  • Resolution control: The wan2.7 model replaces the size field with resolution (such as 720p or 1080p) and ratio (such as 16:9 or 9:16).

  • Multi-shot control: The wan2.7 model replaces the shot_type field with natural language descriptions in the prompt. For example:

    • Multiple shots: Enter "Generate a multi-shot video" or use timestamps to describe scenes, such as "Shot 1 [0-3s] Wide shot: A rainy New York street at night".

    • Single shot: Enter "Generate a single-shot video".

    • If the prompt does not include these instructions, the model interprets the semantics and automatically determines whether to generate a single-shot or multi-shot video.