OmniVideo APIで動画・画像生成を自動化する:REST API連携の実装ガイド
OmniVideoは、テキストや画像から動画・画像をAIで生成できるサービスです。Web UIだけでなくREST APIが公開されており、外部システムやバッチ処理から生成を組み込めます。本記事では、API認証からタスク作成、結果取得(ポーリング)までの一連の実装を、cURLとコード例を交えて解説します。

APIの全体像
OmniVideoのAPIは「タスクを作成し、ステータスをポーリングで取得する」非同期方式です。動画・画像生成には時間がかかるため、リクエスト時には即座に task_id が返り、生成完了後に成果物のURLを取得します。
- ベースURL:
https://omnivideo.net/api/v1 - 認証方式: Bearerトークン(HTTPヘッダー)
- レスポンス形式: JSON
1. APIキーの取得
APIを呼び出すにはAPIキーが必要です。Omni Video にログインし、アカウントページからキーを発行してください。発行されるキーは sk- で始まる文字列です。
リクエストでは Authorization ヘッダーにBearerトークンとして付与します。
Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2. 利用できるモデル
| model_id | 種別 | 出力 |
|---|---|---|
omni-flash |
テキスト/画像 → 動画 | video_url |
omni-pro |
テキスト/画像 → 動画 | video_url |
seedance-2 |
テキスト/画像 → 動画 | video_url |
gpt-image-2 |
テキスト/画像 → 画像 | image_url |
nano-banana-2 |
テキスト/画像 → 画像 | image_url |
model_id を切り替えるだけで、同じインターフェースで動画生成と画像生成を呼び分けられます。
3. タスクの作成
POST /api/v1/tasks/create にモデルとプロンプトを指定して送信します。
curl -X POST https://omnivideo.net/api/v1/tasks/create \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model_id": "gpt-image-2",
"prompt": "a serene zen garden at sunrise, ultra detailed",
"image_urls": [],
"aspect_ratio": "16:9"
}'
リクエストボディの主なフィールドは次の通りです。
-
model_id: 使用するモデルID(必須) -
prompt: 生成内容を表すテキスト(必須) -
image_urls: 入力画像を使う場合のURL配列(image-to-video / image-to-image 用。未使用なら空配列) -
aspect_ratio: アスペクト比(例:16:9)
成功時のレスポンス:
{
"code": 200,
"msg": "提交成功,等待生成",
"data": {
"task_id": "abcdef123456",
"request_id": "kie_xxxxxxxxxxxx",
"credits": 15
}
}
task_id が返ってきたら、これを使って結果をポーリングします。クレジットは送信時点で消費されます(credits フィールド参照)。
4. タスクの照会とステータス
GET /api/v1/tasks/{task_id} で進捗と結果を取得します。
curl https://omnivideo.net/api/v1/tasks/abcdef123456 \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
レスポンス例:
{
"code": 200,
"msg": "ok",
"data": {
"task_id": "abcdef123456",
"task_status": 3,
"task_type": "image",
"model_id": "gpt-image-2",
"image_url": "https://your-cdn.com/...",
"video_url": null,
"audio_url": null,
"credits": 15,
"created_at": 1730000000
}
}
task_status の値:
| 値 | 状態 |
|---|---|
| 1 | queued(待機中) |
| 2 | running(生成中) |
| 3 | success(成功) |
| 4 | failed(失敗) |
task_status が 3 になったら image_url または video_url から成果物を取得できます。4(失敗)の場合は、消費したクレジットが自動的に返却されます。
5. ポーリングの実装例(Python)
task_status が 3 または 4 になるまで一定間隔で照会する、最小限の実装です。
import time
import requests
BASE = "https://omnivideo.net/api/v1"
HEADERS = {"Authorization": "Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
def create_task():
payload = {
"model_id": "gpt-image-2",
"prompt": "a serene zen garden at sunrise, ultra detailed",
"image_urls": [],
"aspect_ratio": "16:9",
}
r = requests.post(f"{BASE}/tasks/create", json=payload, headers=HEADERS)
r.raise_for_status()
return r.json()["data"]["task_id"]
def wait_result(task_id, interval=5, timeout=300):
deadline = time.time() + timeout
while time.time() < deadline:
r = requests.get(f"{BASE}/tasks/{task_id}", headers=HEADERS)
data = r.json()["data"]
status = data["task_status"]
if status == 3:
return data.get("image_url") or data.get("video_url")
if status == 4:
raise RuntimeError("generation failed")
time.sleep(interval)
raise TimeoutError("polling timed out")
if __name__ == "__main__":
task_id = create_task()
url = wait_result(task_id)
print("done:", url)
Node.js(fetch)でも同様に、tasks/create で受け取った task_id を tasks/{task_id} に渡してポーリングするだけです。
6. エラーハンドリング
-
code: 200… 成功 -
code: 0… 業務エラー(msgの内容を確認) - HTTP
401… APIキーが無効、または未指定
code はHTTPステータスとは別にレスポンスボディ内で返るため、HTTPステータスとあわせて両方を確認しておくと安全です。失敗タスクのクレジットは自動返却されるため、リトライ処理も組み込みやすい設計です。
まとめ
OmniVideoのAPIは「作成 → ポーリング → 取得」というシンプルな非同期モデルで、model_id を変えるだけで複数の動画・画像モデルを同一フローで扱えます。実際に試す場合は Omni Video にログインし、アカウントページからAPIキーを発行して、本記事のコード内の sk-... を差し替えてください。
Discussion