🦁

OmniVideo APIで動画・画像生成を自動化する:REST API連携の実装ガイド

に公開

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

OmniVideo のトップページ

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_status3 になったら image_url または video_url から成果物を取得できます。4(失敗)の場合は、消費したクレジットが自動的に返却されます。

5. ポーリングの実装例(Python)

task_status3 または 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_idtasks/{task_id} に渡してポーリングするだけです。

6. エラーハンドリング

  • code: 200 … 成功
  • code: 0 … 業務エラー(msg の内容を確認)
  • HTTP 401 … APIキーが無効、または未指定

code はHTTPステータスとは別にレスポンスボディ内で返るため、HTTPステータスとあわせて両方を確認しておくと安全です。失敗タスクのクレジットは自動返却されるため、リトライ処理も組み込みやすい設計です。

まとめ

OmniVideoのAPIは「作成 → ポーリング → 取得」というシンプルな非同期モデルで、model_id を変えるだけで複数の動画・画像モデルを同一フローで扱えます。実際に試す場合は Omni Video にログインし、アカウントページからAPIキーを発行して、本記事のコード内の sk-... を差し替えてください。

Discussion