موجز لأهم النقاط
يستخدم نموذج grok-imagine-video من xAI واجهة برمجة تطبيقات Grok لتحويل صورة ثابتة إلى فيديو متحرك. ترسل (POST) عنوان URL لصورتك، مع طلب (prompt) اختياري وإعدادات أخرى إلى https://api.x.ai/v1/videos/generations. ستستقبل على الفور request_id. بعد ذلك، تستعلم (poll) من GET /v1/videos/{request_id} حتى يصبح status "done". تستغرق العملية عادة من 1 إلى 15 ثانية. الأسعار تبدأ من 0.05 دولار أمريكي للثانية بدقة 480p.
مقدمة
في 28 يناير 2026، وفرت xAI نموذج grok-imagine-video للعامة عبر API. خلال الشهر الأول فقط، أنشأ النموذج 1.2 مليار فيديو وتصدر قائمة تحويل النص إلى فيديو من Artificial Analysis. ميزة تحويل الصورة إلى فيديو تتيح لك إرسال صورة مع طلب وصفي، ويقوم API بتحريك الصورة وإرجاع مقطع MP4 جاهز للتحميل.
هذه العملية غير المتزامنة تتطلب إرسال مهمة ثم الاستعلام عنها حتى الاكتمال. لا يكتمل التكامل بمجرد تلقي 200 OK من POST؛ بل يجب التأكد من أن حلقة الاستعلام تتعامل مع حالات "processing" و"done" و"failed" بشكل صحيح في بيئة الشبكة الفعلية.
سيناريوهات اختبار Apidog تعالج ذلك مباشرة: أبنِ تسلسلًا يرسل POST إلى /v1/videos/generations، يستخرج request_id، ويكرر الاستعلام حتى status == "done"، ثم يتحقق من وجود عنوان URL للفيديو.
ما هي واجهة برمجة تطبيقات Grok لتحويل الصورة إلى فيديو؟
واجهة Grok API جزء من منتج xAI لتوليد الفيديو، وتعمل ضمن نموذج grok-imagine-video. تقبل صورة كإطار بداية للفيديو الناتج، وتدرس محتوى الصورة والطلب النصي لتوليد حركة طبيعية للمشهد.
النقطة النهائية:
POST https://api.x.ai/v1/videos/generations
المصادقة عبر Bearer Token:
Authorization: Bearer YOUR_XAI_API_KEY
يمكنك الحصول على المفتاح من وحدة تحكم xAI. نفس الواجهة تدعم أيضًا تحويل النص إلى فيديو، تمديد الفيديو، وتعديلات الفيديو.
كيف تعمل عملية تحويل الصورة إلى فيديو
معلمة image في الطلب تشير إلى الإطار الأول للفيديو الناتج. يبدأ النموذج من هذه الصورة، ويتنبأ بالحركة بناءً على الطلب النصي.
مثال: أرسل صورة بحيرة جبلية عند الشروق مع طلب "تنتشر تموجات عبر الماء ويصعد ضباب الصباح". الإطار الأول للفيديو هو الصورة نفسها، والإطارات التالية تظهر حركة الماء والضباب.
متى تختار تحويل الصورة إلى فيديو؟
- لديك صور منتجات أو مناظر أو صور شخصية وتريد تحريكها.
- تريد الحفاظ على هوية بصرية متسقة في الإطار الأول.
- تحتاج أن تبدو الحركة من مشهد حقيقي أو محدد.
متى تختار تحويل النص إلى فيديو؟
- لا تملك صورة مرجعية وتبحث عن أفكار بصرية جديدة.
- تريد للنموذج أن يحدد تكوين المشهد بالكامل.
- سرعة التكرار أهم من دقة الإطار الأول.
المتطلبات الأساسية
قبل تنفيذ أول طلب:
- حساب xAI على console.x.ai
- مفتاح API من وحدة تحكم xAI. احفظه في متغير بيئة.
- Python 3.8+ أو Node.js 18+ (الأمثلة هنا تستخدم كلاهما).
- عنوان URL لصورة عامة، أو صورة مشفرة base64 كـ Data URI.
تعيين المفتاح في البيئة:
export XAI_API_KEY="your_key_here"
تثبيت xAI Python SDK (اختياري):
pip install xai-sdk
للطلبات الخام: استخدم فقط مكتبة requests (Python) أو fetch (Node.js).
إجراء أول طلب لتحويل الصورة إلى فيديو
باستخدام curl
curl -X POST https://api.x.ai/v1/videos/generations \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"prompt": "Gentle waves move across the surface, morning mist rises slowly",
"image": {
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg"
},
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9"
}'
الاستجابة:
{
"request_id": "d97415a1-5796-b7ec-379f-4e6819e08fdf"
}
الفيديو يُولّد بشكل غير متزامن. استعلم عن النتيجة كما يلي.
باستخدام بايثون (طلبات خام)
import os
import requests
api_key = os.environ["XAI_API_KEY"]
payload = {
"model": "grok-imagine-video",
"prompt": "Gentle waves move across the surface, morning mist rises slowly",
"image": {
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg"
},
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9"
}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(
"https://api.x.ai/v1/videos/generations",
json=payload,
headers=headers
)
data = response.json()
request_id = data["request_id"]
print(f"Job started: {request_id}")
باستخدام صورة base64
إذا كانت الصورة محلية أو غير متاحة للعامة:
import base64
with open("my_image.jpg", "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
payload["image"] = {
"url": f"data:image/jpeg;base64,{encoded}"
}
الاستعلام عن النتيجة
توليد الفيديو غير متزامن. بعد استقبال request_id، استعلم من نقطة النهاية التالية:
GET https://api.x.ai/v1/videos/{request_id}
قيم الحالة المحتملة:
| الحالة | المعنى |
|---|---|
"processing" |
جاري عرض الفيديو |
"done" |
الفيديو جاهز والرابط متوفر |
"failed" |
حدث خطأ |
مثال على رد مكتمل:
{
"status": "done",
"video": {
"url": "https://vidgen.x.ai/....mp4",
"duration": 6
},
"progress": 100
}
حلقة استعلام بايثون كاملة
import time
def poll_video(request_id: str, api_key: str, interval: int = 5) -> dict:
url = f"https://api.x.ai/v1/videos/{request_id}"
headers = {"Authorization": f"Bearer {api_key}"}
while True:
response = requests.get(url, headers=headers)
data = response.json()
status = data.get("status")
print(f"Status: {status} | Progress: {data.get('progress', 0)}%")
if status == "done":
return data["video"]
elif status == "failed":
raise RuntimeError(f"Video generation failed for {request_id}")
time.sleep(interval)
# الاستخدام
video = poll_video(request_id, api_key)
print(f"Video URL: {video['url']}")
print(f"Duration: {video['duration']}s")
يفضل أن تكون فترة الاستعلام 5 ثوانٍ أو أكثر بسبب حد المعدل (60 طلب/دقيقة).
استخدام حزمة xAI Python SDK
مكتبة xai-sdk تغلف النمط غير المتزامن تلقائياً:
from xai_sdk import Client
import os
client = Client(api_key=os.environ["XAI_API_KEY"])
video = client.video.generate(
model="grok-imagine-video",
prompt="Gentle waves move across the surface, morning mist rises slowly",
image={"url": "https://example.com/landscape.jpg"},
duration=6,
resolution="720p",
aspect_ratio="16:9"
)
print(f"Video URL: {video.url}")
print(f"Duration: {video.duration}s")
تتعامل الحزمة مع الاستعلامات والأخطاء تلقائيًا. استخدم الطلبات الخام إذا أردت التحكم الكامل في الاستعلام وإعادة المحاولة والتسجيل.
التحكم في الدقة والمدة ونسبة العرض إلى الارتفاع
المدة
معلمة duration تقبل أرقام صحيحة بين 1 و15 ثانية (الافتراضي 6):
"duration": 10
كلما طال الفيديو، زادت التكلفة.
الدقة
| القيمة | الوصف |
|---|---|
"480p" |
افتراضي، تكلفة منخفضة |
"720p" |
جودة أعلى، تكلفة أعلى |
"resolution": "720p"
نسبة العرض إلى الارتفاع
| القيمة | الاستخدام |
|---|---|
| "16:9" | افتراضي، شاشة عريضة |
| "9:16" | عمودي للموبايل أو القصص |
| "1:1" | مربع |
| "4:3" | كلاسيكي أو عروض تقديمية |
| "3:4" | تصوير بورتريه |
| "3:2" | قص تصوير فوتوغرافي |
| "2:3" | بورتريه طولي |
إذا قدمت معلمة image، يتم تعيين الأبعاد افتراضيًا لأبعاد الصورة المصدر. اضبطها يدويًا للتجاوز أو القص.
استخدام الصور المرجعية لتوجيه النمط
-
image: الإطار الأول للفيديو. -
reference_images: مصفوفة صور (حتى 7) توجه النمط أو الإضاءة أو المعالجة الأسلوبية، لكنها ليست جزءًا من الإخراج.
مثال:
{
"model": "grok-imagine-video",
"prompt": "A product rotating slowly on a clean white surface",
"image": {
"url": "https://example.com/product-shot.jpg"
},
"reference_images": [
{"url": "https://example.com/brand-style-reference-1.jpg"},
{"url": "https://example.com/lighting-reference.jpg"}
],
"duration": 6,
"resolution": "720p"
}
يمكنك استخدام الصور المرجعية بدون صورة إطار أول، فيتحول الطلب إلى نص إلى فيديو بنمط مستوحى من المرجع.
توسيع وتعديل مقاطع الفيديو
واجهة API تدعم عمليتين إضافيتين:
توسيع مقطع فيديو
POST /v1/videos/extensions يولد ثوانٍ إضافية من فيديو سابق:
curl -X POST https://api.x.ai/v1/videos/extensions \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"video_id": "your_original_request_id",
"prompt": "The mist continues to lift as sunlight breaks through",
"duration": 5
}'
يتم الاستعلام بنفس النمط غير المتزامن.
تعديل مقطع فيديو
POST /v1/videos/edits لتعديلات موجهة بالطلب على فيديو سابق:
curl -X POST https://api.x.ai/v1/videos/edits \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"video_id": "your_original_request_id",
"prompt": "Change the sky to a dramatic sunset with deep orange tones"
}'
التوسيعات والتعديلات كلاهما غير متزامنين ويتطلبان الاستعلام حتى الاكتمال.
تفصيل الأسعار: تكلفة فيديو مدته 10 ثوانٍ
تسعير Grok للفيديو يشمل:
| المكون | التكلفة |
|---|---|
| صورة الإدخال | 0.002 دولار لكل صورة |
| إخراج 480p | 0.05 دولار/ثانية |
| إخراج 720p | 0.07 دولار/ثانية |
مثال فيديو 10 ثوانٍ بدقة 720p:
- صورة الإدخال: 0.002 دولار
- الإخراج: 10 × 0.07 = 0.70 دولار
- الإجمالي: 0.702 دولار
مثال فيديو 6 ثوانٍ بدقة 480p:
- صورة الإدخال: 0.002 دولار
- الإخراج: 6 × 0.05 = 0.30 دولار
- الإجمالي: 0.302 دولار
تُفرض رسوم صورة الإدخال في كل طلب حتى لو أعدت استخدام نفس الصورة. تحويل النص إلى فيديو يلغي رسوم الإدخال فقط.
كيفية اختبار تكامل واجهة برمجة تطبيقات Grok للفيديو باستخدام Apidog
لضمان تكامل موثوق، يجب اختبار السيناريو الكامل، وليس فقط طلب واحد:
- تحقق أن طلب التوليد يرجع
request_id. - تحقق أن الاستعلام يتعامل مع
"processing"بشكل صحيح. - تحقق أن الرد النهائي فيه
status == "done"وvideo.urlغير فارغ.
خطوات بناء السيناريو في Apidog:
1. أنشئ سيناريو اختبار جديد
- في Apidog، افتح الوحدة الخاصة بالاختبارات وأنشئ سيناريو جديد باسم "Grok image-to-video async flow".
2. أضف خطوة طلب التوليد
- POST إلى
https://api.x.ai/v1/videos/generations - رأس:
Authorization: Bearer {{xai_api_key}} - JSON في النص:
{
"model": "grok-imagine-video",
"prompt": "Gentle mist rises from the water as light filters through the trees",
"image": {
"url": "https://example.com/your-test-image.jpg"
},
"duration": 6,
"resolution": "480p"
}
3. استخراج request_id
- أضف معالج "Extract Variable":
- اسم المتغير:
video_request_id - المصدر: نص الاستجابة
- JSONPath:
$.request_id
- اسم المتغير:
4. بناء حلقة الاستعلام
- أضف معالج "For" مع طلب GET إلى
https://api.x.ai/v1/videos/{{video_request_id}} - استخرج
video_statusمن$.status - أضف معالج "Wait" (5000 مللي ثانية) بعد كل استعلام
- شرط الخروج:
{{video_status}} == "done"
5. التأكد من عنوان URL للفيديو
- بعد الحلقة، أضف خطوة GET أخرى لنفس النهاية، ثم معالج "Assertion":
- الحقل:
$.video.url - الشرط: ليس فارغًا
- الحقل:
تشغيل السيناريو
- انقر "تشغيل" في Apidog. ستنفذ الخطوات تلقائيًا مع تقرير مفصل. يمكن ربط السيناريو بخط CI/CD:
apidog run --scenario grok-video-async-flow --env production
الأخطاء الشائعة والحلول
401 غير مصرح به
راجع صيغة رأس Authorization وتأكد من صحة المفتاح.
422 كيان غير قابل للمعالجة
حقل ناقص أو مشوه في الطلب. تحقق من وجود جميع الحقول، وصحة عنوان URL للصورة.
عنوان URL للصورة غير متاح
يجب أن يكون متاحًا للعامة. استخدم CDN أو base64 إذا كان خاصًا.
الحالة "processing" لا تنتهي
قد يكون الطلب توقف. إذا استمر لأكثر من 10 دقائق، أعد المحاولة.
أخطاء حد المعدل (429)
تأكد من وجود 1 ثانية على الأقل بين كل استعلام.
رفض تحميل Base64
تأكد من صحة بادئة نوع MIME مثل data:image/jpeg;base64,.
عدم تطابق نسبة العرض إلى الارتفاع
إذا اختلفت كثيرًا عن أبعاد الصورة الأصلية قد يحدث قص/تسطير.
الخاتمة
واجهة Grok لتحويل الصورة إلى فيديو تتيح لك الانتقال من صورة ثابتة إلى فيديو متحرك عبر API مباشرة. أطلق نموذج grok-imagine-video مليارات الفيديوهات في أول شهر من طرحه. لضمان تكامل موثوق، نفذ اختبارات تغطي حلقة الاستعلام، استخراج المتغيرات، وتأكيد عنوان URL النهائي باستخدام سيناريوهات Apidog.
ابدأ ببناء تكاملك مع Apidog مجانًا. لا يتطلب بطاقة ائتمان.
الأسئلة الشائعة
ما اسم النموذج؟
grok-imagine-video مرّرها في حقل model في POST.
ما الفرق بين image وreference_images؟
image: الإطار الأول للفيديو.
reference_images: صور توجه النمط فقط.
كم يستغرق التوليد؟
6 ثواني بدقة 480p: عادة 1-3 دقائق.
15 ثانية 720p: حتى 8 دقائق. الاستعلام كل 5 ثوانٍ يكفي.
هل يمكن استخدام صورة محلية؟
نعم. شفرها base64 بصيغة data:image/jpeg;base64,....
ماذا لو لم أحدد aspect_ratio؟
إذا أرسلت صورة، يتم اعتماد أبعادها. بدونه الافتراضي 16:9.
تكلفة فيديو 10 ثواني 720p؟
0.002 دولار للصورة + 0.70 دولار للإخراج = 0.702 دولار.
ما هي حدود المعدل؟
60 طلب/دقيقة و1 طلب/ثانية (POST وGET معًا).
هل يمكن تمديد فيديو لأكثر من 15 ثانية؟
نعم، عبر POST /v1/videos/extensions لتمديد الفيديو على دفعات متتالية.

Top comments (0)