{
  "aboutHtml": "<p>ينشئ Vidu Q2 فيديو من مشهد مكتوب عبر إصدار تحويل النص إلى فيديو المحدد بمعرّف viduq2. مدخلاته المطلوبة هي معرّف النموذج الدقيق وموجّه يصف المشهد. استخدمه لتصور منتج قصير، أو لقطة تأسيسية، أو فعل لشخصية يمكن تحديد مظهرها وحركتها بالكلمات. هذه الطريقة المهيأة لتحويل النص إلى فيديو؛ ولا ينسب وصفها إلى معرّف الاختيار نمطًا منفصلًا لمرجع صورة أو لتحرير الفيديو.</p><p>ابنِ الموجز حول تسلسل مرئي. حدّد الموضوع والموقع والفعل وحجم اللقطة وحركة الكاميرا والتكوين النهائي. لتصور منتج، صف شيئًا على سطح طاولة، وضوءًا يتحرك عبر مادته، واقترابًا بطيئًا للكاميرا ينتهي عند تفصيل يمكن تمييزه. ولمشهد موقع، أسّس البيئة قبل الاقتراب من النقطة المحورية. اجعل الفعل مناسبًا لطول المقطع المختار حتى يتسع المشهد للنهاية المقصودة.</p><p>حد الموجّه 2,000 محرف. ضع الموضوع والفعل الأساسيين أولًا، ثم أضف تفاصيل الإضاءة والمادة والبيئة والكاميرا التي تغيّر النتيجة المنشودة. حدّد الأسلوب البصري في الموجّه. يقول الدليل الخاص بـQ2 إن المعاملين المنفصلين style وmovement_amplitude لا يسريان على هذا النموذج، لذا لا يشكل الإعداد المسبق general أو anime وخيارات شدة الحركة بديلًا عن وصف واضح للمشهد.</p><p>يقبل إعداد المدة الخاص بالنموذج أعدادًا صحيحة من الثواني من واحدة إلى عشر. خيارات الدقة الخاصة بـQ2 هي 540p و720p و1080p، مع 720p قيمة افتراضية موثّقة. اختر المدة والدقة معًا وفق الفعل والوجهة. يحتاج الكشف القصير عن شيء والحركة الأطول إلى توقيت مختلف؛ وينبغي لزيادة المدة المطلوبة أن تخدم التسلسل المرئي بدل مجرد إطالة موجز لم يتغير. افحص الأبعاد والطول الفعليين للمقطع المعاد عند تجهيز موضع عرضه النهائي.</p><p>خيارات aspect_ratio الموثّقة هي 16:9 و9:16 و3:4 و4:3 و1:1، مع 16:9 قيمة افتراضية. يضم الدليل صراحةً 3:4 و4:3 لعائلة Q2. اختر الإطار قبل التوليد وصف تكوينًا يناسبه: أبقِ الموضوع الرئيسي واضحًا في منظر عمودي، أو استخدم عرض إطار أفقي لإظهار المحيط. اجعل المنظر الختامي واضحًا بما يكفي للصفحة أو العرض التقديمي المقصودين أو لإضافة نصوص لاحقًا.</p><p>يتحكم حقل seed في التنوع. يؤدي حذفه أو تقديم 0 إلى اختيار قيمة عشوائية؛ وتختار القيمة غير الصفرية خيار seed الثابت الموثّق لتوليد قابل للتكرار. احتفظ بقيمة seed المعادة مع الموجّه والإعدادات عند مقارنة النسخ. توثّق العملية المشتركة أيضًا عنصري التحكم audio وoff_peak خصيصًا لنماذج Q3. خيارات Q3 هذه ليست قدرات منسوبة إلى إصدار Q2 هذا؛ خطّط الطلب حول مدخلاته النصية ومخرجات الفيديو الموثّقة له.</p><p>التوليد غير متزامن. يُرجع الإرسال task_id وحالة أولية، مع استخدام created لمهمة أُنشئت حديثًا. احتفظ بهوية المهمة أثناء متابعة المعالجة. يستخدم الاستعلام الموثّق عن النتيجة state=success للنتيجة الناجحة ويُرجع مصفوفة creations. لكل عنصر رابط فيديو في creations[].url؛ احفظ كل فيديو معاد بدل افتراض أن المهمة تتضمن دائمًا مخرجًا واحدًا بالضبط.</p><p>يُبلغ توثيق النتيجة أيضًا عن مدة الفيديو الفعلية ومعدل fps وعرض الدقة وارتفاعها. احتفظ بهذه القيم المبلّغ عنها مع المقطع المكتمل بدل اعتبار معدل إطارات مثال أو أبعاده مواصفات ثابتة لـQ2. تتضمن استجابة إنشاء المهمة قيمة credits إلى جانب تكوين الطلب. احتفظ ببيانات المهمة الوصفية المبلّغ عنها ومعرّف المهمة المكتملة مع النتيجة، لكي يظل كل فيديو مرتبطًا بإعدادات توليده.</p><p>راجع التسلسل كاملًا بالرجوع إلى الموجز الأصلي: مظهر الموضوع وشكل الشيء واتجاه الحركة واستمرارية الكاميرا والمنظر النهائي المقصود. وللمراجعة، حدّد التفصيل الملموس الذي لم يطابق الموجز واحتفظ بأجزاء المشهد الناجحة. احفظ الموجّه ومعرّف الاختيار الدقيق والإعدادات وهوية المهمة ومقاطع الفيديو المكتملة معًا، لكي تستند المقارنة اللاحقة إلى المخرجات الفعلية.</p>",
  "aboutText": "ينشئ Vidu Q2 فيديو من مشهد مكتوب عبر إصدار تحويل النص إلى فيديو المحدد بمعرّف viduq2. مدخلاته المطلوبة هي معرّف النموذج الدقيق وموجّه يصف المشهد. استخدمه لتصور منتج قصير، أو لقطة تأسيسية، أو فعل لشخصية يمكن تحديد مظهرها وحركتها بالكلمات. هذه الطريقة المهيأة لتحويل النص إلى فيديو؛ ولا ينسب وصفها إلى معرّف الاختيار نمطًا منفصلًا لمرجع صورة أو لتحرير الفيديو.\n\nابنِ الموجز حول تسلسل مرئي. حدّد الموضوع والموقع والفعل وحجم اللقطة وحركة الكاميرا والتكوين النهائي. لتصور منتج، صف شيئًا على سطح طاولة، وضوءًا يتحرك عبر مادته، واقترابًا بطيئًا للكاميرا ينتهي عند تفصيل يمكن تمييزه. ولمشهد موقع، أسّس البيئة قبل الاقتراب من النقطة المحورية. اجعل الفعل مناسبًا لطول المقطع المختار حتى يتسع المشهد للنهاية المقصودة.\n\nحد الموجّه 2,000 محرف. ضع الموضوع والفعل الأساسيين أولًا، ثم أضف تفاصيل الإضاءة والمادة والبيئة والكاميرا التي تغيّر النتيجة المنشودة. حدّد الأسلوب البصري في الموجّه. يقول الدليل الخاص بـQ2 إن المعاملين المنفصلين style وmovement_amplitude لا يسريان على هذا النموذج، لذا لا يشكل الإعداد المسبق general أو anime وخيارات شدة الحركة بديلًا عن وصف واضح للمشهد.\n\nيقبل إعداد المدة الخاص بالنموذج أعدادًا صحيحة من الثواني من واحدة إلى عشر. خيارات الدقة الخاصة بـQ2 هي 540p و720p و1080p، مع 720p قيمة افتراضية موثّقة. اختر المدة والدقة معًا وفق الفعل والوجهة. يحتاج الكشف القصير عن شيء والحركة الأطول إلى توقيت مختلف؛ وينبغي لزيادة المدة المطلوبة أن تخدم التسلسل المرئي بدل مجرد إطالة موجز لم يتغير. افحص الأبعاد والطول الفعليين للمقطع المعاد عند تجهيز موضع عرضه النهائي.\n\nخيارات aspect_ratio الموثّقة هي 16:9 و9:16 و3:4 و4:3 و1:1، مع 16:9 قيمة افتراضية. يضم الدليل صراحةً 3:4 و4:3 لعائلة Q2. اختر الإطار قبل التوليد وصف تكوينًا يناسبه: أبقِ الموضوع الرئيسي واضحًا في منظر عمودي، أو استخدم عرض إطار أفقي لإظهار المحيط. اجعل المنظر الختامي واضحًا بما يكفي للصفحة أو العرض التقديمي المقصودين أو لإضافة نصوص لاحقًا.\n\nيتحكم حقل seed في التنوع. يؤدي حذفه أو تقديم 0 إلى اختيار قيمة عشوائية؛ وتختار القيمة غير الصفرية خيار seed الثابت الموثّق لتوليد قابل للتكرار. احتفظ بقيمة seed المعادة مع الموجّه والإعدادات عند مقارنة النسخ. توثّق العملية المشتركة أيضًا عنصري التحكم audio وoff_peak خصيصًا لنماذج Q3. خيارات Q3 هذه ليست قدرات منسوبة إلى إصدار Q2 هذا؛ خطّط الطلب حول مدخلاته النصية ومخرجات الفيديو الموثّقة له.\n\nالتوليد غير متزامن. يُرجع الإرسال task_id وحالة أولية، مع استخدام created لمهمة أُنشئت حديثًا. احتفظ بهوية المهمة أثناء متابعة المعالجة. يستخدم الاستعلام الموثّق عن النتيجة state=success للنتيجة الناجحة ويُرجع مصفوفة creations. لكل عنصر رابط فيديو في creations[].url؛ احفظ كل فيديو معاد بدل افتراض أن المهمة تتضمن دائمًا مخرجًا واحدًا بالضبط.\n\nيُبلغ توثيق النتيجة أيضًا عن مدة الفيديو الفعلية ومعدل fps وعرض الدقة وارتفاعها. احتفظ بهذه القيم المبلّغ عنها مع المقطع المكتمل بدل اعتبار معدل إطارات مثال أو أبعاده مواصفات ثابتة لـQ2. تتضمن استجابة إنشاء المهمة قيمة credits إلى جانب تكوين الطلب. احتفظ ببيانات المهمة الوصفية المبلّغ عنها ومعرّف المهمة المكتملة مع النتيجة، لكي يظل كل فيديو مرتبطًا بإعدادات توليده.\n\nراجع التسلسل كاملًا بالرجوع إلى الموجز الأصلي: مظهر الموضوع وشكل الشيء واتجاه الحركة واستمرارية الكاميرا والمنظر النهائي المقصود. وللمراجعة، حدّد التفصيل الملموس الذي لم يطابق الموجز واحتفظ بأجزاء المشهد الناجحة. احفظ الموجّه ومعرّف الاختيار الدقيق والإعدادات وهوية المهمة ومقاطع الفيديو المكتملة معًا، لكي تستند المقارنة اللاحقة إلى المخرجات الفعلية.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "f54e8405d86ea4b934838b73b246168a3e16cab4cc227cf1e0c3afa1753ec2bb",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ar",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Vidu: Q2 Text-to-Video</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"إغلاق\">×</button></div><div class=\"idline\"><span>Vidu /</span><code>viduq2</code><button type=\"button\" id=\"copy-id\">نسخ ID</button></div><nav class=\"card-jump-nav\" aria-label=\"أقسام بطاقة النموذج\"><button type=\"button\" data-card-jump=\"overview\">البداية</button><button type=\"button\" data-card-jump=\"methods\">المدخلات والطرائق</button><button type=\"button\" data-card-jump=\"pricing\">الباقات</button><button type=\"button\" data-card-jump=\"examples\">أمثلة</button><button type=\"button\" data-card-jump=\"results\">النتائج</button><button type=\"button\" data-card-jump=\"aliases\">الأسماء البديلة</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"طرائق API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|viduq2\">فيديو</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">البداية</h3><p class=\"mdesc-full\">ينشئ Vidu Q2 فيديو من موجز نصي لمشهد، بمدة 1–10 ثوانٍ ومخرجات بدقة 540p أو 720p أو 1080p وخمس نسب أبعاد. يستخدم إصدار viduq2 المحدد هذا الموجّه لتحديد الأسلوب والحركة، ويُرجع نتيجته عبر مهمة غير متزامنة.</p><dl class=\"card-io\" data-card-io><div><dt>المدخلات المقبولة</dt><dd>النص</dd></div><div><dt>النتائج</dt><dd>فيديو</dd></div></dl><details class=\"card-about\"><summary>عن النموذج</summary><p class=\"note-s\" data-model-method-boundary>يغطي هذا الوصف قدرات النموذج. وترد أدناه المدخلات والمخرجات والخيارات المتاحة في Ailoot للطريقة المحددة.</p><div class=\"mabout\" id=\"m-about\"><p>ينشئ Vidu Q2 فيديو من مشهد مكتوب عبر إصدار تحويل النص إلى فيديو المحدد بمعرّف viduq2. مدخلاته المطلوبة هي معرّف النموذج الدقيق وموجّه يصف المشهد. استخدمه لتصور منتج قصير، أو لقطة تأسيسية، أو فعل لشخصية يمكن تحديد مظهرها وحركتها بالكلمات. هذه الطريقة المهيأة لتحويل النص إلى فيديو؛ ولا ينسب وصفها إلى معرّف الاختيار نمطًا منفصلًا لمرجع صورة أو لتحرير الفيديو.</p><p>ابنِ الموجز حول تسلسل مرئي. حدّد الموضوع والموقع والفعل وحجم اللقطة وحركة الكاميرا والتكوين النهائي. لتصور منتج، صف شيئًا على سطح طاولة، وضوءًا يتحرك عبر مادته، واقترابًا بطيئًا للكاميرا ينتهي عند تفصيل يمكن تمييزه. ولمشهد موقع، أسّس البيئة قبل الاقتراب من النقطة المحورية. اجعل الفعل مناسبًا لطول المقطع المختار حتى يتسع المشهد للنهاية المقصودة.</p><p>حد الموجّه 2,000 محرف. ضع الموضوع والفعل الأساسيين أولًا، ثم أضف تفاصيل الإضاءة والمادة والبيئة والكاميرا التي تغيّر النتيجة المنشودة. حدّد الأسلوب البصري في الموجّه. يقول الدليل الخاص بـQ2 إن المعاملين المنفصلين style وmovement_amplitude لا يسريان على هذا النموذج، لذا لا يشكل الإعداد المسبق general أو anime وخيارات شدة الحركة بديلًا عن وصف واضح للمشهد.</p><p>يقبل إعداد المدة الخاص بالنموذج أعدادًا صحيحة من الثواني من واحدة إلى عشر. خيارات الدقة الخاصة بـQ2 هي 540p و720p و1080p، مع 720p قيمة افتراضية موثّقة. اختر المدة والدقة معًا وفق الفعل والوجهة. يحتاج الكشف القصير عن شيء والحركة الأطول إلى توقيت مختلف؛ وينبغي لزيادة المدة المطلوبة أن تخدم التسلسل المرئي بدل مجرد إطالة موجز لم يتغير. افحص الأبعاد والطول الفعليين للمقطع المعاد عند تجهيز موضع عرضه النهائي.</p><p>خيارات aspect_ratio الموثّقة هي 16:9 و9:16 و3:4 و4:3 و1:1، مع 16:9 قيمة افتراضية. يضم الدليل صراحةً 3:4 و4:3 لعائلة Q2. اختر الإطار قبل التوليد وصف تكوينًا يناسبه: أبقِ الموضوع الرئيسي واضحًا في منظر عمودي، أو استخدم عرض إطار أفقي لإظهار المحيط. اجعل المنظر الختامي واضحًا بما يكفي للصفحة أو العرض التقديمي المقصودين أو لإضافة نصوص لاحقًا.</p><p>يتحكم حقل seed في التنوع. يؤدي حذفه أو تقديم 0 إلى اختيار قيمة عشوائية؛ وتختار القيمة غير الصفرية خيار seed الثابت الموثّق لتوليد قابل للتكرار. احتفظ بقيمة seed المعادة مع الموجّه والإعدادات عند مقارنة النسخ. توثّق العملية المشتركة أيضًا عنصري التحكم audio وoff_peak خصيصًا لنماذج Q3. خيارات Q3 هذه ليست قدرات منسوبة إلى إصدار Q2 هذا؛ خطّط الطلب حول مدخلاته النصية ومخرجات الفيديو الموثّقة له.</p><p>التوليد غير متزامن. يُرجع الإرسال task_id وحالة أولية، مع استخدام created لمهمة أُنشئت حديثًا. احتفظ بهوية المهمة أثناء متابعة المعالجة. يستخدم الاستعلام الموثّق عن النتيجة state=success للنتيجة الناجحة ويُرجع مصفوفة creations. لكل عنصر رابط فيديو في creations[].url؛ احفظ كل فيديو معاد بدل افتراض أن المهمة تتضمن دائمًا مخرجًا واحدًا بالضبط.</p><p>يُبلغ توثيق النتيجة أيضًا عن مدة الفيديو الفعلية ومعدل fps وعرض الدقة وارتفاعها. احتفظ بهذه القيم المبلّغ عنها مع المقطع المكتمل بدل اعتبار معدل إطارات مثال أو أبعاده مواصفات ثابتة لـQ2. تتضمن استجابة إنشاء المهمة قيمة credits إلى جانب تكوين الطلب. احتفظ ببيانات المهمة الوصفية المبلّغ عنها ومعرّف المهمة المكتملة مع النتيجة، لكي يظل كل فيديو مرتبطًا بإعدادات توليده.</p><p>راجع التسلسل كاملًا بالرجوع إلى الموجز الأصلي: مظهر الموضوع وشكل الشيء واتجاه الحركة واستمرارية الكاميرا والمنظر النهائي المقصود. وللمراجعة، حدّد التفصيل الملموس الذي لم يطابق الموجز واحتفظ بأجزاء المشهد الناجحة. احفظ الموجّه ومعرّف الاختيار الدقيق والإعدادات وهوية المهمة ومقاطع الفيديو المكتملة معًا، لكي تستند المقارنة اللاحقة إلى المخرجات الفعلية.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">متاح في Ailoot · المدخلات والطرائق</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · فيديو</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>الإدخال</dt><dd><code>text</code></dd></div><div><dt>الإخراج</dt><dd><code>video</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>الحقل</th><th>النوع</th><th>المتطلب</th><th>القيم والحدود</th><th>القيمة الافتراضية</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>viduq2</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>الشروط: صِف المشهد المراد توليده. الحد الموثّق هو 2000 حرف؛ تتحقق Ailoot من أن السلسلة النصية غير فارغة وتحافظ على النص.</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>integer</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>اختياري</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>الحد الأدنى: ⁦1⁩</div><div>الحد الأقصى: ⁦10⁩</div><div>الشروط: يحدد الوصف الخاص بالنموذج viduq2 مدة 1–10 ثوانٍ كاملة. لا توجد مدة افتراضية موثّقة خاصة بالنموذج.</div><div>الوحدة: ثوانٍ</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>اختياري</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>الشروط: احذف الحقل أو أرسل السلسلة النصية &quot;0&quot; لاستخدام العشوائية. إذا قُدِّمت قيمة seed غير صفرية، فإنها تختار سلوك seed الثابت الموثّق؛ ولا يوجد نطاق عددي محدد.</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>اختياري</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>16:9, 9:16, 3:4, 4:3, 1:1</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"known\"><span class=\"card-cell-label\">القيمة الافتراضية</span>16:9</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>اختياري</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>540p, 720p, 1080p</div><div>الشروط: توثّق القائمة الخاصة بالنموذج viduq2 هذه الشرائح لمدة 1–10 ثوانٍ. ويذكر تعداد وجدول مشتركان دقة 360p أيضاً؛ لكن انطباقها يتعارض مع تلك القائمة، ولا يُؤكَّد هنا.</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"known\"><span class=\"card-cell-label\">القيمة الافتراضية</span>720p</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">style</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>اختياري</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>general, anime</div><div>الشروط: يقبل الطلب المشترك هذا الحقل، لكن التوثيق يذكر صراحةً أنه لا يؤثر في viduq2.</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"known\"><span class=\"card-cell-label\">القيمة الافتراضية</span>general</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">movement_amplitude</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>اختياري</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>auto, small, medium, large</div><div>الشروط: يقبل الطلب المشترك هذا الحقل، لكن التوثيق يذكر صراحةً أنه لا يؤثر في نماذج q2.</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"known\"><span class=\"card-cell-label\">القيمة الافتراضية</span>auto</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>تركيبات مواد الإدخال</summary><p class=\"note-s\"><b></b></p></details><details class=\"note-s\" data-method-contract><summary>معلمات الطريقة ودورة حياتها</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>المعلمة</th><th>المواصفات</th></tr></thead><tbody><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>content_type</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>application/json</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>required</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>model, prompt</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>optional</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>duration, seed, aspect_ratio, resolution, style, movement_amplitude</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>material_types</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>text</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>additional_properties</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>true</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>validation_scope</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>تتحقق Ailoot من أن سلسلتي model/prompt غير فارغتين. الأنواع والحدود الاختيارية أدناه هي عقد الطلب الموثّق؛ وتُحفظ حقول الطلب الأخرى للنموذج المختار.</td></tr></tbody></table></div><p>الأسماء البديلة للطريقة: <code>/v1/videos/generations</code></p><p>دورة الحياة: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}/content</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}/content</code></p><p class=\"note-s\">أنشئ مرة واحدة واحتفظ بـid العام وpolling_url المُعادين.</p><p class=\"note-s\">استعلم دورياً عن العملية الأصلية واقرأ state؛ تتحقق حدود الاكتمال عند success ووجود نتيجة creations[].url مملوكة لك.</p><p class=\"note-s\">نزّل كل عنوان URL مُعاد لفيديو مملوك لك؛ لا تستنتج من المثال عدداً ثابتاً للمخرجات أو مدة ثابتة أو معدل إطارات ثابتاً.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">الباقات</h3><div class=\"card-result-process\" data-billing-basis><h5>كيفية احتساب الرسوم النهائية</h5><p class=\"note-s\">تقدّر التعرفات المعروضة التكلفة قبل التوليد. تُحسب الرسوم النهائية من التكلفة المسجّلة لعملية التوليد الأصلية. مدة المخرجات المقاسة والكميات المتوقعة ليست الكمية النهائية الخاضعة للفوترة.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>مراجع التسعير لا تضيف خيارات للطلب. المعلمات المدعومة مذكورة للطريقة المحددة.</p><dl data-price-conditions><dt>الوضع السريع</dt><dd>غير محدد <span class=\"note-s\">عند اختيار الوضع السريع</span></dd><dt>الوضع المرن</dt><dd>غير محدد <span class=\"note-s\">عند اختيار وضع flex</span></dd><dt>أقصى جهد للاستدلال</dt><dd>غير محدد <span class=\"note-s\">عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال</span></dd></dl></div><div data-declared-tariff-pricing><h4>تعرفات تقديرية للمقارنة</h4><h4>الأسعار حسب الإعدادات</h4><p class=\"note-s\">طابق كل رسم مع الشروط المعروضة. طبّق تعرفة واحدة لكل مجموعة من الإعدادات البديلة.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>الإعدادات</th><th>جدول التعرفة</th><th>الكمية المتوقعة</th><th>الرسوم</th></tr></thead><tbody><tr><th data-cell-label=\"الإعدادات\" scope=\"row\"><span class=\"card-cell-label\">الإعدادات</span>التعرفات الأساسية للرموز</th><td data-cell-label=\"جدول التعرفة\"><span class=\"card-cell-label\">جدول التعرفة</span>التعرفة الأساسية</td><td data-cell-label=\"الكمية المتوقعة\"><span class=\"card-cell-label\">الكمية المتوقعة</span>—</td><td data-cell-label=\"الرسوم\"><span class=\"card-cell-label\">الرسوم</span><div><span>الإدخال · رموز الإدخال · تقدير للمقارنة فقط</span> <b>—</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإخراج · رموز الإخراج · تقدير للمقارنة فقط</span> <b>—</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإدخال · قراءة ذاكرة التخزين المؤقت · تقدير للمقارنة فقط</span> <b>—</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإدخال · الكتابة إلى ذاكرة التخزين المؤقت · تقدير للمقارنة فقط</span> <b>—</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة · تقدير للمقارنة فقط</span> <b>—</b> <span class=\"price-unit\">/ 1K من الرموز</span></div></td></tr><tr><th data-cell-label=\"الإعدادات\" scope=\"row\"><span class=\"card-cell-label\">الإعدادات</span>تكلفة التوليد التقديرية</th><td data-cell-label=\"جدول التعرفة\"><span class=\"card-cell-label\">جدول التعرفة</span>—</td><td data-cell-label=\"الكمية المتوقعة\"><span class=\"card-cell-label\">الكمية المتوقعة</span>تقدير لتوليد واحد</td><td data-cell-label=\"الرسوم\"><span class=\"card-cell-label\">الرسوم</span><div><span>الإخراج · تكلفة التوليد التقديرية · تقدير للمقارنة فقط</span> <b>$5.12</b> <span class=\"price-unit\">تقدير قبل الإنشاء</span></div><p class=\"note-s\">هذا التقدير ليس رسومًا إضافية ولا تعرفة ثابتة لعملية التوليد المكتملة.</p></td></tr></tbody></table></div></div><p class=\"note-s\">تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. <a href=\"/docs/ar/billing/reserve/\">كيفية عمل حجز المبلغ وتسوية الرسوم →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">أمثلة للطلبات</h3><h4>Ailoot Ultra · فيديو</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"خيارات الشيفرة\"><button class=\"cg-tab\" id=\"model-code-2782-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · أنشئ فيديو</button><button class=\"cg-tab\" id=\"model-code-2782-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · اقرأ المهمة الأصلية</button><button class=\"cg-tab\" id=\"model-code-2782-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-2\" aria-selected=\"false\" tabindex=\"-1\">curl · نزّل كل فيديو تملكه</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"نسخ الشيفرة\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2782-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncat &gt; request.json &lt;&lt;&#39;JSON_REQUEST&#39;\n{&quot;model&quot;:&quot;viduq2&quot;,&quot;prompt&quot;:&quot;In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.&quot;}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2782-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_POLL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(&quot;result.json&quot;).read_text())\ni=r.get(&quot;id&quot;)\nif not isinstance(i,str) or not i:raise SystemExit(&quot;Keep original response/headers/id; do not resubmit creation.&quot;)\nu=urljoin(&quot;https://api.ailoot.ai&quot;,r.get(&quot;polling_url&quot;) or &quot;/v1/videos/&quot;+quote(i,safe=&quot;&quot;))\np=urlsplit(u)\nif p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/videos/&quot;):raise SystemExit(&quot;Use the actual Ailoot lookup path.&quot;)\nPath(&quot;poll-url.txt&quot;).write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error &quot;$(cat poll-url.txt)&quot; -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2782-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(&quot;status.json&quot;).read_text())\nif r.get(&quot;state&quot;)!=&quot;success&quot;:raise SystemExit(&quot;Poll the same original job until its owned result is returned.&quot;)\ncreations=r.get(&quot;creations&quot;)\nif not isinstance(creations,list) or not creations:raise SystemExit(&quot;No completed video creations.&quot;)\nurls=[]\nfor item in creations:\n    value=item.get(&quot;url&quot;) if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(&quot;No completed video URL.&quot;)\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(&quot;Invalid returned URL.&quot;)\n        p=urlsplit(u)\n        if p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/media/assets/&quot;) or not p.path.endswith(&quot;/content&quot;) or not p.query:raise SystemExit(&quot;Wait for the actual Ailoot-owned signed result.&quot;)\n        urls.append(u)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; -o &quot;video-${index}.bin&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">استلام النتائج وحفظها</h3><h4>Ailoot Ultra · فيديو</h4><p class=\"note-s\">يحافظ JSON على الحالة الأصلية ومصفوفة creations، مع إضافة الحقول العامة id/provider_task_id/polling_url. تكون عناوين URL المختارة للفيديو فارغة قبل النشر، وتصبح عناوين URL موقّعة تابعة لـAiloot بعد الاكتمال.</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/generations/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li><li><code>GET /v1/videos/generations/{request_id}/content</code></li></ul><div class=\"card-result-process\" data-all-results><h5>الاحتفاظ بكل النتائج المكتملة</h5><p class=\"note-s\">احفظ كل فيديو مكتمل أو ملف مُرجع؛ ونزّل كل أصل من URL الخاص به الذي تم إرجاعه فعليًا.</p><p class=\"note-s\">نزّل كل عنوان URL فعلي مُعاد في creations[].url؛ ويحدد فهرس المحتوى مخرجاً فعلياً مُعاداً واحداً.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>عند الحاجة إلى التحقق من الاستجابة الأصلية</h5><p class=\"note-s\">لا يسرد التعريف المثبّت أي حالة فشل نهائية. احتفظ بالاستجابة والترويسات والمعرّف الأصلية، وتحقق من العملية نفسها عند ظهور حالة غير معروفة أو خطأ result_pending_check؛ ولا تعِد إرسال طلب إنشاء مجهول النتيجة مطلقاً.</p></div><details class=\"card-about\" data-output-fields><summary>حقول الاستجابة</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>الحقل</th><th>النوع</th><th>المعنى</th></tr></thead><tbody><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>المعرّف العام المُعاد لمهمة أو عملية في Ailoot.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">provider_task_id</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>معرّف المهمة الأصلي، المنفصل عن id العام.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">polling_url</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>مسار الاستعلام المُعاد في Ailoot للمهمة الأصلية.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">task_id</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string when supplied</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>المعرّف الأصلي الموجود في استجابة الإنشاء.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string when supplied</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>حالة المهمة الأصلية: created للحالة المعلّقة المثبّتة، وsuccess للاكتمال.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">err_code</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string when supplied</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>تشخيص المهمة؛ لا تحدد المواصفات المحفوظة قائمة محصورة لرموز الخطأ.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">creations[].url</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string|string[]</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>يُستبدَل كل عنوان URL مختار لفيديو مكتمل بعنوان URL موقّع تابع لـAiloot.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">creations[].video.duration</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>number when supplied</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>مدة الفيديو المُعادة؛ افحص النتيجة المكتملة الفعلية.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">creations[].video.fps</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>integer when supplied</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>معدل الإطارات المُعاد؛ ولا يُوعَد بمعدل إطارات ثابت.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">creations[].video.resolution.width</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>integer when supplied</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>عرض المخرجات المُعاد بالبكسل.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">creations[].video.resolution.height</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>integer when supplied</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>ارتفاع المخرجات المُعاد بالبكسل.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>الأخطاء والخطوات التالية</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>الاستجابة</th><th>الشرط</th><th>الخطوة التالية</th></tr></thead><tbody><tr><th data-cell-label=\"الاستجابة\" scope=\"row\"><span class=\"card-cell-label\">الاستجابة</span>⁦400⁩ · <code>invalid_request_error</code></th><td data-cell-label=\"الشرط\"><span class=\"card-cell-label\">الشرط</span>JSON أو النموذج غير صالح، أو سلاسل نصية مطلوبة مفقودة أو فارغة، أو فهرس محتوى غير صالح.</td><td data-cell-label=\"الخطوة التالية\"><span class=\"card-cell-label\">الخطوة التالية</span></td></tr><tr><th data-cell-label=\"الاستجابة\" scope=\"row\"><span class=\"card-cell-label\">الاستجابة</span>⁦401⁩ · <code>authentication_error</code></th><td data-cell-label=\"الشرط\"><span class=\"card-cell-label\">الشرط</span>مفتاح API الخاص بـAiloot غير صالح.</td><td data-cell-label=\"الخطوة التالية\"><span class=\"card-cell-label\">الخطوة التالية</span></td></tr><tr><th data-cell-label=\"الاستجابة\" scope=\"row\"><span class=\"card-cell-label\">الاستجابة</span>⁦403⁩ · <code>permission_error</code></th><td data-cell-label=\"الشرط\"><span class=\"card-cell-label\">الشرط</span>مجموعة مفتاح API غير مخوّلة لاستخدام مسار الوسائط هذا.</td><td data-cell-label=\"الخطوة التالية\"><span class=\"card-cell-label\">الخطوة التالية</span></td></tr><tr><th data-cell-label=\"الاستجابة\" scope=\"row\"><span class=\"card-cell-label\">الاستجابة</span>⁦404⁩ · <code>not_found_error</code></th><td data-cell-label=\"الشرط\"><span class=\"card-cell-label\">الشرط</span>المهمة الأصلية أو المخرج المطلوب غير موجود، أو غير مملوك للمستخدم ومفتاح API والمجموعة نفسها.</td><td data-cell-label=\"الخطوة التالية\"><span class=\"card-cell-label\">الخطوة التالية</span></td></tr><tr><th data-cell-label=\"الاستجابة\" scope=\"row\"><span class=\"card-cell-label\">الاستجابة</span>⁦502⁩ · <code>result_pending_check</code></th><td data-cell-label=\"الشرط\"><span class=\"card-cell-label\">الشرط</span>الإرسال الأصلي أو حالته غير مكتملين، أو يتعذر التحقق من اتساقهما؛ احتفظ بالمعرّف الأصلي ولا تعِد الإرسال.</td><td data-cell-label=\"الخطوة التالية\"><span class=\"card-cell-label\">الخطوة التالية</span></td></tr><tr><th data-cell-label=\"الاستجابة\" scope=\"row\"><span class=\"card-cell-label\">الاستجابة</span>⁦503⁩ · <code>result_pending_check</code></th><td data-cell-label=\"الشرط\"><span class=\"card-cell-label\">الشرط</span>لا يزال الربط الأصلي أو المسار أو الوسائط المملوكة لك قيد التحقق؛ تابع التحقق من تلك العملية الأصلية.</td><td data-cell-label=\"الخطوة التالية\"><span class=\"card-cell-label\">الخطوة التالية</span></td></tr><tr><th data-cell-label=\"الاستجابة\" scope=\"row\"><span class=\"card-cell-label\">الاستجابة</span>⁦503⁩ · <code>server_error</code></th><td data-cell-label=\"الشرط\"><span class=\"card-cell-label\">الشرط</span>خدمة الوسائط أو مخزن المهمة الأصلية غير متاح.</td><td data-cell-label=\"الخطوة التالية\"><span class=\"card-cell-label\">الخطوة التالية</span></td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">الأسماء البديلة</h3><h4>الأسماء البديلة للنموذج</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=viduq2&amp;route=Ultra&amp;caller=viduq2&amp;fmt=videos\"><code>viduq2</code></a></span></p><h4>الأسماء البديلة لمسارات الطرائق</h4><p class=\"note-s\"><code>/v1/videos/generations</code></p><h4>معرّفات النماذج ذات الصلة IDs</h4><p class=\"note-s\"><a href=\"#m=viduq2&amp;route=Ultra&amp;caller=viduq2&amp;fmt=videos\"><code>viduq2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "viduq2",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "viduq2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|viduq2",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "تقدّر التعرفات المعروضة التكلفة قبل التوليد. تُحسب الرسوم النهائية من التكلفة المسجّلة لعملية التوليد الأصلية. مدة المخرجات المقاسة والكميات المتوقعة ليست الكمية النهائية الخاضعة للفوترة.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "errors": [
              {
                "condition": "JSON أو النموذج غير صالح، أو سلاسل نصية مطلوبة مفقودة أو فارغة، أو فهرس محتوى غير صالح.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "مفتاح API الخاص بـAiloot غير صالح.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "مجموعة مفتاح API غير مخوّلة لاستخدام مسار الوسائط هذا.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "المهمة الأصلية أو المخرج المطلوب غير موجود، أو غير مملوك للمستخدم ومفتاح API والمجموعة نفسها.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "الإرسال الأصلي أو حالته غير مكتملين، أو يتعذر التحقق من اتساقهما؛ احتفظ بالمعرّف الأصلي ولا تعِد الإرسال.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "لا يزال الربط الأصلي أو المسار أو الوسائط المملوكة لك قيد التحقق؛ تابع التحقق من تلك العملية الأصلية.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "خدمة الوسائط أو مخزن المهمة الأصلية غير متاح.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [
              "style",
              "movement_amplitude"
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [],
              "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "created"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "state",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "لا يسرد التعريف المثبّت أي حالة فشل نهائية. احتفظ بالاستجابة والترويسات والمعرّف الأصلية، وتحقق من العملية نفسها عند ظهور حالة غير معروفة أو خطأ result_pending_check؛ ولا تعِد إرسال طلب إنشاء مجهول النتيجة مطلقاً.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ]
            ],
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
              "all_results": "نزّل كل عنوان URL فعلي مُعاد في creations[].url؛ ويحدد فهرس المحتوى مخرجاً فعلياً مُعاداً واحداً.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "المعرّف العام المُعاد لمهمة أو عملية في Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "معرّف المهمة الأصلي، المنفصل عن id العام.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "مسار الاستعلام المُعاد في Ailoot للمهمة الأصلية.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "المعرّف الأصلي الموجود في استجابة الإنشاء.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "حالة المهمة الأصلية: created للحالة المعلّقة المثبّتة، وsuccess للاكتمال.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "تشخيص المهمة؛ لا تحدد المواصفات المحفوظة قائمة محصورة لرموز الخطأ.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "يُستبدَل كل عنوان URL مختار لفيديو مكتمل بعنوان URL موقّع تابع لـAiloot.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "مدة الفيديو المُعادة؛ افحص النتيجة المكتملة الفعلية.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "معدل الإطارات المُعاد؛ ولا يُوعَد بمعدل إطارات ثابت.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "عرض المخرجات المُعاد بالبكسل.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "ارتفاع المخرجات المُعاد بالبكسل.",
                  "name": "creations[].video.resolution.height",
                  "type": "integer when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "يحافظ JSON على الحالة الأصلية ومصفوفة creations، مع إضافة الحقول العامة id/provider_task_id/polling_url. تكون عناوين URL المختارة للفيديو فارغة قبل النشر، وتصبح عناوين URL موقّعة تابعة لـAiloot بعد الاكتمال."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "صِف المشهد المراد توليده. الحد الموثّق هو 2000 حرف؛ تتحقق Ailoot من أن السلسلة النصية غير فارغة وتحافظ على النص.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "يحدد الوصف الخاص بالنموذج viduq2 مدة 1–10 ثوانٍ كاملة. لا توجد مدة افتراضية موثّقة خاصة بالنموذج.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "ثوانٍ"
              },
              {
                "availability": "source_interface",
                "conditions": "احذف الحقل أو أرسل السلسلة النصية \"0\" لاستخدام العشوائية. إذا قُدِّمت قيمة seed غير صفرية، فإنها تختار سلوك seed الثابت الموثّق؛ ولا يوجد نطاق عددي محدد.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "seed",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "16:9",
                "default_known": true,
                "enum": [
                  "16:9",
                  "9:16",
                  "3:4",
                  "4:3",
                  "1:1"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "توثّق القائمة الخاصة بالنموذج viduq2 هذه الشرائح لمدة 1–10 ثوانٍ. ويذكر تعداد وجدول مشتركان دقة 360p أيضاً؛ لكن انطباقها يتعارض مع تلك القائمة، ولا يُؤكَّد هنا.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "يقبل الطلب المشترك هذا الحقل، لكن التوثيق يذكر صراحةً أنه لا يؤثر في viduq2.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "يقبل الطلب المشترك هذا الحقل، لكن التوثيق يذكر صراحةً أنه لا يؤثر في نماذج q2.",
                "default": "auto",
                "default_known": true,
                "enum": [
                  "auto",
                  "small",
                  "medium",
                  "large"
                ],
                "enum_known": true,
                "name": "movement_amplitude",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Literal viduq2 model with the documented Ailoot videos interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "aspect_ratio": {
                  "default": "16:9",
                  "enum": [
                    "16:9",
                    "9:16",
                    "3:4",
                    "4:3",
                    "1:1"
                  ],
                  "type": "string"
                },
                "duration": {
                  "maximum": 10,
                  "minimum": 1,
                  "type": "integer"
                },
                "model": {
                  "const": "viduq2",
                  "minLength": 1,
                  "type": "string"
                },
                "movement_amplitude": {
                  "default": "auto",
                  "enum": [
                    "auto",
                    "small",
                    "medium",
                    "large"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "540p",
                    "720p",
                    "1080p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "type": "string"
                },
                "style": {
                  "default": "general",
                  "enum": [
                    "general",
                    "anime"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "The shared enum and table mention 360p, while the model-specific viduq2 resolution description lists 540p/720p/1080p. The method asserts only the explicit model-specific list.",
              "The shared duration example uses a quoted string despite an integer schema. The copyable viduq2 example omits that optional field; an explicit duration follows the documented integer type.",
              "No model-specific default duration, maximum output count, generated-file retention period, cancellation endpoint or terminal failure-state list is established by these saved documents.",
              "The documented fetch uses an id path parameter; the pinned declaration names that same substituted value task_id. The fetch example has no task_id field, which the current client accepts only by retaining the original task identity."
            ],
            "unsupported": [
              "Image-guided input, video editing and extension are not part of this text-to-video method.",
              "The audio and off_peak parameters are documented only for other model selectors, not viduq2.",
              "No live streaming, callback completion or owned cover-image result contract is established here."
            ]
          },
          "hints": [
            "أنشئ مرة واحدة واحتفظ بـid العام وpolling_url المُعادين.",
            "استعلم دورياً عن العملية الأصلية واقرأ state؛ تتحقق حدود الاكتمال عند success ووجود نتيجة creations[].url مملوكة لك.",
            "نزّل كل عنوان URL مُعاد لفيديو مملوك لك؛ لا تستنتج من المثال عدداً ثابتاً للمخرجات أو مدة ثابتة أو معدل إطارات ثابتاً."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [
              "duration",
              "seed",
              "aspect_ratio",
              "resolution",
              "style",
              "movement_amplitude"
            ],
            "required": [
              "model",
              "prompt"
            ],
            "validation_scope": "تتحقق Ailoot من أن سلسلتي model/prompt غير فارغتين. الأنواع والحدود الاختيارية أدناه هي عقد الطلب الموثّق؛ وتُحفظ حقول الطلب الأخرى للنموذج المختار."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [],
            "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "created"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "state",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "The pinned declaration enumerates no terminal failure state. Preserve original response/headers/id and check that same operation for any unrecognized state or result_pending_check error; never resubmit an unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
            "all_results": "Download every actual returned URL in creations[].url; a content index identifies one real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Returned public Ailoot task or operation identifier.",
                "name": "id",
                "type": "string"
              },
              {
                "description": "Original task identifier, separate from the public id.",
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": "Returned Ailoot lookup path for the original task.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Original identifier present in the creation response.",
                "name": "task_id",
                "type": "string when supplied"
              },
              {
                "description": "Native task state: created for the pinned pending state and success for completion.",
                "name": "state",
                "type": "string when supplied"
              },
              {
                "description": "Task diagnostic; the saved specification declares no enumerated error-code list.",
                "name": "err_code",
                "type": "string when supplied"
              },
              {
                "description": "Every selected completed video URL is replaced with an Ailoot-owned signed URL.",
                "name": "creations[].url",
                "type": "string|string[]"
              },
              {
                "description": "Returned video duration; inspect the actual completed result.",
                "name": "creations[].video.duration",
                "type": "number when supplied"
              },
              {
                "description": "Returned frame rate; no fixed frame rate is promised.",
                "name": "creations[].video.fps",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output width in pixels.",
                "name": "creations[].video.resolution.width",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output height in pixels.",
                "name": "creations[].video.resolution.height",
                "type": "integer when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "JSON retains the native state and creations array, with public id/provider_task_id/polling_url added. Selected video URLs are blank before publication and become Ailoot-owned signed URLs after completion."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "هذا التقدير ليس رسومًا إضافية ولا تعرفة ثابتة لعملية التوليد المكتملة.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "تكلفة التوليد التقديرية",
            "units": [
              {
                "amount": "5.12",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"viduq2\",\"prompt\":\"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.\"}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i:raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use the actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"state\")!=\"success\":raise SystemExit(\"Poll the same original job until its owned result is returned.\")\ncreations=r.get(\"creations\")\nif not isinstance(creations,list) or not creations:raise SystemExit(\"No completed video creations.\")\nurls=[]\nfor item in creations:\n    value=item.get(\"url\") if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(\"No completed video URL.\")\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n        p=urlsplit(u)\n        if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for the actual Ailoot-owned signed result.\")\n        urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download every owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain the returned public id and polling_url.",
          "Poll the original operation and read state; success and an owned creations[].url result are the completion boundary.",
          "Download every returned owned video URL; do not infer a fixed output count, duration or frame rate from the example."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "فيديو",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations"
        ],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "5.12",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "viduq2",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "5.12",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "5.12",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "viduq2",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "8f6ba29d85bc8d193e3534abb0f0e255bcfe4be44bbee726a67aecf06c9f7fa7",
    "input_html_sha256": "329fcbc7ad5443563d022cbd3dd3c24e47aa2aeab7af2b85dc73d52287f490b4",
    "private_audit_sha256": "3ecb2fd32a5427285ddace4cd34cf09678a3d06cb900d81a9fb8016dd98e3e79",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ar/viduq2/",
    "description": "ينشئ Vidu Q2 فيديو من موجز نصي لمشهد، بمدة 1–10 ثوانٍ ومخرجات بدقة 540p أو 720p أو 1080p وخمس نسب أبعاد. يستخدم إصدار viduq2 المحدد هذا الموجّه لتحديد الأسلوب والحركة، ويُرجع نتيجته عبر مهمة غير متزامنة.",
    "locale": "ar",
    "md_url": "https://ailoot.ai/models/ar/viduq2/index.md",
    "title": "Vidu: Q2 Text-to-Video — Ailoot",
    "url": "https://ailoot.ai/models/ar/viduq2/"
  },
  "rawModel": {
    "about": "ينشئ Vidu Q2 فيديو من مشهد مكتوب عبر إصدار تحويل النص إلى فيديو المحدد بمعرّف viduq2. مدخلاته المطلوبة هي معرّف النموذج الدقيق وموجّه يصف المشهد. استخدمه لتصور منتج قصير، أو لقطة تأسيسية، أو فعل لشخصية يمكن تحديد مظهرها وحركتها بالكلمات. هذه الطريقة المهيأة لتحويل النص إلى فيديو؛ ولا ينسب وصفها إلى معرّف الاختيار نمطًا منفصلًا لمرجع صورة أو لتحرير الفيديو.\n\nابنِ الموجز حول تسلسل مرئي. حدّد الموضوع والموقع والفعل وحجم اللقطة وحركة الكاميرا والتكوين النهائي. لتصور منتج، صف شيئًا على سطح طاولة، وضوءًا يتحرك عبر مادته، واقترابًا بطيئًا للكاميرا ينتهي عند تفصيل يمكن تمييزه. ولمشهد موقع، أسّس البيئة قبل الاقتراب من النقطة المحورية. اجعل الفعل مناسبًا لطول المقطع المختار حتى يتسع المشهد للنهاية المقصودة.\n\nحد الموجّه 2,000 محرف. ضع الموضوع والفعل الأساسيين أولًا، ثم أضف تفاصيل الإضاءة والمادة والبيئة والكاميرا التي تغيّر النتيجة المنشودة. حدّد الأسلوب البصري في الموجّه. يقول الدليل الخاص بـQ2 إن المعاملين المنفصلين style وmovement_amplitude لا يسريان على هذا النموذج، لذا لا يشكل الإعداد المسبق general أو anime وخيارات شدة الحركة بديلًا عن وصف واضح للمشهد.\n\nيقبل إعداد المدة الخاص بالنموذج أعدادًا صحيحة من الثواني من واحدة إلى عشر. خيارات الدقة الخاصة بـQ2 هي 540p و720p و1080p، مع 720p قيمة افتراضية موثّقة. اختر المدة والدقة معًا وفق الفعل والوجهة. يحتاج الكشف القصير عن شيء والحركة الأطول إلى توقيت مختلف؛ وينبغي لزيادة المدة المطلوبة أن تخدم التسلسل المرئي بدل مجرد إطالة موجز لم يتغير. افحص الأبعاد والطول الفعليين للمقطع المعاد عند تجهيز موضع عرضه النهائي.\n\nخيارات aspect_ratio الموثّقة هي 16:9 و9:16 و3:4 و4:3 و1:1، مع 16:9 قيمة افتراضية. يضم الدليل صراحةً 3:4 و4:3 لعائلة Q2. اختر الإطار قبل التوليد وصف تكوينًا يناسبه: أبقِ الموضوع الرئيسي واضحًا في منظر عمودي، أو استخدم عرض إطار أفقي لإظهار المحيط. اجعل المنظر الختامي واضحًا بما يكفي للصفحة أو العرض التقديمي المقصودين أو لإضافة نصوص لاحقًا.\n\nيتحكم حقل seed في التنوع. يؤدي حذفه أو تقديم 0 إلى اختيار قيمة عشوائية؛ وتختار القيمة غير الصفرية خيار seed الثابت الموثّق لتوليد قابل للتكرار. احتفظ بقيمة seed المعادة مع الموجّه والإعدادات عند مقارنة النسخ. توثّق العملية المشتركة أيضًا عنصري التحكم audio وoff_peak خصيصًا لنماذج Q3. خيارات Q3 هذه ليست قدرات منسوبة إلى إصدار Q2 هذا؛ خطّط الطلب حول مدخلاته النصية ومخرجات الفيديو الموثّقة له.\n\nالتوليد غير متزامن. يُرجع الإرسال task_id وحالة أولية، مع استخدام created لمهمة أُنشئت حديثًا. احتفظ بهوية المهمة أثناء متابعة المعالجة. يستخدم الاستعلام الموثّق عن النتيجة state=success للنتيجة الناجحة ويُرجع مصفوفة creations. لكل عنصر رابط فيديو في creations[].url؛ احفظ كل فيديو معاد بدل افتراض أن المهمة تتضمن دائمًا مخرجًا واحدًا بالضبط.\n\nيُبلغ توثيق النتيجة أيضًا عن مدة الفيديو الفعلية ومعدل fps وعرض الدقة وارتفاعها. احتفظ بهذه القيم المبلّغ عنها مع المقطع المكتمل بدل اعتبار معدل إطارات مثال أو أبعاده مواصفات ثابتة لـQ2. تتضمن استجابة إنشاء المهمة قيمة credits إلى جانب تكوين الطلب. احتفظ ببيانات المهمة الوصفية المبلّغ عنها ومعرّف المهمة المكتملة مع النتيجة، لكي يظل كل فيديو مرتبطًا بإعدادات توليده.\n\nراجع التسلسل كاملًا بالرجوع إلى الموجز الأصلي: مظهر الموضوع وشكل الشيء واتجاه الحركة واستمرارية الكاميرا والمنظر النهائي المقصود. وللمراجعة، حدّد التفصيل الملموس الذي لم يطابق الموجز واحتفظ بأجزاء المشهد الناجحة. احفظ الموجّه ومعرّف الاختيار الدقيق والإعدادات وهوية المهمة ومقاطع الفيديو المكتملة معًا، لكي تستند المقارنة اللاحقة إلى المخرجات الفعلية.",
    "alias_of": null,
    "aliases": [],
    "author": "Vidu",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "5.12",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "5.12",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "التسعير الكامل للتكوين في التفاصيل."
      }
    ],
    "ctx": null,
    "display_name": "Vidu: Q2 Text-to-Video",
    "formats": [
      "videos"
    ],
    "id": "viduq2",
    "input": [
      "text"
    ],
    "kind": "video",
    "locale": "en",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "تقدّر التعرفات المعروضة التكلفة قبل التوليد. تُحسب الرسوم النهائية من التكلفة المسجّلة لعملية التوليد الأصلية. مدة المخرجات المقاسة والكميات المتوقعة ليست الكمية النهائية الخاضعة للفوترة.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "errors": [
              {
                "condition": "JSON أو النموذج غير صالح، أو سلاسل نصية مطلوبة مفقودة أو فارغة، أو فهرس محتوى غير صالح.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "مفتاح API الخاص بـAiloot غير صالح.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "مجموعة مفتاح API غير مخوّلة لاستخدام مسار الوسائط هذا.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "المهمة الأصلية أو المخرج المطلوب غير موجود، أو غير مملوك للمستخدم ومفتاح API والمجموعة نفسها.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "الإرسال الأصلي أو حالته غير مكتملين، أو يتعذر التحقق من اتساقهما؛ احتفظ بالمعرّف الأصلي ولا تعِد الإرسال.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "لا يزال الربط الأصلي أو المسار أو الوسائط المملوكة لك قيد التحقق؛ تابع التحقق من تلك العملية الأصلية.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "خدمة الوسائط أو مخزن المهمة الأصلية غير متاح.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [
              "style",
              "movement_amplitude"
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [],
              "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "created"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "state",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "لا يسرد التعريف المثبّت أي حالة فشل نهائية. احتفظ بالاستجابة والترويسات والمعرّف الأصلية، وتحقق من العملية نفسها عند ظهور حالة غير معروفة أو خطأ result_pending_check؛ ولا تعِد إرسال طلب إنشاء مجهول النتيجة مطلقاً.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ]
            ],
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
              "all_results": "نزّل كل عنوان URL فعلي مُعاد في creations[].url؛ ويحدد فهرس المحتوى مخرجاً فعلياً مُعاداً واحداً.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "المعرّف العام المُعاد لمهمة أو عملية في Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "معرّف المهمة الأصلي، المنفصل عن id العام.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "مسار الاستعلام المُعاد في Ailoot للمهمة الأصلية.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "المعرّف الأصلي الموجود في استجابة الإنشاء.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "حالة المهمة الأصلية: created للحالة المعلّقة المثبّتة، وsuccess للاكتمال.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "تشخيص المهمة؛ لا تحدد المواصفات المحفوظة قائمة محصورة لرموز الخطأ.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "يُستبدَل كل عنوان URL مختار لفيديو مكتمل بعنوان URL موقّع تابع لـAiloot.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "مدة الفيديو المُعادة؛ افحص النتيجة المكتملة الفعلية.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "معدل الإطارات المُعاد؛ ولا يُوعَد بمعدل إطارات ثابت.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "عرض المخرجات المُعاد بالبكسل.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "ارتفاع المخرجات المُعاد بالبكسل.",
                  "name": "creations[].video.resolution.height",
                  "type": "integer when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "يحافظ JSON على الحالة الأصلية ومصفوفة creations، مع إضافة الحقول العامة id/provider_task_id/polling_url. تكون عناوين URL المختارة للفيديو فارغة قبل النشر، وتصبح عناوين URL موقّعة تابعة لـAiloot بعد الاكتمال."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "صِف المشهد المراد توليده. الحد الموثّق هو 2000 حرف؛ تتحقق Ailoot من أن السلسلة النصية غير فارغة وتحافظ على النص.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "يحدد الوصف الخاص بالنموذج viduq2 مدة 1–10 ثوانٍ كاملة. لا توجد مدة افتراضية موثّقة خاصة بالنموذج.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "ثوانٍ"
              },
              {
                "availability": "source_interface",
                "conditions": "احذف الحقل أو أرسل السلسلة النصية \"0\" لاستخدام العشوائية. إذا قُدِّمت قيمة seed غير صفرية، فإنها تختار سلوك seed الثابت الموثّق؛ ولا يوجد نطاق عددي محدد.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "seed",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "16:9",
                "default_known": true,
                "enum": [
                  "16:9",
                  "9:16",
                  "3:4",
                  "4:3",
                  "1:1"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "توثّق القائمة الخاصة بالنموذج viduq2 هذه الشرائح لمدة 1–10 ثوانٍ. ويذكر تعداد وجدول مشتركان دقة 360p أيضاً؛ لكن انطباقها يتعارض مع تلك القائمة، ولا يُؤكَّد هنا.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "يقبل الطلب المشترك هذا الحقل، لكن التوثيق يذكر صراحةً أنه لا يؤثر في viduq2.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "يقبل الطلب المشترك هذا الحقل، لكن التوثيق يذكر صراحةً أنه لا يؤثر في نماذج q2.",
                "default": "auto",
                "default_known": true,
                "enum": [
                  "auto",
                  "small",
                  "medium",
                  "large"
                ],
                "enum_known": true,
                "name": "movement_amplitude",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Literal viduq2 model with the documented Ailoot videos interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "aspect_ratio": {
                  "default": "16:9",
                  "enum": [
                    "16:9",
                    "9:16",
                    "3:4",
                    "4:3",
                    "1:1"
                  ],
                  "type": "string"
                },
                "duration": {
                  "maximum": 10,
                  "minimum": 1,
                  "type": "integer"
                },
                "model": {
                  "const": "viduq2",
                  "minLength": 1,
                  "type": "string"
                },
                "movement_amplitude": {
                  "default": "auto",
                  "enum": [
                    "auto",
                    "small",
                    "medium",
                    "large"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "540p",
                    "720p",
                    "1080p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "type": "string"
                },
                "style": {
                  "default": "general",
                  "enum": [
                    "general",
                    "anime"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "The shared enum and table mention 360p, while the model-specific viduq2 resolution description lists 540p/720p/1080p. The method asserts only the explicit model-specific list.",
              "The shared duration example uses a quoted string despite an integer schema. The copyable viduq2 example omits that optional field; an explicit duration follows the documented integer type.",
              "No model-specific default duration, maximum output count, generated-file retention period, cancellation endpoint or terminal failure-state list is established by these saved documents.",
              "The documented fetch uses an id path parameter; the pinned declaration names that same substituted value task_id. The fetch example has no task_id field, which the current client accepts only by retaining the original task identity."
            ],
            "unsupported": [
              "Image-guided input, video editing and extension are not part of this text-to-video method.",
              "The audio and off_peak parameters are documented only for other model selectors, not viduq2.",
              "No live streaming, callback completion or owned cover-image result contract is established here."
            ]
          },
          "hints": [
            "أنشئ مرة واحدة واحتفظ بـid العام وpolling_url المُعادين.",
            "استعلم دورياً عن العملية الأصلية واقرأ state؛ تتحقق حدود الاكتمال عند success ووجود نتيجة creations[].url مملوكة لك.",
            "نزّل كل عنوان URL مُعاد لفيديو مملوك لك؛ لا تستنتج من المثال عدداً ثابتاً للمخرجات أو مدة ثابتة أو معدل إطارات ثابتاً."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [
              "duration",
              "seed",
              "aspect_ratio",
              "resolution",
              "style",
              "movement_amplitude"
            ],
            "required": [
              "model",
              "prompt"
            ],
            "validation_scope": "تتحقق Ailoot من أن سلسلتي model/prompt غير فارغتين. الأنواع والحدود الاختيارية أدناه هي عقد الطلب الموثّق؛ وتُحفظ حقول الطلب الأخرى للنموذج المختار."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [],
            "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "created"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "state",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "The pinned declaration enumerates no terminal failure state. Preserve original response/headers/id and check that same operation for any unrecognized state or result_pending_check error; never resubmit an unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
            "all_results": "Download every actual returned URL in creations[].url; a content index identifies one real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Returned public Ailoot task or operation identifier.",
                "name": "id",
                "type": "string"
              },
              {
                "description": "Original task identifier, separate from the public id.",
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": "Returned Ailoot lookup path for the original task.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Original identifier present in the creation response.",
                "name": "task_id",
                "type": "string when supplied"
              },
              {
                "description": "Native task state: created for the pinned pending state and success for completion.",
                "name": "state",
                "type": "string when supplied"
              },
              {
                "description": "Task diagnostic; the saved specification declares no enumerated error-code list.",
                "name": "err_code",
                "type": "string when supplied"
              },
              {
                "description": "Every selected completed video URL is replaced with an Ailoot-owned signed URL.",
                "name": "creations[].url",
                "type": "string|string[]"
              },
              {
                "description": "Returned video duration; inspect the actual completed result.",
                "name": "creations[].video.duration",
                "type": "number when supplied"
              },
              {
                "description": "Returned frame rate; no fixed frame rate is promised.",
                "name": "creations[].video.fps",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output width in pixels.",
                "name": "creations[].video.resolution.width",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output height in pixels.",
                "name": "creations[].video.resolution.height",
                "type": "integer when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "JSON retains the native state and creations array, with public id/provider_task_id/polling_url added. Selected video URLs are blank before publication and become Ailoot-owned signed URLs after completion."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "هذا التقدير ليس رسومًا إضافية ولا تعرفة ثابتة لعملية التوليد المكتملة.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "تكلفة التوليد التقديرية",
            "units": [
              {
                "amount": "5.12",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"viduq2\",\"prompt\":\"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.\"}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i:raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use the actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"state\")!=\"success\":raise SystemExit(\"Poll the same original job until its owned result is returned.\")\ncreations=r.get(\"creations\")\nif not isinstance(creations,list) or not creations:raise SystemExit(\"No completed video creations.\")\nurls=[]\nfor item in creations:\n    value=item.get(\"url\") if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(\"No completed video URL.\")\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n        p=urlsplit(u)\n        if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for the actual Ailoot-owned signed result.\")\n        urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download every owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain the returned public id and polling_url.",
          "Poll the original operation and read state; success and an owned creations[].url result are the completion boundary.",
          "Download every returned owned video URL; do not infer a fixed output count, duration or frame rate from the example."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "فيديو",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations"
        ],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "5.12",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "viduq2",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "5.12",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "5.12",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "viduq2",
        "request_model_id": "viduq2",
        "route_label": "Ultra"
      }
    ],
    "name": "Vidu: Q2 Text-to-Video",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 5.12,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 5.12,
      "varies": false
    },
    "short": "ينشئ Vidu Q2 فيديو من موجز نصي لمشهد، بمدة 1–10 ثوانٍ ومخرجات بدقة 540p أو 720p أو 1080p وخمس نسب أبعاد. يستخدم إصدار viduq2 المحدد هذا الموجّه لتحديد الأسلوب والحركة، ويُرجع نتيجته عبر مهمة غير متزامنة."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "ينشئ Vidu Q2 فيديو من موجز نصي لمشهد، بمدة 1–10 ثوانٍ ومخرجات بدقة 540p أو 720p أو 1080p وخمس نسب أبعاد. يستخدم إصدار viduq2 المحدد هذا الموجّه لتحديد الأسلوب والحركة، ويُرجع نتيجته عبر مهمة غير متزامنة.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "d792eb47f6f67f1101ed63de18603c575dfd570233ac7b0e604debcd763a83f1",
    "renderer_sha256": "081ee0fd5b6b1b60564b02c52d62547e01e922c8c0a16e91a0d055073e76a10e"
  },
  "sourceRevision": "57d432408dce69a475f2fd5f46c2bb15b2a085fcd85ade89a9891fa1344ce9d2"
}
