> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Omni 動画を作成

> CometAPI を介して POST /v1/videos でベータ版の Omni テキストから動画または参照動画編集タスクを作成し、その後タスクをポーリングして完了した MP4 ファイルをダウンロードします。

このベータエンドポイントを使用して、テキストから動画または動画から動画のタスクを作成します。API はタスク ID を直ちに返すため、返された `id` を保存し、ターミナルステータスに達するまでタスクをポーリングしてください。

入力モードに一致するリクエストのコンテンツタイプを選択します。テキストから動画の制御は `multipart/form-data` フィールドとして送信します。参照動画の編集は `application/json` ボディとして送信します。

## 入力モードを選択する

| 目的       | コンテンツタイプ              | 必須フィールド                    | 任意フィールド                                 |
| -------- | --------------------- | -------------------------- | --------------------------------------- |
| テキストから動画 | `multipart/form-data` | `model`, `prompt`          | `seconds`, `aspect_ratio`, `resolution` |
| 動画から動画   | `application/json`    | `model`, `prompt`, `video` | `seconds`, `aspect_ratio`, `resolution` |

テキストから動画の例では `model=omni-fast` を使用します。動画から動画の例では `model=omni-fast-v2v` を使用します。モデル ID が API キーで表示されることを確認するには、 [利用可能なモデルを一覧表示する](/ja/guides/how-to-list-available-models) を使用してください。

## 参照動画を編集する

動画から動画の場合は、ローカルの MP4 ファイルを base64 としてエンコードし、エンコードしたバイト列の先頭に `data:video/mp4;base64,` を付加します。完全なデータ URL を `video` フィールドで送信します。

要求する変更を `prompt` で記述します。また、結果で保持すべき被写体、オブジェクト、構図、または動きも指定します。コードサンプルのセレクタには、作業ディレクトリから `reference.mp4` を読み込む Shell、Python、JavaScript の例が含まれます。

このリクエスト形式は、インライン MP4 データ URL を対象としています。URL 入力、他の動画コンテナ形式、またはファイルサイズ制限は定義していません。

## 再生時間、アスペクト比、解像度を設定する

Omni は、入力と選択したルートによって生成の安定性が異なる可能性があるため、ベータ版としてマークされています。最初のリクエストは小さく抑え、特定のレンダリング済み再生時間やフレームサイズに依存する前に、完了した動画を確認してください。

| 設定             | サポートされる値                                     | デフォルト  | 境界条件での動作                                                              |
| -------------- | -------------------------------------------- | ------ | --------------------------------------------------------------------- |
| `seconds`      | まずは `4`                                      | ルートに依存 | これは要求する再生時間として扱い、出力の再生時間は異なる場合があるため、完了した MP4 を確認してください。               |
| `aspect_ratio` | `16:9`, `9:16`, `1:1`                        | `16:9` | `9:16` では縦向きの出力をレンダリングできます。`1:1` は、横向きとしてレンダリングされる場合でも受け付けられることがあります。 |
| `resolution`   | まずは `720p` を使用してください。`1080p` も受け付けられることがあります | `720p` | 現在の本番出力では、`720p` が要求された場合でも `1080p` に正規化されることがあります。                   |

| リクエスト                                   | 確認された完了フレーム |
| --------------------------------------- | ----------- |
| `resolution=720p`, `aspect_ratio=16:9`  | `1280x720`  |
| `resolution=720p`, `aspect_ratio=9:16`  | `720x1280`  |
| `resolution=720p`, `aspect_ratio=1:1`   | `1280x720`  |
| `resolution=1080p`, `aspect_ratio=16:9` | `1280x720`  |

このエンドポイントはベータ版であるため、`aspect_ratio` と `resolution` は生成設定として扱い、最終的なピクセルに依存する前にダウンロードした MP4 を確認してください。

## タスクフロー

<Steps>
  <Step title="タスクを作成する">
    選択した入力モードのコンテンツタイプでリクエストを送信し、返された `id` を保存します。
  </Step>

  <Step title="タスクをポーリングする">
    次の操作を呼び出します： [Omni 動画を取得する](./retrieve) を、`status` が `completed` または `failed` になるまで繰り返し呼び出します。
  </Step>

  <Step title="結果をダウンロードする">
    タスクが `completed` になったら、 [Omni 動画コンテンツを取得する](./retrieve-content) を呼び出して MP4 ファイルをダウンロードします。
  </Step>
</Steps>


## OpenAPI

````yaml api/openapi/video/omni/post-create.openapi.json POST /v1/videos
openapi: 3.1.0
info:
  title: Omni Video Create API
  version: 1.0.0
  description: >-
    Create an asynchronous beta Omni text-to-video or reference-video editing
    task through CometAPI. Save the returned id, poll GET /v1/videos/{task_id},
    and download the completed MP4 file.
