跳转至

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/jsonmultipart/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 时返回),含 messagecode

状态流转

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
}

查询任务

GET /v1/videos/{task_id}
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

注意事项

  1. 图片/视频上限共 7 项,按传入顺序对应
  2. URL 须为**公网可访问的直链**,不要传网页地址或需登录的链接
  3. JSON 与表单**二选一**:JSON 方式使用 images 数组,表单方式使用 input_reference[] 重复字段
  4. 文生视频时不传 images / input_reference[] 即可
  5. 视频修改:将视频 URL 混入 images / input_reference[] 中即可,系统自动识别
  6. 异步接口,提交后需**轮询查询结果**,建议每 5 秒轮询一次