> ## 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.

# إنشاء فيديو Sora 2

> استخدم POST /v1/videos لإنشاء مهام توليد فيديو Sora 2 من المطالبات النصية أو الصور المرجعية، ثم استعلم عن الحالة باستخدام معرّف المهمة للحصول على النتائج.

استخدم نقطة النهاية هذه لبدء مهمة تصيير Sora من النص، أو من النص مع صورة مرجعية واحدة. تعيد واجهة API معرّف الفيديو فورًا ولا تنتظر حتى يكتمل التصيير.

## ابدأ بأصغر مهمة مفيدة

* استخدم `sora-2` لتكرارات أسرع أو `sora-2-pro` عندما تكون جودة المخرجات أهم من السرعة
* أبقِ `seconds` على `4` في طلبك الأول
* ابدأ بـ `size: 1280x720` ما لم تكن تحتاج تحديدًا إلى مخرجات عمودية
* ارفع صورة مرجعية واحدة كحد أقصى

## المدة والحجم

| الإعداد                | القيم المدعومة                                             | نقطة البداية الافتراضية         | سلوك الحدود                                     |
| ---------------------- | ---------------------------------------------------------- | ------------------------------- | ----------------------------------------------- |
| `seconds`              | `4`, `8`, `12`, `16`, `20`                                 | `4`                             | القيم الأخرى ليست جزءًا من بنية طلب فيديو Sora. |
| `size` لـ `sora-2`     | `1280x720`, `720x1280`                                     | `1280x720`                      | استخدم الاتجاه الأفقي أو العمودي.               |
| `size` لـ `sora-2-pro` | `1792x1024`, `1024x1792`، بالإضافة إلى أحجام Sora القياسية | `1792x1024` لمخرجات Pro الأفقية | استخدم أحجام Pro الأكبر فقط مع نموذج Pro.       |

يتطلب Sora الحقل `size` بصيغة `WxH` الدقيقة. رموز الدقة مثل `720p` وتسميات النسبة مثل `16:9` ليست قيم `size` صالحة لـ Sora في نقطة النهاية هذه.

## التدفق من البداية إلى النهاية

<Steps>
  <Step title="إنشاء مهمة التصيير">
    أرسل `model` و`prompt` و`seconds` و`size`، ثم احفظ `id` المُعاد.
  </Step>

  <Step title="الاستعلام حتى تنتهي المهمة">
    استدعِ [Retrieve Video](./retrieve) حتى تصبح الحالة `completed` أو `failed`.
  </Step>

  <Step title="تنزيل النتيجة">
    عند اكتمال التصيير، اجلب الملف باستخدام [Retrieve Video Content](./retrieve-content).
  </Step>
</Steps>

## سلوك Sora الذي لا يزال مطبقًا

توثّق OpenAI نفس التدفق create -> retrieve -> download في Videos API. في CometAPI، تحتفظ ببنية طلب Sora، لكنك تستخدم عنوان URL الأساسي والمفتاح الخاصين بـ CometAPI. روابط التنزيل النهائية مؤقتة، لذا انسخ الأصول المكتملة إلى مساحة التخزين الخاصة بك إذا كنت تحتاج إلى الاحتفاظ بها لفترة طويلة.


## OpenAPI

````yaml api/openapi/video/sora-2/post-create.openapi.json POST /v1/videos
openapi: 3.1.0
info:
  title: Create Video API
  version: 1.0.0
  description: >-
    Create an asynchronous Sora video job through CometAPI. Poll GET
    /v1/videos/{video_id} for status and GET /v1/videos/{video_id}/content for
    the final file.
servers:
  - url: https://api.cometapi.com
security:
  - bearerAuth: []
