Unlock exclusive introductory pricing for the newly launched Gemini 3.5 Flash.
O

Sora 2

فی سیکنڈ:$0.08
جاری کیا گیا:Oct 9, 2025

انتہائی طاقتور ویڈیو تخلیق کا ماڈل، صوتی اثرات کے ساتھ، چیٹ فارمیٹ کی حمایت کرتا ہے۔

نیا
مقبول
تجارتی استعمال

Sora 2 کے لیے Playground

Sora 2 کا Playground دریافت کریں — ماڈلز کو ٹیسٹ کرنے اور حقیقی وقت میں سوالات چلانے کے لیے ایک متحرک ماحول۔ پرامپٹس آزمائیں، پیرامیٹرز ایڈجسٹ کریں، اور فوری طور پر دہرائیں تاکہ ترقی کو تیز کریں اور استعمال کے معاملات کی تصدیق کریں۔

اہم خصوصیات

  • طبیعی حقیقت پسندی اور تسلسل: بصری آرٹی فیکٹس میں کمی کے لیے اشیا کی دوامیت، حرکت اور طبیعیات کی بہتر تقلید۔
  • ہم آہنگ آڈیو: اسکرین پر نظر آنے والی کارروائی کے ساتھ مطابقت رکھنے والے مکالمہ اور صوتی اثرات تیار کرتا ہے۔
  • کنٹرول پذیری اور اسلوب کی وسعت: کیمرہ فریمنگ، اسلوبی انتخاب، اور مختلف جمالیاتی انداز کے لیے پرامپٹ کنڈیشننگ پر زیادہ باریک کنٹرول۔
  • تخلیقی کنٹرولز: زیادہ یکساں ملٹی شاٹ سلسلے، طبیعیات اور حرکت کی حقیقت پسندی میں بہتری، اور Sora 1 کے مقابلے میں انداز اور وقت بندی کے کنٹرول۔

فنی تفصیلات

OpenAI کے مطابق Sora فیملی کے ماڈلز، ٹرانسفارمر پر مبنی ڈینوائزرز اور ملٹی موڈل کنڈیشننگ کے ساتھ latent video diffusion عمل سے فائدہ اٹھاتے ہیں تاکہ زمانی طور پر ہم آہنگ فریمز اور مطابق آڈیو پیدا کی جا سکے۔ Sora 2 حرکت کی جسمانیت میں بہتری (مومنٹم، طفویّت کی پابندی)، طویل تر یکساں شاٹس، اور تیار کردہ بصریات اور تیار کردہ تقریر/صوتی اثرات کے درمیان واضح ہم زمانی پر توجہ دیتا ہے۔ عوامی مواد ماڈل کی سطح کی حفاظت اور کانٹینٹ ماڈریشن ہکس پر زور دیتا ہے (کچھ ممنوعہ مواد پر سخت بلاکس، کم عمر افراد کے لیے مضبوط تھریش ہولڈز، اور شباہت کے لیے رضامندی کے فلو)۔

محدودیتیں اور حفاظتی غوروفکر

  • کمیّاں باقی ہیں: Sora 2 غلطیاں کرتا ہے (زمانی آرٹی فیکٹس، ایج کیسز میں نامکمل طبیعیات، آواز/زبان کی ادائیگی کی غلطیاں) — Sora 2 بہتر ہے مگر کامل نہیں۔ OpenAI واضح طور پر نوٹ کرتا ہے کہ ماڈل میں اب بھی فیلئر موڈز موجود ہیں۔
  • غلط استعمال کے خطرات: رضامندی کے بغیر شباہت کی تیاری، ڈیپ فیکس، کاپی رائٹ سے متعلق خدشات، اور نوعمر افراد کی فلاح و بہبود/مشغولیت کے خطرات۔ OpenAI رضامندی کے ورک فلو، کیمیو اجازتوں پر سختی، کم عمر افراد کے لیے ماڈریشن کی حدیں، اور انسانی ماڈریشن ٹیمیں نافذ کر رہا ہے۔
  • مواد اور قانونی حدود: ایپ اور ماڈل واضح/پر تشدد مواد کو روکتے ہیں اور بغیر رضامندی کے عوامی شخصیات کی شباہت کی تیاری کو محدود کرتے ہیں؛ یہ بھی رپورٹ ہوا ہے کہ OpenAI کاپی رائٹ شدہ ذرائع کے لیے آپٹ آؤٹ میکنزمز استعمال کرتا ہے۔ عملی ماہرین کو پروڈکشن استعمال سے پہلے IP اور پرائیویسی/قانونی خطرات کا جائزہ لینا چاہیے۔
  • موجودہ ڈپلائمنٹس میں مختصر کلپس پر زور دیا گیا ہے (ایپ فیچرز میں ~10-second تخلیقی کلپس کا حوالہ)، اور بھاری یا غیر محدود فوٹو ریئلسٹک اپلوڈز کو محدود کیا جاتا ہے during

