{
  "aboutHtml": "<p>Vidu Q2 tworzy wideo z opisu sceny przez profil tekst-do-wideo wybierany jako viduq2. Wymagane dane wejściowe to dokładny identyfikator modelu i prompt opisujący scenę. Użyj go do krótkiej koncepcji produktu, widoku przedstawiającego miejsce lub działania postaci, których wygląd i ruch można określić słowami. Ta skonfigurowana metoda generuje wideo z tekstu; jej opis nie przypisuje selektorowi osobnego trybu odniesienia obrazowego ani edycji wideo.</p><p>Zbuduj opis wokół widocznej sekwencji. Określ obiekt, miejsce, działanie, wielkość planu, ruch kamery i końcową kompozycję. Dla koncepcji produktu opisz przedmiot na blacie, światło przesuwające się po jego materiale i powolny najazd kamery kończący się na rozpoznawalnym szczególe. Dla sceny lokalizacji pokaż otoczenie przed przejściem do punktu skupienia. Dopasuj działanie do wybranej długości klipu, aby scena miała miejsce na zamierzone zakończenie.</p><p>Limit promptu wynosi 2 000 znaków. Umieść najważniejszy obiekt i działanie na początku, a następnie dodaj szczegóły oświetlenia, materiału, otoczenia i kamery, które zmieniają pożądany wynik. Określ styl wizualny w prompcie. Poradnik dotyczący Q2 podaje, że osobne parametry style i movement_amplitude nie działają dla tego modelu, więc ustawienia general lub anime i opcje amplitudy ruchu nie zastępują jasnego opisu sceny.</p><p>Ustawienie długości dla tego modelu przyjmuje pełne sekundy od jednej do dziesięciu. Opcje rozdzielczości dla Q2 to 540p, 720p i 1080p, z 720p jako udokumentowaną wartością domyślną. Wybierz długość i rozdzielczość razem, zgodnie z działaniem i miejscem docelowym. Krótkie odsłonięcie i dłuższy ruch wymagają innego rozłożenia w czasie; zwiększenie żądanej długości powinno służyć widocznej sekwencji, a nie tylko rozciągać niezmieniony opis. Sprawdź rzeczywiste wymiary i długość zwróconego klipu podczas przygotowywania końcowego umieszczenia.</p><p>Udokumentowane opcje aspect_ratio to 16:9, 9:16, 3:4, 4:3 i 1:1, z 16:9 jako wartością domyślną. Poradnik wyraźnie uwzględnia 3:4 i 4:3 dla rodziny Q2. Wybierz kadr przed generowaniem i opisz dopasowaną kompozycję: zachowaj czytelność głównego obiektu w pionowym widoku lub wykorzystaj szerokość poziomego kadru na otoczenie. Zadbaj o wystarczająco wyraźny widok końcowy dla zamierzonej strony, prezentacji lub późniejszego dodania napisów.</p><p>Pole seed kontroluje zmienność. Pominięcie go lub podanie 0 wybiera wartość losową; wartość niezerowa wybiera udokumentowaną opcję stałego ziarna do powtarzalnego generowania. Zachowaj zwrócone ziarno z promptem i ustawieniami przy porównywaniu wersji. Wspólna operacja dokumentuje również ustawienia audio i off_peak przeznaczone konkretnie dla modeli Q3. Te opcje Q3 nie są możliwościami przypisanymi temu profilowi Q2; zaplanuj żądanie wokół jego udokumentowanego wejścia tekstowego i wyjścia wideo.</p><p>Generowanie jest asynchroniczne. Wysłanie żądania zwraca task_id oraz początkowy stan, z created używanym dla nowo utworzonego zadania. Zachowaj tę tożsamość zadania podczas śledzenia przetwarzania. Udokumentowane zapytanie o wynik używa state=success dla pomyślnego wyniku i zwraca tablicę creations. Każdy element ma adres URL swojego wideo w creations[].url; zapisz każde zwrócone wideo zamiast zakładać, że zadanie zawsze zawiera dokładnie jeden wygenerowany materiał.</p><p>Dokumentacja wyniku raportuje również rzeczywistą długość wideo, fps oraz szerokość i wysokość rozdzielczości. Zachowaj te zgłoszone wartości z ukończonym klipem zamiast traktować liczbę klatek lub wymiary z przykładu jako stałą specyfikację Q2. Odpowiedź na utworzenie zadania zawiera wartość credits obok konfiguracji żądania. Zachowaj te zgłoszone metadane zadania i tożsamość ukończonego zadania z wynikiem, aby każde wideo pozostało powiązane ze swoimi ustawieniami generowania.</p><p>Sprawdź całą sekwencję względem pierwotnego opisu: wygląd obiektu, jego kształt, kierunek ruchu, ciągłość kamery i zamierzony widok końcowy. Przy poprawce wskaż konkretny szczegół, który odbiegł od opisu, i zachowaj udane części sceny. Przechowuj prompt, dokładny selektor, ustawienia, tożsamość zadania i ukończone wideo razem, aby późniejsze porównanie opierało się na rzeczywistych artefaktach.</p>",
  "aboutText": "Vidu Q2 tworzy wideo z opisu sceny przez profil tekst-do-wideo wybierany jako viduq2. Wymagane dane wejściowe to dokładny identyfikator modelu i prompt opisujący scenę. Użyj go do krótkiej koncepcji produktu, widoku przedstawiającego miejsce lub działania postaci, których wygląd i ruch można określić słowami. Ta skonfigurowana metoda generuje wideo z tekstu; jej opis nie przypisuje selektorowi osobnego trybu odniesienia obrazowego ani edycji wideo.\n\nZbuduj opis wokół widocznej sekwencji. Określ obiekt, miejsce, działanie, wielkość planu, ruch kamery i końcową kompozycję. Dla koncepcji produktu opisz przedmiot na blacie, światło przesuwające się po jego materiale i powolny najazd kamery kończący się na rozpoznawalnym szczególe. Dla sceny lokalizacji pokaż otoczenie przed przejściem do punktu skupienia. Dopasuj działanie do wybranej długości klipu, aby scena miała miejsce na zamierzone zakończenie.\n\nLimit promptu wynosi 2 000 znaków. Umieść najważniejszy obiekt i działanie na początku, a następnie dodaj szczegóły oświetlenia, materiału, otoczenia i kamery, które zmieniają pożądany wynik. Określ styl wizualny w prompcie. Poradnik dotyczący Q2 podaje, że osobne parametry style i movement_amplitude nie działają dla tego modelu, więc ustawienia general lub anime i opcje amplitudy ruchu nie zastępują jasnego opisu sceny.\n\nUstawienie długości dla tego modelu przyjmuje pełne sekundy od jednej do dziesięciu. Opcje rozdzielczości dla Q2 to 540p, 720p i 1080p, z 720p jako udokumentowaną wartością domyślną. Wybierz długość i rozdzielczość razem, zgodnie z działaniem i miejscem docelowym. Krótkie odsłonięcie i dłuższy ruch wymagają innego rozłożenia w czasie; zwiększenie żądanej długości powinno służyć widocznej sekwencji, a nie tylko rozciągać niezmieniony opis. Sprawdź rzeczywiste wymiary i długość zwróconego klipu podczas przygotowywania końcowego umieszczenia.\n\nUdokumentowane opcje aspect_ratio to 16:9, 9:16, 3:4, 4:3 i 1:1, z 16:9 jako wartością domyślną. Poradnik wyraźnie uwzględnia 3:4 i 4:3 dla rodziny Q2. Wybierz kadr przed generowaniem i opisz dopasowaną kompozycję: zachowaj czytelność głównego obiektu w pionowym widoku lub wykorzystaj szerokość poziomego kadru na otoczenie. Zadbaj o wystarczająco wyraźny widok końcowy dla zamierzonej strony, prezentacji lub późniejszego dodania napisów.\n\nPole seed kontroluje zmienność. Pominięcie go lub podanie 0 wybiera wartość losową; wartość niezerowa wybiera udokumentowaną opcję stałego ziarna do powtarzalnego generowania. Zachowaj zwrócone ziarno z promptem i ustawieniami przy porównywaniu wersji. Wspólna operacja dokumentuje również ustawienia audio i off_peak przeznaczone konkretnie dla modeli Q3. Te opcje Q3 nie są możliwościami przypisanymi temu profilowi Q2; zaplanuj żądanie wokół jego udokumentowanego wejścia tekstowego i wyjścia wideo.\n\nGenerowanie jest asynchroniczne. Wysłanie żądania zwraca task_id oraz początkowy stan, z created używanym dla nowo utworzonego zadania. Zachowaj tę tożsamość zadania podczas śledzenia przetwarzania. Udokumentowane zapytanie o wynik używa state=success dla pomyślnego wyniku i zwraca tablicę creations. Każdy element ma adres URL swojego wideo w creations[].url; zapisz każde zwrócone wideo zamiast zakładać, że zadanie zawsze zawiera dokładnie jeden wygenerowany materiał.\n\nDokumentacja wyniku raportuje również rzeczywistą długość wideo, fps oraz szerokość i wysokość rozdzielczości. Zachowaj te zgłoszone wartości z ukończonym klipem zamiast traktować liczbę klatek lub wymiary z przykładu jako stałą specyfikację Q2. Odpowiedź na utworzenie zadania zawiera wartość credits obok konfiguracji żądania. Zachowaj te zgłoszone metadane zadania i tożsamość ukończonego zadania z wynikiem, aby każde wideo pozostało powiązane ze swoimi ustawieniami generowania.\n\nSprawdź całą sekwencję względem pierwotnego opisu: wygląd obiektu, jego kształt, kierunek ruchu, ciągłość kamery i zamierzony widok końcowy. Przy poprawce wskaż konkretny szczegół, który odbiegł od opisu, i zachowaj udane części sceny. Przechowuj prompt, dokładny selektor, ustawienia, tożsamość zadania i ukończone wideo razem, aby późniejsze porównanie opierało się na rzeczywistych artefaktach.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "2886aab6682ffb6b7476eb9bd791afd280cc3d0e138c8b0425821d9025fa7a61",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "pl",
  "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=\"Zamknij\">×</button></div><div class=\"idline\"><span>Vidu /</span><code>viduq2</code><button type=\"button\" id=\"copy-id\">Kopiuj ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Sekcje karty modelu\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Dane wejściowe i metody</button><button type=\"button\" data-card-jump=\"pricing\">Cennik</button><button type=\"button\" data-card-jump=\"examples\">Przykłady</button><button type=\"button\" data-card-jump=\"results\">Wyniki</button><button type=\"button\" data-card-jump=\"aliases\">Aliasy</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Metody 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\">Wideo</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\">Start</h3><p class=\"mdesc-full\">Vidu Q2 tworzy wideo z tekstowego opisu sceny, z długością 1–10 sekund, wyjściem 540p, 720p lub 1080p i pięcioma proporcjami obrazu. Ten dokładny profil viduq2 używa promptu do stylu i ruchu oraz zwraca wynik przez zadanie asynchroniczne.</p><dl class=\"card-io\" data-card-io><div><dt>Akceptowane dane wejściowe</dt><dd>Tekst</dd></div><div><dt>Wyniki</dt><dd>Wideo</dd></div></dl><details class=\"card-about\"><summary>O modelu</summary><p class=\"note-s\" data-model-method-boundary>Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.</p><div class=\"mabout\" id=\"m-about\"><p>Vidu Q2 tworzy wideo z opisu sceny przez profil tekst-do-wideo wybierany jako viduq2. Wymagane dane wejściowe to dokładny identyfikator modelu i prompt opisujący scenę. Użyj go do krótkiej koncepcji produktu, widoku przedstawiającego miejsce lub działania postaci, których wygląd i ruch można określić słowami. Ta skonfigurowana metoda generuje wideo z tekstu; jej opis nie przypisuje selektorowi osobnego trybu odniesienia obrazowego ani edycji wideo.</p><p>Zbuduj opis wokół widocznej sekwencji. Określ obiekt, miejsce, działanie, wielkość planu, ruch kamery i końcową kompozycję. Dla koncepcji produktu opisz przedmiot na blacie, światło przesuwające się po jego materiale i powolny najazd kamery kończący się na rozpoznawalnym szczególe. Dla sceny lokalizacji pokaż otoczenie przed przejściem do punktu skupienia. Dopasuj działanie do wybranej długości klipu, aby scena miała miejsce na zamierzone zakończenie.</p><p>Limit promptu wynosi 2 000 znaków. Umieść najważniejszy obiekt i działanie na początku, a następnie dodaj szczegóły oświetlenia, materiału, otoczenia i kamery, które zmieniają pożądany wynik. Określ styl wizualny w prompcie. Poradnik dotyczący Q2 podaje, że osobne parametry style i movement_amplitude nie działają dla tego modelu, więc ustawienia general lub anime i opcje amplitudy ruchu nie zastępują jasnego opisu sceny.</p><p>Ustawienie długości dla tego modelu przyjmuje pełne sekundy od jednej do dziesięciu. Opcje rozdzielczości dla Q2 to 540p, 720p i 1080p, z 720p jako udokumentowaną wartością domyślną. Wybierz długość i rozdzielczość razem, zgodnie z działaniem i miejscem docelowym. Krótkie odsłonięcie i dłuższy ruch wymagają innego rozłożenia w czasie; zwiększenie żądanej długości powinno służyć widocznej sekwencji, a nie tylko rozciągać niezmieniony opis. Sprawdź rzeczywiste wymiary i długość zwróconego klipu podczas przygotowywania końcowego umieszczenia.</p><p>Udokumentowane opcje aspect_ratio to 16:9, 9:16, 3:4, 4:3 i 1:1, z 16:9 jako wartością domyślną. Poradnik wyraźnie uwzględnia 3:4 i 4:3 dla rodziny Q2. Wybierz kadr przed generowaniem i opisz dopasowaną kompozycję: zachowaj czytelność głównego obiektu w pionowym widoku lub wykorzystaj szerokość poziomego kadru na otoczenie. Zadbaj o wystarczająco wyraźny widok końcowy dla zamierzonej strony, prezentacji lub późniejszego dodania napisów.</p><p>Pole seed kontroluje zmienność. Pominięcie go lub podanie 0 wybiera wartość losową; wartość niezerowa wybiera udokumentowaną opcję stałego ziarna do powtarzalnego generowania. Zachowaj zwrócone ziarno z promptem i ustawieniami przy porównywaniu wersji. Wspólna operacja dokumentuje również ustawienia audio i off_peak przeznaczone konkretnie dla modeli Q3. Te opcje Q3 nie są możliwościami przypisanymi temu profilowi Q2; zaplanuj żądanie wokół jego udokumentowanego wejścia tekstowego i wyjścia wideo.</p><p>Generowanie jest asynchroniczne. Wysłanie żądania zwraca task_id oraz początkowy stan, z created używanym dla nowo utworzonego zadania. Zachowaj tę tożsamość zadania podczas śledzenia przetwarzania. Udokumentowane zapytanie o wynik używa state=success dla pomyślnego wyniku i zwraca tablicę creations. Każdy element ma adres URL swojego wideo w creations[].url; zapisz każde zwrócone wideo zamiast zakładać, że zadanie zawsze zawiera dokładnie jeden wygenerowany materiał.</p><p>Dokumentacja wyniku raportuje również rzeczywistą długość wideo, fps oraz szerokość i wysokość rozdzielczości. Zachowaj te zgłoszone wartości z ukończonym klipem zamiast traktować liczbę klatek lub wymiary z przykładu jako stałą specyfikację Q2. Odpowiedź na utworzenie zadania zawiera wartość credits obok konfiguracji żądania. Zachowaj te zgłoszone metadane zadania i tożsamość ukończonego zadania z wynikiem, aby każde wideo pozostało powiązane ze swoimi ustawieniami generowania.</p><p>Sprawdź całą sekwencję względem pierwotnego opisu: wygląd obiektu, jego kształt, kierunek ruchu, ciągłość kamery i zamierzony widok końcowy. Przy poprawce wskaż konkretny szczegół, który odbiegł od opisu, i zachowaj udane części sceny. Przechowuj prompt, dokładny selektor, ustawienia, tożsamość zadania i ukończone wideo razem, aby późniejsze porównanie opierało się na rzeczywistych artefaktach.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Dostępne w Ailoot · dane wejściowe i metody</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Wideo</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Wejście</dt><dd><code>text</code></dd></div><div><dt>Wyjście</dt><dd><code>video</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Pole</th><th>Typ</th><th>Wymaganie</th><th>Wartości i limity</th><th>Domyślnie</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Wymagane</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>viduq2</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Wymagane</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Warunki: Opisz generowaną scenę. Udokumentowany limit wynosi 2000 znaków; Ailoot sprawdza, czy ciąg znaków jest niepusty, i zachowuje jego treść.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>integer</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Minimum: 1</div><div>Maksimum: 10</div><div>Warunki: Opis modelu viduq2 określa czas od 1 do 10 pełnych sekund. Nie udokumentowano domyślnego czasu trwania dla tego modelu.</div><div>Jednostka: sekundy</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>Warunki: Pomiń lub wyślij ciąg znaków &quot;0&quot;, aby użyć losowości. Podana niezerowa wartość seed wybiera udokumentowane działanie ze stałą wartością seed; nie określono zakresu liczbowego.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"unspecified\"><span class=\"card-cell-label\">Domyślnie</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>16:9, 9:16, 3:4, 4:3, 1:1</div></td><td data-cell-label=\"Domyślnie\" data-default=\"known\"><span class=\"card-cell-label\">Domyślnie</span>16:9</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>540p, 720p, 1080p</div><div>Warunki: Lista dla modelu viduq2 dokumentuje te progi dla czasu od 1 do 10 sekund. Wspólny enum i tabela wymieniają również 360p; jego zastosowanie jest sprzeczne z tą listą i nie jest tu potwierdzane.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"known\"><span class=\"card-cell-label\">Domyślnie</span>720p</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">style</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>general, anime</div><div>Warunki: Wspólne żądanie akceptuje to pole, ale dokumentacja wyraźnie wskazuje, że nie wpływa ono na viduq2.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"known\"><span class=\"card-cell-label\">Domyślnie</span>general</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">movement_amplitude</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Wymaganie\"><span class=\"card-cell-label\">Wymaganie</span>Opcjonalne</td><td data-cell-label=\"Wartości i limity\"><span class=\"card-cell-label\">Wartości i limity</span><div>auto, small, medium, large</div><div>Warunki: Wspólne żądanie akceptuje to pole, ale dokumentacja wyraźnie wskazuje, że nie wpływa ono na modele q2.</div></td><td data-cell-label=\"Domyślnie\" data-default=\"known\"><span class=\"card-cell-label\">Domyślnie</span>auto</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinacje materiałów wejściowych</summary><p class=\"note-s\"><b></b></p></details><details class=\"note-s\" data-method-contract><summary>Parametry i cykl życia metody</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametr</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>content_type</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>application/json</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>required</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>model, prompt</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>optional</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>duration, seed, aspect_ratio, resolution, style, movement_amplitude</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>material_types</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>text</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>additional_properties</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>true</td></tr><tr><th data-cell-label=\"Parametr\" scope=\"row\"><span class=\"card-cell-label\">Parametr</span><code>validation_scope</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>Ailoot sprawdza, czy ciągi znaków model/prompt są niepuste. Opcjonalne typy i limity poniżej stanowią udokumentowany kontrakt żądania; pozostałe pola żądania są zachowywane dla wybranego modelu.</td></tr></tbody></table></div><p>Aliasy metody: <code>/v1/videos/generations</code></p><p>Cykl życia: <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\">Utwórz raz i zachowaj zwrócone publiczne id oraz polling_url.</p><p class=\"note-s\">Odpytuj pierwotną operację i odczytuj state; warunkiem ukończenia jest success oraz wynik creations[].url należący do użytkownika.</p><p class=\"note-s\">Pobierz każdy zwrócony URL wideo należącego do użytkownika; na podstawie przykładu nie zakładaj stałej liczby wyników, czasu trwania ani liczby klatek na sekundę.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Cennik</h3><div class=\"card-result-process\" data-billing-basis><h5>Jak obliczana jest ostateczna opłata</h5><p class=\"note-s\">Wyświetlane stawki służą do oszacowania kosztu przed generowaniem. Ostateczna opłata jest obliczana na podstawie kosztu zarejestrowanego dla pierwotnego generowania. Zmierzony czas trwania wyniku i prognozowane ilości nie stanowią ostatecznej ilości podlegającej rozliczeniu.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.</p><dl data-price-conditions><dt>Tryb szybki</dt><dd>Nie określono <span class=\"note-s\">Gdy wybrany jest tryb szybki</span></dd><dt>Tryb flex</dt><dd>Nie określono <span class=\"note-s\">Gdy wybrany jest tryb flex</span></dd><dt>Maksymalna intensywność rozumowania</dt><dd>Nie określono <span class=\"note-s\">Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Szacunkowe stawki do porównania</h4><h4>Ceny według konfiguracji</h4><p class=\"note-s\">Dopasuj każdą opłatę do pokazanych warunków. Użyj jednej stawki dla każdego zestawu alternatywnych konfiguracji.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfiguracja</th><th>Tabela stawek</th><th>Przewidywana ilość</th><th>Opłata</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguracja\" scope=\"row\"><span class=\"card-cell-label\">Konfiguracja</span>Bazowe stawki za tokeny</th><td data-cell-label=\"Tabela stawek\"><span class=\"card-cell-label\">Tabela stawek</span>Stawka podstawowa</td><td data-cell-label=\"Przewidywana ilość\"><span class=\"card-cell-label\">Przewidywana ilość</span>—</td><td data-cell-label=\"Opłata\"><span class=\"card-cell-label\">Opłata</span><div><span>Wejście · Tokeny wejściowe · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wyjście · Tokeny wyjściowe · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wejście · Odczyt cache · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wejście · Zapis do cache · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div><div><span>Wejście · Zapis do cache, 1 godz. · Szacunek tylko do porównania</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenów</span></div></td></tr><tr><th data-cell-label=\"Konfiguracja\" scope=\"row\"><span class=\"card-cell-label\">Konfiguracja</span>Szacowany koszt generowania</th><td data-cell-label=\"Tabela stawek\"><span class=\"card-cell-label\">Tabela stawek</span>—</td><td data-cell-label=\"Przewidywana ilość\"><span class=\"card-cell-label\">Przewidywana ilość</span>szacunek dla jednego generowania</td><td data-cell-label=\"Opłata\"><span class=\"card-cell-label\">Opłata</span><div><span>Wyjście · Szacowany koszt generowania · Szacunek tylko do porównania</span> <b>$5.12</b> <span class=\"price-unit\">szacunek przed generowaniem</span></div><p class=\"note-s\">Ten szacunek nie jest dodatkową opłatą ani stałą stawką za ukończone generowanie.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. <a href=\"/docs/pl/billing/reserve/\">Jak działają rezerwacja i rozliczenie →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Przykładowe żądania</h3><h4>Ailoot Ultra · Wideo</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Warianty kodu\"><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 · utwórz film</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 · odczytaj pierwotne zadanie</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 · pobierz wszystkie własne filmy</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiuj kod\"><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\">Odbieranie i zapisywanie wyników</h3><h4>Ailoot Ultra · Wideo</h4><p class=\"note-s\">JSON zachowuje natywny state i tablicę creations oraz dodaje publiczne id/provider_task_id/polling_url. Wybrane adresy URL wideo są puste przed publikacją i stają się podpisanymi adresami URL należącymi do Ailoot po ukończeniu.</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>Zachowaj wszystkie ukończone wyniki</h5><p class=\"note-s\">Zapisz każde ukończone wideo lub zwrócony plik; pobierz każdy faktycznie zwrócony URL zasobu.</p><p class=\"note-s\">Pobierz każdy rzeczywiście zwrócony URL z creations[].url; indeks treści wskazuje jeden faktycznie zwrócony wynik.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jeśli trzeba sprawdzić pierwotną odpowiedź</h5><p class=\"note-s\">Przypięta deklaracja nie wymienia żadnego końcowego stanu błędu. Zachowaj oryginalną odpowiedź, nagłówki i id oraz sprawdzaj tę samą operację przy każdym nierozpoznanym stanie lub błędzie result_pending_check; nigdy nie wysyłaj ponownie żądania utworzenia o nieznanym wyniku.</p></div><details class=\"card-about\" data-output-fields><summary>Pola odpowiedzi</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Pole</th><th>Typ</th><th>Znaczenie</th></tr></thead><tbody><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Zwrócony publiczny identyfikator zadania lub operacji Ailoot.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">provider_task_id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Pierwotny identyfikator zadania, odrębny od publicznego id.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">polling_url</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Zwrócona ścieżka odczytu Ailoot dla pierwotnego zadania.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">task_id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string when supplied</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Pierwotny identyfikator obecny w odpowiedzi na utworzenie.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string when supplied</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Natywny stan zadania: created dla przypiętego stanu oczekiwania i success po ukończeniu.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">err_code</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string when supplied</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Diagnostyka zadania; zapisana specyfikacja nie deklaruje zamkniętej listy kodów błędów.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">creations[].url</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string|string[]</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Każdy wybrany URL ukończonego wideo jest zastępowany podpisanym adresem URL należącym do Ailoot.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">creations[].video.duration</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>number when supplied</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Zwrócony czas trwania wideo; sprawdź rzeczywisty ukończony wynik.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">creations[].video.fps</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer when supplied</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Zwrócona liczba klatek na sekundę; nie gwarantuje się stałej liczby klatek na sekundę.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">creations[].video.resolution.width</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer when supplied</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Zwrócona szerokość wyniku w pikselach.</td></tr><tr><th data-cell-label=\"Pole\" scope=\"row\"><span class=\"card-cell-label\">Pole</span><code class=\"card-field-name\">creations[].video.resolution.height</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer when supplied</td><td data-cell-label=\"Znaczenie\"><span class=\"card-cell-label\">Znaczenie</span>Zwrócona wysokość wyniku w pikselach.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Błędy i dalsze kroki</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Odpowiedź</th><th>Warunek</th><th>Następny krok</th></tr></thead><tbody><tr><th data-cell-label=\"Odpowiedź\" scope=\"row\"><span class=\"card-cell-label\">Odpowiedź</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Warunek\"><span class=\"card-cell-label\">Warunek</span>Nieprawidłowy JSON/model, brak wymaganych ciągów znaków lub są one puste, albo nieprawidłowy indeks treści.</td><td data-cell-label=\"Następny krok\"><span class=\"card-cell-label\">Następny krok</span></td></tr><tr><th data-cell-label=\"Odpowiedź\" scope=\"row\"><span class=\"card-cell-label\">Odpowiedź</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Warunek\"><span class=\"card-cell-label\">Warunek</span>Nieprawidłowy klucz API Ailoot.</td><td data-cell-label=\"Następny krok\"><span class=\"card-cell-label\">Następny krok</span></td></tr><tr><th data-cell-label=\"Odpowiedź\" scope=\"row\"><span class=\"card-cell-label\">Odpowiedź</span>403 · <code>permission_error</code></th><td data-cell-label=\"Warunek\"><span class=\"card-cell-label\">Warunek</span>Grupa klucza API nie ma uprawnień do tej ścieżki multimedialnej.</td><td data-cell-label=\"Następny krok\"><span class=\"card-cell-label\">Następny krok</span></td></tr><tr><th data-cell-label=\"Odpowiedź\" scope=\"row\"><span class=\"card-cell-label\">Odpowiedź</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Warunek\"><span class=\"card-cell-label\">Warunek</span>Pierwotne zadanie lub żądany wynik nie istnieje albo nie należy do tego samego użytkownika, klucza API lub grupy.</td><td data-cell-label=\"Następny krok\"><span class=\"card-cell-label\">Następny krok</span></td></tr><tr><th data-cell-label=\"Odpowiedź\" scope=\"row\"><span class=\"card-cell-label\">Odpowiedź</span>502 · <code>result_pending_check</code></th><td data-cell-label=\"Warunek\"><span class=\"card-cell-label\">Warunek</span>Pierwotne wysłanie lub sprawdzenie statusu jest niekompletne albo nie można uzgodnić jego wyniku; zachowaj pierwotny identyfikator i nie wysyłaj żądania ponownie.</td><td data-cell-label=\"Następny krok\"><span class=\"card-cell-label\">Następny krok</span></td></tr><tr><th data-cell-label=\"Odpowiedź\" scope=\"row\"><span class=\"card-cell-label\">Odpowiedź</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Warunek\"><span class=\"card-cell-label\">Warunek</span>Powiązanie pierwotnego żądania, ścieżka lub multimedia należące do użytkownika są nadal sprawdzane; kontynuuj sprawdzanie tej pierwotnej operacji.</td><td data-cell-label=\"Następny krok\"><span class=\"card-cell-label\">Następny krok</span></td></tr><tr><th data-cell-label=\"Odpowiedź\" scope=\"row\"><span class=\"card-cell-label\">Odpowiedź</span>503 · <code>server_error</code></th><td data-cell-label=\"Warunek\"><span class=\"card-cell-label\">Warunek</span>Usługa multimedialna lub magazyn pierwotnych zadań są niedostępne.</td><td data-cell-label=\"Następny krok\"><span class=\"card-cell-label\">Następny krok</span></td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasy</h3><h4>Aliasy modelu</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>Aliasy ścieżek metod</h4><p class=\"note-s\"><code>/v1/videos/generations</code></p><h4>Powiązane ID modeli</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": "Wyświetlane stawki służą do oszacowania kosztu przed generowaniem. Ostateczna opłata jest obliczana na podstawie kosztu zarejestrowanego dla pierwotnego generowania. Zmierzony czas trwania wyniku i prognozowane ilości nie stanowią ostatecznej ilości podlegającej rozliczeniu.",
          "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": "Nieprawidłowy JSON/model, brak wymaganych ciągów znaków lub są one puste, albo nieprawidłowy indeks treści.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Nieprawidłowy klucz API Ailoot.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Grupa klucza API nie ma uprawnień do tej ścieżki multimedialnej.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "Pierwotne zadanie lub żądany wynik nie istnieje albo nie należy do tego samego użytkownika, klucza API lub grupy.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "Pierwotne wysłanie lub sprawdzenie statusu jest niekompletne albo nie można uzgodnić jego wyniku; zachowaj pierwotny identyfikator i nie wysyłaj żądania ponownie.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "Powiązanie pierwotnego żądania, ścieżka lub multimedia należące do użytkownika są nadal sprawdzane; kontynuuj sprawdzanie tej pierwotnej operacji.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "Usługa multimedialna lub magazyn pierwotnych zadań są niedostępne.",
                "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": "Przypięta deklaracja nie wymienia żadnego końcowego stanu błędu. Zachowaj oryginalną odpowiedź, nagłówki i id oraz sprawdzaj tę samą operację przy każdym nierozpoznanym stanie lub błędzie result_pending_check; nigdy nie wysyłaj ponownie żądania utworzenia o nieznanym wyniku.",
              "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": "Pobierz każdy rzeczywiście zwrócony URL z creations[].url; indeks treści wskazuje jeden faktycznie zwrócony wynik.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Zwrócony publiczny identyfikator zadania lub operacji Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Pierwotny identyfikator zadania, odrębny od publicznego id.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Zwrócona ścieżka odczytu Ailoot dla pierwotnego zadania.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Pierwotny identyfikator obecny w odpowiedzi na utworzenie.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "Natywny stan zadania: created dla przypiętego stanu oczekiwania i success po ukończeniu.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "Diagnostyka zadania; zapisana specyfikacja nie deklaruje zamkniętej listy kodów błędów.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "Każdy wybrany URL ukończonego wideo jest zastępowany podpisanym adresem URL należącym do Ailoot.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "Zwrócony czas trwania wideo; sprawdź rzeczywisty ukończony wynik.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "Zwrócona liczba klatek na sekundę; nie gwarantuje się stałej liczby klatek na sekundę.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "Zwrócona szerokość wyniku w pikselach.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "Zwrócona wysokość wyniku w pikselach.",
                  "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 zachowuje natywny state i tablicę creations oraz dodaje publiczne id/provider_task_id/polling_url. Wybrane adresy URL wideo są puste przed publikacją i stają się podpisanymi adresami URL należącymi do Ailoot po ukończeniu."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Opisz generowaną scenę. Udokumentowany limit wynosi 2000 znaków; Ailoot sprawdza, czy ciąg znaków jest niepusty, i zachowuje jego treść.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Opis modelu viduq2 określa czas od 1 do 10 pełnych sekund. Nie udokumentowano domyślnego czasu trwania dla tego modelu.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "sekundy"
              },
              {
                "availability": "source_interface",
                "conditions": "Pomiń lub wyślij ciąg znaków \"0\", aby użyć losowości. Podana niezerowa wartość seed wybiera udokumentowane działanie ze stałą wartością seed; nie określono zakresu liczbowego.",
                "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": "Lista dla modelu viduq2 dokumentuje te progi dla czasu od 1 do 10 sekund. Wspólny enum i tabela wymieniają również 360p; jego zastosowanie jest sprzeczne z tą listą i nie jest tu potwierdzane.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Wspólne żądanie akceptuje to pole, ale dokumentacja wyraźnie wskazuje, że nie wpływa ono na viduq2.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Wspólne żądanie akceptuje to pole, ale dokumentacja wyraźnie wskazuje, że nie wpływa ono na modele 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": [
            "Utwórz raz i zachowaj zwrócone publiczne id oraz polling_url.",
            "Odpytuj pierwotną operację i odczytuj state; warunkiem ukończenia jest success oraz wynik creations[].url należący do użytkownika.",
            "Pobierz każdy zwrócony URL wideo należącego do użytkownika; na podstawie przykładu nie zakładaj stałej liczby wyników, czasu trwania ani liczby klatek na sekundę."
          ],
          "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 sprawdza, czy ciągi znaków model/prompt są niepuste. Opcjonalne typy i limity poniżej stanowią udokumentowany kontrakt żądania; pozostałe pola żądania są zachowywane dla wybranego modelu."
          },
          "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": "Ten szacunek nie jest dodatkową opłatą ani stałą stawką za ukończone generowanie.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Szacowany koszt generowania",
            "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": "Wideo",
        "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": "6d28b19fadb2d05fe606a23d5d623e939b077a3a4082e74bae341d8d36494e9e",
    "input_html_sha256": "3b0cb3b6b4398583c464cfacdf9d98a709f649164c69bc447edb7defaa7eb17c",
    "private_audit_sha256": "d7fdf09dfb8e22af7bd6ebbab3dd52a363458dcbc30ab7a846cc4089c0b4cbdd",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/pl/viduq2/",
    "description": "Vidu Q2 tworzy wideo z tekstowego opisu sceny, z długością 1–10 sekund, wyjściem 540p, 720p lub 1080p i pięcioma proporcjami obrazu. Ten dokładny profil viduq2 używa promptu do stylu i ruchu oraz zwraca wynik przez zadanie asynchroniczne.",
    "locale": "pl",
    "md_url": "https://ailoot.ai/models/pl/viduq2/index.md",
    "title": "Vidu: Q2 Text-to-Video — Ailoot",
    "url": "https://ailoot.ai/models/pl/viduq2/"
  },
  "rawModel": {
    "about": "Vidu Q2 tworzy wideo z opisu sceny przez profil tekst-do-wideo wybierany jako viduq2. Wymagane dane wejściowe to dokładny identyfikator modelu i prompt opisujący scenę. Użyj go do krótkiej koncepcji produktu, widoku przedstawiającego miejsce lub działania postaci, których wygląd i ruch można określić słowami. Ta skonfigurowana metoda generuje wideo z tekstu; jej opis nie przypisuje selektorowi osobnego trybu odniesienia obrazowego ani edycji wideo.\n\nZbuduj opis wokół widocznej sekwencji. Określ obiekt, miejsce, działanie, wielkość planu, ruch kamery i końcową kompozycję. Dla koncepcji produktu opisz przedmiot na blacie, światło przesuwające się po jego materiale i powolny najazd kamery kończący się na rozpoznawalnym szczególe. Dla sceny lokalizacji pokaż otoczenie przed przejściem do punktu skupienia. Dopasuj działanie do wybranej długości klipu, aby scena miała miejsce na zamierzone zakończenie.\n\nLimit promptu wynosi 2 000 znaków. Umieść najważniejszy obiekt i działanie na początku, a następnie dodaj szczegóły oświetlenia, materiału, otoczenia i kamery, które zmieniają pożądany wynik. Określ styl wizualny w prompcie. Poradnik dotyczący Q2 podaje, że osobne parametry style i movement_amplitude nie działają dla tego modelu, więc ustawienia general lub anime i opcje amplitudy ruchu nie zastępują jasnego opisu sceny.\n\nUstawienie długości dla tego modelu przyjmuje pełne sekundy od jednej do dziesięciu. Opcje rozdzielczości dla Q2 to 540p, 720p i 1080p, z 720p jako udokumentowaną wartością domyślną. Wybierz długość i rozdzielczość razem, zgodnie z działaniem i miejscem docelowym. Krótkie odsłonięcie i dłuższy ruch wymagają innego rozłożenia w czasie; zwiększenie żądanej długości powinno służyć widocznej sekwencji, a nie tylko rozciągać niezmieniony opis. Sprawdź rzeczywiste wymiary i długość zwróconego klipu podczas przygotowywania końcowego umieszczenia.\n\nUdokumentowane opcje aspect_ratio to 16:9, 9:16, 3:4, 4:3 i 1:1, z 16:9 jako wartością domyślną. Poradnik wyraźnie uwzględnia 3:4 i 4:3 dla rodziny Q2. Wybierz kadr przed generowaniem i opisz dopasowaną kompozycję: zachowaj czytelność głównego obiektu w pionowym widoku lub wykorzystaj szerokość poziomego kadru na otoczenie. Zadbaj o wystarczająco wyraźny widok końcowy dla zamierzonej strony, prezentacji lub późniejszego dodania napisów.\n\nPole seed kontroluje zmienność. Pominięcie go lub podanie 0 wybiera wartość losową; wartość niezerowa wybiera udokumentowaną opcję stałego ziarna do powtarzalnego generowania. Zachowaj zwrócone ziarno z promptem i ustawieniami przy porównywaniu wersji. Wspólna operacja dokumentuje również ustawienia audio i off_peak przeznaczone konkretnie dla modeli Q3. Te opcje Q3 nie są możliwościami przypisanymi temu profilowi Q2; zaplanuj żądanie wokół jego udokumentowanego wejścia tekstowego i wyjścia wideo.\n\nGenerowanie jest asynchroniczne. Wysłanie żądania zwraca task_id oraz początkowy stan, z created używanym dla nowo utworzonego zadania. Zachowaj tę tożsamość zadania podczas śledzenia przetwarzania. Udokumentowane zapytanie o wynik używa state=success dla pomyślnego wyniku i zwraca tablicę creations. Każdy element ma adres URL swojego wideo w creations[].url; zapisz każde zwrócone wideo zamiast zakładać, że zadanie zawsze zawiera dokładnie jeden wygenerowany materiał.\n\nDokumentacja wyniku raportuje również rzeczywistą długość wideo, fps oraz szerokość i wysokość rozdzielczości. Zachowaj te zgłoszone wartości z ukończonym klipem zamiast traktować liczbę klatek lub wymiary z przykładu jako stałą specyfikację Q2. Odpowiedź na utworzenie zadania zawiera wartość credits obok konfiguracji żądania. Zachowaj te zgłoszone metadane zadania i tożsamość ukończonego zadania z wynikiem, aby każde wideo pozostało powiązane ze swoimi ustawieniami generowania.\n\nSprawdź całą sekwencję względem pierwotnego opisu: wygląd obiektu, jego kształt, kierunek ruchu, ciągłość kamery i zamierzony widok końcowy. Przy poprawce wskaż konkretny szczegół, który odbiegł od opisu, i zachowaj udane części sceny. Przechowuj prompt, dokładny selektor, ustawienia, tożsamość zadania i ukończone wideo razem, aby późniejsze porównanie opierało się na rzeczywistych artefaktach.",
    "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": "Pełny cennik konfiguracji w szczegółach."
      }
    ],
    "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": "Wyświetlane stawki służą do oszacowania kosztu przed generowaniem. Ostateczna opłata jest obliczana na podstawie kosztu zarejestrowanego dla pierwotnego generowania. Zmierzony czas trwania wyniku i prognozowane ilości nie stanowią ostatecznej ilości podlegającej rozliczeniu.",
          "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": "Nieprawidłowy JSON/model, brak wymaganych ciągów znaków lub są one puste, albo nieprawidłowy indeks treści.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Nieprawidłowy klucz API Ailoot.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Grupa klucza API nie ma uprawnień do tej ścieżki multimedialnej.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "Pierwotne zadanie lub żądany wynik nie istnieje albo nie należy do tego samego użytkownika, klucza API lub grupy.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "Pierwotne wysłanie lub sprawdzenie statusu jest niekompletne albo nie można uzgodnić jego wyniku; zachowaj pierwotny identyfikator i nie wysyłaj żądania ponownie.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "Powiązanie pierwotnego żądania, ścieżka lub multimedia należące do użytkownika są nadal sprawdzane; kontynuuj sprawdzanie tej pierwotnej operacji.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "Usługa multimedialna lub magazyn pierwotnych zadań są niedostępne.",
                "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": "Przypięta deklaracja nie wymienia żadnego końcowego stanu błędu. Zachowaj oryginalną odpowiedź, nagłówki i id oraz sprawdzaj tę samą operację przy każdym nierozpoznanym stanie lub błędzie result_pending_check; nigdy nie wysyłaj ponownie żądania utworzenia o nieznanym wyniku.",
              "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": "Pobierz każdy rzeczywiście zwrócony URL z creations[].url; indeks treści wskazuje jeden faktycznie zwrócony wynik.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Zwrócony publiczny identyfikator zadania lub operacji Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Pierwotny identyfikator zadania, odrębny od publicznego id.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Zwrócona ścieżka odczytu Ailoot dla pierwotnego zadania.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Pierwotny identyfikator obecny w odpowiedzi na utworzenie.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "Natywny stan zadania: created dla przypiętego stanu oczekiwania i success po ukończeniu.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "Diagnostyka zadania; zapisana specyfikacja nie deklaruje zamkniętej listy kodów błędów.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "Każdy wybrany URL ukończonego wideo jest zastępowany podpisanym adresem URL należącym do Ailoot.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "Zwrócony czas trwania wideo; sprawdź rzeczywisty ukończony wynik.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "Zwrócona liczba klatek na sekundę; nie gwarantuje się stałej liczby klatek na sekundę.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "Zwrócona szerokość wyniku w pikselach.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "Zwrócona wysokość wyniku w pikselach.",
                  "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 zachowuje natywny state i tablicę creations oraz dodaje publiczne id/provider_task_id/polling_url. Wybrane adresy URL wideo są puste przed publikacją i stają się podpisanymi adresami URL należącymi do Ailoot po ukończeniu."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Opisz generowaną scenę. Udokumentowany limit wynosi 2000 znaków; Ailoot sprawdza, czy ciąg znaków jest niepusty, i zachowuje jego treść.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Opis modelu viduq2 określa czas od 1 do 10 pełnych sekund. Nie udokumentowano domyślnego czasu trwania dla tego modelu.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "sekundy"
              },
              {
                "availability": "source_interface",
                "conditions": "Pomiń lub wyślij ciąg znaków \"0\", aby użyć losowości. Podana niezerowa wartość seed wybiera udokumentowane działanie ze stałą wartością seed; nie określono zakresu liczbowego.",
                "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": "Lista dla modelu viduq2 dokumentuje te progi dla czasu od 1 do 10 sekund. Wspólny enum i tabela wymieniają również 360p; jego zastosowanie jest sprzeczne z tą listą i nie jest tu potwierdzane.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Wspólne żądanie akceptuje to pole, ale dokumentacja wyraźnie wskazuje, że nie wpływa ono na viduq2.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Wspólne żądanie akceptuje to pole, ale dokumentacja wyraźnie wskazuje, że nie wpływa ono na modele 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": [
            "Utwórz raz i zachowaj zwrócone publiczne id oraz polling_url.",
            "Odpytuj pierwotną operację i odczytuj state; warunkiem ukończenia jest success oraz wynik creations[].url należący do użytkownika.",
            "Pobierz każdy zwrócony URL wideo należącego do użytkownika; na podstawie przykładu nie zakładaj stałej liczby wyników, czasu trwania ani liczby klatek na sekundę."
          ],
          "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 sprawdza, czy ciągi znaków model/prompt są niepuste. Opcjonalne typy i limity poniżej stanowią udokumentowany kontrakt żądania; pozostałe pola żądania są zachowywane dla wybranego modelu."
          },
          "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": "Ten szacunek nie jest dodatkową opłatą ani stałą stawką za ukończone generowanie.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Szacowany koszt generowania",
            "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": "Wideo",
        "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 tworzy wideo z tekstowego opisu sceny, z długością 1–10 sekund, wyjściem 540p, 720p lub 1080p i pięcioma proporcjami obrazu. Ten dokładny profil viduq2 używa promptu do stylu i ruchu oraz zwraca wynik przez zadanie asynchroniczne."
  },
  "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 tworzy wideo z tekstowego opisu sceny, z długością 1–10 sekund, wyjściem 540p, 720p lub 1080p i pięcioma proporcjami obrazu. Ten dokładny profil viduq2 używa promptu do stylu i ruchu oraz zwraca wynik przez zadanie asynchroniczne.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "71f8a2f994e1c22e60bee2757824cfa5ee30be5cd3d95015885670cf2dd2d278",
    "renderer_sha256": "1217dcf19a93e99ac1d6fd7bf974dc19adc12fea4bd4470c2601f04e48f688cb"
  },
  "sourceRevision": "4b754ef34d86cb71c5b67aaf5ac2ec2f660e248e01cb4c679f8f2915af6a5248"
}