servers:
  - url: https://api.cometapi.com
security:
  - bearerAuth: []
paths:
  /v1/videos:
    post:
      summary: Create an Omni video task
      description: >-
        Create a beta Omni text-to-video task with multipart/form-data or a
        reference-video editing task with application/json.
      operationId: omni_create_video
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/OmniCreateRequest'
            examples:
              text_to_video:
                summary: Text-to-video
                value:
                  model: omni-fast
                  prompt: Ocean waves rolling onto a sandy beach at golden hour
                  seconds: '4'
                  aspect_ratio: '16:9'
                  resolution: 720p
          application/json:
            schema:
              $ref: '#/components/schemas/OmniVideoEditRequest'
            examples:
              video_to_video:
                summary: Video-to-video with an inline MP4
                value:
                  model: omni-fast-v2v
                  prompt: >-
                    Change the background to ocean blue. Preserve every
                    foreground object and its motion.
                  video: data:video/mp4;base64,<your-video-base64>
                  seconds: '4'
                  aspect_ratio: '16:9'
                  resolution: 720p
      responses:
        '200':
          description: >-
            Task accepted. Store the returned id and poll GET
            /v1/videos/{task_id}.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OmniVideoTask'
              example:
                id: task_example
                task_id: task_example
                object: video
                model: omni-fast
                status: queued
                progress: 0
                created_at: 1779938152
      security:
        - bearerAuth: []
      x-codeSamples:
        - lang: Shell
          label: Text-to-video
          source: |-
            curl https://api.cometapi.com/v1/videos \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -F model=omni-fast \
              -F 'prompt=Ocean waves rolling onto a sandy beach at golden hour' \
              -F seconds=4 \
              -F aspect_ratio=16:9 \
              -F resolution=720p
        - lang: Python
          label: Text-to-video
          source: |
            import os
            import requests

            fields = [
                ("model", (None, "omni-fast")),
                ("prompt", (None, "Ocean waves rolling onto a sandy beach at golden hour")),
                ("seconds", (None, "4")),
                ("aspect_ratio", (None, "16:9")),
                ("resolution", (None, "720p")),
            ]

            response = requests.post(
                "https://api.cometapi.com/v1/videos",
                headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                files=fields,
                timeout=120,
            )

            response.raise_for_status()
            print(response.json())
        - lang: JavaScript
          label: Text-to-video
          source: >
            const form = new FormData();

            form.append("model", "omni-fast");

            form.append("prompt", "Ocean waves rolling onto a sandy beach at
            golden hour");

            form.append("seconds", "4");

            form.append("aspect_ratio", "16:9");

            form.append("resolution", "720p");


            const response = await fetch("https://api.cometapi.com/v1/videos", {
              method: "POST",
              headers: { Authorization: `Bearer ${process.env.COMETAPI_KEY}` },
              body: form,
            });


            const result = await response.json();

            console.log(result);
        - lang: Shell
          label: Video-to-video
          source: |-
            VIDEO_B64=$(openssl base64 -A -in reference.mp4)
            EDIT_PROMPT="Change the background to ocean blue."
            EDIT_PROMPT="$EDIT_PROMPT Preserve every foreground object"
            EDIT_PROMPT="$EDIT_PROMPT and its motion."

            curl "https://api.cometapi.com/v1/videos" \
              --request POST \
              --header "Authorization: Bearer $COMETAPI_KEY" \
              --header "Content-Type: application/json" \
              --data-binary @- <<JSON
            {
              "model": "omni-fast-v2v",
              "prompt": "$EDIT_PROMPT",
              "video": "data:video/mp4;base64,$VIDEO_B64",
              "seconds": "4",
              "aspect_ratio": "16:9",
              "resolution": "720p"
            }
            JSON
        - lang: Python
          label: Video-to-video
          source: >
            import base64

            import os

            from pathlib import Path


            import requests


            video_data =
            base64.b64encode(Path("reference.mp4").read_bytes()).decode("ascii")


            response = requests.post(
                "https://api.cometapi.com/v1/videos",
                headers={
                    "Authorization": "Bearer " + os.environ["COMETAPI_KEY"],
                    "Content-Type": "application/json",
                },
                json={
                    "model": "omni-fast-v2v",
                    "prompt": "Change the background to ocean blue. Preserve every foreground object and its motion.",
                    "video": "data:video/mp4;base64," + video_data,
                    "seconds": "4",
                    "aspect_ratio": "16:9",
                    "resolution": "720p",
                },
                timeout=120,
            )


            response.raise_for_status()

            print(response.json())
        - lang: JavaScript
          label: Video-to-video
          source: >
            import { readFile } from "node:fs/promises";


            const videoData = (await
            readFile("reference.mp4")).toString("base64");


            const response = await fetch("https://api.cometapi.com/v1/videos", {
              method: "POST",
              headers: {
                Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
                "Content-Type": "application/json",
              },
              body: JSON.stringify({
                model: "omni-fast-v2v",
                prompt: "Change the background to ocean blue. Preserve every foreground object and its motion.",
                video: `data:video/mp4;base64,${videoData}`,
                seconds: "4",
                aspect_ratio: "16:9",
                resolution: "720p",
              }),
            });


            const result = await response.json();

            console.log(result);
components:
  schemas:
    OmniCreateRequest:
      type: object
      required:
        - model
        - prompt
      properties:
        model:
          type: string
          description: Omni model ID for this endpoint. Use omni-fast for text-to-video.
          example: omni-fast
        prompt:
          type: string
          description: Text prompt that describes the video to generate.
          example: Ocean waves rolling onto a sandy beach at golden hour
        seconds:
          type: string
          description: >-
            Requested clip duration in seconds. The completed video can use a
            different duration.
          example: '4'
        aspect_ratio:
          type: string
          description: >-
            Output aspect ratio preference. 16:9 and 9:16 are the most
            predictable; 1:1 can be accepted but may render as landscape.
          enum:
            - '16:9'
            - '9:16'
            - '1:1'
          default: '16:9'
          example: '16:9'
        resolution:
          type: string
          description: >-
            Output resolution preference. Start with 720p. A request for 1080p
            can render at 720p.
          example: 720p
      additionalProperties: false
    OmniVideoEditRequest:
      type: object
      required:
        - model
        - prompt
        - video
      properties:
        model:
          type: string
          description: >-
            Omni model ID for video-to-video. Confirm that the model ID is
            visible to your API key with GET /v1/models.
          example: omni-fast-v2v
        prompt:
          type: string
          description: >-
            Text instructions that describe the requested edit and the source
            content that the result should preserve.
          example: >-
            Change the background to ocean blue. Preserve every foreground
            object and its motion.
        video:
          type: string
          description: >-
            Reference MP4 as a data URL. Prefix the MP4 file bytes encoded as
            base64 with data:video/mp4;base64,. This field determines the source
            video to edit.
          example: data:video/mp4;base64,<your-video-base64>
        seconds:
          type: string
          description: >-
            Requested clip duration in seconds. Start with 4 for an inline MP4
            edit.
          example: '4'
        aspect_ratio:
          type: string
          description: >-
            Output aspect ratio preference. 16:9 and 9:16 are the most
            predictable; 1:1 can be accepted but may render as landscape.
          enum:
            - '16:9'
            - '9:16'
            - '1:1'
          default: '16:9'
          example: '16:9'
        resolution:
          type: string
          description: >-
            Output resolution preference. Start with 720p. 1080p can be accepted
            but current production output may normalize to 720p.
          example: 720p
      additionalProperties: false
    OmniVideoTask:
      type: object
      required:
        - id
        - object
        - model
        - status
        - progress
        - created_at
      properties:
        id:
          type: string
          description: Task ID. Use this value with retrieve and content endpoints.
          example: task_example
        task_id:
          type: string
          description: Compatibility alias for id when present.
          example: task_example
        object:
          type: string
          description: Object type. Video tasks return video.
          example: video
        model:
          type: string
          description: Model ID used for the task.
          example: omni-fast
        status:
          type: string
          description: >-
            Task lifecycle status. Poll until the value is completed, failed, or
            error.
          enum:
            - queued
            - in_progress
            - completed
            - failed
            - error
          example: queued
        progress:
          type: integer
          minimum: 0
          maximum: 100
          description: Task progress as a coarse percentage.
          example: 0
        created_at:
          type: integer
          description: Task creation time as a Unix timestamp in seconds.
          example: 1779938152
        completed_at:
          type: integer
          description: >-
            Task completion time as a Unix timestamp in seconds. This field
            appears on completed tasks.
          example: 1779938219
        video_url:
          type: string
          description: Temporary video delivery URL. This field appears on completed tasks.
          example: <temporary-video-url>
        error:
          type: object
          description: Failure details. This field appears when the task fails.
          properties:
            code:
              type: string
              description: Provider or CometAPI error code.
            message:
              type: string
              description: Human-readable failure reason.
            type:
              type: string
              description: Error category when returned.
          additionalProperties: true
      additionalProperties: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer authentication. Use your CometAPI API key.

````