qwen-image-3.0-pro
Мәтін бойынша күрделі макеттерге, жазуларға және шынайы бөлшектерге мән беріп сурет жасайтын модель. Постерлерге, кадрлық жоспарларға, мәзірлерге және тығыз композициялы материалдарға жарайды.
- Ailoot · Суреттер
POST /v1/images/generationsqwen-image-3.0-pro - Ailoot · Суреттер
POST /v1/images/generationsqwen-image - Ailoot · Суреттер
POST /v1/images/generationsqwen-image-latest
Модель туралы
Бұл сипаттама модель мүмкіндіктерін қамтиды. Ailoot жүйесінде таңдалған әдіс үшін қолжетімді кіріс, шығыс және параметрлер төменде берілген.
Qwen-Image-3.0-Pro — композициясы, жазулары мен ұсақ бөлшектері маңызды суреттерді жасауға және өңдеуге арналған Alibaba моделі. Оның бағыттарына тығыз макеттер, суреттің ішіндегі сурет, газет беттеуі, кадрлық жоспарлар, мәзірлер және оқу парақтары кіреді. Ailoot-тың ағымдағы карточкасында мәтіндік тапсырма бойынша сурет генерациялау режимі берілген. Alibaba өңдеуді және үлгі суреттермен жұмысты да қарастырады; бұл операциялар кіріс суреттерді жеке қолдауды қажет етеді және карточканың ағымдағы әдісінде ұсынылмаған.
Суреттегі мәтін және бөлшектер
Өндіруші 4,5 мың токенге дейінгі ұзақ тапсырмаларды, 12 тілдегі жазуларды және бірнеше қаріппен жұмысты атап көрсетеді. Бұл — тапсырманы өңдеудің сипатталған мүмкіндігі, формалды контекст терезесінің жарияланған өлшемі емес. Мәлімделген қасиеттерге өлшемі 10 пиксель болатын ұсақ жазуларды, тері мен шаш текстурасын, бет әлпетінің шағын өзгерістерін беру кіреді. Мұндай бөлшектер суреті жақыннан қаралатын материалдарды дайындағанда пайдалы.
Qwen-Image-3.0-Pro веб-беттердің, ойындардың және тікелей эфир экрандарының визуалды тұжырымдамаларына да арналған. Мұндай нәтижеде иллюстрацияны, экран құрылымын және безендірілген жазуларды біріктіруге болады. Модель макеттің суретін жасайды; жұмыс істейтін қолданба бөлек іске асыруды қажет етеді.
Alibaba спецификациясындағы өңдеу
Өңдеу режимі үшін Alibaba бірден үшке дейін сурет көрсетеді. Бұл тәсілде өндіруші нысанды үлгінің нөмірімен байланыстырып, материалдардың үйлесуін сипаттауға мүмкіндік береді. Нысандарды қосу, жою және жылжыту, әрекетті, стильді, бөлшектер мен мәтінді өзгерту қарастырылған. Теріс сипаттама қажетсіз элементтерді белгілеуге көмектеседі.
Өндірушідегі өңдеу режимінің кіріс материалдары JPG, JPEG, PNG, BMP, TIFF, WEBP және GIF форматтарында қабылданады. Анимациялық GIF үшін бірінші кадр қолданылады. Әр файлдың өлшемі — 10 МБ-қа дейін; өндіруші қабырғалары 384-тен 3072 пиксельге дейінгі суреттерді ұсынады. Бұл — дайын нәтиженің өлшемдері емес, кіріске арналған ұсынымдар.
Өндіруші спецификациясында бір сұрауға PNG форматындағы бірден алтыға дейін шығыс сурет қарастырылған. Нәтиженің ауданы — 262 144-тен 4 194 304 пиксельге дейін, бұл 512 × 512-ден 2048 × 2048-ге дейінгі шаршы суреттерге сәйкес келеді. 1:8-ден 8:1-ге дейінгі арақатынастарға рұқсат етіледі, сондықтан созылыңқы композиция үшін қабырға ұзындығы таңдалған кадр пішініне де байланысты. Генерация алдында тапсырманы қосымша қайта өңдеу қарастырылған.
Ailoot · Суреттер POST /v1/images/generations qwen-image-3.0-pro
qwen-image-3.0-proqwen-image-3.0-proqwen-imageqwen-image-latest
Бастау
Мәтін бойынша күрделі макеттерге, жазуларға және шынайы бөлшектерге мән беріп сурет жасайтын модель. Постерлерге, кадрлық жоспарларға, мәзірлерге және тығыз композициялы материалдарға жарайды.
- Қабылданатын кіріс деректері
- Мәтін
- Нәтижелер
- Суреттер
Ailoot жүйесінде қолжетімді · кіріс деректері мен әдістер
Ailoot · Суреттер POST /v1/images/generations
- Кіріс
text- Шығыс
image- Шығыс пішімі
- Сурет файлы
| Өріс | Түрі | Талап | Мәндер мен шектеулер | Әдепкі |
|---|---|---|---|---|
Өрісmodel | Түріstring | ТалапМіндетті | Мәндер мен шектеулер qwen-image-3.0-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 | ТалапҚолдау көрсетілмейді | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 10 485 760 MIME түрлері: image/png, image/jpeg Массивтегі суреттердің ең көп саны: 3 Шарттар: Әр images[] объектісіне бір нақты URL беріледі. Массив элементтерінің саны бұл жол түріндегі соңғы мәннен бөлек ұғым. Мына жағдайда қолданылады: Тек JSON images/edits үшін; JSON images/generations сурет үлгілерін талдамайды. | Әдепкі— |
Өрісimage | Түріfile | ТалапМіндетті емес | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 10 485 760 MIME түрлері: image/png, image/jpeg Мына жағдайда қолданылады: multipart/form-data арқылы генерация | Әдепкі— |
Өрісimage[] | Түріfile[] | ТалапМіндетті емес | Мәндер мен шектеулер Элементтердің ең көп саны: 3 Декодталған байттардың ең көп саны: 10 485 760 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 әдістерінің мөлшерлемелері
POST /v1/images/generations- Кіріс
- 0,003 $ кіріс суреті үшін
- Шығыс
- 0,04 $ 1K өлшеміндегі сурет үшін
- Шығыс
- 0,075 $ 2K өлшеміндегі сурет үшін
Ailoot сұрау алдында болжамды соманы резервтейді. Нәтижеден кейін өлшенген пайдалану көлемі бойынша қорытынды төлемді шегереді. Ағындық жауап үшін төлем соңғы пайдалану жазбасы негізінде шегеріледі. Резервтеу мен төлемді есептеу тәртібі →
Сұрау мысалдары
Ailoot · Суреттер
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
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])
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");
Нәтижелерді алу және сақтау
Ailoot · Суреттер
Қайтарылған әр суретті жүктеп алыңыз немесе оның Base64 мазмұнын сақтаңыз
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /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 qwen-image-3.0-pro, qwen-image, qwen-image-latest
Әдіс жолдарының балама атаулары
Жоғарыда көрсетілген әдіс жолдарын пайдаланыңыз.
Шақыруға арналған байланысты ID
Ailoot · Суреттер POST /v1/images/generations qwen-image
qwen-imageqwen-image-3.0-proqwen-imageqwen-image-latest
Бастау
Мәтін бойынша күрделі макеттерге, жазуларға және шынайы бөлшектерге мән беріп сурет жасайтын модель. Постерлерге, кадрлық жоспарларға, мәзірлерге және тығыз композициялы материалдарға жарайды.
- Қабылданатын кіріс деректері
- Мәтін
- Нәтижелер
- Суреттер
Ailoot жүйесінде қолжетімді · кіріс деректері мен әдістер
Ailoot · Суреттер POST /v1/images/generations
- Кіріс
text- Шығыс
image- Шығыс пішімі
- Сурет файлы
| Өріс | Түрі | Талап | Мәндер мен шектеулер | Әдепкі |
|---|---|---|---|---|
Өрісmodel | Түріstring | ТалапМіндетті | Мәндер мен шектеулер qwen-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 | ТалапҚолдау көрсетілмейді | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 10 485 760 MIME түрлері: image/png, image/jpeg Массивтегі суреттердің ең көп саны: 3 Шарттар: Әр images[] объектісіне бір нақты URL беріледі. Массив элементтерінің саны бұл жол түріндегі соңғы мәннен бөлек ұғым. Мына жағдайда қолданылады: Тек JSON images/edits үшін; JSON images/generations сурет үлгілерін талдамайды. | Әдепкі— |
Өрісimage | Түріfile | ТалапМіндетті емес | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 10 485 760 MIME түрлері: image/png, image/jpeg Мына жағдайда қолданылады: multipart/form-data арқылы генерация | Әдепкі— |
Өрісimage[] | Түріfile[] | ТалапМіндетті емес | Мәндер мен шектеулер Элементтердің ең көп саны: 3 Декодталған байттардың ең көп саны: 10 485 760 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 әдістерінің мөлшерлемелері
POST /v1/images/generations- Кіріс
- 0,003 $ кіріс суреті үшін
- Шығыс
- 0,04 $ 1K өлшеміндегі сурет үшін
- Шығыс
- 0,075 $ 2K өлшеміндегі сурет үшін
Ailoot сұрау алдында болжамды соманы резервтейді. Нәтижеден кейін өлшенген пайдалану көлемі бойынша қорытынды төлемді шегереді. Ағындық жауап үшін төлем соңғы пайдалану жазбасы негізінде шегеріледі. Резервтеу мен төлемді есептеу тәртібі →
Сұрау мысалдары
Ailoot · Суреттер
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
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])
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");
Нәтижелерді алу және сақтау
Ailoot · Суреттер
Қайтарылған әр суретті жүктеп алыңыз немесе оның Base64 мазмұнын сақтаңыз
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /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 qwen-image-3.0-pro, qwen-image, qwen-image-latest
Әдіс жолдарының балама атаулары
Жоғарыда көрсетілген әдіс жолдарын пайдаланыңыз.
Шақыруға арналған байланысты ID
Ailoot · Суреттер POST /v1/images/generations qwen-image-latest
qwen-image-latestqwen-image-3.0-proqwen-imageqwen-image-latest
Бастау
Мәтін бойынша күрделі макеттерге, жазуларға және шынайы бөлшектерге мән беріп сурет жасайтын модель. Постерлерге, кадрлық жоспарларға, мәзірлерге және тығыз композициялы материалдарға жарайды.
- Қабылданатын кіріс деректері
- Мәтін
- Нәтижелер
- Суреттер
Ailoot жүйесінде қолжетімді · кіріс деректері мен әдістер
Ailoot · Суреттер POST /v1/images/generations
- Кіріс
text- Шығыс
image- Шығыс пішімі
- Сурет файлы
| Өріс | Түрі | Талап | Мәндер мен шектеулер | Әдепкі |
|---|---|---|---|---|
Өрісmodel | Түріstring | ТалапМіндетті | Мәндер мен шектеулер qwen-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 | ТалапҚолдау көрсетілмейді | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 10 485 760 MIME түрлері: image/png, image/jpeg Массивтегі суреттердің ең көп саны: 3 Шарттар: Әр images[] объектісіне бір нақты URL беріледі. Массив элементтерінің саны бұл жол түріндегі соңғы мәннен бөлек ұғым. Мына жағдайда қолданылады: Тек JSON images/edits үшін; JSON images/generations сурет үлгілерін талдамайды. | Әдепкі— |
Өрісimage | Түріfile | ТалапМіндетті емес | Мәндер мен шектеулер Декодталған байттардың ең көп саны: 10 485 760 MIME түрлері: image/png, image/jpeg Мына жағдайда қолданылады: multipart/form-data арқылы генерация | Әдепкі— |
Өрісimage[] | Түріfile[] | ТалапМіндетті емес | Мәндер мен шектеулер Элементтердің ең көп саны: 3 Декодталған байттардың ең көп саны: 10 485 760 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 әдістерінің мөлшерлемелері
POST /v1/images/generations- Кіріс
- 0,003 $ кіріс суреті үшін
- Шығыс
- 0,04 $ 1K өлшеміндегі сурет үшін
- Шығыс
- 0,075 $ 2K өлшеміндегі сурет үшін
Ailoot сұрау алдында болжамды соманы резервтейді. Нәтижеден кейін өлшенген пайдалану көлемі бойынша қорытынды төлемді шегереді. Ағындық жауап үшін төлем соңғы пайдалану жазбасы негізінде шегеріледі. Резервтеу мен төлемді есептеу тәртібі →
Сұрау мысалдары
Ailoot · Суреттер
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
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])
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");
Нәтижелерді алу және сақтау
Ailoot · Суреттер
Қайтарылған әр суретті жүктеп алыңыз немесе оның Base64 мазмұнын сақтаңыз
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /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 qwen-image-3.0-pro, qwen-image, qwen-image-latest
Әдіс жолдарының балама атаулары
Жоғарыда көрсетілген әдіс жолдарын пайдаланыңыз.
Шақыруға арналған байланысты ID
FAQ · qwen-image-3.0-pro
- Қандай кіріс деректері мен нәтижелер қолжетімді?
POST /v1/images/generations·qwen-image-3.0-pro:text→imagePOST /v1/images/generations·qwen-image:text→imagePOST /v1/images/generations·qwen-image-latest:text→image- Сұрау қандай өрістерді пайдаланады?
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[]- Қандай шектеулер қолданылады?
POST /v1/images/generations·qwen-image-3.0-pro:n.minimum:1POST /v1/images/generations·qwen-image:n.minimum:1POST /v1/images/generations·qwen-image-latest:n.minimum:1