{
  "aboutHtml": "<p>Wan2.7-Image мәтіндік тапсырма бойынша суреттер жасайды. Ailoot-тың ағымдағы карточкасында дәл мәтіндік кіріс пен сурет түріндегі нәтиже берілген. Alibaba дерегіне сәйкес, бұл нұсқа нұсқаларды жылдамырақ алуға бағытталған. Өндіруші спецификациясында өңдеу, үлгілерді біріктіру және жергілікті өзгерістер де қарастырылған; олар карточканың ағымдағы әдісінде ұсынылмаған кіріс суреттерін жеке қолдауды қажет етеді.</p><h4>Alibaba сипаттаған режимдер</h4><p>Үлгілер режимі үшін Alibaba тапсырмада тоғызға дейін бастапқы сурет қарастырады. Олар нысанның сыртқы көрінісіне, композицияға және бөлшектерге негіз болады. Модель бірнеше материалды жаңа сахнаға біріктіре алады немесе негізгі затты сақтай отырып бастапқы суретті өзгерте алады. Нүктелік өңдеу үшін айқын белгіленген аймақтар қарастырылған: бір суретте екіге дейін тікбұрышты бөлікті көрсетуге болады.</p><p>Alibaba спецификациясында кәдімгі режим бірден төртке дейін нәтиже жасайды. Бірізді серия оқиғамен немесе кейіпкерлердің ортақ белгілерімен байланысқан 12 суретке дейін сұрауға мүмкіндік береді. Серия үшін бұл — жоғарғы шек: модель қажетті кадр санын өзі анықтайды және азырақ қайтаруы мүмкін. Тапсырма мен бастапқы материалдар ортақ оқиға желісін сақтауға көмектеседі.</p><p>Үлгілерсіз және бірізді сериясыз кәдімгі мәтіндік генерация үшін пайымдау режимі қарастырылған. Бұл режимде модель суретті жасамас бұрын күрделі сипаттаманы егжей-тегжейлі талдайды. Суреттер бойынша өңдеуде және бірізді серияда бұл режим қолданылмайды. 3–10 түстен тұратын берілген палитра бірізді сериялардан тыс қолжетімді.</p><h4>Кіріс және нәтиже</h4><p>Бастапқы суреттері бар режимдерде өндіруші JPEG, JPG, мөлдірлігі жоқ PNG, BMP және WEBP форматтарын қолдайды. Әр қабырға 240-тан 8000 пиксельге дейін болуы мүмкін, файл өлшемі — 20 МБ-қа дейін, арақатынасы — 1:8-ден 8:1-ге дейін.</p><p>Мәтіндік тапсырма қытай және ағылшын тілдерін қолдайды және 5000 таңбамен шектелген; артық бөлігі алынып тасталады. Бұл нұсқа үшін теріс сипаттама және тапсырманы қосымша кеңейту қарастырылмаған.</p><p>Шығыс форматы — PNG, ажыратымдылық — 2K деңгейіне дейін. Бұл белгі тұрақты ең үлкен қабырға ұзындығын емес, пиксельдердің жалпы ауданын білдіреді; пішінді 1:8-ден 8:1-ге дейінгі шекте таңдауға болады. Алдын ала берілген ажыратымдылықпен өңдегенде нәтиже соңғы үлгінің арақатынасын сақтайды. Кездейсоқтықтың бірдей бастапқы мәні ұқсас нұсқалар алуға көмектеседі, бірақ толық сәйкес келуге кепілдік бермейді.</p>",
  "aboutText": "Wan2.7-Image мәтіндік тапсырма бойынша суреттер жасайды. Ailoot-тың ағымдағы карточкасында дәл мәтіндік кіріс пен сурет түріндегі нәтиже берілген. Alibaba дерегіне сәйкес, бұл нұсқа нұсқаларды жылдамырақ алуға бағытталған. Өндіруші спецификациясында өңдеу, үлгілерді біріктіру және жергілікті өзгерістер де қарастырылған; олар карточканың ағымдағы әдісінде ұсынылмаған кіріс суреттерін жеке қолдауды қажет етеді.\n\n### Alibaba сипаттаған режимдер\n\nҮлгілер режимі үшін Alibaba тапсырмада тоғызға дейін бастапқы сурет қарастырады. Олар нысанның сыртқы көрінісіне, композицияға және бөлшектерге негіз болады. Модель бірнеше материалды жаңа сахнаға біріктіре алады немесе негізгі затты сақтай отырып бастапқы суретті өзгерте алады. Нүктелік өңдеу үшін айқын белгіленген аймақтар қарастырылған: бір суретте екіге дейін тікбұрышты бөлікті көрсетуге болады.\n\nAlibaba спецификациясында кәдімгі режим бірден төртке дейін нәтиже жасайды. Бірізді серия оқиғамен немесе кейіпкерлердің ортақ белгілерімен байланысқан 12 суретке дейін сұрауға мүмкіндік береді. Серия үшін бұл — жоғарғы шек: модель қажетті кадр санын өзі анықтайды және азырақ қайтаруы мүмкін. Тапсырма мен бастапқы материалдар ортақ оқиға желісін сақтауға көмектеседі.\n\nҮлгілерсіз және бірізді сериясыз кәдімгі мәтіндік генерация үшін пайымдау режимі қарастырылған. Бұл режимде модель суретті жасамас бұрын күрделі сипаттаманы егжей-тегжейлі талдайды. Суреттер бойынша өңдеуде және бірізді серияда бұл режим қолданылмайды. 3–10 түстен тұратын берілген палитра бірізді сериялардан тыс қолжетімді.\n\n### Кіріс және нәтиже\n\nБастапқы суреттері бар режимдерде өндіруші JPEG, JPG, мөлдірлігі жоқ PNG, BMP және WEBP форматтарын қолдайды. Әр қабырға 240-тан 8000 пиксельге дейін болуы мүмкін, файл өлшемі — 20 МБ-қа дейін, арақатынасы — 1:8-ден 8:1-ге дейін.\n\nМәтіндік тапсырма қытай және ағылшын тілдерін қолдайды және 5000 таңбамен шектелген; артық бөлігі алынып тасталады. Бұл нұсқа үшін теріс сипаттама және тапсырманы қосымша кеңейту қарастырылмаған.\n\nШығыс форматы — PNG, ажыратымдылық — 2K деңгейіне дейін. Бұл белгі тұрақты ең үлкен қабырға ұзындығын емес, пиксельдердің жалпы ауданын білдіреді; пішінді 1:8-ден 8:1-ге дейінгі шекте таңдауға болады. Алдын ала берілген ажыратымдылықпен өңдегенде нәтиже соңғы үлгінің арақатынасын сақтайды. Кездейсоқтықтың бірдей бастапқы мәні ұқсас нұсқалар алуға көмектеседі, бірақ толық сәйкес келуге кепілдік бермейді.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "c1d5396dcfe614fa1dd0a0f95a3af4e727bff8936ea4f4f96ed09e1d6f7a283e",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "kk",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">Al</span><h2 id=\"sheet-title\">wan2.7-image</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Жабу\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>wan2.7-image</code><button type=\"button\" id=\"copy-id\">ID көшіру</button></div><nav class=\"card-jump-nav\" aria-label=\"Модель карточкасының бөлімдері\"><button type=\"button\" data-card-jump=\"overview\">Бастау</button><button type=\"button\" data-card-jump=\"methods\">Кіріс деректері мен әдістер</button><button type=\"button\" data-card-jump=\"pricing\">Тарифтер</button><button type=\"button\" data-card-jump=\"examples\">Мысалдар</button><button type=\"button\" data-card-jump=\"results\">Нәтижелер</button><button type=\"button\" data-card-jump=\"aliases\">Балама атаулар</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API әдістері\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|images|/v1/images/generations|wan2.7-image\">Суреттер</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Бастау</h3><p class=\"mdesc-full\">Дизайн нұсқалары мен иллюстрацияларды дайындау үшін мәтін бойынша сурет жасайтын модель. Alibaba дерегіне сәйкес, бұл нұсқа суреттерді жылдамырақ жасауға бағытталған.</p><dl class=\"card-io\" data-card-io><div><dt>Қабылданатын кіріс деректері</dt><dd>Мәтін</dd></div><div><dt>Нәтижелер</dt><dd>Суреттер</dd></div></dl><details class=\"card-about\"><summary>Модель туралы</summary><p class=\"note-s\" data-model-method-boundary>Бұл сипаттама модель мүмкіндіктерін қамтиды. Ailoot жүйесінде таңдалған әдіс үшін қолжетімді кіріс, шығыс және параметрлер төменде берілген.</p><div class=\"mabout\" id=\"m-about\"><p>Wan2.7-Image мәтіндік тапсырма бойынша суреттер жасайды. Ailoot-тың ағымдағы карточкасында дәл мәтіндік кіріс пен сурет түріндегі нәтиже берілген. Alibaba дерегіне сәйкес, бұл нұсқа нұсқаларды жылдамырақ алуға бағытталған. Өндіруші спецификациясында өңдеу, үлгілерді біріктіру және жергілікті өзгерістер де қарастырылған; олар карточканың ағымдағы әдісінде ұсынылмаған кіріс суреттерін жеке қолдауды қажет етеді.</p><h4>Alibaba сипаттаған режимдер</h4><p>Үлгілер режимі үшін Alibaba тапсырмада тоғызға дейін бастапқы сурет қарастырады. Олар нысанның сыртқы көрінісіне, композицияға және бөлшектерге негіз болады. Модель бірнеше материалды жаңа сахнаға біріктіре алады немесе негізгі затты сақтай отырып бастапқы суретті өзгерте алады. Нүктелік өңдеу үшін айқын белгіленген аймақтар қарастырылған: бір суретте екіге дейін тікбұрышты бөлікті көрсетуге болады.</p><p>Alibaba спецификациясында кәдімгі режим бірден төртке дейін нәтиже жасайды. Бірізді серия оқиғамен немесе кейіпкерлердің ортақ белгілерімен байланысқан 12 суретке дейін сұрауға мүмкіндік береді. Серия үшін бұл — жоғарғы шек: модель қажетті кадр санын өзі анықтайды және азырақ қайтаруы мүмкін. Тапсырма мен бастапқы материалдар ортақ оқиға желісін сақтауға көмектеседі.</p><p>Үлгілерсіз және бірізді сериясыз кәдімгі мәтіндік генерация үшін пайымдау режимі қарастырылған. Бұл режимде модель суретті жасамас бұрын күрделі сипаттаманы егжей-тегжейлі талдайды. Суреттер бойынша өңдеуде және бірізді серияда бұл режим қолданылмайды. 3–10 түстен тұратын берілген палитра бірізді сериялардан тыс қолжетімді.</p><h4>Кіріс және нәтиже</h4><p>Бастапқы суреттері бар режимдерде өндіруші JPEG, JPG, мөлдірлігі жоқ PNG, BMP және WEBP форматтарын қолдайды. Әр қабырға 240-тан 8000 пиксельге дейін болуы мүмкін, файл өлшемі — 20 МБ-қа дейін, арақатынасы — 1:8-ден 8:1-ге дейін.</p><p>Мәтіндік тапсырма қытай және ағылшын тілдерін қолдайды және 5000 таңбамен шектелген; артық бөлігі алынып тасталады. Бұл нұсқа үшін теріс сипаттама және тапсырманы қосымша кеңейту қарастырылмаған.</p><p>Шығыс форматы — PNG, ажыратымдылық — 2K деңгейіне дейін. Бұл белгі тұрақты ең үлкен қабырға ұзындығын емес, пиксельдердің жалпы ауданын білдіреді; пішінді 1:8-ден 8:1-ге дейінгі шекте таңдауға болады. Алдын ала берілген ажыратымдылықпен өңдегенде нәтиже соңғы үлгінің арақатынасын сақтайды. Кездейсоқтықтың бірдей бастапқы мәні ұқсас нұсқалар алуға көмектеседі, бірақ толық сәйкес келуге кепілдік бермейді.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Ailoot жүйесінде қолжетімді · кіріс деректері мен әдістер</h3><details class=\"card-method\" open><summary><b>Ailoot · Суреттер</b> <code>POST /v1/images/generations</code></summary><dl class=\"method-capabilities\"><div><dt>Кіріс</dt><dd><code>text</code></dd></div><div><dt>Шығыс</dt><dd><code>image</code></dd></div><div><dt>Шығыс пішімі</dt><dd>Сурет файлы</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Өріс</th><th>Түрі</th><th>Талап</th><th>Мәндер мен шектеулер</th><th>Әдепкі</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>string</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>wan2.7-image</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>string</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>Ең аз ұзындық: 1</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">n</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>integer</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті емес</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>Ең азы: 1</div></td><td data-cell-label=\"Әдепкі\" data-default=\"known\"><span class=\"card-cell-label\">Әдепкі</span>1</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>string</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті емес</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>url, b64_json</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>boolean</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті емес</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span></td><td data-cell-label=\"Әдепкі\" data-default=\"known\"><span class=\"card-cell-label\">Әдепкі</span>false</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">size</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>string</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті емес</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div class=\"note-s\">Модельге байланысты</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">partial_images</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>integer</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті емес</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div class=\"note-s\">Модельге байланысты</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr><tr data-parameter-availability=\"different_method\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">images[].image_url</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>string</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Қолдау көрсетілмейді</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>Декодталған байттардың ең көп саны: 20 971 520</div><div>MIME түрлері: image/png, image/jpeg</div><div>Массивтегі суреттердің ең көп саны: 9</div><div>Шарттар: Әр images[] объектісіне бір нақты URL беріледі. Массив элементтерінің саны бұл жол түріндегі соңғы мәннен бөлек ұғым.</div><div>Мына жағдайда қолданылады: Тек JSON images/edits үшін; JSON images/generations сурет үлгілерін талдамайды.</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">image</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>file</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті емес</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>Декодталған байттардың ең көп саны: 20 971 520</div><div>MIME түрлері: image/png, image/jpeg</div><div>Мына жағдайда қолданылады: multipart/form-data арқылы генерация</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">image[]</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span><code>file[]</code></td><td data-cell-label=\"Талап\"><span class=\"card-cell-label\">Талап</span>Міндетті емес</td><td data-cell-label=\"Мәндер мен шектеулер\"><span class=\"card-cell-label\">Мәндер мен шектеулер</span><div>Элементтердің ең көп саны: 9</div><div>Декодталған байттардың ең көп саны: 20 971 520</div><div>MIME түрлері: image/png, image/jpeg</div><div>Мына жағдайда қолданылады: multipart/form-data арқылы генерация</div></td><td data-cell-label=\"Әдепкі\" data-default=\"unspecified\"><span class=\"card-cell-label\">Әдепкі</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Кіріс материалдарының үйлесімдері</summary><p class=\"note-s\"><b>Мәтіннен сурет жасау</b> · Міндетті: prompt</p><p class=\"note-s\"><b>reference_images_generation</b> · Міндетті: prompt</p></details><details class=\"note-s\" data-method-contract><summary>Әдіс параметрлері мен өмірлік циклі</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Параметр</th><th>Параметр талаптары</th></tr></thead><tbody><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>material_types</code></th><td data-cell-label=\"Параметр талаптары\"><span class=\"card-cell-label\">Параметр талаптары</span>text</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>required</code></th><td data-cell-label=\"Параметр талаптары\"><span class=\"card-cell-label\">Параметр талаптары</span>model, prompt</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>optional_controls</code></th><td data-cell-label=\"Параметр талаптары\"><span class=\"card-cell-label\">Параметр талаптары</span>null</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>content_type</code></th><td data-cell-label=\"Параметр талаптары\"><span class=\"card-cell-label\">Параметр талаптары</span>application/json</td></tr></tbody></table></div><p>Өмірлік цикл: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · Нақты қайтарылған task_id немесе медиатека жазбасы</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Әдіс құрылымдары мен ID мәндері дәл берілген; жеткізушінің мүмкіндігі сұрауды қабылдаудан бөлек қаралады.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Тарифтер</h3><h4>Ailoot әдістерінің мөлшерлемелері</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Суреттер</b><code>POST /v1/images/generations</code></header><dl><div><dt>Шығыс</dt><dd>0,03 $ <em>1K өлшеміндегі сурет үшін</em></dd></div><div><dt>Шығыс</dt><dd>0,03 $ <em>2K өлшеміндегі сурет үшін</em></dd></div></dl></section><p class=\"note-s\">Ailoot сұрау алдында болжамды соманы резервтейді. Нәтижеден кейін өлшенген пайдалану көлемі бойынша қорытынды төлемді шегереді. Ағындық жауап үшін төлем соңғы пайдалану жазбасы негізінде шегеріледі. <a href=\"/docs/kk/billing/reserve/\">Резервтеу мен төлемді есептеу тәртібі →</a></p><div data-declared-reference-pricing><h4>Анықтамалық тариф мәліметтері</h4><p class=\"note-s\">Модельдің анықтамалық кестелері әдіс таңдауын, баға есебін не төлемді өзгертпейді. Қолданыстағы төлемдер таңдалған Ailoot әдісінің мөлшерлемелерімен есептеледі.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>wan2.7-image</summary><h4>Баптаулар бойынша бағалар</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Баптау</th><th>Төлемді есептеу шарттары</th><th>Төлем</th></tr></thead><tbody><tr><th data-cell-label=\"Баптау\" scope=\"row\"><span class=\"card-cell-label\">Баптау</span>wan2.7-image · Әдепкі конфигурация</th><td data-cell-label=\"Төлемді есептеу шарттары\"><span class=\"card-cell-label\">Төлемді есептеу шарттары</span>Әдепкі баптау</td><td data-cell-label=\"Төлем\"><span class=\"card-cell-label\">Төлем</span><div><span>Кіріс · Кіріс</span> <b>0,00 $</b> <span class=\"price-unit\">әр шақыру үшін</span></div><div><span>Шығыс · Шығыс</span> <b>0,06 $</b> <span class=\"price-unit\">әр шақыру үшін</span></div></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Сұрау мысалдары</h3><h4>Ailoot · Суреттер</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Код нұсқалары\"><button class=\"cg-tab\" id=\"model-code-103-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-103-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button><button class=\"cg-tab\" id=\"model-code-103-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-103-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Python SDK</button><button class=\"cg-tab\" id=\"model-code-103-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-103-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Node.js SDK</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Кодты көшіру\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-103-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-103-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\nexport AILOOT_API_KEY\n: &quot;${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}&quot;\nexport AILOOT_PROMPT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;wan2.7-image&quot;, &quot;prompt&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_PROMPT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 brief&quot;)\np[&#39;prompt&#39;]=f.read_text(encoding=&quot;utf-8&quot;)\nif not p[&#39;prompt&#39;].strip():raise SystemExit(&quot;Brief must contain text&quot;)\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\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\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(&quot;No completed images; retain the full response&quot;)\n    for index, item in enumerate(items):\n        encoded=item.get(&quot;b64_json&quot;)\n        uri=item.get(&quot;url&quot;, &quot;&quot;)\n        if not encoded and uri.startswith(&quot;data:image/&quot;):\n            header, separator, encoded=uri.partition(&quot;,&quot;)\n            if not separator or &quot;;base64&quot; not in header: raise SystemExit(&quot;Unsupported image data URI&quot;)\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(&quot;https://api.ailoot.ai&quot;,uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=&quot;https&quot; or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(&quot;Invalid returned image URL&quot;)\n            owned=parsed.netloc==&quot;api.ailoot.ai&quot; and parsed.path.startswith(&quot;/v1/media/assets/&quot;) and parsed.path.endswith(&quot;/content&quot;)\n            args=[&quot;curl&quot;,&quot;--fail-with-body&quot;,&quot;--silent&quot;,&quot;--show-error&quot;,uri]\n            if owned: args += [&quot;-H&quot;,&quot;Authorization: Bearer &quot;+os.environ[&quot;AILOOT_API_KEY&quot;]]\n            temporary=Path(f&quot;image-{index}.bin&quot;)\n            subprocess.run(args+[&quot;-o&quot;,str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(&quot;Image has neither bytes nor URL&quot;)\n        if not raw: raise SystemExit(&quot;Empty image result&quot;)\n        ext=&quot;png&quot; if raw.startswith(b&quot;\\x89PNG&quot;) else &quot;jpg&quot; if raw.startswith(b&quot;\\xff\\xd8&quot;) else &quot;webp&quot; if raw[:4]==b&quot;RIFF&quot; and raw[8:12]==b&quot;WEBP&quot; else &quot;svg&quot; if raw.lstrip().startswith((b&quot;&lt;svg&quot;,b&quot;&lt;?xml&quot;)) else &quot;bin&quot;\n        Path(f&quot;image-{index}.{ext}&quot;).write_bytes(raw)\n    print(&quot;Every returned image saved; complete response metadata retained&quot;)\nsave_images(json.loads(Path(&quot;result.json&quot;).read_text())[&quot;data&quot;])\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-103-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-103-tab-1\" hidden><pre data-lang=\"python\"><code>from openai import OpenAI\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(&quot;No completed images; retain the full response&quot;)\n    for index, item in enumerate(items):\n        encoded=item.get(&quot;b64_json&quot;)\n        uri=item.get(&quot;url&quot;, &quot;&quot;)\n        if not encoded and uri.startswith(&quot;data:image/&quot;):\n            header, separator, encoded=uri.partition(&quot;,&quot;)\n            if not separator or &quot;;base64&quot; not in header: raise SystemExit(&quot;Unsupported image data URI&quot;)\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(&quot;https://api.ailoot.ai&quot;,uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=&quot;https&quot; or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(&quot;Invalid returned image URL&quot;)\n            owned=parsed.netloc==&quot;api.ailoot.ai&quot; and parsed.path.startswith(&quot;/v1/media/assets/&quot;) and parsed.path.endswith(&quot;/content&quot;)\n            args=[&quot;curl&quot;,&quot;--fail-with-body&quot;,&quot;--silent&quot;,&quot;--show-error&quot;,uri]\n            if owned: args += [&quot;-H&quot;,&quot;Authorization: Bearer &quot;+os.environ[&quot;AILOOT_API_KEY&quot;]]\n            temporary=Path(f&quot;image-{index}.bin&quot;)\n            subprocess.run(args+[&quot;-o&quot;,str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(&quot;Image has neither bytes nor URL&quot;)\n        if not raw: raise SystemExit(&quot;Empty image result&quot;)\n        ext=&quot;png&quot; if raw.startswith(b&quot;\\x89PNG&quot;) else &quot;jpg&quot; if raw.startswith(b&quot;\\xff\\xd8&quot;) else &quot;webp&quot; if raw[:4]==b&quot;RIFF&quot; and raw[8:12]==b&quot;WEBP&quot; else &quot;svg&quot; if raw.lstrip().startswith((b&quot;&lt;svg&quot;,b&quot;&lt;?xml&quot;)) else &quot;bin&quot;\n        Path(f&quot;image-{index}.{ext}&quot;).write_bytes(raw)\n    print(&quot;Every returned image saved; complete response metadata retained&quot;)\n\nf=Path(os.environ[&quot;AILOOT_PROMPT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Set your actual UTF-8 image brief file&quot;)\nrequest={&#39;model&#39;: &#39;wan2.7-image&#39;, &#39;prompt&#39;: &#39;&#39;}\nrequest[&quot;prompt&quot;]=f.read_text(encoding=&quot;utf-8&quot;)\nclient=OpenAI(base_url=&quot;https://api.ailoot.ai/v1&quot;,api_key=os.environ[&quot;AILOOT_API_KEY&quot;],max_retries=0)\nresult=client.images.generate(**request)\nPath(&quot;sdk-result.txt&quot;).write_text(str(result),encoding=&quot;utf-8&quot;)\nsave_images([{&quot;b64_json&quot;:getattr(item,&quot;b64_json&quot;,None),&quot;url&quot;:getattr(item,&quot;url&quot;,None)} for item in result.data])\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-103-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-103-tab-2\" hidden><pre data-lang=\"js\"><code>import OpenAI from &quot;openai&quot;;\nimport { readFileSync, writeFileSync } from &quot;node:fs&quot;;\nconst key=process.env.AILOOT_API_KEY;\nif(!key) throw new Error(&quot;Set your actual Ailoot API key&quot;);\nconst client=new OpenAI({baseURL:&quot;https://api.ailoot.ai/v1&quot;,apiKey:key,maxRetries:0});\nconst request={&quot;model&quot;: &quot;wan2.7-image&quot;, &quot;prompt&quot;: &quot;&quot;};\nif(!process.env.AILOOT_PROMPT_FILE)throw new Error(&quot;Set your actual UTF-8 image brief file&quot;);\nrequest.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,&quot;utf8&quot;);\nconst result=await client.images.generate(request);\nwriteFileSync(&quot;sdk-result.json&quot;,JSON.stringify(result,null,2));\nif(!result.data?.length) throw new Error(&quot;No completed images&quot;);\nfor(let index=0;index&lt;result.data.length;index++) {\n  const item=result.data[index];let encoded=item.b64_json,uri=item.url||&quot;&quot;,raw;\n  if(!encoded &amp;&amp; uri.startsWith(&quot;data:image/&quot;)) {\n    const comma=uri.indexOf(&quot;,&quot;);if(comma&lt;0 || !uri.slice(0,comma).includes(&quot;;base64&quot;)) throw new Error(&quot;Unsupported image data URI&quot;);\n    encoded=uri.slice(comma+1);\n  }\n  if(encoded) {\n    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error(&quot;Invalid Base64&quot;);\n    raw=Buffer.from(encoded,&quot;base64&quot;);\n  } else if(uri) {\n    const u=new URL(uri,&quot;https://api.ailoot.ai&quot;);\n    if(u.protocol!==&quot;https:&quot; || u.username || u.password) throw new Error(&quot;Invalid returned URL&quot;);\n    const owned=u.origin===&quot;https://api.ailoot.ai&quot; &amp;&amp; u.pathname.startsWith(&quot;/v1/media/assets/&quot;) &amp;&amp; u.pathname.endsWith(&quot;/content&quot;);\n    const response=await fetch(u,{headers:owned?{Authorization:&quot;Bearer &quot;+key}:{},redirect:&quot;manual&quot;});\n    if(!response.ok) throw new Error(&quot;Image content download failed: &quot;+response.status);\n    raw=Buffer.from(await response.arrayBuffer());\n  } else throw new Error(&quot;Image has neither bytes nor URL&quot;);\n  if(!raw.length) throw new Error(&quot;Empty image result&quot;);\n  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?&quot;png&quot;:raw[0]===255&amp;&amp;raw[1]===216?&quot;jpg&quot;:raw.toString(&quot;ascii&quot;,0,4)===&quot;RIFF&quot;&amp;&amp;raw.toString(&quot;ascii&quot;,8,12)===&quot;WEBP&quot;?&quot;webp&quot;:raw.toString(&quot;utf8&quot;).trimStart().startsWith(&quot;&lt;svg&quot;)||raw.toString(&quot;utf8&quot;).trimStart().startsWith(&quot;&lt;?xml&quot;)?&quot;svg&quot;:&quot;bin&quot;;\n  writeFileSync(`image-${index}.${ext}`,raw);\n}\nconsole.log(&quot;Every returned image saved; sdk-result.json retains complete metadata&quot;);\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Нәтижелерді алу және сақтау</h3><h4>Ailoot · Суреттер</h4><p class=\"note-s\">Қайтарылған әр суретті жүктеп алыңыз немесе оның Base64 мазмұнын сақтаңыз</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Барлық дайын нәтижені сақтау</h5><p class=\"note-s\">Әр дайын суретті сақтаңыз; қайтарылған әр URL арқылы мазмұнды алыңыз немесе оның Base64 мазмұнын декодтаңыз.</p><p class=\"note-s\">Әрбір дерек элементін сақтаңыз. Әрбір b64_json мәнін декодтаңыз немесе қайтарылған әрбір қолтаңбаланған URL мекенжайынан жүктеп алыңыз. Файл атауының кеңейтімін нақты MIME түріне/байттарға қарап таңдаңыз.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Бастапқы жауапты тексеру қажет болса</h5><p class=\"note-s\">Кескінді генерациялау немесе өңдеу нәтижесін тексеру қажет болса, бастапқы operation_id/X-Client-Request-ID мәнін және қайтарылған нәтиже туралы ақпаратты сақтаңыз. Нақты task_id немесе asset_id мәндерін қолданып, өзіңізге тиесілі бұрыннан бар нәтижелерді медиатека арқылы қалпына келтіріңіз. Генерациялау/өңдеу сұрауын қайта жібермеңіз және operation_id мәнінен күйді сұратуға арналған URL мекенжайын құрастырмаңыз.</p></div><details class=\"card-about\" data-output-fields><summary>Жауап өрістері</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Өріс</th><th>Түрі</th></tr></thead><tbody><tr><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">created</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span>integer</td></tr><tr><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">data[].url</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span>string</td></tr><tr><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">data[].b64_json</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span>base64 string</td></tr><tr><th data-cell-label=\"Өріс\" scope=\"row\"><span class=\"card-cell-label\">Өріс</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Түрі\" data-field-type><span class=\"card-cell-label\">Түрі</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Қателер және келесі қадамдар</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Жауап</th><th>Шарт</th><th>Келесі қадам</th></tr></thead><tbody><tr><th data-cell-label=\"Жауап\" scope=\"row\"><span class=\"card-cell-label\">Жауап</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Шарт\"><span class=\"card-cell-label\">Шарт</span>Міндетті өрістер, материалды ұсыну тәсілі немесе параметр мәні қате</td><td data-cell-label=\"Келесі қадам\"><span class=\"card-cell-label\">Келесі қадам</span>Жаңадан жасау сұрауын жібермес бұрын көрсетілген өрістерді түзетіңіз.</td></tr><tr><th data-cell-label=\"Жауап\" scope=\"row\"><span class=\"card-cell-label\">Жауап</span><code>server_error</code></th><td data-cell-label=\"Шарт\"><span class=\"card-cell-label\">Шарт</span>Қайтарылған жауапта операцияны немесе нәтижені тексеру қажет екені көрсетілген</td><td data-cell-label=\"Келесі қадам\"><span class=\"card-cell-label\">Келесі қадам</span>Бастапқыда қайтарылған операцияның/тапсырманың ID мәнін, сұрау тақырыптарын және жауабын сақтаңыз; сол бастапқы операцияны қолдау көрсетілетін тәсілдермен оқуды жалғастырыңыз. Жасау сұрауын қайта жібермеңіз.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Балама атаулар</h3><h4>Модельдердің балама атаулары</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=wan2.7-image&amp;route=Core&amp;caller=wan2.7-image&amp;fmt=images\"><code>wan2.7-image</code></a></span></p><h4>Әдіс жолдарының балама атаулары</h4><p class=\"note-s\">Жоғарыда көрсетілген әдіс жолдарын пайдаланыңыз.</p><h4>Шақыруға арналған байланысты ID</h4><p class=\"note-s\"><a href=\"#m=wan2.7-image&amp;route=Core&amp;caller=wan2.7-image&amp;fmt=images\"><code>wan2.7-image</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "wan2.7-image",
        "fmt": "images",
        "http": "POST",
        "path": "/v1/images/generations",
        "request_model_id": "wan2.7-image",
        "route_label": "Core"
      },
      "method_key": "Core|images|/v1/images/generations|wan2.7-image",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Save every data item. Decode each b64_json or fetch every returned signed URL. Select a filename extension from the actual MIME/bytes.",
            "errors": [
              {
                "code": null,
                "condition": "Міндетті өрістер, материалды ұсыну тәсілі немесе параметр мәні қате",
                "http_status": 400,
                "recovery": "Жаңадан жасау сұрауын жібермес бұрын көрсетілген өрістерді түзетіңіз.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Қайтарылған жауапта операцияны немесе нәтижені тексеру қажет екені көрсетілген",
                "http_status": null,
                "recovery": "Бастапқыда қайтарылған операцияның/тапсырманың ID мәнін, сұрау тақырыптарын және жауабын сақтаңыз; сол бастапқы операцияны қолдау көрсетілетін тәсілдермен оқуды жалғастырыңыз. Жасау сұрауын қайта жібермеңіз.",
                "type": "server_error"
              }
            ],
            "hints": [
              "Qwen defaultsize1024*1024; Wan defaultsize1K. Wan2.7 Pro4K is supported only without reference inputs.",
              "Explicit dimensions must be positive, at most4096 peraxis, within8:1..1:8 aspect, and the exact model/input area range.",
              "The Alibaba image adapter rejects mask input and streaming before sending the request.",
              "For this generation method, actual image references are supported as multipart image files. JSONimages[].image_url is read only on images/edits; the leaf value is a string."
            ],
            "ignored_fields": [
              "quality",
              "background",
              "style",
              "output_format",
              "output_compression",
              "moderation",
              "input_fidelity",
              "partial_images without streaming"
            ],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Кескінді генерациялау немесе өңдеу нәтижесін тексеру қажет болса, бастапқы operation_id/X-Client-Request-ID мәнін және қайтарылған нәтиже туралы ақпаратты сақтаңыз. Нақты task_id немесе asset_id мәндерін қолданып, өзіңізге тиесілі бұрыннан бар нәтижелерді медиатека арқылы қалпына келтіріңіз. Генерациялау/өңдеу сұрауын қайта жібермеңіз және operation_id мәнінен күйді сұратуға арналған URL мекенжайын құрастырмаңыз."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "ignored_reference_field": "JSONgeneration images[] is not parsed; images[].image_url belongs to a separately supported JSONedit profile.",
                "mask": false,
                "mode": "text_to_image",
                "reference_images": false,
                "required": [
                  "prompt"
                ],
                "supplied_materials": [
                  "UTF8 prompt"
                ]
              },
              {
                "content_type": "multipart/form-data",
                "mask": false,
                "maximum_decoded_bytes_per_image": 20971520,
                "maximum_reference_images": 9,
                "mime_types": [
                  "image/png",
                  "image/jpeg"
                ],
                "minimum_reference_images": 0,
                "mode": "reference_images_generation",
                "optional_file_fields": [
                  "image",
                  "image[]",
                  "image[index]"
                ],
                "reference_images": true,
                "required": [
                  "prompt"
                ],
                "supplied_materials": [
                  "UTF8 prompt",
                  "actual PNG/JPEG file references"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_image",
              "reference_images_generation_via_multipart"
            ],
            "outputs": {
              "all_results": "Әрбір дерек элементін сақтаңыз. Әрбір b64_json мәнін декодтаңыз немесе қайтарылған әрбір қолтаңбаланған URL мекенжайынан жүктеп алыңыз. Файл атауының кеңейтімін нақты MIME түріне/байттарға қарап таңдаңыз.",
              "family": "image",
              "fields": [
                {
                  "description": null,
                  "name": "created",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].b64_json",
                  "type": "base64 string"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "actual validated raster MIME"
            },
            "parameter_conditions": {
              "size": {
                "aspect_ratio_range": [
                  "1:8",
                  "8:1"
                ],
                "default": "1K",
                "max_area_4k_condition": "WanPro and no inputimages",
                "max_dimension": 4096,
                "maximum_area": 4194304,
                "minimum_area": 589824
              }
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "wan2.7-image"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 1,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "n",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "url",
                  "b64_json"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "size",
                "required": false,
                "type": "string"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "partial_images",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "different_method",
                "conditions": "Әр images[] объектісіне бір нақты URL беріледі. Массив элементтерінің саны бұл жол түріндегі соңғы мәннен бөлек ұғым.",
                "decoded_max_bytes": 20971520,
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_images_per_array": 9,
                "mime_types": [
                  "image/png",
                  "image/jpeg"
                ],
                "name": "images[].image_url",
                "required": false,
                "type": "string",
                "when": "Тек JSON images/edits үшін; JSON images/generations сурет үлгілерін талдамайды."
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_decoded_bytes": 20971520,
                "mime_types": [
                  "image/png",
                  "image/jpeg"
                ],
                "name": "image",
                "required": false,
                "type": "file",
                "when": "multipart/form-data арқылы генерация"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_decoded_bytes": 20971520,
                "maximum_items": 9,
                "mime_types": [
                  "image/png",
                  "image/jpeg"
                ],
                "name": "image[]",
                "required": false,
                "type": "file[]",
                "when": "multipart/form-data арқылы генерация"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "images[].file_id",
              "mask.file_id",
              "mask",
              "stream=true",
              "mask input is rejected by this Alibaba adapter"
            ]
          },
          "hints": [
            "Әдіс құрылымдары мен ID мәндері дәл берілген; жеткізушінің мүмкіндігі сұрауды қабылдаудан бөлек қаралады."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "prompt"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Нақты қайтарылған task_id немесе медиатека жазбасы",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "If an image generation or edit result requires a check, keep the original operation_id/X-Client-Request-ID and returned result information. Recover existing owned results through the media library using actual task_id or asset_id values. Do not resubmit the generation/edit request or construct a polling URL from operation_id."
          },
          "method": {
            "http": "POST",
            "path": "/v1/images/generations"
          },
          "operation_modes": [
            "images"
          ],
          "output": {
            "family": [
              "image"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\nexport AILOOT_API_KEY\n: \"${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}\"\nexport AILOOT_PROMPT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"wan2.7-image\", \"prompt\": \"\"}')\nf=Path(os.environ[\"AILOOT_PROMPT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 brief\")\np['prompt']=f.read_text(encoding=\"utf-8\")\nif not p['prompt'].strip():raise SystemExit(\"Brief must contain text\")\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        ext=\"png\" if raw.startswith(b\"\\x89PNG\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4]==b\"RIFF\" and raw[8:12]==b\"WEBP\" else \"svg\" if raw.lstrip().startswith((b\"<svg\",b\"<?xml\")) else \"bin\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\nsave_images(json.loads(Path(\"result.json\").read_text())[\"data\"])\nPY_RESULT\n",
            "label": "Create and save every image",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        ext=\"png\" if raw.startswith(b\"\\x89PNG\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4]==b\"RIFF\" and raw[8:12]==b\"WEBP\" else \"svg\" if raw.lstrip().startswith((b\"<svg\",b\"<?xml\")) else \"bin\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\n\nf=Path(os.environ[\"AILOOT_PROMPT_FILE\"])\nif not f.is_file():raise SystemExit(\"Set your actual UTF-8 image brief file\")\nrequest={'model': 'wan2.7-image', 'prompt': ''}\nrequest[\"prompt\"]=f.read_text(encoding=\"utf-8\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.images.generate(**request)\nPath(\"sdk-result.txt\").write_text(str(result),encoding=\"utf-8\")\nsave_images([{\"b64_json\":getattr(item,\"b64_json\",None),\"url\":getattr(item,\"url\",None)} for item in result.data])\n",
            "label": "Python SDK · save all image outputs",
            "language": "python"
          },
          {
            "code": "import OpenAI from \"openai\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nconst key=process.env.AILOOT_API_KEY;\nif(!key) throw new Error(\"Set your actual Ailoot API key\");\nconst client=new OpenAI({baseURL:\"https://api.ailoot.ai/v1\",apiKey:key,maxRetries:0});\nconst request={\"model\": \"wan2.7-image\", \"prompt\": \"\"};\nif(!process.env.AILOOT_PROMPT_FILE)throw new Error(\"Set your actual UTF-8 image brief file\");\nrequest.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,\"utf8\");\nconst result=await client.images.generate(request);\nwriteFileSync(\"sdk-result.json\",JSON.stringify(result,null,2));\nif(!result.data?.length) throw new Error(\"No completed images\");\nfor(let index=0;index<result.data.length;index++) {\n  const item=result.data[index];let encoded=item.b64_json,uri=item.url||\"\",raw;\n  if(!encoded && uri.startsWith(\"data:image/\")) {\n    const comma=uri.indexOf(\",\");if(comma<0 || !uri.slice(0,comma).includes(\";base64\")) throw new Error(\"Unsupported image data URI\");\n    encoded=uri.slice(comma+1);\n  }\n  if(encoded) {\n    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error(\"Invalid Base64\");\n    raw=Buffer.from(encoded,\"base64\");\n  } else if(uri) {\n    const u=new URL(uri,\"https://api.ailoot.ai\");\n    if(u.protocol!==\"https:\" || u.username || u.password) throw new Error(\"Invalid returned URL\");\n    const owned=u.origin===\"https://api.ailoot.ai\" && u.pathname.startsWith(\"/v1/media/assets/\") && u.pathname.endsWith(\"/content\");\n    const response=await fetch(u,{headers:owned?{Authorization:\"Bearer \"+key}:{},redirect:\"manual\"});\n    if(!response.ok) throw new Error(\"Image content download failed: \"+response.status);\n    raw=Buffer.from(await response.arrayBuffer());\n  } else throw new Error(\"Image has neither bytes nor URL\");\n  if(!raw.length) throw new Error(\"Empty image result\");\n  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?\"png\":raw[0]===255&&raw[1]===216?\"jpg\":raw.toString(\"ascii\",0,4)===\"RIFF\"&&raw.toString(\"ascii\",8,12)===\"WEBP\"?\"webp\":raw.toString(\"utf8\").trimStart().startsWith(\"<svg\")||raw.toString(\"utf8\").trimStart().startsWith(\"<?xml\")?\"svg\":\"bin\";\n  writeFileSync(`image-${index}.${ext}`,raw);\n}\nconsole.log(\"Every returned image saved; sdk-result.json retains complete metadata\");\n",
            "label": "Node SDK · save all image outputs",
            "language": "js"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "images",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Суреттер",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "image"
        ],
        "path": "/v1/images/generations",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.03,
                "amount_unit": "usd_per_display_unit",
                "key": "image_output_1k",
                "label": "per 1K image",
                "side": "out"
              },
              {
                "amount": 0.03,
                "amount_unit": "usd_per_display_unit",
                "key": "image_output_2k",
                "label": "per 2K image",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "wan2.7-image",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "conditional",
        "units": [
          {
            "key": "image_output_1k",
            "label": "per 1K image",
            "side": "out",
            "usd": 0.03
          },
          {
            "key": "image_output_2k",
            "label": "per 2K image",
            "side": "out",
            "usd": 0.03
          }
        ]
      }
    }
  ],
  "model_id": "wan2.7-image",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "d80a4589aaa3a10c2c4b6a153e0200ef5c4e317457708e3d61e2420a05d509eb",
    "input_html_sha256": "4e40ff3f2c642691b643d59fb40cf1fccba4a349ea16fee594d0c0292b28b79d",
    "private_audit_sha256": "e2cb2c25ec29be9dc02422b75533820a933ac32f5441572cb7e46c1fa9a98e91",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/kk/wan2-7-image/",
    "description": "Дизайн нұсқалары мен иллюстрацияларды дайындау үшін мәтін бойынша сурет жасайтын модель. Alibaba дерегіне сәйкес, бұл нұсқа суреттерді жылдамырақ жасауға бағытталған.",
    "locale": "kk",
    "md_url": "https://ailoot.ai/models/kk/wan2-7-image/index.md",
    "title": "wan2.7-image — Ailoot",
    "url": "https://ailoot.ai/models/kk/wan2-7-image/"
  },
  "rawModel": {
    "about": "Wan2.7-Image мәтіндік тапсырма бойынша суреттер жасайды. Ailoot-тың ағымдағы карточкасында дәл мәтіндік кіріс пен сурет түріндегі нәтиже берілген. Alibaba дерегіне сәйкес, бұл нұсқа нұсқаларды жылдамырақ алуға бағытталған. Өндіруші спецификациясында өңдеу, үлгілерді біріктіру және жергілікті өзгерістер де қарастырылған; олар карточканың ағымдағы әдісінде ұсынылмаған кіріс суреттерін жеке қолдауды қажет етеді.\n\n### Alibaba сипаттаған режимдер\n\nҮлгілер режимі үшін Alibaba тапсырмада тоғызға дейін бастапқы сурет қарастырады. Олар нысанның сыртқы көрінісіне, композицияға және бөлшектерге негіз болады. Модель бірнеше материалды жаңа сахнаға біріктіре алады немесе негізгі затты сақтай отырып бастапқы суретті өзгерте алады. Нүктелік өңдеу үшін айқын белгіленген аймақтар қарастырылған: бір суретте екіге дейін тікбұрышты бөлікті көрсетуге болады.\n\nAlibaba спецификациясында кәдімгі режим бірден төртке дейін нәтиже жасайды. Бірізді серия оқиғамен немесе кейіпкерлердің ортақ белгілерімен байланысқан 12 суретке дейін сұрауға мүмкіндік береді. Серия үшін бұл — жоғарғы шек: модель қажетті кадр санын өзі анықтайды және азырақ қайтаруы мүмкін. Тапсырма мен бастапқы материалдар ортақ оқиға желісін сақтауға көмектеседі.\n\nҮлгілерсіз және бірізді сериясыз кәдімгі мәтіндік генерация үшін пайымдау режимі қарастырылған. Бұл режимде модель суретті жасамас бұрын күрделі сипаттаманы егжей-тегжейлі талдайды. Суреттер бойынша өңдеуде және бірізді серияда бұл режим қолданылмайды. 3–10 түстен тұратын берілген палитра бірізді сериялардан тыс қолжетімді.\n\n### Кіріс және нәтиже\n\nБастапқы суреттері бар режимдерде өндіруші JPEG, JPG, мөлдірлігі жоқ PNG, BMP және WEBP форматтарын қолдайды. Әр қабырға 240-тан 8000 пиксельге дейін болуы мүмкін, файл өлшемі — 20 МБ-қа дейін, арақатынасы — 1:8-ден 8:1-ге дейін.\n\nМәтіндік тапсырма қытай және ағылшын тілдерін қолдайды және 5000 таңбамен шектелген; артық бөлігі алынып тасталады. Бұл нұсқа үшін теріс сипаттама және тапсырманы қосымша кеңейту қарастырылмаған.\n\nШығыс форматы — PNG, ажыратымдылық — 2K деңгейіне дейін. Бұл белгі тұрақты ең үлкен қабырға ұзындығын емес, пиксельдердің жалпы ауданын білдіреді; пішінді 1:8-ден 8:1-ге дейінгі шекте таңдауға болады. Алдын ала берілген ажыратымдылықпен өңдегенде нәтиже соңғы үлгінің арақатынасын сақтайды. Кездейсоқтықтың бірдей бастапқы мәні ұқсас нұсқалар алуға көмектеседі, бірақ толық сәйкес келуге кепілдік бермейді.",
    "alias_of": null,
    "aliases": [],
    "author": "Alibaba",
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "c05313e9c73a01b71ebd",
        "label": "wan2.7-image",
        "profiles": [
          {
            "basis": "",
            "dimensions": {
              "conditions": "Әдепкі баптау"
            },
            "label": "wan2.7-image · Әдепкі конфигурация",
            "units": [
              {
                "amount": "0.0",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "key": "2d5993783f4533eabdf225a5",
                "label": "Input",
                "public_unit_label": "per call",
                "quantity": 1,
                "rate_role": "declared_tariff_rate",
                "side": "in",
                "unit": "次"
              },
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "key": "6480bc0a9951e46cde30aaaf",
                "label": "Output",
                "public_unit_label": "per call",
                "quantity": 1,
                "rate_role": "declared_tariff_rate",
                "side": "out",
                "unit": "次"
              }
            ]
          }
        ]
      }
    ],
    "formats": [
      "images"
    ],
    "id": "wan2.7-image",
    "input": [
      "text"
    ],
    "kind": "image",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Save every data item. Decode each b64_json or fetch every returned signed URL. Select a filename extension from the actual MIME/bytes.",
            "errors": [
              {
                "code": null,
                "condition": "Міндетті өрістер, материалды ұсыну тәсілі немесе параметр мәні қате",
                "http_status": 400,
                "recovery": "Жаңадан жасау сұрауын жібермес бұрын көрсетілген өрістерді түзетіңіз.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Қайтарылған жауапта операцияны немесе нәтижені тексеру қажет екені көрсетілген",
                "http_status": null,
                "recovery": "Бастапқыда қайтарылған операцияның/тапсырманың ID мәнін, сұрау тақырыптарын және жауабын сақтаңыз; сол бастапқы операцияны қолдау көрсетілетін тәсілдермен оқуды жалғастырыңыз. Жасау сұрауын қайта жібермеңіз.",
                "type": "server_error"
              }
            ],
            "hints": [
              "Qwen defaultsize1024*1024; Wan defaultsize1K. Wan2.7 Pro4K is supported only without reference inputs.",
              "Explicit dimensions must be positive, at most4096 peraxis, within8:1..1:8 aspect, and the exact model/input area range.",
              "The Alibaba image adapter rejects mask input and streaming before sending the request.",
              "For this generation method, actual image references are supported as multipart image files. JSONimages[].image_url is read only on images/edits; the leaf value is a string."
            ],
            "ignored_fields": [
              "quality",
              "background",
              "style",
              "output_format",
              "output_compression",
              "moderation",
              "input_fidelity",
              "partial_images without streaming"
            ],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Кескінді генерациялау немесе өңдеу нәтижесін тексеру қажет болса, бастапқы operation_id/X-Client-Request-ID мәнін және қайтарылған нәтиже туралы ақпаратты сақтаңыз. Нақты task_id немесе asset_id мәндерін қолданып, өзіңізге тиесілі бұрыннан бар нәтижелерді медиатека арқылы қалпына келтіріңіз. Генерациялау/өңдеу сұрауын қайта жібермеңіз және operation_id мәнінен күйді сұратуға арналған URL мекенжайын құрастырмаңыз."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "ignored_reference_field": "JSONgeneration images[] is not parsed; images[].image_url belongs to a separately supported JSONedit profile.",
                "mask": false,
                "mode": "text_to_image",
                "reference_images": false,
                "required": [
                  "prompt"
                ],
                "supplied_materials": [
                  "UTF8 prompt"
                ]
              },
              {
                "content_type": "multipart/form-data",
                "mask": false,
                "maximum_decoded_bytes_per_image": 20971520,
                "maximum_reference_images": 9,
                "mime_types": [
                  "image/png",
                  "image/jpeg"
                ],
                "minimum_reference_images": 0,
                "mode": "reference_images_generation",
                "optional_file_fields": [
                  "image",
                  "image[]",
                  "image[index]"
                ],
                "reference_images": true,
                "required": [
                  "prompt"
                ],
                "supplied_materials": [
                  "UTF8 prompt",
                  "actual PNG/JPEG file references"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_image",
              "reference_images_generation_via_multipart"
            ],
            "outputs": {
              "all_results": "Әрбір дерек элементін сақтаңыз. Әрбір b64_json мәнін декодтаңыз немесе қайтарылған әрбір қолтаңбаланған URL мекенжайынан жүктеп алыңыз. Файл атауының кеңейтімін нақты MIME түріне/байттарға қарап таңдаңыз.",
              "family": "image",
              "fields": [
                {
                  "description": null,
                  "name": "created",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].b64_json",
                  "type": "base64 string"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "actual validated raster MIME"
            },
            "parameter_conditions": {
              "size": {
                "aspect_ratio_range": [
                  "1:8",
                  "8:1"
                ],
                "default": "1K",
                "max_area_4k_condition": "WanPro and no inputimages",
                "max_dimension": 4096,
                "maximum_area": 4194304,
                "minimum_area": 589824
              }
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "wan2.7-image"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 1,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "n",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "url",
                  "b64_json"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "size",
                "required": false,
                "type": "string"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "partial_images",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "different_method",
                "conditions": "Әр images[] объектісіне бір нақты URL беріледі. Массив элементтерінің саны бұл жол түріндегі соңғы мәннен бөлек ұғым.",
                "decoded_max_bytes": 20971520,
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_images_per_array": 9,
                "mime_types": [
                  "image/png",
                  "image/jpeg"
                ],
                "name": "images[].image_url",
                "required": false,
                "type": "string",
                "when": "Тек JSON images/edits үшін; JSON images/generations сурет үлгілерін талдамайды."
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_decoded_bytes": 20971520,
                "mime_types": [
                  "image/png",
                  "image/jpeg"
                ],
                "name": "image",
                "required": false,
                "type": "file",
                "when": "multipart/form-data арқылы генерация"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_decoded_bytes": 20971520,
                "maximum_items": 9,
                "mime_types": [
                  "image/png",
                  "image/jpeg"
                ],
                "name": "image[]",
                "required": false,
                "type": "file[]",
                "when": "multipart/form-data арқылы генерация"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "images[].file_id",
              "mask.file_id",
              "mask",
              "stream=true",
              "mask input is rejected by this Alibaba adapter"
            ]
          },
          "hints": [
            "Әдіс құрылымдары мен ID мәндері дәл берілген; жеткізушінің мүмкіндігі сұрауды қабылдаудан бөлек қаралады."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "prompt"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Нақты қайтарылған task_id немесе медиатека жазбасы",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "If an image generation or edit result requires a check, keep the original operation_id/X-Client-Request-ID and returned result information. Recover existing owned results through the media library using actual task_id or asset_id values. Do not resubmit the generation/edit request or construct a polling URL from operation_id."
          },
          "method": {
            "http": "POST",
            "path": "/v1/images/generations"
          },
          "operation_modes": [
            "images"
          ],
          "output": {
            "family": [
              "image"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\nexport AILOOT_API_KEY\n: \"${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}\"\nexport AILOOT_PROMPT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"wan2.7-image\", \"prompt\": \"\"}')\nf=Path(os.environ[\"AILOOT_PROMPT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 brief\")\np['prompt']=f.read_text(encoding=\"utf-8\")\nif not p['prompt'].strip():raise SystemExit(\"Brief must contain text\")\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        ext=\"png\" if raw.startswith(b\"\\x89PNG\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4]==b\"RIFF\" and raw[8:12]==b\"WEBP\" else \"svg\" if raw.lstrip().startswith((b\"<svg\",b\"<?xml\")) else \"bin\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\nsave_images(json.loads(Path(\"result.json\").read_text())[\"data\"])\nPY_RESULT\n",
            "label": "Create and save every image",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        ext=\"png\" if raw.startswith(b\"\\x89PNG\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4]==b\"RIFF\" and raw[8:12]==b\"WEBP\" else \"svg\" if raw.lstrip().startswith((b\"<svg\",b\"<?xml\")) else \"bin\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\n\nf=Path(os.environ[\"AILOOT_PROMPT_FILE\"])\nif not f.is_file():raise SystemExit(\"Set your actual UTF-8 image brief file\")\nrequest={'model': 'wan2.7-image', 'prompt': ''}\nrequest[\"prompt\"]=f.read_text(encoding=\"utf-8\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.images.generate(**request)\nPath(\"sdk-result.txt\").write_text(str(result),encoding=\"utf-8\")\nsave_images([{\"b64_json\":getattr(item,\"b64_json\",None),\"url\":getattr(item,\"url\",None)} for item in result.data])\n",
            "label": "Python SDK · save all image outputs",
            "language": "python"
          },
          {
            "code": "import OpenAI from \"openai\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nconst key=process.env.AILOOT_API_KEY;\nif(!key) throw new Error(\"Set your actual Ailoot API key\");\nconst client=new OpenAI({baseURL:\"https://api.ailoot.ai/v1\",apiKey:key,maxRetries:0});\nconst request={\"model\": \"wan2.7-image\", \"prompt\": \"\"};\nif(!process.env.AILOOT_PROMPT_FILE)throw new Error(\"Set your actual UTF-8 image brief file\");\nrequest.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,\"utf8\");\nconst result=await client.images.generate(request);\nwriteFileSync(\"sdk-result.json\",JSON.stringify(result,null,2));\nif(!result.data?.length) throw new Error(\"No completed images\");\nfor(let index=0;index<result.data.length;index++) {\n  const item=result.data[index];let encoded=item.b64_json,uri=item.url||\"\",raw;\n  if(!encoded && uri.startsWith(\"data:image/\")) {\n    const comma=uri.indexOf(\",\");if(comma<0 || !uri.slice(0,comma).includes(\";base64\")) throw new Error(\"Unsupported image data URI\");\n    encoded=uri.slice(comma+1);\n  }\n  if(encoded) {\n    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error(\"Invalid Base64\");\n    raw=Buffer.from(encoded,\"base64\");\n  } else if(uri) {\n    const u=new URL(uri,\"https://api.ailoot.ai\");\n    if(u.protocol!==\"https:\" || u.username || u.password) throw new Error(\"Invalid returned URL\");\n    const owned=u.origin===\"https://api.ailoot.ai\" && u.pathname.startsWith(\"/v1/media/assets/\") && u.pathname.endsWith(\"/content\");\n    const response=await fetch(u,{headers:owned?{Authorization:\"Bearer \"+key}:{},redirect:\"manual\"});\n    if(!response.ok) throw new Error(\"Image content download failed: \"+response.status);\n    raw=Buffer.from(await response.arrayBuffer());\n  } else throw new Error(\"Image has neither bytes nor URL\");\n  if(!raw.length) throw new Error(\"Empty image result\");\n  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?\"png\":raw[0]===255&&raw[1]===216?\"jpg\":raw.toString(\"ascii\",0,4)===\"RIFF\"&&raw.toString(\"ascii\",8,12)===\"WEBP\"?\"webp\":raw.toString(\"utf8\").trimStart().startsWith(\"<svg\")||raw.toString(\"utf8\").trimStart().startsWith(\"<?xml\")?\"svg\":\"bin\";\n  writeFileSync(`image-${index}.${ext}`,raw);\n}\nconsole.log(\"Every returned image saved; sdk-result.json retains complete metadata\");\n",
            "label": "Node SDK · save all image outputs",
            "language": "js"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "images",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Суреттер",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "image"
        ],
        "path": "/v1/images/generations",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.03,
                "amount_unit": "usd_per_display_unit",
                "key": "image_output_1k",
                "label": "per 1K image",
                "side": "out"
              },
              {
                "amount": 0.03,
                "amount_unit": "usd_per_display_unit",
                "key": "image_output_2k",
                "label": "per 2K image",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "wan2.7-image",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "conditional",
        "units": [
          {
            "key": "image_output_1k",
            "label": "per 1K image",
            "side": "out",
            "usd": 0.03
          },
          {
            "key": "image_output_2k",
            "label": "per 2K image",
            "side": "out",
            "usd": 0.03
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "wan2.7-image",
        "request_model_id": "wan2.7-image",
        "route_label": "Core"
      }
    ],
    "name": "wan2.7-image",
    "price": {
      "in": null,
      "in_label": null,
      "out": 0.03,
      "out_label": "per 1K image",
      "sort_in": null,
      "sort_out": null,
      "varies": false
    },
    "short": "Дизайн нұсқалары мен иллюстрацияларды дайындау үшін мәтін бойынша сурет жасайтын модель. Alibaba дерегіне сәйкес, бұл нұсқа суреттерді жылдамырақ жасауға бағытталған."
  },
  "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": "Дизайн нұсқалары мен иллюстрацияларды дайындау үшін мәтін бойынша сурет жасайтын модель. Alibaba дерегіне сәйкес, бұл нұсқа суреттерді жылдамырақ жасауға бағытталған.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "3be3d9e68e3b033bb7347c279da0667e570336d00de1bdadfa005e3602f9ca72",
    "renderer_sha256": "def3bb6e69c8ddb72f88ec6540bbe55d0e503790f964d84073ecda781b13bedf"
  },
  "sourceRevision": "fbf3968e0852d7228d6afcaf09c7467597c01193d51afb868c1481b4de3e35fa"
}
