Kling V3 Video Generation
Validation
mkdir -p output/aliyun-kling-video
python -m py_compile skills/ai/video/aliyun-kling-video/scripts/generate_kling_video.py && echo "py_compile_ok" > output/aliyun-kling-video/validate.txt
Pass criteria: command exits 0 and output/aliyun-kling-video/validate.txt is generated.
Output And Evidence
- Save task IDs, polling responses, and final video URLs to
output/aliyun-kling-video/.
- Keep at least one end-to-end run log for troubleshooting.
Prerequisites
- Install dependencies (recommended in a venv):
python3 -m venv .venv
. .venv/bin/activate
python -m pip install requests
- Set
DASHSCOPE_API_KEY in your environment (must be Beijing region API Key).
- Enable Kling in 百炼控制台 — search "kling" and activate.
Critical model names
kling/kling-v3-video-generation — standard model: t2v, i2v (first frame, first+last frame)
kling/kling-v3-omni-video-generation — omni model: adds reference-to-video, video editing, multi-subject references
Capabilities
| Capability |
Model |
Required media |
| Text-to-video |
both |
none |
| Smart storyboard (multi-shot) |
both |
none (use multi_prompt) |
| Image-to-video (first frame) |
both |
first_frame |
| Image-to-video (first+last frame) |
both |
first_frame + last_frame |
| Reference-to-video |
omni only |
refer and/or feature |
| Video editing |
omni only |
base + optional refer |
API endpoint (async only)
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Required headers:
Authorization: Bearer $DASHSCOPE_API_KEY
Content-Type: application/json
X-DashScope-Async: enable
Region: Beijing only. No Singapore endpoint.
Normalized interface
Request (input)
prompt (string, conditional) — up to 2500 characters. Required for shot_type=intelligence. For omni reference-to-video, use <<<element_1>>>, <<<image_1>>>, <<<video_1>>> to reference media.
negative_prompt (string, optional) — content to exclude
media (array, optional) — media objects with type and url:
- Standard model types:
first_frame, last_frame
- Omni model types:
first_frame, last_frame, refer, base, feature
multi_shot (boolean, optional) — enable multi-shot generation (default: false)
shot_type (string, conditional) — intelligence (AI auto-split) or customize (manual). Required when multi_shot=true.
multi_prompt (array, optional) — per-shot prompts when shot_type=customize
element_list (array, optional) — multi-subject element images (omni model only)
keep_original_sound (string, optional) — no (default) or yes, for videos (omni model only)
Request (parameters)
mode (string, optional) — pro (default, 1080P) or std (720P)
aspect_ratio (string, conditional) — 16:9 (default), 9:16, 1:1. Required for t2v and reference-to-video.
duration (integer, optional) — video length [3, 15] seconds (default: 5). When using reference video, [3, 10].
audio (boolean, optional) — generate audio (default: false). Affects pricing.
watermark (boolean, optional) — add "可灵 AI" watermark (default: false)
Media input limits
Images (first_frame, last_frame, refer):
- Formats: JPEG, JPG, PNG (no transparency)
- Resolution: [300, 8000] pixels per side
- Max size: 10MB
Videos (base, feature):
- Formats: mp4, mov
- Duration: 3-10s
- Resolution: [720, 2160] pixels per side
- Frame rate: 24-60 fps
- Max size: 200MB
Media combination rules
kling/kling-v3-video-generation:
- i2v first frame:
first_frame (1 image)
- i2v first+last:
first_frame + last_frame (1 each)
kling/kling-v3-omni-video-generation (all above plus):
- Reference:
feature only (1 video), or refer only (up to 7 with elements), or feature+refer (1 video + up to 4 with elements), or feature+first_frame (1 video + 1 image)
- Video editing:
base only (1 video), or base+refer (1 video + up to 4 with elements)
Response (task creation)
output.task_id (string) — valid 24 hours
output.task_status (string) — PENDING | RUNNING | SUCCEEDED | FAILED | CANCELED
request_id (string)
Response (task result)
output.video_url (string) — generated video URL
output.watermark_video_url (string) — watermarked video URL
usage.duration (integer), usage.size (string), usage.fps (integer), usage.audio (boolean)
Quick start (Python + HTTP)
import os
import json
import time
import requests
API_KEY = os.getenv("DASHSCOPE_API_KEY")
BASE_URL = "https://dashscope.aliyuncs.com/api/v1"
def create_kling_task(req: dict) -> str:
"""Create a Kling video generation task and return task_id."""
payload = {
"model": req.get("model", "kling/kling-v3-video-generation"),
"input": {"prompt": req.get("prompt", "")},
"parameters": {
"mode": req.get("mode", "pro"),
"duration": req.get("duration", 5),
"audio": req.get("audio", False),
"watermark": req.get("watermark", False),
},
}
if req.get("aspect_ratio"):
payload["parameters"]["aspect_ratio"] = req["aspect_ratio"]
if req.get("negative_prompt"):
payload["input"]["negative_prompt"] = req["negative_prompt"]
if req.get("media"):
payload["input"]["media"] = req["media"]
resp = requests.post(
f"{BASE_URL}/services/aigc/video-generation/video-synthesis",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable",
},
json=payload,
)
resp.raise_for_status()
data = resp.json()
return data["output"]["task_id"]
def poll_task(task_id: str, interval: int = 15) -> dict:
"""Poll until task completes. Returns final response."""
while True:
resp = requests.get(
f"{BASE_URL}/tasks/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
resp.raise_for_status()
data = resp.json()
status = data["output"]["task_status"]
if status in ("SUCCEEDED", "FAILED", "CANCELED"):
return data
time.sleep(interval)
Usage examples
# Text-to-video
task_id = create_kling_task({
"prompt": "一只小猫在月光下奔跑",
"aspect_ratio": "16:9",
"duration": 5,
"mode": "std",
})
# Image-to-video (first frame)
task_id = create_kling_task({
"prompt": "花朵绽放的延时摄影",
"media": [{"type": "first_frame", "url": "https://example.com/flower.jpg"}],
"duration": 5,
})
# Reference-to-video with omni model
task_id = create_kling_task({
"model": "kling/kling-v3-omni-video-generation",
"prompt": "一只<<<element_1>>>在月光下奔跑",
"media": [{"type": "refer", "url": "https://example.com/cat.jpg"}],
"aspect_ratio": "16:9",
})
Error handling
| Error |
Likely cause |
Action |
| 401/403 |
Missing or invalid API Key |
Check env var, must be Beijing region |
400 InvalidParameter |
Bad media combination or missing required params |
Validate against model's media rules |
| "does not support synchronous calls" |
Missing X-DashScope-Async: enable header |
Add required header |
| 429 |
Rate limit or quota |
Retry with backoff |
Output location
- Default output:
output/aliyun-kling-video/videos/
- Override base dir with
OUTPUT_DIR.
Anti-patterns
- Do not use model names other than
kling/kling-v3-video-generation or kling/kling-v3-omni-video-generation.
- Do not call this API synchronously — async header is required.
- Do not use
refer, base, or feature media types with the standard model — use omni only.
- Do not mix incompatible media combinations.
- Video URLs expire; download and persist immediately.
- Beijing region only — do not use Singapore endpoint.
Workflow
- Confirm user intent: t2v, i2v, reference-to-video, editing, or storyboard.
- Select appropriate model (standard for basic t2v/i2v, omni for reference/editing).
- Prepare media array with correct types and valid URLs.
- Create async task and poll for results.
- Download and save generated video before URL expiration.
References
- See
references/api_reference.md for full HTTP API details.
- See
references/sources.md for source links.
1---2name: aliyun-kling-video3description: Use when generating videos with Kling v3 models on DashScope (kling/kling-v3-video-generation, kling/kling-v3-omni-video-generation). Use when implementing text-to-video, image-to-video, reference-to-video, smart storyboard, or video editing via the video-synthesis async API.4---5
6# Kling V3 Video Generation
7
8## Validation
9
10```bash
11mkdir -p output/aliyun-kling-video
12python -m py_compile skills/ai/video/aliyun-kling-video/scripts/generate_kling_video.py && echo "py_compile_ok" > output/aliyun-kling-video/validate.txt
13```
14
15Pass criteria: command exits 0 and `output/aliyun-kling-video/validate.txt` is generated.
16
17## Output And Evidence
18
19- Save task IDs, polling responses, and final video URLs to `output/aliyun-kling-video/`.
20- Keep at least one end-to-end run log for troubleshooting.
21
22## Prerequisites
23
24- Install dependencies (recommended in a venv):
25
26```bash
27python3 -m venv .venv
28. .venv/bin/activate
29python -m pip install requests
30```
31- Set `DASHSCOPE_API_KEY` in your environment (must be Beijing region API Key).
32- Enable Kling in [百炼控制台](https://bailian.console.aliyun.com/cn-beijing/?tab=model#/model-market/all) — search "kling" and activate.
33
34## Critical model names
35
36- `kling/kling-v3-video-generation` — standard model: t2v, i2v (first frame, first+last frame)
37- `kling/kling-v3-omni-video-generation` — omni model: adds reference-to-video, video editing, multi-subject references
38
39## Capabilities
40
41| Capability | Model | Required media |
42|---|---|---|
43| Text-to-video | both | none |
44| Smart storyboard (multi-shot) | both | none (use `multi_prompt`) |
45| Image-to-video (first frame) | both | `first_frame` |
46| Image-to-video (first+last frame) | both | `first_frame` + `last_frame` |
47| Reference-to-video | omni only | `refer` and/or `feature` |
48| Video editing | omni only | `base` + optional `refer` |
49
50## API endpoint (async only)
51
52```
53POST https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
54```
55
56Required headers:
57- `Authorization: Bearer $DASHSCOPE_API_KEY`
58- `Content-Type: application/json`
59- `X-DashScope-Async: enable`
60
61**Region**: Beijing only. No Singapore endpoint.
62
63## Normalized interface
64
65### Request (input)
66- `prompt` (string, conditional) — up to 2500 characters. Required for `shot_type=intelligence`. For omni reference-to-video, use `<<<element_1>>>`, `<<<image_1>>>`, `<<<video_1>>>` to reference media.
67- `negative_prompt` (string, optional) — content to exclude
68- `media` (array, optional) — media objects with `type` and `url`:
69 - Standard model types: `first_frame`, `last_frame`
70 - Omni model types: `first_frame`, `last_frame`, `refer`, `base`, `feature`
71- `multi_shot` (boolean, optional) — enable multi-shot generation (default: false)
72- `shot_type` (string, conditional) — `intelligence` (AI auto-split) or `customize` (manual). Required when `multi_shot=true`.
73- `multi_prompt` (array, optional) — per-shot prompts when `shot_type=customize`
74- `element_list` (array, optional) — multi-subject element images (omni model only)
75- `keep_original_sound` (string, optional) — `no` (default) or `yes`, for videos (omni model only)
76
77### Request (parameters)
78- `mode` (string, optional) — `pro` (default, 1080P) or `std` (720P)
79- `aspect_ratio` (string, conditional) — `16:9` (default), `9:16`, `1:1`. Required for t2v and reference-to-video.
80- `duration` (integer, optional) — video length [3, 15] seconds (default: 5). When using reference video, [3, 10].
81- `audio` (boolean, optional) — generate audio (default: false). Affects pricing.
82- `watermark` (boolean, optional) — add "可灵 AI" watermark (default: false)
83
84### Media input limits
85
86**Images** (first_frame, last_frame, refer):
87- Formats: JPEG, JPG, PNG (no transparency)
88- Resolution: [300, 8000] pixels per side
89- Max size: 10MB
90
91**Videos** (base, feature):
92- Formats: mp4, mov
93- Duration: 3-10s
94- Resolution: [720, 2160] pixels per side
95- Frame rate: 24-60 fps
96- Max size: 200MB
97
98### Media combination rules
99
100**kling/kling-v3-video-generation**:
101- i2v first frame: `first_frame` (1 image)
102- i2v first+last: `first_frame` + `last_frame` (1 each)
103
104**kling/kling-v3-omni-video-generation** (all above plus):
105- Reference: `feature` only (1 video), or `refer` only (up to 7 with elements), or `feature+refer` (1 video + up to 4 with elements), or `feature+first_frame` (1 video + 1 image)
106- Video editing: `base` only (1 video), or `base+refer` (1 video + up to 4 with elements)
107
108### Response (task creation)
109- `output.task_id` (string) — valid 24 hours
110- `output.task_status` (string) — PENDING | RUNNING | SUCCEEDED | FAILED | CANCELED
111- `request_id` (string)
112
113### Response (task result)
114- `output.video_url` (string) — generated video URL
115- `output.watermark_video_url` (string) — watermarked video URL
116- `usage.duration` (integer), `usage.size` (string), `usage.fps` (integer), `usage.audio` (boolean)
117
118## Quick start (Python + HTTP)
119
120```python
121import os
122import json
123import time
124import requests
125
126API_KEY = os.getenv("DASHSCOPE_API_KEY")
127BASE_URL = "https://dashscope.aliyuncs.com/api/v1"
128
129def create_kling_task(req: dict) -> str:
130 """Create a Kling video generation task and return task_id."""
131 payload = {
132 "model": req.get("model", "kling/kling-v3-video-generation"),
133 "input": {"prompt": req.get("prompt", "")},
134 "parameters": {
135 "mode": req.get("mode", "pro"),
136 "duration": req.get("duration", 5),
137 "audio": req.get("audio", False),
138 "watermark": req.get("watermark", False),
139 },
140 }
141 if req.get("aspect_ratio"):
142 payload["parameters"]["aspect_ratio"] = req["aspect_ratio"]
143 if req.get("negative_prompt"):
144 payload["input"]["negative_prompt"] = req["negative_prompt"]
145 if req.get("media"):
146 payload["input"]["media"] = req["media"]
147
148 resp = requests.post(
149 f"{BASE_URL}/services/aigc/video-generation/video-synthesis",
150 headers={
151 "Authorization": f"Bearer {API_KEY}",
152 "Content-Type": "application/json",
153 "X-DashScope-Async": "enable",
154 },
155 json=payload,
156 )
157 resp.raise_for_status()
158 data = resp.json()
159 return data["output"]["task_id"]
160
161
162def poll_task(task_id: str, interval: int = 15) -> dict:
163 """Poll until task completes. Returns final response."""
164 while True:
165 resp = requests.get(
166 f"{BASE_URL}/tasks/{task_id}",
167 headers={"Authorization": f"Bearer {API_KEY}"},
168 )
169 resp.raise_for_status()
170 data = resp.json()
171 status = data["output"]["task_status"]
172 if status in ("SUCCEEDED", "FAILED", "CANCELED"):
173 return data
174 time.sleep(interval)
175```
176
177## Usage examples
178
179```python
180# Text-to-video
181task_id = create_kling_task({
182 "prompt": "一只小猫在月光下奔跑",
183 "aspect_ratio": "16:9",
184 "duration": 5,
185 "mode": "std",
186})
187
188# Image-to-video (first frame)
189task_id = create_kling_task({
190 "prompt": "花朵绽放的延时摄影",
191 "media": [{"type": "first_frame", "url": "https://example.com/flower.jpg"}],
192 "duration": 5,
193})
194
195# Reference-to-video with omni model
196task_id = create_kling_task({
197 "model": "kling/kling-v3-omni-video-generation",
198 "prompt": "一只<<<element_1>>>在月光下奔跑",
199 "media": [{"type": "refer", "url": "https://example.com/cat.jpg"}],
200 "aspect_ratio": "16:9",
201})
202```
203
204## Error handling
205
206| Error | Likely cause | Action |
207|---|---|---|
208| 401/403 | Missing or invalid API Key | Check env var, must be Beijing region |
209| 400 `InvalidParameter` | Bad media combination or missing required params | Validate against model's media rules |
210| "does not support synchronous calls" | Missing `X-DashScope-Async: enable` header | Add required header |
211| 429 | Rate limit or quota | Retry with backoff |
212
213## Output location
214
215- Default output: `output/aliyun-kling-video/videos/`
216- Override base dir with `OUTPUT_DIR`.
217
218## Anti-patterns
219
220- Do not use model names other than `kling/kling-v3-video-generation` or `kling/kling-v3-omni-video-generation`.
221- Do not call this API synchronously — async header is required.
222- Do not use `refer`, `base`, or `feature` media types with the standard model — use omni only.
223- Do not mix incompatible media combinations.
224- Video URLs expire; download and persist immediately.
225- Beijing region only — do not use Singapore endpoint.
226
227## Workflow
228
2291) Confirm user intent: t2v, i2v, reference-to-video, editing, or storyboard.
2302) Select appropriate model (standard for basic t2v/i2v, omni for reference/editing).
2313) Prepare media array with correct types and valid URLs.
2324) Create async task and poll for results.
2335) Download and save generated video before URL expiration.
234
235## References
236
237- See `references/api_reference.md` for full HTTP API details.
238- See `references/sources.md` for source links.