Omni 视频生成
Google Omni 模型,支持文生视频、图生视频和视频修改三种模式,异步提交 + 轮询查询。
快速开始
# 1. 提交任务(图生视频)
curl -X POST https://agent.tweapi.com/v1/videos \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omni_flash-10s",
"prompt": "根据参考图生成视频",
"size": "1280x720",
"images": [
"https://example.com/img1.jpg",
"https://example.com/img2.jpg",
"https://example.com/img3.jpg"
]
}'
# 2. 轮询结果
curl https://agent.tweapi.com/v1/videos/{task_id} \
-H "Authorization: Bearer $API_KEY"
功能模式
| 模式 |
说明 |
传参 |
| 文生视频 |
纯提示词生成 |
不传 images / input_reference[] |
| 图生视频 |
参考图生成(最多 7 张) |
传图片 URL |
| 视频修改 |
上传视频 + 参考图进行修改 |
传视频 URL + 图片 URL |
可用模型
| 模型 |
时长 |
分辨率 |
omni_flash-10s |
10s |
720p |
通用说明
端点
| 方法 |
路径 |
说明 |
POST |
/v1/videos |
提交视频生成任务 |
GET |
/v1/videos/{task_id} |
查询任务状态 |
请求头
| 参数 |
值 |
说明 |
Authorization |
Bearer YOUR_API_KEY |
必填 |
Content-Type |
application/json 或 multipart/form-data |
POST 时必填 |
请求参数
| 参数 |
类型 |
必填 |
说明 |
model |
string |
是 |
模型名称:omni_flash-10s |
prompt |
string |
是 |
文本提示词 |
size |
string |
否 |
视频尺寸,如 1280x720(横屏)、720x1280(竖屏) |
images |
string[] |
否 |
图片/视频 URL 数组,最多 7 项(**JSON 方式**使用此字段) |
input_reference[] |
可重复 |
否 |
图片/视频 URL,最多 7 项(**表单方式**使用此字段,同一字段名可重复多次) |
JSON 与表单二选一即可。文生视频时不传图片/视频字段。
响应参数
| 参数 |
类型 |
说明 |
id |
string |
任务 ID |
status |
string |
queued / processing / completed / failed |
progress |
number |
进度 0~100 |
video_url |
string |
视频直链(仅 completed 时返回) |
error |
object |
错误信息(仅 failed 时返回),含 message、code |
状态流转
queued → processing → completed
↘ failed
提交任务
JSON 方式 — 图生视频(多图)
curl -X POST "https://agent.tweapi.com/v1/videos" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omni_flash-10s",
"prompt": "根据参考图生成视频",
"size": "1280x720",
"images": [
"https://example.com/img1.jpg",
"https://example.com/img2.jpg",
"https://example.com/img3.jpg"
]
}'
JSON 方式 — 视频修改(视频 URL + 图片 URL)
curl -X POST "https://agent.tweapi.com/v1/videos" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omni_flash-10s",
"prompt": "将视频中的场景改为参考图的风格",
"size": "1280x720",
"images": [
"https://example.com/input.mp4",
"https://example.com/reference.png"
]
}'
表单方式 — 图生视频(多图)
curl -X POST "https://agent.tweapi.com/v1/videos" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "model=omni_flash-10s" \
-F "prompt=根据参考图生成视频" \
-F "size=1280x720" \
-F "input_reference[]=https://example.com/img1.jpg" \
-F "input_reference[]=https://example.com/img2.jpg" \
-F "input_reference[]=https://example.com/img3.jpg"
表单方式 — 视频修改(视频 URL + 图片 URL)
curl -X POST "https://agent.tweapi.com/v1/videos" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "model=omni_flash-10s" \
-F "prompt=将视频中的场景改为参考图的风格" \
-F "size=1280x720" \
-F "input_reference[]=https://example.com/input.mp4" \
-F "input_reference[]=https://example.com/reference.png"
提交响应示例
{
"id": "task_xxxxxxxxxxxx",
"status": "queued",
"progress": 0
}
查询任务
curl "https://agent.tweapi.com/v1/videos/task_xxxxxxxxxxxx" \
-H "Authorization: Bearer YOUR_API_KEY"
进行中响应
{
"id": "task_xxxxxxxxxxxx",
"status": "processing",
"progress": 45
}
完成响应
{
"id": "task_xxxxxxxxxxxx",
"status": "completed",
"progress": 100,
"video_url": "https://img.12ai.org/videos/task_xxxxxxxxxxxx.mp4"
}
失败响应
{
"id": "task_xxxxxxxxxxxx",
"status": "failed",
"error": {
"message": "内容安全策略拦截",
"code": "content_filter"
}
}
完整调用示例
import requests
import time
API_BASE = "https://agent.tweapi.com"
API_KEY = "YOUR_API_KEY"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
# 1. 提交任务
resp = requests.post(
f"{API_BASE}/v1/videos",
headers=HEADERS,
json={
"model": "omni_flash-10s",
"prompt": "根据参考图生成视频",
"size": "1280x720",
"images": [
"https://example.com/img1.jpg",
"https://example.com/img2.jpg",
"https://example.com/img3.jpg",
],
},
)
task = resp.json()
task_id = task["id"]
print(f"任务已创建: {task_id}")
# 2. 轮询状态
while True:
resp = requests.get(
f"{API_BASE}/v1/videos/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
data = resp.json()
status = data["status"]
progress = data.get("progress", 0)
print(f"状态: {status}, 进度: {progress}%")
if status == "completed":
print(f"生成成功!视频地址: {data['video_url']}")
break
elif status == "failed":
print(f"生成失败: {data['error']['message']}")
break
time.sleep(5)
import requests
import time
API_BASE = "https://agent.tweapi.com"
API_KEY = "YOUR_API_KEY"
# 1. 提交视频修改任务
resp = requests.post(
f"{API_BASE}/v1/videos",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"model": "omni_flash-10s",
"prompt": "将视频中的场景改为参考图的风格",
"size": "1280x720",
"images": [
"https://example.com/input.mp4",
"https://example.com/reference.png",
],
},
)
task_id = resp.json()["id"]
print(f"任务已创建: {task_id}")
# 2. 轮询状态
while True:
resp = requests.get(
f"{API_BASE}/v1/videos/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
data = resp.json()
if data["status"] == "completed":
print("视频地址:", data["video_url"])
break
elif data["status"] == "failed":
print("失败:", data["error"]["message"])
break
time.sleep(5)
import requests
import time
API_BASE = "https://agent.tweapi.com"
API_KEY = "YOUR_API_KEY"
# 1. 提交视频修改任务(multipart/form-data)
resp = requests.post(
f"{API_BASE}/v1/videos",
headers={"Authorization": f"Bearer {API_KEY}"},
files=[
("model", (None, "omni_flash-10s")),
("prompt", (None, "将视频中的场景改为参考图的风格")),
("size", (None, "1280x720")),
("input_reference[]", (None, "https://example.com/input.mp4")),
("input_reference[]", (None, "https://example.com/reference.png")),
],
)
task_id = resp.json()["id"]
print(f"任务已创建: {task_id}")
# 2. 轮询状态
while True:
resp = requests.get(
f"{API_BASE}/v1/videos/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
data = resp.json()
if data["status"] == "completed":
print("视频地址:", data["video_url"])
break
elif data["status"] == "failed":
print("失败:", data["error"]["message"])
break
time.sleep(5)
# 1. 创建任务
ID=$(curl -s -X POST https://agent.tweapi.com/v1/videos \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omni_flash-10s",
"prompt": "根据参考图生成视频",
"size": "1280x720",
"images": [
"https://example.com/img1.jpg",
"https://example.com/img2.jpg",
"https://example.com/img3.jpg"
]
}' | jq -r '.id')
echo "task id: $ID"
# 2. 轮询状态
while true; do
RESP=$(curl -s "https://agent.tweapi.com/v1/videos/$ID" \
-H "Authorization: Bearer $API_KEY")
STATUS=$(echo "$RESP" | jq -r '.status')
echo "$STATUS"
if [ "$STATUS" = "completed" ]; then
echo "视频地址: $(echo "$RESP" | jq -r '.video_url')"
break
elif [ "$STATUS" = "failed" ]; then
echo "失败: $(echo "$RESP" | jq -r '.error.message')"
exit 1
fi
sleep 5
done
注意事项
- 图片/视频上限共 7 项,按传入顺序对应
- URL 须为**公网可访问的直链**,不要传网页地址或需登录的链接
- JSON 与表单**二选一**:JSON 方式使用
images 数组,表单方式使用 input_reference[] 重复字段
- 文生视频时不传
images / input_reference[] 即可
- 视频修改:将视频 URL 混入
images / input_reference[] 中即可,系统自动识别
- 异步接口,提交后需**轮询查询结果**,建议每 5 秒轮询一次