الانتقال إلى المحتوى الرئيسي
توليد الفيديو غير متزامن. أرسل مهمة، احفظ queue_id، ثم استعلم عبر /video/retrieve حتى تكون الاستجابة video/mp4.

نقاط النهاية

نقطة النهايةالغرضمطلوب
POST /video/quoteالحصول على السعر بالدولار قبل التوليدلا
POST /video/queueإرسال طلب التوليدنعم
POST /video/retrieveالاستعلام عن الحالة أو تنزيل الفيديونعم
POST /video/completeحذف الفيديو من التخزينلا

الخطوة 1: إرسال طلب التوليد إلى الطابور

الطلب:
POST https://api.venice.ai/api/v1/video/queue
Authorization: Bearer $VENICE_API_KEY
Content-Type: application/json

{
  "model": "wan-2.5-preview-text-to-video",
  "prompt": "A gondola gliding through Venice canals at sunset",
  "duration": "5s",
  "resolution": "720p",
  "aspect_ratio": "16:9"
}
الاستجابة (200):
{
  "model": "wan-2.5-preview-text-to-video",
  "queue_id": "123e4567-e89b-12d3-a456-426614174000"
}
لنماذج Grok Imagine Private، تتضمن استجابة الطابور حقلًا إضافيًا download_url:
{
  "model": "grok-imagine-text-to-video-private",
  "queue_id": "123e4567-e89b-12d3-a456-426614174000",
  "download_url": "https://private-share.venice.ai/v1/share/read/..."
}
download_url هو رابط موقّع مسبقًا تستخدمه لتنزيل الفيديو المكتمل بدلًا من قراءته من استجابة retrieve. يُعاد مرة واحدة فقط في استجابة الطابور، فاحفظه إلى جانب queue_id. وهذا ينطبق على متغيّرات Grok Imagine Private الأربعة:
  • grok-imagine-text-to-video-private
  • grok-imagine-image-to-video-private
  • grok-imagine-reference-to-video-private
  • grok-imagine-video-to-video-private
بخلاف متغيّرات grok-imagine-*-video العامة، لا تُحاسَب نماذج Grok Imagine Private على رفضات اعتدال المحتوى، فلا تدفع إلا عن عمليات التوليد الناجحة. احفظ model وqueue_id وdownload_url (إن وُجد) لجميع الاستدعاءات اللاحقة.

روابط التنزيل الخاصة

بالنسبة للنماذج الخاصة، download_url هو الطريقة التي تجلب بها الملف المنتهي بمجرد اكتمال المهمة. الرابط قصير العمر وأحادي الغرض: وُجد لتسليم ملف MP4 إليك، لا ليكون رابطًا طويل المدى أو مشتركًا على نطاق واسع. إذا انقطع التنزيل، يمكنك إعادة المحاولة لنفس طلب GET عدة مرات من البيئة نفسها حتى يكتمل الملف. هذه المحاولات للتعافي من انقطاعات الشبكة—وليست للاستعلام عبر الرابط نفسه إلى ما لا نهاية، أو مشاركته مع عملاء كثر، أو تضمينه مثل عنوان وسائط دائم. مثل هذه الأنماط تظهر غالبًا كرموز 429 أو 410، وقد تكون مفاجئة إن توقعت أن يتصرف الرابط كاستضافة ملفات عادية. من أجل الموثوقية، يجب أن تنطلق طلبات GET من شبكة عميل واحدة. هناك بعض المرونة إذا تغيّر عنوان IP مرة (مثلًا إذا قطعت اتصال VPN وحاولت مجددًا)، لكن التباين الواسع في عناوين IP المصدر لن ينجح عادة. يبقى الرابط صالحًا حتى 24 ساعة، أو حتى تتم إزالة الكائن.
إذا احتجت إلى رابط ثابت أو تشغيل عام أو وصول متكرر مع مرور الوقت، احفظ الملف في التخزين الخاص بك أولًا وقدّمه من هناك.
الخصوصية: إبطال الرابط عبر DELETE عندما تنتهي من جلب الملف—أو إذا قررت عدم الاحتفاظ به—يمكنك استدعاء DELETE على نفس download_url. لا يلزم مفتاح Venice API لهذا الطلب. هذا اختياري لكنه موصى به عندما تكون الخصوصية مهمة، لأن بعض الوكلاء وصناديق الوسائط خارج Venice قد تحتفظ بسجلات للروابط الكاملة، وحذف الرابط هو أبسط طريقة لتضييق النافذة التي يوجد فيها الرابط الموقّع مسبقًا.
curl -X DELETE "$DOWNLOAD_URL"
التدفق: استعلم عبر /video/retrieve حتى COMPLETED ← اطلب GET على download_url (مع إعادة محاولات خفيفة إذا انقطع النقل) ← احفظ الملف حيث تريد ← استدعِ DELETE على download_url إن أردت إبطال الرابط ← اختياريًا استدعِ /video/complete إذا كنت ما زلت تستخدم تنظيفًا قائمًا على الطابور.

