إنشاء الفيديوهات
يمكن لوكلاء OpenClaw إنشاء مقاطع فيديو من المطالبات النصية أو الصور المرجعية أو مقاطع الفيديو الموجودة. يتم دعم أربع عشرة واجهة مزود، ولكل منها خيارات نماذج وأوضاع إدخال ومجموعات ميزات مختلفة. يختار الوكيل المزود المناسب تلقائيًا استنادًا إلى تكوينك ومفاتيح API المتاحة.
لا تظهر أداة video_generate إلا عند توفر مزود واحد على الأقل لإنشاء الفيديوهات. إذا لم تظهر ضمن أدوات الوكيل لديك، فقم بتعيين مفتاح API للمزود أو كوّن agents.defaults.videoGenerationModel.
يتعامل OpenClaw مع إنشاء الفيديوهات على أنه ثلاثة أوضاع تشغيل:
generate لطلبات تحويل النص إلى فيديو بدون وسائط مرجعية
imageToVideo عندما يتضمن الطلب صورة مرجعية واحدة أو أكثر
videoToVideo عندما يتضمن الطلب مقطع فيديو مرجعيًا واحدًا أو أكثر
يمكن للمزودين دعم أي مجموعة فرعية من هذه الأوضاع. تتحقق الأداة من الوضع
النشط قبل الإرسال وتعرض الأوضاع المدعومة في action=list.
البدء السريع
- عيّن مفتاح API لأي مزود مدعوم:
export GEMINI_API_KEY="your-key"
- اختياريًا، ثبّت نموذجًا افتراضيًا:
openclaw config set agents.defaults.videoGenerationModel.primary "google/veo-3.1-fast-generate-preview"
- اطلب من الوكيل:
أنشئ فيديو سينمائيًا مدته 5 ثوانٍ لكركند ودود يتزلج على الأمواج عند غروب الشمس.
سيستدعي الوكيل video_generate تلقائيًا. لا حاجة إلى قائمة سماح للأدوات.
ماذا يحدث عند إنشاء فيديو
إنشاء الفيديو عملية غير متزامنة. عندما يستدعي الوكيل video_generate في جلسة:
- يرسل OpenClaw الطلب إلى المزود ويعيد فورًا معرّف مهمة.
- يعالج المزود المهمة في الخلفية (عادةً من 30 ثانية إلى 5 دقائق حسب المزود والدقة).
- عندما يصبح الفيديو جاهزًا، يوقظ OpenClaw الجلسة نفسها عبر حدث إكمال داخلي.
- ينشر الوكيل الفيديو النهائي مرة أخرى في المحادثة الأصلية.
أثناء تنفيذ المهمة، فإن أي استدعاءات مكررة لـ video_generate في الجلسة نفسها تعيد حالة المهمة الحالية بدلًا من بدء إنشاء جديد. استخدم openclaw tasks list أو openclaw tasks show <taskId> للتحقق من التقدم من خلال CLI.
خارج عمليات تشغيل الوكيل المدعومة بجلسة (على سبيل المثال، استدعاءات الأدوات المباشرة)، تعود الأداة إلى الإنشاء المضمن وتعيد مسار الوسائط النهائي في نفس الدورة.
دورة حياة المهمة
يمر كل طلب video_generate عبر أربع حالات:
- queued — تم إنشاء المهمة وهي بانتظار أن يقبلها المزود.
- running — يعالج المزود المهمة (عادةً من 30 ثانية إلى 5 دقائق حسب المزود والدقة).
- succeeded — أصبح الفيديو جاهزًا؛ يستيقظ الوكيل وينشره في المحادثة.
- failed — خطأ من المزود أو انتهاء مهلة؛ يستيقظ الوكيل مع تفاصيل الخطأ.
تحقق من الحالة من خلال CLI:
openclaw tasks list
openclaw tasks show <taskId>
openclaw tasks cancel <taskId>
منع التكرار: إذا كانت هناك بالفعل مهمة فيديو بالحالة queued أو running للجلسة الحالية، فستعيد video_generate حالة المهمة الموجودة بدلًا من بدء مهمة جديدة. استخدم action: "status" للتحقق بشكل صريح بدون تشغيل إنشاء جديد.
المزودون المدعومون
| المزود | النموذج الافتراضي | نص | صورة مرجعية | فيديو مرجعي | مفتاح API |
|---|
| Alibaba | wan2.6-t2v | نعم | نعم (URL بعيد) | نعم (URL بعيد) | MODELSTUDIO_API_KEY |
| BytePlus (1.0) | seedance-1-0-pro-250528 | نعم | حتى صورتين (نماذج I2V فقط؛ الإطار الأول + الأخير) | لا | BYTEPLUS_API_KEY |
| BytePlus Seedance 1.5 | seedance-1-5-pro-251215 | نعم | حتى صورتين (الإطار الأول + الأخير عبر الدور) | لا | BYTEPLUS_API_KEY |
| BytePlus Seedance 2.0 | dreamina-seedance-2-0-260128 | نعم | حتى 9 صور مرجعية | حتى 3 مقاطع فيديو | BYTEPLUS_API_KEY |
| ComfyUI | workflow | نعم | صورة واحدة | لا | COMFY_API_KEY أو COMFY_CLOUD_API_KEY |
| fal | fal-ai/minimax/video-01-live | نعم | صورة واحدة | لا | FAL_KEY |
| Google | veo-3.1-fast-generate-preview | نعم | صورة واحدة | مقطع فيديو واحد | GEMINI_API_KEY |
| MiniMax | MiniMax-Hailuo-2.3 | نعم | صورة واحدة | لا | MINIMAX_API_KEY |
| OpenAI | sora-2 | نعم | صورة واحدة | مقطع فيديو واحد | OPENAI_API_KEY |
| Qwen | wan2.6-t2v | نعم | نعم (URL بعيد) | نعم (URL بعيد) | QWEN_API_KEY |
| Runway | gen4.5 | نعم | صورة واحدة | مقطع فيديو واحد | RUNWAYML_API_SECRET |
| Together | Wan-AI/Wan2.2-T2V-A14B | نعم | صورة واحدة | لا | TOGETHER_API_KEY |
| Vydra | veo3 | نعم | صورة واحدة (kling) | لا | VYDRA_API_KEY |
| xAI | grok-imagine-video | نعم | صورة واحدة | مقطع فيديو واحد | XAI_API_KEY |
تقبل بعض المزودات متغيرات بيئة إضافية أو بديلة لمفاتيح API. راجع صفحات المزود الفردية للحصول على التفاصيل.
شغّل video_generate action=list لفحص المزودات والنماذج
وأوضاع التشغيل المتاحة أثناء وقت التشغيل.
مصفوفة القدرات المعلنة
هذا هو عقد الأوضاع الصريح الذي تستخدمه video_generate واختبارات العقد
والفحص الحي المشترك.
| المزود | generate | imageToVideo | videoToVideo | مسارات الفحص الحي المشتركة الحالية |
|---|
| Alibaba | نعم | نعم | نعم | generate وimageToVideo؛ تم تخطي videoToVideo لأن هذا المزود يتطلب عناوين URL لفيديوهات http(s) بعيدة |
| BytePlus | نعم | نعم | لا | generate وimageToVideo |
| ComfyUI | نعم | نعم | لا | ليس ضمن الفحص المشترك؛ التغطية الخاصة بسير العمل موجودة ضمن اختبارات Comfy |
| fal | نعم | نعم | لا | generate وimageToVideo |
| Google | نعم | نعم | نعم | generate وimageToVideo؛ تم تخطي videoToVideo المشترك لأن فحص Gemini/Veo الحالي المعتمد على المخزن المؤقت لا يقبل هذا الإدخال |
| MiniMax | نعم | نعم | لا | generate وimageToVideo |
| OpenAI | نعم | نعم | نعم | generate وimageToVideo؛ تم تخطي videoToVideo المشترك لأن مسار المؤسسة/الإدخال هذا يحتاج حاليًا إلى وصول inpaint/remix من جهة المزود |
| Qwen | نعم | نعم | نعم | generate وimageToVideo؛ تم تخطي videoToVideo لأن هذا المزود يتطلب عناوين URL لفيديوهات http(s) بعيدة |
| Runway | نعم | نعم | نعم | generate وimageToVideo؛ يتم تشغيل videoToVideo فقط عندما يكون النموذج المحدد هو runway/gen4_aleph |
| Together | نعم | نعم | لا | generate وimageToVideo |
| Vydra | نعم | نعم | لا | generate؛ تم تخطي imageToVideo المشترك لأن veo3 المضمن يدعم النص فقط وkling المضمن يتطلب عنوان URL بعيدًا للصورة |
| xAI | نعم | نعم | نعم | generate وimageToVideo؛ تم تخطي videoToVideo لأن هذا المزود يتطلب حاليًا عنوان URL بعيدًا لملف MP4 |
معلمات الأداة
مطلوبة
| المعلمة | النوع | الوصف |
|---|
prompt | string | وصف نصي للفيديو المراد إنشاؤه (مطلوب لـ action: "generate") |
مدخلات المحتوى
| المعلمة | النوع | الوصف |
|---|
image | string | صورة مرجعية واحدة (مسار أو URL) |
images | string[] | صور مرجعية متعددة (حتى 9) |
imageRoles | string[] | تلميحات أدوار اختيارية لكل موضع بالتوازي مع قائمة الصور المدمجة. القيم القياسية: first_frame وlast_frame وreference_image |
video | string | مقطع فيديو مرجعي واحد (مسار أو URL) |
videos | string[] | مقاطع فيديو مرجعية متعددة (حتى 4) |
videoRoles | string[] | تلميحات أدوار اختيارية لكل موضع بالتوازي مع قائمة الفيديوهات المدمجة. القيمة القياسية: reference_video |
audioRef | string | ملف صوت مرجعي واحد (مسار أو URL). يُستخدم مثلًا للموسيقى الخلفية أو مرجع الصوت عندما يدعم المزود مدخلات الصوت |
audioRefs | string[] | ملفات صوت مرجعية متعددة (حتى 3) |
audioRoles | string[] | تلميحات أدوار اختيارية لكل موضع بالتوازي مع قائمة المقاطع الصوتية المدمجة. القيمة القياسية: reference_audio |
تُمرَّر تلميحات الأدوار إلى المزود كما هي. تأتي القيم القياسية من
اتحاد VideoGenerationAssetRole ولكن قد تقبل المزودات
سلاسل أدوار إضافية. يجب ألا تحتوي مصفوفات *Roles على عدد إدخالات أكبر من
القائمة المرجعية المقابلة؛ وتفشل أخطاء الزيادة أو النقصان بمقدار واحد برسالة خطأ واضحة.
استخدم سلسلة فارغة لترك خانة بدون تعيين.
عناصر التحكم في النمط
| المعلمة | النوع | الوصف |
|---|
aspectRatio | string | 1:1 أو 2:3 أو 3:2 أو 3:4 أو 4:3 أو 4:5 أو 5:4 أو 9:16 أو 16:9 أو 21:9 أو adaptive |
resolution | string | 480P أو 720P أو 768P أو 1080P |
durationSeconds | number | المدة المستهدفة بالثواني (تُقرَّب إلى أقرب قيمة يدعمها المزود) |
size | string | تلميح للحجم عندما يدعمه المزود |
audio | boolean | تمكين الصوت المُنشأ في الناتج عندما يكون مدعومًا. وهو مختلف عن audioRef* (المدخلات) |
watermark | boolean | تبديل العلامة المائية الخاصة بالمزود عندما تكون مدعومة |
تُعد adaptive قيمة خاصة مرتبطة بالمزود: حيث تُمرَّر كما هي إلى
المزودين الذين يعلنون adaptive ضمن قدراتهم (على سبيل المثال، يستخدمها BytePlus
Seedance لاكتشاف النسبة تلقائيًا من أبعاد
الصورة المدخلة). أما المزودون الذين لا يعلنون عنها فيعرضون هذه القيمة عبر
details.ignoredOverrides في نتيجة الأداة بحيث يكون تجاهلها ظاهرًا.
متقدمة
| المعلمة | النوع | الوصف |
|---|
action | string | "generate" (افتراضي) أو "status" أو "list" |
model | string | تجاوز المزود/النموذج (مثل runway/gen4.5) |
filename | string | تلميح لاسم ملف الإخراج |
providerOptions | object | خيارات خاصة بالمزود على شكل كائن JSON (مثل {"seed": 42, "draft": true}). تتحقق المزودات التي تعلن مخططًا ذا أنواع محددة من المفاتيح وأنواع القيم؛ أما المفاتيح غير المعروفة أو عدم تطابق الأنواع فيؤديان إلى تخطي المرشح أثناء التبديل الاحتياطي. وتتلقى المزودات التي لا تحتوي على مخطط معلن الخيارات كما هي. شغّل video_generate action=list لمعرفة ما يقبله كل مزود |
لا تدعم جميع المزودات كل المعلمات. يقوم OpenClaw بالفعل بتطبيع المدة إلى أقرب قيمة يدعمها المزود، كما يعيد أيضًا تعيين تلميحات الهندسة المترجمة مثل تحويل الحجم إلى نسبة أبعاد عندما يكشف مزود احتياطي سطح تحكم مختلفًا. أما التجاوزات غير المدعومة فعلًا فيتم تجاهلها بأفضل جهد ممكن والإبلاغ عنها كتحذيرات في نتيجة الأداة. وتفشل حدود القدرات الصارمة (مثل كثرة عدد المدخلات المرجعية) قبل الإرسال.
تعرض نتائج الأداة الإعدادات المطبقة. عندما يعيد OpenClaw تعيين المدة أو الهندسة أثناء التبديل الاحتياطي بين المزودات، فإن القيم المعادة في durationSeconds وsize وaspectRatio وresolution تعكس ما تم إرساله، بينما يلتقط details.normalization التحويل من القيم المطلوبة إلى القيم المطبقة.
تحدد المدخلات المرجعية أيضًا وضع التشغيل:
- بدون وسائط مرجعية:
generate
- أي صورة مرجعية:
imageToVideo
- أي فيديو مرجعي:
videoToVideo
- لا تغيّر المدخلات الصوتية المرجعية الوضع الذي تم تحديده؛ بل تُطبَّق فوق أي وضع تحدده المراجع الصورية/الفيديوية، ولا تعمل إلا مع المزودات التي تعلن
maxInputAudios
إن المزج بين مراجع الصور والفيديو ليس سطح قدرات مشتركة مستقرًا.
يُفضَّل استخدام نوع مرجعي واحد لكل طلب.
التبديل الاحتياطي والخيارات ذات الأنواع المحددة
تُطبَّق بعض فحوصات القدرات في طبقة التبديل الاحتياطي بدلًا من
حدود الأداة حتى يتمكن الطلب الذي يتجاوز حدود المزود الأساسي
من العمل على مزود احتياطي قادر:
- إذا لم يعلن المرشح النشط عن
maxInputAudios (أو أعلن عنها على أنها
0)، فسيتم تخطيه عندما يحتوي الطلب على مراجع صوتية، وتتم
تجربة المرشح التالي.
- إذا كانت
maxDurationSeconds لدى المرشح النشط أقل من
durationSeconds المطلوبة ولم يعلن المرشح عن قائمة
supportedDurationSeconds، فسيتم تخطيه.
- إذا كان الطلب يحتوي على
providerOptions وكان المرشح النشط
يعلن صراحة عن مخطط providerOptions ذي أنواع محددة، فسيتم
تخطي المرشح عندما لا تكون المفاتيح الموردة موجودة في المخطط أو عندما
لا تتطابق أنواع القيم. أما المزودات التي لم تعلن عن مخطط بعد فتتلقى
الخيارات كما هي (تمرير متوافق مع الإصدارات السابقة). ويمكن للمزود
إلغاء قبول جميع خيارات المزود صراحة عبر إعلان مخطط فارغ
(capabilities.providerOptions: {})، مما يؤدي إلى نفس التخطي الناتج عن
عدم تطابق النوع.
يُسجَّل أول سبب للتخطي في الطلب عند مستوى warn حتى يرى المشغلون
متى تم تجاوز مزودهم الأساسي؛ أما أسباب التخطي اللاحقة فتُسجَّل عند
debug للحفاظ على هدوء سلاسل التبديل الاحتياطي الطويلة. وإذا تم تخطي
كل المرشحين، فسيشمل الخطأ المجمّع سبب التخطي لكل منهم.
الإجراءات
- generate (افتراضي) — إنشاء فيديو من المطالبة المعطاة والمدخلات المرجعية الاختيارية.
- status — التحقق من حالة مهمة الفيديو الجارية للجلسة الحالية دون بدء إنشاء آخر.
- list — عرض المزودات والنماذج المتاحة وقدراتها.
اختيار النموذج
عند إنشاء فيديو، يحل OpenClaw النموذج بهذا الترتيب:
- معلمة الأداة
model — إذا حددها الوكيل في الاستدعاء.
videoGenerationModel.primary — من التكوين.
videoGenerationModel.fallbacks — تُجرَّب بالترتيب.
- الاكتشاف التلقائي — يستخدم المزودات التي لديها مصادقة صالحة، بدءًا من المزود الافتراضي الحالي، ثم المزودات المتبقية بترتيب أبجدي.
إذا فشل مزود، فسيتم تجربة المرشح التالي تلقائيًا. وإذا فشل جميع المرشحين، فسيتضمن الخطأ تفاصيل من كل محاولة.
عيّن agents.defaults.mediaGenerationAutoProviderFallback: false إذا كنت تريد
أن يستخدم إنشاء الفيديو فقط إدخالات model وprimary وfallbacks
الصريحة.
{
agents: {
defaults: {
videoGenerationModel: {
primary: "google/veo-3.1-fast-generate-preview",
fallbacks: ["runway/gen4.5", "qwen/wan2.6-t2v"],
},
},
},
}
ملاحظات حول المزودين
| المزود | ملاحظات |
|---|
| Alibaba | يستخدم نقطة النهاية غير المتزامنة DashScope/Model Studio. يجب أن تكون الصور ومقاطع الفيديو المرجعية عناوين URL بعيدة من نوع http(s). |
| BytePlus (1.0) | معرّف المزود byteplus. النماذج: seedance-1-0-pro-250528 (افتراضي)، وseedance-1-0-pro-t2v-250528، وseedance-1-0-pro-fast-251015، وseedance-1-0-lite-t2v-250428، وseedance-1-0-lite-i2v-250428. لا تقبل نماذج T2V (*-t2v-*) مدخلات الصور؛ بينما تدعم نماذج I2V ونماذج *-pro-* العامة صورة مرجعية واحدة (الإطار الأول). مرّر الصورة موضعيًا أو عيّن role: "first_frame". يتم تبديل معرّفات نماذج T2V تلقائيًا إلى متغير I2V المقابل عند توفير صورة. مفاتيح providerOptions المدعومة: seed (رقم)، وdraft (قيمة منطقية، يفرض دقة 480p)، وcamera_fixed (قيمة منطقية). |
| BytePlus Seedance 1.5 | يتطلب إضافة @openclaw/byteplus-modelark. معرّف المزود byteplus-seedance15. النموذج: seedance-1-5-pro-251215. يستخدم واجهة content[] الموحدة. يدعم بحد أقصى صورتين مدخلتين (first_frame + last_frame). يجب أن تكون جميع المدخلات عناوين URL بعيدة من نوع https://. عيّن role: "first_frame" / "last_frame" لكل صورة، أو مرّر الصور موضعيًا. يقوم aspectRatio: "adaptive" باكتشاف النسبة تلقائيًا من صورة الإدخال. يتم تحويل audio: true إلى generate_audio. ويتم تمرير providerOptions.seed (رقم). |
| BytePlus Seedance 2.0 | يتطلب إضافة @openclaw/byteplus-modelark. معرّف المزود byteplus-seedance2. النماذج: dreamina-seedance-2-0-260128 وdreamina-seedance-2-0-fast-260128. يستخدم واجهة content[] الموحدة. يدعم حتى 9 صور مرجعية و3 مقاطع فيديو مرجعية و3 ملفات صوت مرجعية. يجب أن تكون جميع المدخلات عناوين URL بعيدة من نوع https://. عيّن role لكل أصل — القيم المدعومة: "first_frame" و"last_frame" و"reference_image" و"reference_video" و"reference_audio". يقوم aspectRatio: "adaptive" باكتشاف النسبة تلقائيًا من صورة الإدخال. يتم تحويل audio: true إلى generate_audio. ويتم تمرير providerOptions.seed (رقم). |
| ComfyUI | تنفيذ محلي أو سحابي قائم على سير العمل. يدعم تحويل النص إلى فيديو وتحويل الصورة إلى فيديو عبر الرسم البياني المكوَّن. |
| fal | يستخدم تدفقًا مدعومًا بالطابور للمهام طويلة التشغيل. يدعم صورة مرجعية واحدة فقط. |
| Google | يستخدم Gemini/Veo. يدعم صورة مرجعية واحدة أو مقطع فيديو مرجعي واحد. |
| MiniMax | يدعم صورة مرجعية واحدة فقط. |
| OpenAI | يتم تمرير تجاوز size فقط. ويتم تجاهل تجاوزات النمط الأخرى (aspectRatio وresolution وaudio وwatermark) مع تحذير. |
| Qwen | يستخدم الواجهة الخلفية DashScope نفسها الخاصة بـ Alibaba. يجب أن تكون المدخلات المرجعية عناوين URL بعيدة من نوع http(s)؛ ويتم رفض الملفات المحلية مسبقًا. |
| Runway | يدعم الملفات المحلية عبر معرّفات URI للبيانات. يتطلب تحويل الفيديو إلى فيديو runway/gen4_aleph. تكشف عمليات التشغيل النصية فقط نسب الأبعاد 16:9 و9:16. |
| Together | يدعم صورة مرجعية واحدة فقط. |
| Vydra | يستخدم https://www.vydra.ai/api/v1 مباشرة لتجنب عمليات إعادة التوجيه التي تُسقط المصادقة. يأتي veo3 مضمّنًا كنمط تحويل النص إلى فيديو فقط؛ بينما يتطلب kling عنوان URL بعيدًا للصورة. |
| xAI | يدعم تحويل النص إلى فيديو، وتحويل الصورة إلى فيديو، وتدفقات تحرير/تمديد الفيديو البعيدة. |
أوضاع قدرات المزود
يتيح عقد إنشاء الفيديوهات المشترك الآن للمزودات إعلان
قدرات خاصة بكل وضع بدلًا من الاكتفاء بحدود مجمعة مسطحة فقط. ويجب على
التنفيذات الجديدة للمزودات تفضيل كتل الأوضاع الصريحة:
capabilities: {
generate: {
maxVideos: 1,
maxDurationSeconds: 10,
supportsResolution: true,
},
imageToVideo: {
enabled: true,
maxVideos: 1,
maxInputImages: 1,
maxDurationSeconds: 5,
},
videoToVideo: {
enabled: true,
maxVideos: 1,
maxInputVideos: 1,
maxDurationSeconds: 5,
},
}
لا تكفي الحقول المجمعة المسطحة مثل maxInputImages وmaxInputVideos
للإعلان عن دعم أوضاع التحويل. يجب على المزودات إعلان
generate وimageToVideo وvideoToVideo بشكل صريح حتى تتمكن الاختبارات الحية
واختبارات العقد وأداة video_generate المشتركة من التحقق من دعم الأوضاع
بشكل حتمي.
الاختبارات الحية
تغطية حية اختيارية للمزودات المضمنة المشتركة:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts
مغلّف المستودع:
pnpm test:live:media video
يقوم هذا الملف الحي بتحميل متغيرات بيئة المزودات الناقصة من ~/.profile،
ويعطي الأفضلية افتراضيًا لمفاتيح API الحية/الخاصة بالبيئة على ملفات
المصادقة المخزنة، ويشغّل الأوضاع المعلنة التي يمكنه اختبارها بأمان باستخدام
وسائط محلية:
generate لكل مزود في الفحص
imageToVideo عندما تكون capabilities.imageToVideo.enabled
videoToVideo عندما تكون capabilities.videoToVideo.enabled ويقبل المزود/النموذج
إدخال الفيديو المحلي المعتمد على المخزن المؤقت في الفحص المشترك
يغطي مسار videoToVideo الحي المشترك اليوم:
runway فقط عند اختيار runway/gen4_aleph
التكوين
عيّن نموذج إنشاء الفيديو الافتراضي في تكوين OpenClaw الخاص بك:
{
agents: {
defaults: {
videoGenerationModel: {
primary: "qwen/wan2.6-t2v",
fallbacks: ["qwen/wan2.6-r2v-flash"],
},
},
},
}
أو عبر CLI:
openclaw config set agents.defaults.videoGenerationModel.primary "qwen/wan2.6-t2v"
ذو صلة