Source: https://ailoot.ai/models/uz/qwen-image-3-0-pro/
Canonical: https://ailoot.ai/models/uz/qwen-image-3-0-pro/
Language: uz

# qwen-image-3.0-pro

[Markdown](https://ailoot.ai/models/uz/qwen-image-3-0-pro/index.md) · [JSON](https://ailoot.ai/models/uz/qwen-image-3-0-pro/facts.json)

## [qwen-image-3.0-pro](https://ailoot.ai/models/uz/qwen-image-3-0-pro/)

Murakkab maketlar, yozuvlar va haqiqiyga yaqin tafsilotlarga urg‘u beruvchi, matn asosida tasvir yaratish modeli. Posterlar, kadrlar ketma-ketligi, menyular va zich kompozitsiyali materiallar uchun mos keladi.

- [**Ailoot · Rasmlar** `POST /v1/images/generations` `qwen-image-3.0-pro`](https://ailoot.ai/models/uz/qwen-image-3-0-pro/#method-0)
- [**Ailoot · Rasmlar** `POST /v1/images/generations` `qwen-image`](https://ailoot.ai/models/uz/qwen-image-3-0-pro/#method-1)
- [**Ailoot · Rasmlar** `POST /v1/images/generations` `qwen-image-latest`](https://ailoot.ai/models/uz/qwen-image-3-0-pro/#method-2)

Model haqida

Bu tavsif model imkoniyatlarini yoritadi. Ailoot da tanlangan usul uchun mavjud kirish, chiqish va parametrlar quyida keltirilgan.

Qwen-Image-3.0-Pro — Alibaba’ning kompozitsiya, yozuvlar va mayda tafsilotlar muhim bo‘lgan tasvirlarni yaratish va tahrirlash modeli. Uning yo‘nalishlari orasida zich maketlar, tasvir ichidagi tasvir, gazeta sahifalarini joylashtirish, kadrlar ketma-ketligi, menyular va o‘quv varaqlari bor. Joriy Ailoot kartasida matnli topshiriq asosida tasvir yaratish rejimi taqdim etilgan. Alibaba tahrirlash va namuna tasvirlar bilan ishlashni ham ko‘zda tutadi; bu amallar kiruvchi tasvirlarni alohida qo‘llab-quvvatlashni talab qiladi va kartaning joriy metodida taqdim etilmagan.

#### Tasvirdagi matn va tafsilotlar

Ishlab chiqaruvchi 4,5 ming tokengacha bo‘lgan uzun topshiriqlar, 12 tildagi yozuvlar va bir nechta shrift bilan ishlashni ta’kidlaydi. Bu topshiriqni qayta ishlashning tavsiflangan imkoniyati, rasmiy kontekst oynasining e’lon qilingan hajmi emas. Ko‘rsatilgan xususiyatlar orasida 10 piksel o‘lchamdagi mayda yozuvlar, teri va soch fakturasi hamda yuz ifodasidagi kichik o‘zgarishlarni aks ettirish bor. Bunday tafsilotlar tasvir yaqindan ko‘rib chiqiladigan materiallarni tayyorlashda foydali.

Qwen-Image-3.0-Pro veb-sahifalar, o‘yinlar va jonli efir ekranlarining vizual konsepsiyalari uchun ham mo‘ljallangan. Bunday natijada illyustratsiya, ekran tuzilishi va bezatilgan yozuvlarni birlashtirish mumkin. Model maket tasvirini yaratadi; ishlaydigan ilova alohida amalga oshirishni talab qiladi.

#### Alibaba spetsifikatsiyasidagi tahrirlash

Tahrirlash rejimi uchun Alibaba birdan uchtagacha tasvirni ko‘rsatadi. Bu usulda ishlab chiqaruvchi obyektni namuna raqami bilan bog‘lash va materiallar birikmasini tavsiflashga imkon beradi. Obyektlarni qo‘shish, olib tashlash va ko‘chirish, harakat, uslub, tafsilotlar va matnni o‘zgartirish ko‘zda tutilgan. Salbiy tavsif keraksiz elementlarni ko‘rsatishga yordam beradi.

Ishlab chiqaruvchining tahrirlash rejimiga kiruvchi materiallar JPG, JPEG, PNG, BMP, TIFF, WEBP va GIF formatlarida qabul qilinadi. Animatsiyali GIF uchun birinchi kadr ishlatiladi. Har bir fayl hajmi — 10 MB gacha; ishlab chiqaruvchi tomonlari 384 dan 3072 pikselgacha bo‘lgan tasvirlarni tavsiya etadi. Bu tayyor natija o‘lchamlari emas, kirishga oid tavsiyalardir.

Ishlab chiqaruvchi spetsifikatsiyasida bir so‘rovda birdan oltitagacha PNG tasvir olish ko‘zda tutilgan. Natija maydoni 262 144 dan 4 194 304 pikselgacha bo‘lib, bu 512 × 512 dan 2048 × 2048 gacha bo‘lgan kvadrat tasvirlarga mos keladi. 1:8 dan 8:1 gacha tomonlar nisbati ruxsat etiladi, shuning uchun cho‘zinchoq kompozitsiyada tomon uzunligi tanlangan kadr shakliga ham bog‘liq. Yaratishdan oldin topshiriqni qo‘shimcha qayta ishlash ko‘zda tutilgan.

**Ailoot · Rasmlar** `POST /v1/images/generations` `qwen-image-3.0-pro`

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

Alibaba /`qwen-image-3.0-pro`

Model ID

- `qwen-image-3.0-pro`
- `qwen-image`
- `qwen-image-latest`

### Boshlash

Murakkab maketlar, yozuvlar va haqiqiyga yaqin tafsilotlarga urg‘u beruvchi, matn asosida tasvir yaratish modeli. Posterlar, kadrlar ketma-ketligi, menyular va zich kompozitsiyali materiallar uchun mos keladi.

Qabul qilinadigan kirish ma’lumotlari

Matn

Natijalar

Rasmlar

### Ailoot da mavjud · kirish ma’lumotlari va usullar

**Ailoot · Rasmlar** `POST /v1/images/generations`

Kirish

`text`

Chiqish

`image`

Chiqish formati

Rasm fayli

| Maydon | Tur | Talab | Qiymatlar va cheklovlar | Standart |
| --- | --- | --- | --- | --- |
| Maydon`model` | Tur`string` | TalabMajburiy | Qiymatlar va cheklovlar qwen-image-3.0-pro | Standart— |
| Maydon`prompt` | Tur`string` | TalabMajburiy | Qiymatlar va cheklovlar Eng kam uzunlik: 1 | Standart— |
| Maydon`n` | Tur`integer` | TalabIxtiyoriy | Qiymatlar va cheklovlar Eng kam: 1 | Standart1 |
| Maydon`response_format` | Tur`string` | TalabIxtiyoriy | Qiymatlar va cheklovlar url, b64\_json | Standart— |
| Maydon`stream` | Tur`boolean` | TalabIxtiyoriy | Qiymatlar va cheklovlar | Standartfalse |
| Maydon`size` | Tur`string` | TalabIxtiyoriy | Qiymatlar va cheklovlar Modelga bogʻliq | Standart— |
| Maydon`partial_images` | Tur`integer` | TalabIxtiyoriy | Qiymatlar va cheklovlar Modelga bogʻliq | Standart— |
| Maydon`images[].image_url` | Tur`string` | TalabQo‘llab-quvvatlanmaydi | Qiymatlar va cheklovlar Dekodlangan baytlarning eng ko‘p soni: 10 485 760 MIME turlari: image/png, image/jpeg Massivdagi rasmlarning eng ko‘p soni: 3 Shartlar: Har bir images\[\] obyektiga bitta haqiqiy URL. Massivdagi elementlar soni ushbu yakuniy satr maydonidan alohida tushunchadir. Quyidagi holatda qo‘llanadi: Faqat JSON images/edits; JSON images/generations rasm referenslarini tahlil qilmaydi. | Standart— |
| Maydon`image` | Tur`file` | TalabIxtiyoriy | Qiymatlar va cheklovlar Dekodlangan baytlarning eng ko‘p soni: 10 485 760 MIME turlari: image/png, image/jpeg Quyidagi holatda qo‘llanadi: multipart/form-data orqali yaratish | Standart— |
| Maydon`image[]` | Tur`file[]` | TalabIxtiyoriy | Qiymatlar va cheklovlar Elementlarning eng ko‘p soni: 3 Dekodlangan baytlarning eng ko‘p soni: 10 485 760 MIME turlari: image/png, image/jpeg Quyidagi holatda qo‘llanadi: multipart/form-data orqali yaratish | Standart— |

Kirish materiallari birikmalari

**Matndan rasm** · Majburiy: prompt

**reference\_images\_generation** · Majburiy: prompt

Usul parametrlari va hayot sikli

| Parametr | Parametr talablari |
| --- | --- |
| Parametr`material_types` | Parametr talablaritext |
| Parametr`required` | Parametr talablarimodel, prompt |
| Parametr`optional_controls` | Parametr talablarinull |
| Parametr`content_type` | Parametr talablariapplication/json |

Hayot sikli: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · Amalda qaytarilgan task\_id yoki media kutubxonasidagi yozuv

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

`GET /v1/media/assets`

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

Metod tuzilishlari va IDlari aniq; yetkazib beruvchining imkoniyati so‘rovni qabul qilishga ruxsatdan alohida.

### Tariflar

#### Ailoot usullari tariflari

Kirish

0,003 US$ *kirish rasmi uchun*

Chiqish

0,04 US$ *1K o‘lchamdagi rasm uchun*

Chiqish

0,075 US$ *2K o‘lchamdagi rasm uchun*

Ailoot so‘rovdan oldin taxminiy summani band qiladi. Natijadan keyin o‘lchangan sarf asosidagi yakuniy to‘lovni yechadi. Oqimli javob bo‘yicha yakuniy hisob-kitob yakuniy sarf yozuviga asoslanadi. [Summani band qilish va to‘lovni hisoblash tartibi →](https://ailoot.ai/docs/uz/billing/reserve/)

### So‘rov namunalari

#### Ailoot · Rasmlar

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": "qwen-image-3.0-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': 'qwen-image-3.0-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": "qwen-image-3.0-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");
```

### Natijalarni olish va saqlash

#### Ailoot · Rasmlar

Har bir qaytarilgan rasmni yuklab oling yoki uning Base64 kontentini saqlang

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

##### Barcha tayyor natijalarni saqlash

Har bir tayyor rasmni saqlang; har bir qaytarilgan URL dan kontentni oling yoki uning Base64 kontentini dekodlang.

Har bir ma’lumot elementini saqlang. Har bir b64\_json ni dekodlang yoki qaytarilgan har bir imzolangan URL dan faylni yuklab oling. Fayl nomi kengaytmasini haqiqiy MIME turi/baytlar asosida tanlang.

##### Asl javobni tekshirish kerak bo‘lsa

Rasm yaratish yoki tahrirlash natijasini tekshirish kerak bo‘lsa, dastlabki operation\_id/X-Client-Request-ID va qaytarilgan natija haqidagi ma’lumotlarni saqlang. Amalda qaytarilgan task\_id yoki asset\_id qiymatlari yordamida media kutubxonasidan o‘zingizga tegishli mavjud natijalarni tiklang. Rasm yaratish/tahrirlash so‘rovini qayta yubormang va operation\_id dan holatni davriy tekshirish uchun URL tuzmang.

Javob maydonlari

| Maydon | Tur |
| --- | --- |
| Maydon`created` | Turinteger |
| Maydon`data[].url` | Turstring |
| Maydon`data[].b64_json` | Turbase64 string |
| Maydon`usage` | Turobject |

Xatolar va keyingi qadamlar

| Javob | Shart | Keyingi qadam |
| --- | --- | --- |
| Javob400 · `invalid_request_error` | ShartMajburiy maydonlar, material ifodasi yoki parametr qiymati noto‘g‘ri | Keyingi qadamYangi yaratish so‘rovidan oldin ko‘rsatilgan maydonlarni tuzating. |
| Javob`server_error` | ShartQaytarilgan javob operatsiya yoki natijani tekshirish kerakligini bildiradi | Keyingi qadamDastlab qaytarilgan operatsiya/vazifa ID sini, so‘rov sarlavhalarini va javobni saqlang; aynan shu operatsiya uchun qo‘llab-quvvatlanadigan o‘qish so‘rovlarini davom ettiring. Yaratish so‘rovini qayta yubormang. |

### Taxalluslar

#### Model taxalluslari

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

#### Usul yo‘llari taxalluslari

Yuqorida ko‘rsatilgan usul yo‘llaridan foydalaning.

#### Chaqirish uchun tegishli ID lar

[`qwen-image-3.0-pro`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image-3.0-pro&fmt=images), [`qwen-image`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image&fmt=images), [`qwen-image-latest`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image-latest&fmt=images)

**Ailoot · Rasmlar** `POST /v1/images/generations` `qwen-image`

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

Alibaba /`qwen-image`

Model ID

- `qwen-image-3.0-pro`
- `qwen-image`
- `qwen-image-latest`

### Boshlash

Murakkab maketlar, yozuvlar va haqiqiyga yaqin tafsilotlarga urg‘u beruvchi, matn asosida tasvir yaratish modeli. Posterlar, kadrlar ketma-ketligi, menyular va zich kompozitsiyali materiallar uchun mos keladi.

Qabul qilinadigan kirish ma’lumotlari

Matn

Natijalar

Rasmlar

### Ailoot da mavjud · kirish ma’lumotlari va usullar

**Ailoot · Rasmlar** `POST /v1/images/generations`

Kirish

`text`

Chiqish

`image`

Chiqish formati

Rasm fayli

| Maydon | Tur | Talab | Qiymatlar va cheklovlar | Standart |
| --- | --- | --- | --- | --- |
| Maydon`model` | Tur`string` | TalabMajburiy | Qiymatlar va cheklovlar qwen-image | Standart— |
| Maydon`prompt` | Tur`string` | TalabMajburiy | Qiymatlar va cheklovlar Eng kam uzunlik: 1 | Standart— |
| Maydon`n` | Tur`integer` | TalabIxtiyoriy | Qiymatlar va cheklovlar Eng kam: 1 | Standart1 |
| Maydon`response_format` | Tur`string` | TalabIxtiyoriy | Qiymatlar va cheklovlar url, b64\_json | Standart— |
| Maydon`stream` | Tur`boolean` | TalabIxtiyoriy | Qiymatlar va cheklovlar | Standartfalse |
| Maydon`size` | Tur`string` | TalabIxtiyoriy | Qiymatlar va cheklovlar Modelga bogʻliq | Standart— |
| Maydon`partial_images` | Tur`integer` | TalabIxtiyoriy | Qiymatlar va cheklovlar Modelga bogʻliq | Standart— |
| Maydon`images[].image_url` | Tur`string` | TalabQo‘llab-quvvatlanmaydi | Qiymatlar va cheklovlar Dekodlangan baytlarning eng ko‘p soni: 10 485 760 MIME turlari: image/png, image/jpeg Massivdagi rasmlarning eng ko‘p soni: 3 Shartlar: Har bir images\[\] obyektiga bitta haqiqiy URL. Massivdagi elementlar soni ushbu yakuniy satr maydonidan alohida tushunchadir. Quyidagi holatda qo‘llanadi: Faqat JSON images/edits; JSON images/generations rasm referenslarini tahlil qilmaydi. | Standart— |
| Maydon`image` | Tur`file` | TalabIxtiyoriy | Qiymatlar va cheklovlar Dekodlangan baytlarning eng ko‘p soni: 10 485 760 MIME turlari: image/png, image/jpeg Quyidagi holatda qo‘llanadi: multipart/form-data orqali yaratish | Standart— |
| Maydon`image[]` | Tur`file[]` | TalabIxtiyoriy | Qiymatlar va cheklovlar Elementlarning eng ko‘p soni: 3 Dekodlangan baytlarning eng ko‘p soni: 10 485 760 MIME turlari: image/png, image/jpeg Quyidagi holatda qo‘llanadi: multipart/form-data orqali yaratish | Standart— |

Kirish materiallari birikmalari

**Matndan rasm** · Majburiy: prompt

**reference\_images\_generation** · Majburiy: prompt

Usul parametrlari va hayot sikli

| Parametr | Parametr talablari |
| --- | --- |
| Parametr`material_types` | Parametr talablaritext |
| Parametr`required` | Parametr talablarimodel, prompt |
| Parametr`optional_controls` | Parametr talablarinull |
| Parametr`content_type` | Parametr talablariapplication/json |

Hayot sikli: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · Amalda qaytarilgan task\_id yoki media kutubxonasidagi yozuv

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

`GET /v1/media/assets`

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

Metod tuzilishlari va IDlari aniq; yetkazib beruvchining imkoniyati so‘rovni qabul qilishga ruxsatdan alohida.

### Tariflar

#### Ailoot usullari tariflari

Kirish

0,003 US$ *kirish rasmi uchun*

Chiqish

0,04 US$ *1K o‘lchamdagi rasm uchun*

Chiqish

0,075 US$ *2K o‘lchamdagi rasm uchun*

Ailoot so‘rovdan oldin taxminiy summani band qiladi. Natijadan keyin o‘lchangan sarf asosidagi yakuniy to‘lovni yechadi. Oqimli javob bo‘yicha yakuniy hisob-kitob yakuniy sarf yozuviga asoslanadi. [Summani band qilish va to‘lovni hisoblash tartibi →](https://ailoot.ai/docs/uz/billing/reserve/)

### So‘rov namunalari

#### Ailoot · Rasmlar

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": "qwen-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': 'qwen-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": "qwen-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");
```

### Natijalarni olish va saqlash

#### Ailoot · Rasmlar

Har bir qaytarilgan rasmni yuklab oling yoki uning Base64 kontentini saqlang

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

##### Barcha tayyor natijalarni saqlash

Har bir tayyor rasmni saqlang; har bir qaytarilgan URL dan kontentni oling yoki uning Base64 kontentini dekodlang.

Har bir ma’lumot elementini saqlang. Har bir b64\_json ni dekodlang yoki qaytarilgan har bir imzolangan URL dan faylni yuklab oling. Fayl nomi kengaytmasini haqiqiy MIME turi/baytlar asosida tanlang.

##### Asl javobni tekshirish kerak bo‘lsa

Rasm yaratish yoki tahrirlash natijasini tekshirish kerak bo‘lsa, dastlabki operation\_id/X-Client-Request-ID va qaytarilgan natija haqidagi ma’lumotlarni saqlang. Amalda qaytarilgan task\_id yoki asset\_id qiymatlari yordamida media kutubxonasidan o‘zingizga tegishli mavjud natijalarni tiklang. Rasm yaratish/tahrirlash so‘rovini qayta yubormang va operation\_id dan holatni davriy tekshirish uchun URL tuzmang.

Javob maydonlari

| Maydon | Tur |
| --- | --- |
| Maydon`created` | Turinteger |
| Maydon`data[].url` | Turstring |
| Maydon`data[].b64_json` | Turbase64 string |
| Maydon`usage` | Turobject |

Xatolar va keyingi qadamlar

| Javob | Shart | Keyingi qadam |
| --- | --- | --- |
| Javob400 · `invalid_request_error` | ShartMajburiy maydonlar, material ifodasi yoki parametr qiymati noto‘g‘ri | Keyingi qadamYangi yaratish so‘rovidan oldin ko‘rsatilgan maydonlarni tuzating. |
| Javob`server_error` | ShartQaytarilgan javob operatsiya yoki natijani tekshirish kerakligini bildiradi | Keyingi qadamDastlab qaytarilgan operatsiya/vazifa ID sini, so‘rov sarlavhalarini va javobni saqlang; aynan shu operatsiya uchun qo‘llab-quvvatlanadigan o‘qish so‘rovlarini davom ettiring. Yaratish so‘rovini qayta yubormang. |

### Taxalluslar

#### Model taxalluslari

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

#### Usul yo‘llari taxalluslari

Yuqorida ko‘rsatilgan usul yo‘llaridan foydalaning.

#### Chaqirish uchun tegishli ID lar

[`qwen-image-3.0-pro`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image-3.0-pro&fmt=images), [`qwen-image`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image&fmt=images), [`qwen-image-latest`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image-latest&fmt=images)

**Ailoot · Rasmlar** `POST /v1/images/generations` `qwen-image-latest`

[`qwen-image-latest`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image-latest&fmt=images)

Alibaba /`qwen-image-latest`

Model ID

- `qwen-image-3.0-pro`
- `qwen-image`
- `qwen-image-latest`

### Boshlash

Murakkab maketlar, yozuvlar va haqiqiyga yaqin tafsilotlarga urg‘u beruvchi, matn asosida tasvir yaratish modeli. Posterlar, kadrlar ketma-ketligi, menyular va zich kompozitsiyali materiallar uchun mos keladi.

Qabul qilinadigan kirish ma’lumotlari

Matn

Natijalar

Rasmlar

### Ailoot da mavjud · kirish ma’lumotlari va usullar

**Ailoot · Rasmlar** `POST /v1/images/generations`

Kirish

`text`

Chiqish

`image`

Chiqish formati

Rasm fayli

| Maydon | Tur | Talab | Qiymatlar va cheklovlar | Standart |
| --- | --- | --- | --- | --- |
| Maydon`model` | Tur`string` | TalabMajburiy | Qiymatlar va cheklovlar qwen-image-latest | Standart— |
| Maydon`prompt` | Tur`string` | TalabMajburiy | Qiymatlar va cheklovlar Eng kam uzunlik: 1 | Standart— |
| Maydon`n` | Tur`integer` | TalabIxtiyoriy | Qiymatlar va cheklovlar Eng kam: 1 | Standart1 |
| Maydon`response_format` | Tur`string` | TalabIxtiyoriy | Qiymatlar va cheklovlar url, b64\_json | Standart— |
| Maydon`stream` | Tur`boolean` | TalabIxtiyoriy | Qiymatlar va cheklovlar | Standartfalse |
| Maydon`size` | Tur`string` | TalabIxtiyoriy | Qiymatlar va cheklovlar Modelga bogʻliq | Standart— |
| Maydon`partial_images` | Tur`integer` | TalabIxtiyoriy | Qiymatlar va cheklovlar Modelga bogʻliq | Standart— |
| Maydon`images[].image_url` | Tur`string` | TalabQo‘llab-quvvatlanmaydi | Qiymatlar va cheklovlar Dekodlangan baytlarning eng ko‘p soni: 10 485 760 MIME turlari: image/png, image/jpeg Massivdagi rasmlarning eng ko‘p soni: 3 Shartlar: Har bir images\[\] obyektiga bitta haqiqiy URL. Massivdagi elementlar soni ushbu yakuniy satr maydonidan alohida tushunchadir. Quyidagi holatda qo‘llanadi: Faqat JSON images/edits; JSON images/generations rasm referenslarini tahlil qilmaydi. | Standart— |
| Maydon`image` | Tur`file` | TalabIxtiyoriy | Qiymatlar va cheklovlar Dekodlangan baytlarning eng ko‘p soni: 10 485 760 MIME turlari: image/png, image/jpeg Quyidagi holatda qo‘llanadi: multipart/form-data orqali yaratish | Standart— |
| Maydon`image[]` | Tur`file[]` | TalabIxtiyoriy | Qiymatlar va cheklovlar Elementlarning eng ko‘p soni: 3 Dekodlangan baytlarning eng ko‘p soni: 10 485 760 MIME turlari: image/png, image/jpeg Quyidagi holatda qo‘llanadi: multipart/form-data orqali yaratish | Standart— |

Kirish materiallari birikmalari

**Matndan rasm** · Majburiy: prompt

**reference\_images\_generation** · Majburiy: prompt

Usul parametrlari va hayot sikli

| Parametr | Parametr talablari |
| --- | --- |
| Parametr`material_types` | Parametr talablaritext |
| Parametr`required` | Parametr talablarimodel, prompt |
| Parametr`optional_controls` | Parametr talablarinull |
| Parametr`content_type` | Parametr talablariapplication/json |

Hayot sikli: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · Amalda qaytarilgan task\_id yoki media kutubxonasidagi yozuv

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

`GET /v1/media/assets`

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

Metod tuzilishlari va IDlari aniq; yetkazib beruvchining imkoniyati so‘rovni qabul qilishga ruxsatdan alohida.

### Tariflar

#### Ailoot usullari tariflari

Kirish

0,003 US$ *kirish rasmi uchun*

Chiqish

0,04 US$ *1K o‘lchamdagi rasm uchun*

Chiqish

0,075 US$ *2K o‘lchamdagi rasm uchun*

Ailoot so‘rovdan oldin taxminiy summani band qiladi. Natijadan keyin o‘lchangan sarf asosidagi yakuniy to‘lovni yechadi. Oqimli javob bo‘yicha yakuniy hisob-kitob yakuniy sarf yozuviga asoslanadi. [Summani band qilish va to‘lovni hisoblash tartibi →](https://ailoot.ai/docs/uz/billing/reserve/)

### So‘rov namunalari

#### Ailoot · Rasmlar

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": "qwen-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': 'qwen-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": "qwen-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");
```

### Natijalarni olish va saqlash

#### Ailoot · Rasmlar

Har bir qaytarilgan rasmni yuklab oling yoki uning Base64 kontentini saqlang

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

##### Barcha tayyor natijalarni saqlash

Har bir tayyor rasmni saqlang; har bir qaytarilgan URL dan kontentni oling yoki uning Base64 kontentini dekodlang.

Har bir ma’lumot elementini saqlang. Har bir b64\_json ni dekodlang yoki qaytarilgan har bir imzolangan URL dan faylni yuklab oling. Fayl nomi kengaytmasini haqiqiy MIME turi/baytlar asosida tanlang.

##### Asl javobni tekshirish kerak bo‘lsa

Rasm yaratish yoki tahrirlash natijasini tekshirish kerak bo‘lsa, dastlabki operation\_id/X-Client-Request-ID va qaytarilgan natija haqidagi ma’lumotlarni saqlang. Amalda qaytarilgan task\_id yoki asset\_id qiymatlari yordamida media kutubxonasidan o‘zingizga tegishli mavjud natijalarni tiklang. Rasm yaratish/tahrirlash so‘rovini qayta yubormang va operation\_id dan holatni davriy tekshirish uchun URL tuzmang.

Javob maydonlari

| Maydon | Tur |
| --- | --- |
| Maydon`created` | Turinteger |
| Maydon`data[].url` | Turstring |
| Maydon`data[].b64_json` | Turbase64 string |
| Maydon`usage` | Turobject |

Xatolar va keyingi qadamlar

| Javob | Shart | Keyingi qadam |
| --- | --- | --- |
| Javob400 · `invalid_request_error` | ShartMajburiy maydonlar, material ifodasi yoki parametr qiymati noto‘g‘ri | Keyingi qadamYangi yaratish so‘rovidan oldin ko‘rsatilgan maydonlarni tuzating. |
| Javob`server_error` | ShartQaytarilgan javob operatsiya yoki natijani tekshirish kerakligini bildiradi | Keyingi qadamDastlab qaytarilgan operatsiya/vazifa ID sini, so‘rov sarlavhalarini va javobni saqlang; aynan shu operatsiya uchun qo‘llab-quvvatlanadigan o‘qish so‘rovlarini davom ettiring. Yaratish so‘rovini qayta yubormang. |

### Taxalluslar

#### Model taxalluslari

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

#### Usul yo‘llari taxalluslari

Yuqorida ko‘rsatilgan usul yo‘llaridan foydalaning.

#### Chaqirish uchun tegishli ID lar

[`qwen-image-3.0-pro`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image-3.0-pro&fmt=images), [`qwen-image`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image&fmt=images), [`qwen-image-latest`](https://ailoot.ai/models/uz/#m=qwen-image-3.0-pro&route=Core&caller=qwen-image-latest&fmt=images)

FAQ · qwen-image-3.0-pro

Qanday kirish ma’lumotlari va natijalar mavjud?

`POST /v1/images/generations` · `qwen-image-3.0-pro`: `text` → `image` `POST /v1/images/generations` · `qwen-image`: `text` → `image` `POST /v1/images/generations` · `qwen-image-latest`: `text` → `image`

So‘rov qaysi maydonlardan foydalanadi?

`POST /v1/images/generations` · `qwen-image-3.0-pro`: `model`, `prompt`, `n`, `response_format`, `stream`, `image`, `image[]` `POST /v1/images/generations` · `qwen-image`: `model`, `prompt`, `n`, `response_format`, `stream`, `image`, `image[]` `POST /v1/images/generations` · `qwen-image-latest`: `model`, `prompt`, `n`, `response_format`, `stream`, `image`, `image[]`

Qanday cheklovlar amal qiladi?

`POST /v1/images/generations` · `qwen-image-3.0-pro`: `n.minimum`: `1` `POST /v1/images/generations` · `qwen-image`: `n.minimum`: `1` `POST /v1/images/generations` · `qwen-image-latest`: `n.minimum`: `1`

Ailoot’ni Claude Code, OpenCode, Hermes yoki ilovangizga ulang.

## Kompaniya va uning loyihalar portfeli

Kompaniya va uning loyihalar portfeli: millionlab mijozlar; oylik sotuvlar hajmi milliardlarda.

## Tokenlarni chegirma bilan xarid qiling.

Muntazam ish uchun obuna chegirmasi. Token xaridiga promokodlar — 50% gacha.

Obuna

Muntazam so‘rovlaringiz uchun chegirmali tarif tanlang.

50% gacha promokod

Xaridda kod kiriting. Narx amaldagi aksiya bilan qayta hisoblanadi.

Tarixdagi xarajatlar

Har so‘rov uchun model, token va summa saqlanadi.

[Obuna tanlash](https://ailoot.ai/docs/uz/billing/subscriptions/) · [Model narxlarini ko‘rish](https://ailoot.ai/models/uz/)

## API’ni sotadigan mahsulotingizga ulang.

SaaS, ilova va botlar Ailoot ofertasi hamda litsenziya shartnomasiga muvofiq. Qayta sotishga reseller litsenziyasi so‘rang.

Tijorat ilovasi

Xizmatingizning pullik funksiyalariga matn, rasm, video va ovoz yaratishni qo‘shing.

Reseller litsenziyasi

Loyiha tavsifi va kirish sxemasini yuboring. Foydalanish va qayta sotishga yozma shartlarni so‘rang.

Saytdagi hujjatlar

Oferta, litsenziya shartnomasi va ma’lumotlar siyosati ulashdan oldin ochiq.

[Reseller litsenziyasini so‘rash](mailto:support@ailoot.ai) · [Oferta va litsenziya shartnomasi](https://ailoot.ai/legal/offer?lang=uz)

## Ailoot · Kompaniya va uning loyihalar portfeli





Ailoot to‘plangan faoliyat tajribasi, keng mijozlar bazasi, barqaror xizmat va doimiy KPI nazoratiga tayanadi.





Kompaniya va uning loyihalar portfeli: millionlab mijozlar; oylik sotuvlar hajmi milliardlarda.





Ailoot bu faoliyat tajribasini mijozlar mahsulotlari, agentlar, ilovalar va avtomatlashtirishlarda AI imkoniyatlariga API orqali kirishni ta’minlashda qo‘llaydi.