الخطوة 2: الاستعلام عن الاكتمال

الطلب:
POST https://api.venice.ai/api/v1/video/retrieve
Authorization: Bearer $VENICE_API_KEY
Content-Type: application/json

{
  "model": "wan-2.5-preview-text-to-video",
  "queue_id": "123e4567-e89b-12d3-a456-426614174000"
}
تعتمد الاستجابة على الحالة:
Content-Typeالمعنىالإجراء
application/jsonلا يزال قيد المعالجةانتظر 5 ثوانٍ، ثم استعلم مرة أخرى
video/mp4مكتملجسم الاستجابة هو ملف الفيديو
application/json بـ "COMPLETED"مكتمل، الفيديو ليس مضمّنًااستدعِ GET على download_url من استجابة الطابور
استجابة قيد المعالجة (200، application/json):
{
  "status": "PROCESSING",
  "average_execution_time": 145000,
  "execution_duration": 53200
}
الأوقات بالميلي ثانية. استخدم average_execution_time لتقدير الانتظار المتبقي. استجابة الاكتمال (200، video/mp4): جسم الاستجابة هو بيانات فيديو ثنائية خام. احفظها في ملف. استجابة الاكتمال (200، application/json بـ "COMPLETED"): بالنسبة للنماذج التي أعادت download_url وقت الإرسال للطابور، يُعيد retrieve دائمًا JSON. اجلب الفيديو بـ GET download_url (بلا رأس المصادقة). راجع روابط التنزيل الخاصة لمعرفة كيفية عمل هذه الروابط وإعادة المحاولات وDELETE الاختياري.

الخطوة 3: التنظيف (اختياري)

إما حذف تلقائي عند الاسترجاع:
{
  "model": "wan-2.5-preview-text-to-video",
  "queue_id": "123e4567-e89b-12d3-a456-426614174000",
  "delete_media_on_completion": true
}
أو استدعِ /video/complete بعد الحفظ:
POST https://api.venice.ai/api/v1/video/complete
Authorization: Bearer $VENICE_API_KEY
Content-Type: application/json

{
  "model": "wan-2.5-preview-text-to-video",
  "queue_id": "123e4567-e89b-12d3-a456-426614174000"
}
الاستجابة (200):
{
  "success": true
}

مثال كامل

import os
import time
import requests

API_KEY = os.environ.get("VENICE_API_KEY")
BASE_URL = "https://api.venice.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

# Queue
resp = requests.post(f"{BASE_URL}/video/queue", headers=HEADERS, json={
    "model": "wan-2.5-preview-text-to-video",
    "prompt": "A gondola gliding through Venice canals at sunset",
    "duration": "5s",
    "resolution": "720p",
    "aspect_ratio": "16:9"
})
data = resp.json()
model, queue_id = data["model"], data["queue_id"]
download_url = data.get("download_url")

# Poll
while True:
    resp = requests.post(f"{BASE_URL}/video/retrieve", headers=HEADERS,
                         json={"model": model, "queue_id": queue_id})
    if "video/mp4" in resp.headers.get("Content-Type", ""):
        with open("output.mp4", "wb") as f:
            f.write(resp.content)
        break
    if resp.json().get("status") == "COMPLETED" and download_url:
        with open("output.mp4", "wb") as f:
            f.write(requests.get(download_url).content)
        break
    time.sleep(5)

# Cleanup
requests.post(f"{BASE_URL}/video/complete", headers=HEADERS,
              json={"model": model, "queue_id": queue_id})

معاملات الطلب

طلب Queue

المعاملالنوعمطلوبالافتراضيالوصف
modelstringنعم-معرّف النموذج. استخدم wan-2.5-preview-text-to-video للنص إلى فيديو، وwan-2.5-preview-image-to-video للصورة إلى فيديو
promptstringنعم-ما تريد توليده. حد أقصى 2500 حرف
negative_promptstringلا"low resolution, error, worst quality, low quality, defects"ما يجب تجنّبه
durationstringنعم-"5s" أو "10s"
resolutionstringلا"720p""480p" أو "720p" أو "1080p"
aspect_ratiostringشرطي-يعتمد على النموذج. مطلوب للنماذج التي تكشف خيارات نسبة العرض إلى الارتفاع؛ احذفه للنماذج التي لا تدعم اختيار النسبة
audiobooleanشرطيtrue (حين يكون مدعومًا)صالح فقط للنماذج ذات supportsAudioConfig: true؛ احذفه للنماذج التي لا تدعم إعداد الصوت
image_urlstringفقط للصورة إلى فيديو-رابط أو رابط بيانات base64 لصورة المصدر
audio_urlstringشرطي-رابط أو رابط بيانات base64 لصوت مرجعي للنماذج التي تدعم إدخال الصوت
التحقق من صحة الطابور خاص بكل نموذج. تحقق من /models?type=video لمعرفة حقول الطلب المدعومة لكل نموذج قبل استدعاء /video/queue.

