Source: https://ailoot.ai/models/kk/wan2-7-image-pro/
Canonical: https://ailoot.ai/models/kk/wan2-7-image-pro/
Language: kk

# wan2.7-image-pro

[Markdown](https://ailoot.ai/models/kk/wan2-7-image-pro/index.md) · [JSON](https://ailoot.ai/models/kk/wan2-7-image-pro/facts.json)

## [wan2.7-image-pro](https://ailoot.ai/models/kk/wan2-7-image-pro/)

Мәтіндік тапсырма бойынша сурет жасайтын модель. Өндіруші түстер палитрасын басқаруды және кәдімгі мәтіндік генерация үшін 4K деңгейіне дейінгі ажыратымдылықты қарастырады.

- [**Ailoot · Суреттер** `POST /v1/images/generations` `wan2.7-image-pro`](https://ailoot.ai/models/kk/wan2-7-image-pro/#method-0)
- [**Ailoot · Суреттер** `POST /v1/images/generations` `wan-image`](https://ailoot.ai/models/kk/wan2-7-image-pro/#method-1)
- [**Ailoot · Суреттер** `POST /v1/images/generations` `wan-image-latest`](https://ailoot.ai/models/kk/wan2-7-image-pro/#method-2)

Модель туралы

Бұл сипаттама модель мүмкіндіктерін қамтиды. Ailoot жүйесінде таңдалған әдіс үшін қолжетімді кіріс, шығыс және параметрлер төменде берілген.

Wan2.7-Image-Pro — мәтін бойынша суреттер жасайтын Alibaba моделі. Ailoot-тың ағымдағы карточкасы мәтіндік кіріс пен сурет түріндегі нәтижені жариялайды. Өндіруші өңдеуді, үлгілерді біріктіруді және жергілікті өзгерістерді де қарастырады; бұл тәсілдер кіріс суреттерді жеке қолдауды қажет етеді және карточканың ағымдағы әдісінде ұсынылмаған.

Өндірушідегі үлгілер режимінде тоғызға дейін бастапқы сурет беріп, әрқайсысының қандай элементтерін қолдану керектігін сипаттауға болады. Өңдегенде модель негізгі нысанды сақтайды, таңдалған бөлшектерді өзгертеді немесе бірнеше материалдан жаңа композиция құрайды. Өзгерістерді дәлірек бағыттау үшін бір кіріс суретте екіге дейін тікбұрышты аймақты белгілеуге болады.

#### Палитра және күрделі тапсырма

Бірізді сериялардан тыс 3–10 түстен тұратын палитра беруге болады. Пайымдау режимі үлгілерсіз және бірізді сериясыз кәдімгі мәтіндік генерацияға арналған: модель сахна сипаттамасын алдын ала талдайды.

Alibaba спецификациясында кәдімгі шығыс бірден төртке дейін сурет қамтиды. Оқиғалы серияда жоғарғы шекті 12-ге дейін қоюға болады; нақты санын модель тапсырма бойынша таңдайды. Серия кейіпкерлердің ортақ белгілері мен оқиғаның байланысқан дамуы үшін мәтін мен үлгілерді ескере алады. Бұл режимде палитра мен пайымдау қолданылмайды.

#### Ажыратымдылық режимге байланысты

4K деңгейі үлгілерсіз және бірізді сериясыз кәдімгі мәтіндік генерацияда қолдау табады. Суреттер бойынша өңдеу және бірізді сериялар 2K деңгейімен шектелген. Бұл белгілер әр қабырғаның бірдей ұзындығын емес, пиксельдер ауданын анықтайды. Кадр форматын 1:8-ден 8:1-ге дейін таңдауға болады; алдын ала берілген ажыратымдылықпен өңдегенде арақатынас соңғы үлгіге сәйкес келеді. Нәтижелер PNG форматында сақталады.

Кіріс суреттері бар тәсілдер үшін Alibaba JPEG, JPG, мөлдірлігі жоқ PNG, BMP және WEBP форматтарына рұқсат етеді. Шектер — әр файлға 20 МБ, әр қабырғаға 240-тан 8000 пиксельге дейін және 1:8-ден 8:1-ге дейінгі арақатынас. Мәтіндік тапсырма үшін қытай және ағылшын тілдері қолдау табады; ең көбі — 5000 таңба, артық бөлігі алынып тасталады. Бұл нұсқада теріс сипаттама және тапсырманы кеңейту қарастырылмаған. Кездейсоқтықтың бастапқы мәні нұсқалардың ұқсастығын сақтауға көмектеседі, бірақ дәл қайталануды қамтамасыз етпейді.

**Ailoot · Суреттер** `POST /v1/images/generations` `wan2.7-image-pro`

[`wan2.7-image-pro`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images)

Alibaba /`wan2.7-image-pro`

Модель ID

- `wan2.7-image-pro`
- `wan-image`
- `wan-image-latest`

### Бастау

Мәтіндік тапсырма бойынша сурет жасайтын модель. Өндіруші түстер палитрасын басқаруды және кәдімгі мәтіндік генерация үшін 4K деңгейіне дейінгі ажыратымдылықты қарастырады.

Қабылданатын кіріс деректері

Мәтін

Нәтижелер

Суреттер

### Ailoot жүйесінде қолжетімді · кіріс деректері мен әдістер

**Ailoot · Суреттер** `POST /v1/images/generations`

Кіріс

`text`

Шығыс

`image`

Шығыс пішімі

Сурет файлы

| Өріс | Түрі | Талап | Мәндер мен шектеулер | Әдепкі |
| --- | --- | --- | --- | --- |
| Өріс`model` | Түрі`string` | ТалапМіндетті | Мәндер мен шектеулер wan2.7-image-pro | Әдепкі— |
| Өріс`prompt` | Түрі`string` | ТалапМіндетті | Мәндер мен шектеулер Ең аз ұзындық: 1 | Әдепкі— |
| Өріс`n` | Түрі`integer` | ТалапМіндетті емес | Мәндер мен шектеулер Ең азы: 1 | Әдепкі1 |
| Өріс`response_format` | Түрі`string` | ТалапМіндетті емес | Мәндер мен шектеулер url, b64\_json | Әдепкі— |
| Өріс`stream` | Түрі`boolean` | ТалапМіндетті емес | Мәндер мен шектеулер | Әдепкіfalse |
| Өріс`size` | Түрі`string` | ТалапМіндетті емес | Мәндер мен шектеулер Модельге байланысты | Әдепкі— |
| Өріс`partial_images` | Түрі`integer` | ТалапМіндетті емес | Мәндер мен шектеулер Модельге байланысты | Әдепкі— |
| Өріс`images[].image_url` | Түрі`string` | ТалапҚолдау көрсетілмейді | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 20 971 520 MIME түрлері: image/png, image/jpeg Массивтегі суреттердің ең көп саны: 9 Шарттар: Әр images\[\] объектісіне бір нақты URL беріледі. Массив элементтерінің саны бұл жол түріндегі соңғы мәннен бөлек ұғым. Мына жағдайда қолданылады: Тек JSON images/edits үшін; JSON images/generations сурет үлгілерін талдамайды. | Әдепкі— |
| Өріс`image` | Түрі`file` | ТалапМіндетті емес | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 20 971 520 MIME түрлері: image/png, image/jpeg Мына жағдайда қолданылады: multipart/form-data арқылы генерация | Әдепкі— |
| Өріс`image[]` | Түрі`file[]` | ТалапМіндетті емес | Мәндер мен шектеулер Элементтердің ең көп саны: 9 Декодталған байттардың ең көп саны: 20 971 520 MIME түрлері: image/png, image/jpeg Мына жағдайда қолданылады: multipart/form-data арқылы генерация | Әдепкі— |

Кіріс материалдарының үйлесімдері

**Мәтіннен сурет жасау** · Міндетті: prompt

**reference\_images\_generation** · Міндетті: prompt

Әдіс параметрлері мен өмірлік циклі

| Параметр | Параметр талаптары |
| --- | --- |
| Параметр`material_types` | Параметр талаптарыtext |
| Параметр`required` | Параметр талаптарыmodel, prompt |
| Параметр`optional_controls` | Параметр талаптарыnull |
| Параметр`content_type` | Параметр талаптарыapplication/json |

Өмірлік цикл: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · Нақты қайтарылған task\_id немесе медиатека жазбасы

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

Әдіс құрылымдары мен ID мәндері дәл берілген; жеткізушінің мүмкіндігі сұрауды қабылдаудан бөлек қаралады.

### Тарифтер

#### Ailoot әдістерінің мөлшерлемелері

Шығыс

0,075 $ *1K өлшеміндегі сурет үшін*

Шығыс

0,075 $ *2K өлшеміндегі сурет үшін*

Ailoot сұрау алдында болжамды соманы резервтейді. Нәтижеден кейін өлшенген пайдалану көлемі бойынша қорытынды төлемді шегереді. Ағындық жауап үшін төлем соңғы пайдалану жазбасы негізінде шегеріледі. [Резервтеу мен төлемді есептеу тәртібі →](https://ailoot.ai/docs/kk/billing/reserve/)

#### Анықтамалық тариф мәліметтері

Модельдің анықтамалық кестелері әдіс таңдауын, баға есебін не төлемді өзгертпейді. Қолданыстағы төлемдер таңдалған Ailoot әдісінің мөлшерлемелерімен есептеледі.

wan2.7-image-pro

#### Баптаулар бойынша бағалар

| Баптау | Төлемді есептеу шарттары | Төлем |
| --- | --- | --- |
| Баптауwan2.7-image-pro · Әдепкі конфигурация | Төлемді есептеу шарттарыӘдепкі баптау | Төлем Кіріс · Кіріс **0,00 $** әр шақыру үшін Шығыс · Шығыс **0,16 $** әр шақыру үшін |

### Сұрау мысалдары

#### Ailoot · Суреттер

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "wan2.7-image-pro", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        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"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
```

```python
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        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"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'wan2.7-image-pro', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "wan2.7-image-pro", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  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";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### Нәтижелерді алу және сақтау

#### Ailoot · Суреттер

Қайтарылған әр суретті жүктеп алыңыз немесе оның Base64 мазмұнын сақтаңыз

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### Барлық дайын нәтижені сақтау

Әр дайын суретті сақтаңыз; қайтарылған әр URL арқылы мазмұнды алыңыз немесе оның Base64 мазмұнын декодтаңыз.

Әрбір дерек элементін сақтаңыз. Әрбір b64\_json мәнін декодтаңыз немесе қайтарылған әрбір қолтаңбаланған URL мекенжайынан жүктеп алыңыз. Файл атауының кеңейтімін нақты MIME түріне/байттарға қарап таңдаңыз.

##### Бастапқы жауапты тексеру қажет болса

Кескінді генерациялау немесе өңдеу нәтижесін тексеру қажет болса, бастапқы operation\_id/X-Client-Request-ID мәнін және қайтарылған нәтиже туралы ақпаратты сақтаңыз. Нақты task\_id немесе asset\_id мәндерін қолданып, өзіңізге тиесілі бұрыннан бар нәтижелерді медиатека арқылы қалпына келтіріңіз. Генерациялау/өңдеу сұрауын қайта жібермеңіз және operation\_id мәнінен күйді сұратуға арналған URL мекенжайын құрастырмаңыз.

Жауап өрістері

| Өріс | Түрі |
| --- | --- |
| Өріс`created` | Түріinteger |
| Өріс`data[].url` | Түріstring |
| Өріс`data[].b64_json` | Түріbase64 string |
| Өріс`usage` | Түріobject |

Қателер және келесі қадамдар

| Жауап | Шарт | Келесі қадам |
| --- | --- | --- |
| Жауап400 · `invalid_request_error` | ШартМіндетті өрістер, материалды ұсыну тәсілі немесе параметр мәні қате | Келесі қадамЖаңадан жасау сұрауын жібермес бұрын көрсетілген өрістерді түзетіңіз. |
| Жауап`server_error` | ШартҚайтарылған жауапта операцияны немесе нәтижені тексеру қажет екені көрсетілген | Келесі қадамБастапқыда қайтарылған операцияның/тапсырманың ID мәнін, сұрау тақырыптарын және жауабын сақтаңыз; сол бастапқы операцияны қолдау көрсетілетін тәсілдермен оқуды жалғастырыңыз. Жасау сұрауын қайта жібермеңіз. |

### Балама атаулар

#### Модельдердің балама атаулары

**Ailoot** [`wan2.7-image-pro`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

#### Әдіс жолдарының балама атаулары

Жоғарыда көрсетілген әдіс жолдарын пайдаланыңыз.

#### Шақыруға арналған байланысты ID

[`wan2.7-image-pro`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

**Ailoot · Суреттер** `POST /v1/images/generations` `wan-image`

[`wan-image`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images)

Alibaba /`wan-image`

Модель ID

- `wan2.7-image-pro`
- `wan-image`
- `wan-image-latest`

### Бастау

Мәтіндік тапсырма бойынша сурет жасайтын модель. Өндіруші түстер палитрасын басқаруды және кәдімгі мәтіндік генерация үшін 4K деңгейіне дейінгі ажыратымдылықты қарастырады.

Қабылданатын кіріс деректері

Мәтін

Нәтижелер

Суреттер

### Ailoot жүйесінде қолжетімді · кіріс деректері мен әдістер

**Ailoot · Суреттер** `POST /v1/images/generations`

Кіріс

`text`

Шығыс

`image`

Шығыс пішімі

Сурет файлы

| Өріс | Түрі | Талап | Мәндер мен шектеулер | Әдепкі |
| --- | --- | --- | --- | --- |
| Өріс`model` | Түрі`string` | ТалапМіндетті | Мәндер мен шектеулер wan-image | Әдепкі— |
| Өріс`prompt` | Түрі`string` | ТалапМіндетті | Мәндер мен шектеулер Ең аз ұзындық: 1 | Әдепкі— |
| Өріс`n` | Түрі`integer` | ТалапМіндетті емес | Мәндер мен шектеулер Ең азы: 1 | Әдепкі1 |
| Өріс`response_format` | Түрі`string` | ТалапМіндетті емес | Мәндер мен шектеулер url, b64\_json | Әдепкі— |
| Өріс`stream` | Түрі`boolean` | ТалапМіндетті емес | Мәндер мен шектеулер | Әдепкіfalse |
| Өріс`size` | Түрі`string` | ТалапМіндетті емес | Мәндер мен шектеулер Модельге байланысты | Әдепкі— |
| Өріс`partial_images` | Түрі`integer` | ТалапМіндетті емес | Мәндер мен шектеулер Модельге байланысты | Әдепкі— |
| Өріс`images[].image_url` | Түрі`string` | ТалапҚолдау көрсетілмейді | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 20 971 520 MIME түрлері: image/png, image/jpeg Массивтегі суреттердің ең көп саны: 9 Шарттар: Әр images\[\] объектісіне бір нақты URL беріледі. Массив элементтерінің саны бұл жол түріндегі соңғы мәннен бөлек ұғым. Мына жағдайда қолданылады: Тек JSON images/edits үшін; JSON images/generations сурет үлгілерін талдамайды. | Әдепкі— |
| Өріс`image` | Түрі`file` | ТалапМіндетті емес | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 20 971 520 MIME түрлері: image/png, image/jpeg Мына жағдайда қолданылады: multipart/form-data арқылы генерация | Әдепкі— |
| Өріс`image[]` | Түрі`file[]` | ТалапМіндетті емес | Мәндер мен шектеулер Элементтердің ең көп саны: 9 Декодталған байттардың ең көп саны: 20 971 520 MIME түрлері: image/png, image/jpeg Мына жағдайда қолданылады: multipart/form-data арқылы генерация | Әдепкі— |

Кіріс материалдарының үйлесімдері

**Мәтіннен сурет жасау** · Міндетті: prompt

**reference\_images\_generation** · Міндетті: prompt

Әдіс параметрлері мен өмірлік циклі

| Параметр | Параметр талаптары |
| --- | --- |
| Параметр`material_types` | Параметр талаптарыtext |
| Параметр`required` | Параметр талаптарыmodel, prompt |
| Параметр`optional_controls` | Параметр талаптарыnull |
| Параметр`content_type` | Параметр талаптарыapplication/json |

Өмірлік цикл: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · Нақты қайтарылған task\_id немесе медиатека жазбасы

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

Әдіс құрылымдары мен ID мәндері дәл берілген; жеткізушінің мүмкіндігі сұрауды қабылдаудан бөлек қаралады.

### Тарифтер

#### Ailoot әдістерінің мөлшерлемелері

Шығыс

0,075 $ *1K өлшеміндегі сурет үшін*

Шығыс

0,075 $ *2K өлшеміндегі сурет үшін*

Ailoot сұрау алдында болжамды соманы резервтейді. Нәтижеден кейін өлшенген пайдалану көлемі бойынша қорытынды төлемді шегереді. Ағындық жауап үшін төлем соңғы пайдалану жазбасы негізінде шегеріледі. [Резервтеу мен төлемді есептеу тәртібі →](https://ailoot.ai/docs/kk/billing/reserve/)

#### Анықтамалық тариф мәліметтері

Модельдің анықтамалық кестелері әдіс таңдауын, баға есебін не төлемді өзгертпейді. Қолданыстағы төлемдер таңдалған Ailoot әдісінің мөлшерлемелерімен есептеледі.

wan2.7-image-pro

#### Баптаулар бойынша бағалар

| Баптау | Төлемді есептеу шарттары | Төлем |
| --- | --- | --- |
| Баптауwan2.7-image-pro · Әдепкі конфигурация | Төлемді есептеу шарттарыӘдепкі баптау | Төлем Кіріс · Кіріс **0,00 $** әр шақыру үшін Шығыс · Шығыс **0,16 $** әр шақыру үшін |

### Сұрау мысалдары

#### Ailoot · Суреттер

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "wan-image", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        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"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
```

```python
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        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"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'wan-image', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "wan-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  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";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### Нәтижелерді алу және сақтау

#### Ailoot · Суреттер

Қайтарылған әр суретті жүктеп алыңыз немесе оның Base64 мазмұнын сақтаңыз

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### Барлық дайын нәтижені сақтау

Әр дайын суретті сақтаңыз; қайтарылған әр URL арқылы мазмұнды алыңыз немесе оның Base64 мазмұнын декодтаңыз.

Әрбір дерек элементін сақтаңыз. Әрбір b64\_json мәнін декодтаңыз немесе қайтарылған әрбір қолтаңбаланған URL мекенжайынан жүктеп алыңыз. Файл атауының кеңейтімін нақты MIME түріне/байттарға қарап таңдаңыз.

##### Бастапқы жауапты тексеру қажет болса

Кескінді генерациялау немесе өңдеу нәтижесін тексеру қажет болса, бастапқы operation\_id/X-Client-Request-ID мәнін және қайтарылған нәтиже туралы ақпаратты сақтаңыз. Нақты task\_id немесе asset\_id мәндерін қолданып, өзіңізге тиесілі бұрыннан бар нәтижелерді медиатека арқылы қалпына келтіріңіз. Генерациялау/өңдеу сұрауын қайта жібермеңіз және operation\_id мәнінен күйді сұратуға арналған URL мекенжайын құрастырмаңыз.

Жауап өрістері

| Өріс | Түрі |
| --- | --- |
| Өріс`created` | Түріinteger |
| Өріс`data[].url` | Түріstring |
| Өріс`data[].b64_json` | Түріbase64 string |
| Өріс`usage` | Түріobject |

Қателер және келесі қадамдар

| Жауап | Шарт | Келесі қадам |
| --- | --- | --- |
| Жауап400 · `invalid_request_error` | ШартМіндетті өрістер, материалды ұсыну тәсілі немесе параметр мәні қате | Келесі қадамЖаңадан жасау сұрауын жібермес бұрын көрсетілген өрістерді түзетіңіз. |
| Жауап`server_error` | ШартҚайтарылған жауапта операцияны немесе нәтижені тексеру қажет екені көрсетілген | Келесі қадамБастапқыда қайтарылған операцияның/тапсырманың ID мәнін, сұрау тақырыптарын және жауабын сақтаңыз; сол бастапқы операцияны қолдау көрсетілетін тәсілдермен оқуды жалғастырыңыз. Жасау сұрауын қайта жібермеңіз. |

### Балама атаулар

#### Модельдердің балама атаулары

**Ailoot** [`wan2.7-image-pro`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

#### Әдіс жолдарының балама атаулары

Жоғарыда көрсетілген әдіс жолдарын пайдаланыңыз.

#### Шақыруға арналған байланысты ID

[`wan2.7-image-pro`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

**Ailoot · Суреттер** `POST /v1/images/generations` `wan-image-latest`

[`wan-image-latest`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

Alibaba /`wan-image-latest`

Модель ID

- `wan2.7-image-pro`
- `wan-image`
- `wan-image-latest`

### Бастау

Мәтіндік тапсырма бойынша сурет жасайтын модель. Өндіруші түстер палитрасын басқаруды және кәдімгі мәтіндік генерация үшін 4K деңгейіне дейінгі ажыратымдылықты қарастырады.

Қабылданатын кіріс деректері

Мәтін

Нәтижелер

Суреттер

### Ailoot жүйесінде қолжетімді · кіріс деректері мен әдістер

**Ailoot · Суреттер** `POST /v1/images/generations`

Кіріс

`text`

Шығыс

`image`

Шығыс пішімі

Сурет файлы

| Өріс | Түрі | Талап | Мәндер мен шектеулер | Әдепкі |
| --- | --- | --- | --- | --- |
| Өріс`model` | Түрі`string` | ТалапМіндетті | Мәндер мен шектеулер wan-image-latest | Әдепкі— |
| Өріс`prompt` | Түрі`string` | ТалапМіндетті | Мәндер мен шектеулер Ең аз ұзындық: 1 | Әдепкі— |
| Өріс`n` | Түрі`integer` | ТалапМіндетті емес | Мәндер мен шектеулер Ең азы: 1 | Әдепкі1 |
| Өріс`response_format` | Түрі`string` | ТалапМіндетті емес | Мәндер мен шектеулер url, b64\_json | Әдепкі— |
| Өріс`stream` | Түрі`boolean` | ТалапМіндетті емес | Мәндер мен шектеулер | Әдепкіfalse |
| Өріс`size` | Түрі`string` | ТалапМіндетті емес | Мәндер мен шектеулер Модельге байланысты | Әдепкі— |
| Өріс`partial_images` | Түрі`integer` | ТалапМіндетті емес | Мәндер мен шектеулер Модельге байланысты | Әдепкі— |
| Өріс`images[].image_url` | Түрі`string` | ТалапҚолдау көрсетілмейді | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 20 971 520 MIME түрлері: image/png, image/jpeg Массивтегі суреттердің ең көп саны: 9 Шарттар: Әр images\[\] объектісіне бір нақты URL беріледі. Массив элементтерінің саны бұл жол түріндегі соңғы мәннен бөлек ұғым. Мына жағдайда қолданылады: Тек JSON images/edits үшін; JSON images/generations сурет үлгілерін талдамайды. | Әдепкі— |
| Өріс`image` | Түрі`file` | ТалапМіндетті емес | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 20 971 520 MIME түрлері: image/png, image/jpeg Мына жағдайда қолданылады: multipart/form-data арқылы генерация | Әдепкі— |
| Өріс`image[]` | Түрі`file[]` | ТалапМіндетті емес | Мәндер мен шектеулер Элементтердің ең көп саны: 9 Декодталған байттардың ең көп саны: 20 971 520 MIME түрлері: image/png, image/jpeg Мына жағдайда қолданылады: multipart/form-data арқылы генерация | Әдепкі— |

Кіріс материалдарының үйлесімдері

**Мәтіннен сурет жасау** · Міндетті: prompt

**reference\_images\_generation** · Міндетті: prompt

Әдіс параметрлері мен өмірлік циклі

| Параметр | Параметр талаптары |
| --- | --- |
| Параметр`material_types` | Параметр талаптарыtext |
| Параметр`required` | Параметр талаптарыmodel, prompt |
| Параметр`optional_controls` | Параметр талаптарыnull |
| Параметр`content_type` | Параметр талаптарыapplication/json |

Өмірлік цикл: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · Нақты қайтарылған task\_id немесе медиатека жазбасы

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

Әдіс құрылымдары мен ID мәндері дәл берілген; жеткізушінің мүмкіндігі сұрауды қабылдаудан бөлек қаралады.

### Тарифтер

#### Ailoot әдістерінің мөлшерлемелері

Шығыс

0,075 $ *1K өлшеміндегі сурет үшін*

Шығыс

0,075 $ *2K өлшеміндегі сурет үшін*

Ailoot сұрау алдында болжамды соманы резервтейді. Нәтижеден кейін өлшенген пайдалану көлемі бойынша қорытынды төлемді шегереді. Ағындық жауап үшін төлем соңғы пайдалану жазбасы негізінде шегеріледі. [Резервтеу мен төлемді есептеу тәртібі →](https://ailoot.ai/docs/kk/billing/reserve/)

#### Анықтамалық тариф мәліметтері

Модельдің анықтамалық кестелері әдіс таңдауын, баға есебін не төлемді өзгертпейді. Қолданыстағы төлемдер таңдалған Ailoot әдісінің мөлшерлемелерімен есептеледі.

wan2.7-image-pro

#### Баптаулар бойынша бағалар

| Баптау | Төлемді есептеу шарттары | Төлем |
| --- | --- | --- |
| Баптауwan2.7-image-pro · Әдепкі конфигурация | Төлемді есептеу шарттарыӘдепкі баптау | Төлем Кіріс · Кіріс **0,00 $** әр шақыру үшін Шығыс · Шығыс **0,16 $** әр шақыру үшін |

### Сұрау мысалдары

#### Ailoot · Суреттер

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "wan-image-latest", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        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"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
```

```python
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        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"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'wan-image-latest', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "wan-image-latest", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  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";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### Нәтижелерді алу және сақтау

#### Ailoot · Суреттер

Қайтарылған әр суретті жүктеп алыңыз немесе оның Base64 мазмұнын сақтаңыз

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### Барлық дайын нәтижені сақтау

Әр дайын суретті сақтаңыз; қайтарылған әр URL арқылы мазмұнды алыңыз немесе оның Base64 мазмұнын декодтаңыз.

Әрбір дерек элементін сақтаңыз. Әрбір b64\_json мәнін декодтаңыз немесе қайтарылған әрбір қолтаңбаланған URL мекенжайынан жүктеп алыңыз. Файл атауының кеңейтімін нақты MIME түріне/байттарға қарап таңдаңыз.

##### Бастапқы жауапты тексеру қажет болса

Кескінді генерациялау немесе өңдеу нәтижесін тексеру қажет болса, бастапқы operation\_id/X-Client-Request-ID мәнін және қайтарылған нәтиже туралы ақпаратты сақтаңыз. Нақты task\_id немесе asset\_id мәндерін қолданып, өзіңізге тиесілі бұрыннан бар нәтижелерді медиатека арқылы қалпына келтіріңіз. Генерациялау/өңдеу сұрауын қайта жібермеңіз және operation\_id мәнінен күйді сұратуға арналған URL мекенжайын құрастырмаңыз.

Жауап өрістері

| Өріс | Түрі |
| --- | --- |
| Өріс`created` | Түріinteger |
| Өріс`data[].url` | Түріstring |
| Өріс`data[].b64_json` | Түріbase64 string |
| Өріс`usage` | Түріobject |

Қателер және келесі қадамдар

| Жауап | Шарт | Келесі қадам |
| --- | --- | --- |
| Жауап400 · `invalid_request_error` | ШартМіндетті өрістер, материалды ұсыну тәсілі немесе параметр мәні қате | Келесі қадамЖаңадан жасау сұрауын жібермес бұрын көрсетілген өрістерді түзетіңіз. |
| Жауап`server_error` | ШартҚайтарылған жауапта операцияны немесе нәтижені тексеру қажет екені көрсетілген | Келесі қадамБастапқыда қайтарылған операцияның/тапсырманың ID мәнін, сұрау тақырыптарын және жауабын сақтаңыз; сол бастапқы операцияны қолдау көрсетілетін тәсілдермен оқуды жалғастырыңыз. Жасау сұрауын қайта жібермеңіз. |

### Балама атаулар

#### Модельдердің балама атаулары

**Ailoot** [`wan2.7-image-pro`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

#### Әдіс жолдарының балама атаулары

Жоғарыда көрсетілген әдіс жолдарын пайдаланыңыз.

#### Шақыруға арналған байланысты ID

[`wan2.7-image-pro`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/kk/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

FAQ · wan2.7-image-pro

Қандай кіріс деректері мен нәтижелер қолжетімді?

`POST /v1/images/generations` · `wan2.7-image-pro`: `text` → `image` `POST /v1/images/generations` · `wan-image`: `text` → `image` `POST /v1/images/generations` · `wan-image-latest`: `text` → `image`

Сұрау қандай өрістерді пайдаланады?

`POST /v1/images/generations` · `wan2.7-image-pro`: `model`, `prompt`, `n`, `response_format`, `stream`, `image`, `image[]` `POST /v1/images/generations` · `wan-image`: `model`, `prompt`, `n`, `response_format`, `stream`, `image`, `image[]` `POST /v1/images/generations` · `wan-image-latest`: `model`, `prompt`, `n`, `response_format`, `stream`, `image`, `image[]`

Қандай шектеулер қолданылады?

`POST /v1/images/generations` · `wan2.7-image-pro`: `n.minimum`: `1` `POST /v1/images/generations` · `wan-image`: `n.minimum`: `1` `POST /v1/images/generations` · `wan-image-latest`: `n.minimum`: `1`

Ailoot-ты Claude Code, OpenCode, Hermes не қолданбаңызға қосыңыз.

## Компания және оның жобалар портфелі

Компания және оның жобалар портфелі: миллиондаған клиент; ай сайынғы сату көлемі миллиардтармен есептеледі.

## Токенді жеңілдікпен сатып алыңыз.

Тұрақты жұмысқа жазылым жеңілдігі. Токен сатып алуға промокодтар — 50% дейін.

Жазылым

Тұрақты сұрауыңызға жеңілдікті тариф таңдаңыз.

50% дейінгі промокод

Сатып алғанда код енгізіңіз. Баға қазіргі науқанмен қайта есептеледі.

Тарихтағы шығындар

Әр сұрауға модель, токен және сома сақталады.

[Жазылым таңдау](https://ailoot.ai/docs/kk/billing/subscriptions/) · [Модель бағасын көру](https://ailoot.ai/models/kk/)

## API-ді сататын өніміңізге қосыңыз.

SaaS, қолданба мен бот Ailoot офертасы және лицензиялық шартына сай. Қайта сатуға реселлер лицензиясын сұраңыз.

Коммерциялық қолданба

Қызметіңіздің ақылы функциясына мәтін, сурет, бейне және дыбыс жасауды қосыңыз.

Реселлер лицензиясы

Жоба сипаттамасы мен кіру схемасын жіберіңіз. Пайдалану мен қайта сатуға жазбаша шарт сұраңыз.

Сайттағы құжаттар

Оферта, лицензиялық шарт және дерек саясаты қоспай тұрып қолжетімді.

[Реселлер лицензиясын сұрау](mailto:support@ailoot.ai) · [Оферта мен лицензиялық шарт](https://ailoot.ai/legal/offer?lang=kk)

## Ailoot · Компания және оның жобалар портфелі





Ailoot жинақталған жұмыс тәжірибесіне, кең клиенттік базаға, тұрақты қызметке және KPI көрсеткіштерін үздіксіз бақылауға сүйенеді.





Компания және оның жобалар портфелі: миллиондаған клиент; ай сайынғы сату көлемі миллиардтармен есептеледі.





Ailoot осы тәжірибені клиенттердің өнімдерінде, агенттерінде, қолданбаларында және автоматтандыруларында жасанды интеллект мүмкіндіктеріне API арқылы қол жеткізуді қамтамасыз етуге пайдаланады.
