curl --request POST \
--url https://api.yuannengai.com/v1/videos \
--header 'Authorization: Bearer <token>' \
-F "prompt=一只小鸭子在月光下奔跑" \
-F "model=wan2.5-t2v-preview" \
-F "watermark=true" \
-F "seconds=5" \
-F "size=1920*1080"
{
"code": 200,
"data": {
"task_id": "e3bf7f60-218e-4b5b-b81d-ac571af8ce51",
"task_status": "PENDING"
}
}
使用阿里 Wan2.6 模型生成高质量视频
curl --request POST \
--url https://api.yuannengai.com/v1/videos \
--header 'Authorization: Bearer <token>' \
-F "prompt=一只小鸭子在月光下奔跑" \
-F "model=wan2.5-t2v-preview" \
-F "watermark=true" \
-F "seconds=5" \
-F "size=1920*1080"
{
"code": 200,
"data": {
"task_id": "e3bf7f60-218e-4b5b-b81d-ac571af8ce51",
"task_status": "PENDING"
}
}
curl --request POST \
--url https://api.yuannengai.com/v1/videos \
--header 'Authorization: Bearer <token>' \
-F "prompt=一只小鸭子在月光下奔跑" \
-F "model=wan2.5-t2v-preview" \
-F "watermark=true" \
-F "seconds=5" \
-F "size=1920*1080"
{
"code": 200,
"data": {
"task_id": "e3bf7f60-218e-4b5b-b81d-ac571af8ce51",
"task_status": "PENDING"
}
}
Authorization: Bearer YOUR_API_KEY
multipart/form-data 格式,而非 JSON 格式。wan2.5-t2v-preview - Wan2.5 文生视频wan2.6-t2v-preview - Wan2.6 文生视频(更新版本)3、5、10默认值:51920*1080 - 1080P 横屏1080*1920 - 1080P 竖屏1280*720 - 720P 横屏720*1280 - 720P 竖屏1280*720true - 添加水印false - 不添加水印falsecurl 'https://api.yuannengai.com/v1/videos/{task_id}' \
-H "Authorization: Bearer <token>"
{
"code": 200,
"data": {
"task_id": "e3bf7f60-218e-4b5b-b81d-ac571af8ce51",
"task_status": "SUCCEEDED",
"video_url": "https://dashscope-result-sh.oss-accelerate.aliyuncs.com/...",
"orig_prompt": "一只小鸭子在月光下奔跑",
"actual_prompt": "夜景,极端全景,月光照明,冷色调...",
"submit_time": "2026-01-07 18:18:21.348",
"end_time": "2026-01-07 18:20:19.404"
}
}
PENDING(等待中)、RUNNING(处理中)、SUCCEEDED(成功)、FAILED(失败)import requests
import time
from urllib.parse import unquote
API_KEY = "your-api-key"
BASE_URL = "https://api.yuannengai.com"
def create_video(prompt, model="wan2.5-t2v-preview", seconds="5", size="1920*1080"):
"""提交视频生成任务"""
url = f"{BASE_URL}/v1/videos"
data = {
"prompt": prompt,
"model": model,
"seconds": seconds,
"size": size,
"watermark": "false"
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.post(url, data=data, headers=headers)
result = response.json()
if result.get("code") == 200:
return result["data"]["task_id"]
else:
raise Exception(f"创建任务失败: {result}")
def get_task_status(task_id):
"""查询任务状态"""
url = f"{BASE_URL}/v1/videos/{task_id}"
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(url, headers=headers)
return response.json()
def wait_for_video(task_id, timeout=300, interval=10):
"""等待视频生成完成"""
start_time = time.time()
while time.time() - start_time < timeout:
result = get_task_status(task_id)
data = result.get("data", {})
status = data.get("task_status")
print(f"任务状态: {status}")
if status == "SUCCEEDED":
# URL 解码获取最终视频链接
video_url = unquote(data["video_url"])
return video_url
elif status == "FAILED":
raise Exception(f"视频生成失败: {data}")
time.sleep(interval)
raise TimeoutError("视频生成超时")
# 使用示例
if __name__ == "__main__":
# 1. 提交任务
task_id = create_video(
prompt="一只可爱的小猫在花园里追蝴蝶,阳光明媚",
seconds="5",
size="1920*1080"
)
print(f"任务已提交,ID: {task_id}")
# 2. 等待完成并获取视频
try:
video_url = wait_for_video(task_id)
print(f"视频生成完成: {video_url}")
# 3. 下载视频
response = requests.get(video_url)
with open("output.mp4", "wb") as f:
f.write(response.content)
print("视频已保存到 output.mp4")
except Exception as e:
print(f"错误: {e}")
const API_KEY = 'your-api-key'
const BASE_URL = 'https://api.yuannengai.com'
async function createVideo(prompt, model = 'wan2.5-t2v-preview', seconds = '5', size = '1920*1080') {
const formData = new FormData()
formData.append('prompt', prompt)
formData.append('model', model)
formData.append('seconds', seconds)
formData.append('size', size)
formData.append('watermark', 'false')
const response = await fetch(`${BASE_URL}/v1/videos`, {
method: 'POST',
headers: { Authorization: `Bearer ${API_KEY}` },
body: formData,
})
const result = await response.json()
if (result.code === 200) {
return result.data.task_id
}
throw new Error(`创建任务失败: ${JSON.stringify(result)}`)
}
async function getTaskStatus(taskId) {
const response = await fetch(`${BASE_URL}/v1/videos/${taskId}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
})
return response.json()
}
async function waitForVideo(taskId, timeout = 300000, interval = 10000) {
const startTime = Date.now()
while (Date.now() - startTime < timeout) {
const result = await getTaskStatus(taskId)
const status = result.data?.task_status
console.log(`任务状态: ${status}`)
if (status === 'SUCCEEDED') {
// URL 解码获取最终视频链接
return decodeURIComponent(result.data.video_url)
} else if (status === 'FAILED') {
throw new Error(`视频生成失败: ${JSON.stringify(result.data)}`)
}
await new Promise((resolve) => setTimeout(resolve, interval))
}
throw new Error('视频生成超时')
}
// 使用示例
async function main() {
try {
const taskId = await createVideo('一只可爱的小猫在花园里追蝴蝶')
console.log(`任务已提交,ID: ${taskId}`)
const videoUrl = await waitForVideo(taskId)
console.log(`视频生成完成: ${videoUrl}`)
} catch (error) {
console.error('错误:', error)
}
}
main()
multipart/form-data 格式,不是 JSONvideo_url 包含 URL 编码字符,需要解码后才能正常访问
from urllib.parse import unquote; url = unquote(video_url)url = decodeURIComponent(videoUrl)actual_prompt),生成更详细的场景描述