طلب Quote

المعاملالنوعمطلوبالافتراضيالوصف
modelstringنعم-معرّف النموذج للتسعير
durationstringنعم-"5s" أو "10s"
resolutionstringلا"720p""480p" أو "720p" أو "1080p"
aspect_ratiostringشرطي-ضمّنه عندما يدعم النموذج المختار اختيار النسبة أو يتطلبه
audiobooleanشرطيtrue (حين يكون مدعومًا)صالح فقط للنماذج ذات supportsAudioConfig: true

طلب Retrieve

المعاملالنوعمطلوبالافتراضيالوصف
modelstringنعم-من استجابة الطابور
queue_idstringنعم-من استجابة الطابور
delete_media_on_completionbooleanلاfalseحذف الفيديو بعد الاسترجاع الناجح

طلب Complete

المعاملالنوعمطلوبالوصف
modelstringنعممن استجابة الطابور
queue_idstringنعممن استجابة الطابور

من صورة إلى فيديو

لنماذج الصورة إلى فيديو، مرّر صورة المصدر عبر image_url. التعليمة تصف الحركة المرغوبة، وليس محتوى الصورة.
{
  "model": "wan-2.5-preview-image-to-video",
  "prompt": "Camera slowly zooms in as leaves rustle in the wind",
  "image_url": "https://example.com/image.jpg",
  "duration": "5s"
}
أو باستخدام base64:
{
  "model": "wan-2.5-preview-image-to-video",
  "prompt": "Camera slowly zooms in as leaves rustle in the wind",
  "image_url": "data:image/jpeg;base64,/9j/4AAQ...",
  "duration": "5s"
}

عرض السعر

احصل على التكلفة الدقيقة قبل التوليد. أرسل فقط مدخلات التسعير (model وduration واختياريًا resolution وaspect_ratio وaudio): الطلب:
{
  "model": "wan-2.5-preview-text-to-video",
  "duration": "10s",
  "resolution": "1080p"
}
الاستجابة:
{
  "quote": 0.085
}
عرض السعر بالدولار الأمريكي.

الأخطاء

الحالةتُعاد منالمعنىالإجراء
400queue، quote، retrieve، completeمعاملات غير صالحةتحقّق من جسم الطلب مقابل المخطط
401queue، retrieve، completeفشل المصادقةتحقّق من مفتاح API
402queueرصيد غير كافٍأضف رصيدًا
404retrieve، download_urlالوسائط غير موجودة (غير صالحة أو منتهية أو محذوفة)تحقّق من model/queue_id أو أعد الإرسال للطابور
410download_urlرابط موقّع مسبقًا منتهي أو مستهلك كليًا أو مُبطل (مثلًا بعد DELETE)ابدأ توليدًا جديدًا إن احتجت ملفًا آخر؛ كل رابط قصير العمر بشكل متعمّد
429download_urlتجاوز حد المعدل—غالبًا من إعادة محاولات كثيرة أو جلب متكرّر للرابط نفسهأكمل التنزيل (بضع إعادات لا بأس بها إذا انقطع الاتصال)، احفظ نسخة محلية، واستخدم DELETE إن أردت إخلاء الرابط؛ واحتفظ بالوصول المستمر على تخزينك الخاص
413queueحمولة كبيرة جدًاقلّل حجم الصورة/الصوت
422queue، retrieveانتهاك للمحتوىعدّل التعليمة
500queue، retrieve، completeفشل الاستدلال/المعالجةأعد المحاولة بتأخير تصاعدي؛ تواصل مع الدعم إذا استمر
503retrieveالنموذج عند حد طاقتهأعد المحاولة بتأخير تصاعدي

استراتيجية الاستعلام

  1. استعلم عبر /video/retrieve على فترات (مثلًا كل 5 ثوانٍ)
  2. إذا كان Content-Type هو application/json وstatus هو "PROCESSING"، انتظر واستعلم مجددًا. استخدم average_execution_time وexecution_duration (بالميلي ثانية) لتقدير الوقت المتبقي
  3. إذا كان Content-Type هو video/mp4، احفظ جسم الاستجابة كملف الإخراج
  4. إذا كان Content-Type هو application/json وstatus هو "COMPLETED"، استدعِ GET على download_url من استجابة الطابور لجلب الفيديو (راجع روابط التنزيل الخاصة)
  5. إذا استخدمت download_url، فكّر في DELETE على ذلك الرابط عند الانتهاء لتضييق المدة التي يوجد فيها الرابط؛ ثم اختياريًا عيّن delete_media_on_completion: true على retrieve أو استدعِ /video/complete للتنظيف القائم على الطابور
  6. عالج 404 كوسائط غير صالحة أو منتهية أو محذوفة؛ وعالج 500/503 بإعادات محاولة وتأخير تصاعدي

النماذج المتاحة

راجع نماذج الفيديو للقائمة الحالية من النماذج والتسعير.