بنیادی اور عملی استعمالات

  • سوشل تخلیق اور وائرل کلپس: سوشل فیڈز کے لیے مختصر عمودی کلپس کی تیز رفتار تیاری اور ری مکسنگ (Sora app استعمال کا کیس)۔
  • پروٹوٹائپنگ اور پری ویژولائزیشن: فوری سین ماک اپس، اسٹوری بورڈنگ، اور ہم آہنگ عارضی آڈیو کے ساتھ کانسیپٹ بصریات، تخلیقی ٹیموں کے لیے۔
  • اشتہارات اور مختصر فارم مواد: پروف آف کانسیپٹ تخلیقی ٹیسٹنگ اور چھوٹی مہم کے اثاثے، جہاں اخلاقی/قانونی اجازتیں محفوظ ہوں۔
  • تحقیق اور ٹول چین میں اضافہ: میڈیا لیبز کے لیے ورلڈ ماڈلنگ اور ملٹی موڈل الائنمنٹ کے مطالعے کا ٹول (لائسنس اور حفاظتی گارڈ ریلز کے تابع)。

اکثر پوچھے جانے والے سوالات

Sora 2 کی قیمتیں

[ماڈل کا نام] کے لیے مسابقتی قیمتوں کو دریافت کریں، جو مختلف بجٹ اور استعمال کی ضروریات کے مطابق ڈیزائن کیا گیا ہے۔ ہمارے لچکدار منصوبے اس بات کو یقینی بناتے ہیں کہ آپ صرف اسی کے لیے ادائیگی کریں جو آپ استعمال کرتے ہیں، جس سے آپ کی ضروریات بڑھنے کے ساتھ ساتھ اسکیل کرنا آسان ہو جاتا ہے۔ دریافت کریں کہ [ماڈل کا نام] کیسے آپ کے پروجیکٹس کو بہتر بنا سکتا ہے جبکہ اخراجات کو قابو میں رکھتا ہے۔

Model NameTagsOrientationResolutionPrice
sora-2videosPortrait720x1280$0.08 / sec
sora-2videosLandscape1280x720$0.08 / sec
sora-2-all-Universal / All-$0.08000

Sora 2 کے لیے نمونہ کوڈ اور API

Sora 2، OpenAI کا فلیگ شپ ٹیکسٹ ٹو ویڈیو اور آڈیو جنریشن سسٹم ہے، جسے ہم آہنگ مکالمے، صوتی اثرات، منظر کی حالت کا تسلسل، اور طبعی حقیقت نگاری میں نمایاں بہتری کے ساتھ مختصر فلمی ویڈیو کلپس تیار کرنے کے لیے ڈیزائن کیا گیا ہے۔ Sora 2، پہلے کے ٹیکسٹ ٹو ویڈیو سسٹمز کے مقابلے میں، ہم آہنگ آڈیو (گفتار اور صوتی اثرات)، بہتر طبعی معقولیت (حرکت، مقدارِ حرکت، طفویت) اور زیادہ مضبوط حفاظتی کنٹرولز کے ساتھ مختصر، قابلِ کنٹرول ویڈیوز کی تیاری میں OpenAI کی پیش رفت کی نمائندگی کرتا ہے۔

# Create a video with sora-2
# Step 1: Submit the video generation request
echo "Submitting video generation request..."
response=$(curl -s https://api.cometapi.com/v1/videos \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -F "model=sora-2" \
  -F "prompt=A calico cat playing a piano on stage")

