Loading...
Loading...
Use when transforming video style with DashScope video-style-transform model. Use when converting videos to artistic styles such as Japanese manga, American comics, 3D cartoon, Chinese ink painting, paper art, or simple illustration via the video-synthesis async API.
npx skill4agent add cinience/alicloud-skills aliyun-video-style-repaintmkdir -p output/aliyun-video-style-repaint
python -m py_compile skills/ai/video/aliyun-video-style-repaint/scripts/repaint_video.py && echo "py_compile_ok" > output/aliyun-video-style-repaint/validate.txtoutput/aliyun-video-style-repaint/validate.txtoutput/aliyun-video-style-repaint/python3 -m venv .venv
. .venv/bin/activate
python -m pip install requestsDASHSCOPE_API_KEYdashscope_api_key~/.alibabacloud/credentialsvideo-style-transform| Style ID | Name (EN) | Name (CN) |
|---|---|---|
| 0 | Japanese Manga | 日式漫画 |
| 1 | American Comics | 美式漫画 |
| 2 | Fresh Comics | 清新漫画 |
| 3 | 3D Cartoon | 3D 卡通 |
| 4 | Chinese Cartoon | 国风卡通 |
| 5 | Paper Art | 纸艺风格 |
| 6 | Simple Illustration | 简易插画 |
| 7 | Chinese Ink Painting | 国风水墨 |
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesisAuthorization: Bearer $DASHSCOPE_API_KEYContent-Type: application/jsonX-DashScope-Async: enablevideo_urlstylevideo_fpsanimate_emotionmin_lenuse_SRoutput.task_idoutput.task_statusrequest_idoutput.output_video_urloutput.task_statusoutput.submit_timeoutput.scheduled_timeoutput.end_timeusage.durationusage.SRimport os
import json
import time
import requests
API_KEY = os.getenv("DASHSCOPE_API_KEY")
BASE_URL = "https://dashscope.aliyuncs.com/api/v1"
def create_style_repaint_task(video_url: str, style: int = 0) -> str:
"""Create a video style repaint task and return task_id."""
payload = {
"model": "video-style-transform",
"input": {
"video_url": video_url,
},
"parameters": {
"style": style,
"video_fps": 15,
},
}
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", "SUSPENDED"):
return data
time.sleep(interval)| Error | Likely cause | Action |
|---|---|---|
| 401/403 | Missing or invalid | Check env var or credentials file |
400 | Unsupported video format, bad dimensions, invalid style | Validate parameters |
| "does not support synchronous calls" | Missing | Add required header |
| 429 | Rate limit or quota | Retry with backoff |
output/aliyun-video-style-repaint/videos/OUTPUT_DIRvideo-style-transformreferences/api_reference.mdreferences/sources.md