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