echo "Response: $response"

# Extract video_id from response (handle JSON with spaces like "id": "xxx")
video_id=$(echo "$response" | tr -d '
' | sed 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
echo "Video ID: $video_id"

# Step 2: Poll for progress until 100%
echo ""
echo "Checking video generation progress..."
while true; do
  status_response=$(curl -s "https://api.cometapi.com/v1/videos/$video_id" \
    -H "Authorization: Bearer $COMETAPI_KEY")

  # Parse progress from "progress": "0%" format
  progress=$(echo "$status_response" | grep -o '"progress":"[^"]*"' | head -1 | sed 's/"progress":"//;s/"$//')
  # Parse status from the outer level
  status=$(echo "$status_response" | grep -o '"status":"[^"]*"' | head -1 | sed 's/"status":"//;s/"$//')

  echo "Progress: $progress, Status: $status"

  if [ "$progress" = "100%" ]; then
    echo "Video generation completed!"
    break
  fi

  if [ "$status" = "FAILURE" ] || [ "$status" = "failed" ]; then
    echo "Video generation failed!"
    echo "$status_response"
    exit 1
  fi

  sleep 10
done

# Step 3: Download the video to output directory
echo ""
echo "Downloading video to ./output/$video_id.mp4..."
mkdir -p ./output
curl -s "https://api.cometapi.com/v1/videos/$video_id/content" \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -o "./output/$video_id.mp4"

if [ -f "./output/$video_id.mp4" ]; then
  echo "Video saved to ./output/$video_id.mp4"
  ls -la "./output/$video_id.mp4"
else
  echo "Failed to download video"
  exit 1
fi

cURL Code Example

# Create a video with sora-2
# Step 1: Submit the video generation request
echo "Submitting video generation request..."
response=$(curl -s https://api.cometapi.com/v1/videos \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -F "model=sora-2" \
  -F "prompt=A calico cat playing a piano on stage")

echo "Response: $response"

# Extract video_id from response (handle JSON with spaces like "id": "xxx")
video_id=$(echo "$response" | tr -d '\n' | sed 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
echo "Video ID: $video_id"

# Step 2: Poll for progress until 100%
echo ""
echo "Checking video generation progress..."
while true; do
  status_response=$(curl -s "https://api.cometapi.com/v1/videos/$video_id" \
    -H "Authorization: Bearer $COMETAPI_KEY")
  
  # Parse progress from "progress": "0%" format
  progress=$(echo "$status_response" | grep -o '"progress":"[^"]*"' | head -1 | sed 's/"progress":"//;s/"$//')
  # Parse status from the outer level
  status=$(echo "$status_response" | grep -o '"status":"[^"]*"' | head -1 | sed 's/"status":"//;s/"$//')
  
  echo "Progress: $progress, Status: $status"
  
  if [ "$progress" = "100%" ]; then
    echo "Video generation completed!"
    break
  fi
  
  if [ "$status" = "FAILURE" ] || [ "$status" = "failed" ]; then
    echo "Video generation failed!"
    echo "$status_response"
    exit 1
  fi
  
  sleep 10
done

# Step 3: Download the video to output directory
echo ""
echo "Downloading video to ./output/$video_id.mp4..."
mkdir -p ./output
curl -s "https://api.cometapi.com/v1/videos/$video_id/content" \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -o "./output/$video_id.mp4"

if [ -f "./output/$video_id.mp4" ]; then
  echo "Video saved to ./output/$video_id.mp4"
  ls -la "./output/$video_id.mp4"
else
  echo "Failed to download video"
  exit 1
fi

Python Code Example

# Create a video with sora-2 using raw HTTP requests
import os
import time
import requests

api_key = os.environ.get("COMETAPI_KEY")
base_url = "https://api.cometapi.com/v1"

headers = {"Authorization": f"Bearer {api_key}"}

# Step 1: Submit the video generation request
print("Submitting video generation request...")
response = requests.post(
    f"{base_url}/videos",
    headers=headers,
    files={
        "model": (None, "sora-2"),
        "prompt": (None, "A calico cat playing a piano on stage"),
    },
)

result = response.json()
print(f"Response: {result}")

video_id = result.get("id")
print(f"Video ID: {video_id}")

# Step 2: Poll for progress until 100%
print("\nChecking video generation progress...")
while True:
    try:
        status_response = requests.get(f"{base_url}/videos/{video_id}", headers=headers)
        status_result = status_response.json()

        # Parse progress and status from response
        data = status_result.get("data", {})
        if data is None:
            data = {}
        progress = data.get("progress", "0%")
        status = data.get("status", "unknown")

        print(f"Progress: {progress}, Status: {status}")

        if status in ["FAILURE", "failed"]:
            print("Video generation failed!")
            print(status_result)
            exit(1)

        if progress == "100%":
            print("Video generation completed!")
            break
    except Exception as e:
        print(f"Temporary error: {e}, retrying...")

    time.sleep(10)

# Step 3: Download the video to output directory
print(f"\nDownloading video to ./output/{video_id}.mp4...")
os.makedirs("./output", exist_ok=True)

video_response = requests.get(f"{base_url}/videos/{video_id}/content", headers=headers)

output_path = f"./output/{video_id}.mp4"
with open(output_path, "wb") as f:
    f.write(video_response.content)

if os.path.exists(output_path):
    file_size = os.path.getsize(output_path)
    print(f"Video saved to {output_path}")
    print(f"File size: {file_size} bytes")
else:
    print("Failed to download video")
    exit(1)

JavaScript Code Example

// Create a video with sora-2 using raw HTTP requests
import fs from "fs";
import path from "path";

const apiKey = process.env.COMETAPI_KEY;
const baseUrl = "https://api.cometapi.com/v1";

async function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

async function main() {
  // Step 1: Submit the video generation request
  console.log("Submitting video generation request...");

  const formData = new FormData();
  formData.append("model", "sora-2");
  formData.append("prompt", "A calico cat playing a piano on stage");

  const submitResponse = await fetch(`${baseUrl}/videos`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${apiKey}`,
    },
    body: formData,
  });

  const result = await submitResponse.json();
  console.log("Response:", JSON.stringify(result, null, 2));

  const videoId = result.id;
  console.log("Video ID:", videoId);

  // Step 2: Poll for progress until 100%
  console.log("\nChecking video generation progress...");

  while (true) {
    try {
      const statusResponse = await fetch(`${baseUrl}/videos/${videoId}`, {
        headers: {
          Authorization: `Bearer ${apiKey}`,
        },
      });

      const text = await statusResponse.text();
      if (text.startsWith("<")) {
        console.log("Temporary server error, retrying...");
        await sleep(10000);
        continue;
      }

      const statusResult = JSON.parse(text);

      // Parse progress and status from response
      const data = statusResult.data || {};
      const progress = data.progress || "0%";
      const status = data.status || "unknown";

      console.log(`Progress: ${progress}, Status: ${status}`);

      if (status === "FAILURE" || status === "failed") {
        console.log("Video generation failed!");
        console.log(JSON.stringify(statusResult, null, 2));
        process.exit(1);
      }

      if (progress === "100%") {
        console.log("Video generation completed!");
        break;
      }
    } catch (e) {
      console.log(`Temporary error: ${e.message}, retrying...`);
    }

    await sleep(10000);
  }

  // Step 3: Download the video to output directory
  console.log(`\nDownloading video to ./output/${videoId}.mp4...`);

  const outputDir = "./output";
  if (!fs.existsSync(outputDir)) {
    fs.mkdirSync(outputDir, { recursive: true });
  }

  const videoResponse = await fetch(`${baseUrl}/videos/${videoId}/content`, {
    headers: {
      Authorization: `Bearer ${apiKey}`,
    },
  });

  const outputPath = path.join(outputDir, `${videoId}.mp4`);
  const videoBuffer = Buffer.from(await videoResponse.arrayBuffer());
  fs.writeFileSync(outputPath, videoBuffer);

  if (fs.existsSync(outputPath)) {
    const stats = fs.statSync(outputPath);
    console.log(`Video saved to ${outputPath}`);
    console.log(`File size: ${stats.size} bytes`);
  } else {
    console.log("Failed to download video");
    process.exit(1);
  }
}

main().catch(console.error);