paths:
  /v1/videos:
    post:
      summary: Create a Sora video job
      description: >-
        Start a Sora render job from a prompt and, optionally, one reference
        image. Save the returned video id and poll the retrieve endpoint until
        the job completes.
      operationId: create_video
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - prompt
              properties:
                prompt:
                  type: string
                  description: Text prompt that describes the video you want to create.
                  example: A paper airplane glides across a desk.
                model:
                  type: string
                  description: >-
                    Sora model ID. Choose an available model from the [Models
                    page](/overview/models).
                  default: sora-2
                  example: sora-2
                seconds:
                  type: string
                  enum:
                    - '4'
                    - '8'
                    - '12'
                    - '16'
                    - '20'
                  description: Clip duration in seconds. Use 4, 8, 12, 16, or 20.
                  default: '4'
                  example: '4'
                size:
                  type: string
                  enum:
                    - 720x1280
                    - 1280x720
                    - 1024x1792
                    - 1792x1024
                  description: >-
                    Output resolution formatted as width x height. Use 1280x720
                    or 720x1280 for standard Sora output. Use 1792x1024 or
                    1024x1792 with a Pro model when you need larger Pro output.
                  default: 1280x720
                  example: 1280x720
                input_reference:
                  type: string
                  format: binary
                  description: >-
                    Optional reference image uploaded as a file. The image
                    should match the target size you request.
              default:
                prompt: A paper airplane glides across a desk.
                model: sora-2
                seconds: '4'
                size: 1280x720
            examples:
              Text to video:
                summary: Text to video
                value:
                  model: sora-2
                  prompt: A paper boat drifts across a calm pond at sunrise
                  seconds: '4'
                  size: 1280x720
              With reference image:
                summary: >-
                  First-frame reference image. Replace input_reference with your
                  image file.
                value:
                  model: sora-2
                  prompt: Animate gentle ripples across the water
                  seconds: '4'
                  size: 1280x720
                  input_reference: '@reference.png'
      responses:
        '200':
          description: Video job accepted.
          content:
            application/json:
              schema:
                type: object
                required:
                  - created_at
                  - id
                  - model
                  - object
                  - progress
                  - seconds
                  - size
                  - status
                properties:
                  created_at:
                    type: integer
                  id:
                    type: string
                  model:
                    type: string
                  object:
                    type: string
                  progress:
                    type: integer
                  seconds:
                    type: string
                  size:
                    type: string
                  status:
                    type: string
                example:
                  created_at: 1773296991
                  id: video_69b25d5f467c81908733a56bc236b4df
                  model: sora-2
                  object: video
                  progress: 0
                  seconds: '4'
                  size: 1280x720
                  status: queued
              example:
                id: <video_id>
                task_id: <video_id>
                object: video
                model: sora-2
                status: queued
                progress: 0
                created_at: 1781079478
                seconds: '4'
                size: 1280x720
      x-codeSamples:
        - lang: Shell
          label: Text to video
          source: |
            curl https://api.cometapi.com/v1/videos \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -F model=sora-2 \
              -F prompt="A paper boat drifts across a calm pond at sunrise" \
              -F seconds=4 \
              -F size=1280x720
        - lang: Shell
          label: With reference image
          source: |
            curl https://api.cometapi.com/v1/videos \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -F model=sora-2 \
              -F prompt="Animate gentle ripples across the water" \
              -F seconds=4 \
              -F size=1280x720 \
              -F input_reference=@reference.png
        - lang: Python
          label: Text to video
          source: >
            import os

            import requests


            response = requests.post(
                "https://api.cometapi.com/v1/videos",
                headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                data={
                    "model": "sora-2",
                    "prompt": "A paper boat drifts across a calm pond at sunrise",
                    "seconds": "4",
                    "size": "1280x720",
                },
            )


            video = response.json()

            print(video["id"], video["status"])  # poll GET /v1/videos/{id}
            until completed
        - lang: Python
          label: With reference image
          source: |
            import os
            import requests

            with open("reference.png", "rb") as image:
                response = requests.post(
                    "https://api.cometapi.com/v1/videos",
                    headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                    data={
                        "model": "sora-2",
                        "prompt": "Animate gentle ripples across the water",
                        "seconds": "4",
                        "size": "1280x720",
                    },
                    files={"input_reference": image},
                )

            video = response.json()
            print(video["id"], video["status"])
        - lang: JavaScript
          label: Text to video
          source: >
            const form = new FormData();

            form.append("model", "sora-2");

            form.append("prompt", "A paper boat drifts across a calm pond at
            sunrise");

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

            form.append("size", "1280x720");


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


            const video = await response.json();

            console.log(video.id, video.status); // poll GET /v1/videos/{id}
            until completed
        - lang: JavaScript
          label: With reference image
          source: >
            import { readFile } from "node:fs/promises";


            const form = new FormData();

            form.append("model", "sora-2");

            form.append("prompt", "Animate gentle ripples across the water");

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

            form.append("size", "1280x720");

            form.append("input_reference", new Blob([await
            readFile("reference.png")], { type: "image/png" }),
            "reference.png");


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


            const video = await response.json();

            console.log(video.id, video.status);
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token authentication. Use your CometAPI key.

````