{
  "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": "0350735bc652ac3d99d56940c68ad0570ae52bc0e0c3d45e064f6234a1d45f1c",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "he",
  "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 שניות. enum משותף וטבלה מזכירים גם 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>מצב Flex</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/he/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 משמר את state ואת מערך creations בפורמט המקורי, עם תוספת של id/provider_task_id/polling_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/model לא תקפים, מחרוזות חובה חסרות או ריקות, או אינדקס תוכן לא תקף.</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/model לא תקפים, מחרוזות חובה חסרות או ריקות, או אינדקס תוכן לא תקף.",
                "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 משמר את state ואת מערך creations בפורמט המקורי, עם תוספת של id/provider_task_id/polling_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 שניות. enum משותף וטבלה מזכירים גם 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": "c58392f04cabd0e6dd3fc43fdcc3956d44f294543ea15cf7a32ae3c412b36c01",
    "input_html_sha256": "0944681fed051b7231259242d663a8e9251e90d3fe7f6704a648ecf18b754cb5",
    "private_audit_sha256": "7b04f732585a886ab6e47fb297d0bfe0fd613a7f6572c931633ec1820cc9c18c",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/he/viduq2/",
    "description": "Vidu Q2 יוצר וידאו מהנחיות טקסט לסצנה, עם משך של 1–10 שניות, פלט 540p, 720p או 1080p וחמישה יחסי ממדים. פרופיל viduq2 המסוים הזה משתמש בפרומפט לקביעת הסגנון והתנועה ומחזיר את התוצאה דרך משימה אסינכרונית.",
    "locale": "he",
    "md_url": "https://ailoot.ai/models/he/viduq2/index.md",
    "title": "Vidu: Q2 Text-to-Video — Ailoot",
    "url": "https://ailoot.ai/models/he/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/model לא תקפים, מחרוזות חובה חסרות או ריקות, או אינדקס תוכן לא תקף.",
                "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 משמר את state ואת מערך creations בפורמט המקורי, עם תוספת של id/provider_task_id/polling_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 שניות. enum משותף וטבלה מזכירים גם 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": "edd228a2caff2ddba2ab9c104696ea1e8f32b30c8106297b6d6cea77006f72e6",
    "renderer_sha256": "c36bd89b8b0dac234af52bf68530df83530b908ec7a9f2e1de2483fe236ae910"
  },
  "sourceRevision": "64d2c90c4a27199cd74525c2af63e629fca656f6a2616ff228f58de7e228b393"
}
