Wan 2.1 (Text-to-Video)
Overview
A state-of-the-art video foundation model designed for advanced generative video tasks. Supporting Text-to-Video (T2V), it incorporates groundbreaking innovations to deliver high-quality outputs with exceptional computational efficiency.
Key Features:
Visual text generation: Generates text in both Chinese and English within videos.
Output Quality: Produces videos at resolutions up to 720P with a frame rate of approximately 16 .
Setup your API Key
If you don’t have an API key for the AI/ML API yet, feel free to use our Quickstart guide.
How to Make a Call
API Schemas
Video Generation
This endpoint creates and sends a video generation task to the server — and returns a generation ID.
The text prompt to guide video generation.
Mona Lisa puts on glasses with her hands
The negative prompt to use. Use it to address details that you don't want in the image. This could be colors, objects, scenery and even the small details (e.g. moustache, blurry, low resolution).
Random seed for reproducibility. If None, a random seed is chosen.
Aspect ratio of the generated video (16:9 or 9:16).
16:9
Possible values: Number of inference steps for sampling. Higher values give better quality but take longer.
30
Classifier-free guidance scale. Controls prompt adherence / creativity.
5
Noise schedule shift parameter. Affects temporal dynamics.
5
The sampler to use for generation.
unipc
Possible values: If set to true, the safety checker will be enabled.
Whether to enable prompt expansion.
POST /v2/generate/video/alibaba/generation HTTP/1.1
Host: api.aimlapi.com
Authorization: Bearer <YOUR_AIMLAPI_KEY>
Content-Type: application/json
Accept: */*
Content-Length: 275
{
"model": "wan/v2.1/1.3b/text-to-video",
"prompt": "Mona Lisa puts on glasses with her hands",
"negative_prompt": "text",
"seed": 1,
"aspect_ratio": "16:9",
"inference_steps": 30,
"guidance_scale": 5,
"shift": 5,
"sampler": "unipc",
"enable_safety_checker": true,
"enable_prompt_expansion": true
}
No content
Fetch the video
After sending a request for video generation, this task is added to the queue. This endpoint lets you check the status of a video generation task using its id
, obtained from the endpoint described above.
If the video generation task status is complete
, the response will include the final result — with the generated video URL and additional metadata.
GET /v2/generate/video/alibaba/generation HTTP/1.1
Host: api.aimlapi.com
Authorization: Bearer <YOUR_AIMLAPI_KEY>
Accept: */*
No content
Full Example: Generating and Retrieving the Video From the Server
The code below creates a video generation task, then automatically polls the server every 10 seconds until it finally receives the video URL.
Generation may take around 50-60 seconds for a 5-second video.
import requests
import time
# Insert your AIML API Key instead of <YOUR_AIMLAPI_KEY>:
aimlapi_key = "<YOUR_AIMLAPI_KEY>"
base_url = "https://api.aimlapi.com/v2"
# Creating and sending a video generation task to the server
def generate_video():
url = f"{base_url}/generate/video/alibaba/generation"
headers = {
"Authorization": f"Bearer {aimlapi_key}",
}
data = {
"model": "wan/v2.1/1.3b/text-to-video",
"prompt": '''
A menacing evil dragon appears in a distance above the tallest mountain, then rushes toward the camera with its jaws open, revealing massive fangs. We see it's coming.
'''
}
response = requests.post(url, json=data, headers=headers)
if response.status_code >= 400:
print(f"Error: {response.status_code} - {response.text}")
else:
response_data = response.json()
# print(response_data)
return response_data
# Requesting the result of the task from the server using the generation_id
def get_video(gen_id):
url = f"{base_url}/generate/video/alibaba/generation"
params = {
"generation_id": gen_id,
}
headers = {
"Authorization": f"Bearer {aimlapi_key}",
"Content-Type": "application/json"
}
response = requests.get(url, params=params, headers=headers)
# print("Generation:", response.json())
return response.json()
def main():
# Running video generation and getting a task id
gen_response = generate_video()
gen_id = gen_response.get("id")
print("Gen_ID: ", gen_id)
# Trying to retrieve the video from the server every 10 sec
if gen_id:
start_time = time.time()
timeout = 1000
while time.time() - start_time < timeout:
response_data = get_video(gen_id)
if response_data is None:
print("Error: No response from API")
break
status = response_data.get("status")
print("Status:", status)
if status == "waiting" or status == "active" or status == "queued" or status == "generating":
print("Still waiting... Checking again in 10 seconds.")
time.sleep(10)
else:
print("Processing complete:/n", response_data)
return response_data
print("Timeout reached. Stopping.")
return None
if __name__ == "__main__":
main()
Original: 832x480
Low-res GIF preview:

"A menacing evil dragon appears in a distance above the tallest mountain, then rushes toward the camera with its jaws open, revealing massive fangs. We see it's coming."
Last updated
Was this helpful?