qwen-image-3.0-pro
Model na generovanie obrázkov z textu so zameraním na zložité návrhy, nápisy a realistické detaily. Hodí sa na plagáty, storyboardy, jedálne lístky a materiály s hustou kompozíciou.
- Ailoot · Obrázky
POST /v1/images/generationsqwen-image-3.0-pro - Ailoot · Obrázky
POST /v1/images/generationsqwen-image - Ailoot · Obrázky
POST /v1/images/generationsqwen-image-latest
O modeli
Tento opis pokrýva možnosti modelu. Dostupné vstupy, výstupy a voľby v Ailoot sú uvedené nižšie pre vybranú metódu.
Qwen-Image-3.0-Pro je model spoločnosti Alibaba na tvorbu a úpravu obrázkov, v ktorých sú dôležité kompozícia, nápisy a drobné detaily. Jeho zameranie zahŕňa husté návrhy, obrázok v obrázku, novinovú sadzbu, storyboardy, jedálne lístky a pracovné listy. Aktuálna karta Ailoot obsahuje režim generovania obrázka z textového zadania. Alibaba ponúka aj úpravy a prácu s referenčnými obrázkami; tieto operácie vyžadujú samostatnú podporu vstupných obrázkov a aktuálna metóda karty ich neobsahuje.
Text a detaily v obrázku
Výrobca zdôrazňuje dlhé zadania do 4,5 tisíca tokenov, nápisy v 12 jazykoch a prácu s viacerými písmami. Ide o opísanú možnosť spracovania zadania, nie o zverejnenú veľkosť formálneho kontextového okna. Medzi deklarované vlastnosti patrí zobrazenie drobných nápisov s veľkosťou 10 pixelov, textúry pokožky a vlasov aj malých zmien výrazu tváre. Takéto detaily sú užitočné pri príprave materiálov, ktoré sa prezerajú zblízka.
Qwen-Image-3.0-Pro je určený aj na vizuálne koncepty webových stránok, hier a obrazoviek živých vysielaní. V takomto výsledku možno spojiť ilustráciu, štruktúru obrazovky a upravené nápisy. Model vytvára obrázok návrhu; funkčná aplikácia vyžaduje samostatnú implementáciu.
Úpravy v špecifikácii Alibaba
Pre režim úprav Alibaba uvádza jeden až tri obrázky. V tomto spôsobe výrobca umožňuje spojiť objekt s číslom referencie a opísať kombináciu materiálov. K dispozícii je pridávanie, odstraňovanie a presúvanie objektov, zmena diania, štýlu, detailov a textu. Negatívny opis pomáha vymedziť neželané prvky.
Vstupné materiály režimu úprav sa u výrobcu prijímajú v JPG, JPEG, PNG, BMP, TIFF, WEBP a GIF. Pri animovanom GIF sa používa prvá snímka. Veľkosť každého súboru je najviac 10 MB; výrobca odporúča obrázky so stranami od 384 do 3072 pixelov. Ide o odporúčania pre vstup, nie o rozmery hotového výsledku.
Špecifikácia výrobcu umožňuje jeden až šesť výstupných obrázkov v PNG na požiadavku. Rozsah plochy výsledku je od 262 144 do 4 194 304 pixelov, čo zodpovedá štvorcovým obrázkom od 512 × 512 do 2048 × 2048. Povolené sú pomery strán od 1:8 do 8:1, preto pri pretiahnutej kompozícii dĺžku strany určuje aj zvolený tvar záberu. K dispozícii je dodatočné prepracovanie zadania pred generovaním.
Ailoot · Obrázky POST /v1/images/generations qwen-image-3.0-pro
qwen-image-3.0-proqwen-image-3.0-proqwen-imageqwen-image-latest
Úvod
Model na generovanie obrázkov z textu so zameraním na zložité návrhy, nápisy a realistické detaily. Hodí sa na plagáty, storyboardy, jedálne lístky a materiály s hustou kompozíciou.
- Povolené vstupy
- Text
- Výsledky
- Obrázky
Dostupné v Ailoot · vstupy a metódy
Ailoot · Obrázky POST /v1/images/generations
- Vstup
text- Výstup
image- Výstupný formát
- Súbor obrázka
| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
|---|---|---|---|---|
Polemodel | Typstring | PožiadavkaPovinné | Hodnoty a limity qwen-image-3.0-pro | Predvolené— |
Poleprompt | Typstring | PožiadavkaPovinné | Hodnoty a limity Minimálna dĺžka: 1 | Predvolené— |
Polen | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 | Predvolené1 |
Poleresponse_format | Typstring | PožiadavkaVoliteľné | Hodnoty a limity url, b64_json | Predvolené— |
Polestream | Typboolean | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
Polesize | Typstring | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Polepartial_images | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Poleimages[].image_url | Typstring | PožiadavkaNepodporované | Hodnoty a limity Maximálny počet dekódovaných bajtov: 10 485 760 Typy MIME: image/png, image/jpeg Maximálny počet obrázkov v poli: 3 Podmienky: Jedna skutočná URL na každý objekt images[]. Počet prvkov poľa je odlišný od tohto koncového reťazca. Platí, keď: Iba JSON images/edits; JSON images/generations neparsuje referencie images. | Predvolené— |
Poleimage | Typfile | PožiadavkaVoliteľné | Hodnoty a limity Maximálny počet dekódovaných bajtov: 10 485 760 Typy MIME: image/png, image/jpeg Platí, keď: generovanie cez multipart/form-data | Predvolené— |
Poleimage[] | Typfile[] | PožiadavkaVoliteľné | Hodnoty a limity Maximálny počet položiek: 3 Maximálny počet dekódovaných bajtov: 10 485 760 Typy MIME: image/png, image/jpeg Platí, keď: generovanie cez multipart/form-data | Predvolené— |
Kombinácie vstupných podkladov
Z textu na obrázok · Povinné: prompt
reference_images_generation · Povinné: prompt
Parametre a životný cyklus metódy
| Parameter | Špecifikácia |
|---|---|
Parametermaterial_types | Špecifikáciatext |
Parameterrequired | Špecifikáciamodel, prompt |
Parameteroptional_controls | Špecifikácianull |
Parametercontent_type | Špecifikáciaapplication/json |
Životný cyklus: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · skutočne vrátené task_id alebo záznam v knižnici médií
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.
Cenník
Sadzby metód Ailoot
POST /v1/images/generations- Vstup
- 0,003 USD za vstupný obrázok
- Výstup
- 0,04 USD za obrázok 1K
- Výstup
- 0,075 USD za obrázok 2K
Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →
Príklady požiadaviek
Ailoot · Obrázky
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");
Prijať a uložiť výsledky
Ailoot · Obrázky
Stiahnite každý vrátený obrázok alebo uložte jeho obsah Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Uchovať všetky dokončené výsledky
Uložte každý dokončený obrázok; stiahnite obsah z každej vrátenej URL alebo dekódujte jeho obsah Base64.
Uložte každú dátovú položku. Dekódujte každé b64_json alebo stiahnite obsah z každej vrátenej podpísanej URL. Príponu názvu súboru vyberte podľa skutočného typu MIME/bajtov.
Ak treba overiť pôvodnú odpoveď
Ak je potrebné skontrolovať výsledok generovania alebo úpravy obrázka, uchovajte pôvodné operation_id/X-Client-Request-ID a vrátené informácie o výsledku. Existujúce vlastné výsledky obnovte cez knižnicu médií pomocou skutočných hodnôt task_id alebo asset_id. Požiadavku na generovanie/úpravu znova neodosielajte ani nevytvárajte URL na priebežné zisťovanie stavu z operation_id.
Polia odpovede
| Pole | Typ |
|---|---|
Polecreated | Typinteger |
Poledata[].url | Typstring |
Poledata[].b64_json | Typbase64 string |
Poleusage | Typobject |
Chyby a ďalšie kroky
| Odpoveď | Podmienka | Ďalší krok |
|---|---|---|
Odpoveď400 · invalid_request_error | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |
Odpoveďserver_error | PodmienkaVrátená odpoveď uvádza, že operáciu alebo výsledok je potrebné skontrolovať | Ďalší krokUchovajte pôvodné vrátené ID operácie/úlohy, hlavičky požiadavky a odpoveď; naďalej čítajte údaje o tejto pôvodnej operácii podporovaným spôsobom. Požiadavku na vytvorenie znova neodosielajte. |
Aliasy
Aliasy modelov
Ailoot qwen-image-3.0-pro, qwen-image, qwen-image-latest
Aliasy ciest metód
Použite cesty metód uvedené vyššie.
Súvisiace ID na volanie
Ailoot · Obrázky POST /v1/images/generations qwen-image
qwen-imageqwen-image-3.0-proqwen-imageqwen-image-latest
Úvod
Model na generovanie obrázkov z textu so zameraním na zložité návrhy, nápisy a realistické detaily. Hodí sa na plagáty, storyboardy, jedálne lístky a materiály s hustou kompozíciou.
- Povolené vstupy
- Text
- Výsledky
- Obrázky
Dostupné v Ailoot · vstupy a metódy
Ailoot · Obrázky POST /v1/images/generations
- Vstup
text- Výstup
image- Výstupný formát
- Súbor obrázka
| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
|---|---|---|---|---|
Polemodel | Typstring | PožiadavkaPovinné | Hodnoty a limity qwen-image | Predvolené— |
Poleprompt | Typstring | PožiadavkaPovinné | Hodnoty a limity Minimálna dĺžka: 1 | Predvolené— |
Polen | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 | Predvolené1 |
Poleresponse_format | Typstring | PožiadavkaVoliteľné | Hodnoty a limity url, b64_json | Predvolené— |
Polestream | Typboolean | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
Polesize | Typstring | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Polepartial_images | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Poleimages[].image_url | Typstring | PožiadavkaNepodporované | Hodnoty a limity Maximálny počet dekódovaných bajtov: 10 485 760 Typy MIME: image/png, image/jpeg Maximálny počet obrázkov v poli: 3 Podmienky: Jedna skutočná URL na každý objekt images[]. Počet prvkov poľa je odlišný od tohto koncového reťazca. Platí, keď: Iba JSON images/edits; JSON images/generations neparsuje referencie images. | Predvolené— |
Poleimage | Typfile | PožiadavkaVoliteľné | Hodnoty a limity Maximálny počet dekódovaných bajtov: 10 485 760 Typy MIME: image/png, image/jpeg Platí, keď: generovanie cez multipart/form-data | Predvolené— |
Poleimage[] | Typfile[] | PožiadavkaVoliteľné | Hodnoty a limity Maximálny počet položiek: 3 Maximálny počet dekódovaných bajtov: 10 485 760 Typy MIME: image/png, image/jpeg Platí, keď: generovanie cez multipart/form-data | Predvolené— |
Kombinácie vstupných podkladov
Z textu na obrázok · Povinné: prompt
reference_images_generation · Povinné: prompt
Parametre a životný cyklus metódy
| Parameter | Špecifikácia |
|---|---|
Parametermaterial_types | Špecifikáciatext |
Parameterrequired | Špecifikáciamodel, prompt |
Parameteroptional_controls | Špecifikácianull |
Parametercontent_type | Špecifikáciaapplication/json |
Životný cyklus: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · skutočne vrátené task_id alebo záznam v knižnici médií
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.
Cenník
Sadzby metód Ailoot
POST /v1/images/generations- Vstup
- 0,003 USD za vstupný obrázok
- Výstup
- 0,04 USD za obrázok 1K
- Výstup
- 0,075 USD za obrázok 2K
Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →
Príklady požiadaviek
Ailoot · Obrázky
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");
Prijať a uložiť výsledky
Ailoot · Obrázky
Stiahnite každý vrátený obrázok alebo uložte jeho obsah Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Uchovať všetky dokončené výsledky
Uložte každý dokončený obrázok; stiahnite obsah z každej vrátenej URL alebo dekódujte jeho obsah Base64.
Uložte každú dátovú položku. Dekódujte každé b64_json alebo stiahnite obsah z každej vrátenej podpísanej URL. Príponu názvu súboru vyberte podľa skutočného typu MIME/bajtov.
Ak treba overiť pôvodnú odpoveď
Ak je potrebné skontrolovať výsledok generovania alebo úpravy obrázka, uchovajte pôvodné operation_id/X-Client-Request-ID a vrátené informácie o výsledku. Existujúce vlastné výsledky obnovte cez knižnicu médií pomocou skutočných hodnôt task_id alebo asset_id. Požiadavku na generovanie/úpravu znova neodosielajte ani nevytvárajte URL na priebežné zisťovanie stavu z operation_id.
Polia odpovede
| Pole | Typ |
|---|---|
Polecreated | Typinteger |
Poledata[].url | Typstring |
Poledata[].b64_json | Typbase64 string |
Poleusage | Typobject |
Chyby a ďalšie kroky
| Odpoveď | Podmienka | Ďalší krok |
|---|---|---|
Odpoveď400 · invalid_request_error | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |
Odpoveďserver_error | PodmienkaVrátená odpoveď uvádza, že operáciu alebo výsledok je potrebné skontrolovať | Ďalší krokUchovajte pôvodné vrátené ID operácie/úlohy, hlavičky požiadavky a odpoveď; naďalej čítajte údaje o tejto pôvodnej operácii podporovaným spôsobom. Požiadavku na vytvorenie znova neodosielajte. |
Aliasy
Aliasy modelov
Ailoot qwen-image-3.0-pro, qwen-image, qwen-image-latest
Aliasy ciest metód
Použite cesty metód uvedené vyššie.
Súvisiace ID na volanie
Ailoot · Obrázky POST /v1/images/generations qwen-image-latest
qwen-image-latestqwen-image-3.0-proqwen-imageqwen-image-latest
Úvod
Model na generovanie obrázkov z textu so zameraním na zložité návrhy, nápisy a realistické detaily. Hodí sa na plagáty, storyboardy, jedálne lístky a materiály s hustou kompozíciou.
- Povolené vstupy
- Text
- Výsledky
- Obrázky
Dostupné v Ailoot · vstupy a metódy
Ailoot · Obrázky POST /v1/images/generations
- Vstup
text- Výstup
image- Výstupný formát
- Súbor obrázka
| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
|---|---|---|---|---|
Polemodel | Typstring | PožiadavkaPovinné | Hodnoty a limity qwen-image-latest | Predvolené— |
Poleprompt | Typstring | PožiadavkaPovinné | Hodnoty a limity Minimálna dĺžka: 1 | Predvolené— |
Polen | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 | Predvolené1 |
Poleresponse_format | Typstring | PožiadavkaVoliteľné | Hodnoty a limity url, b64_json | Predvolené— |
Polestream | Typboolean | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
Polesize | Typstring | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Polepartial_images | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Poleimages[].image_url | Typstring | PožiadavkaNepodporované | Hodnoty a limity Maximálny počet dekódovaných bajtov: 10 485 760 Typy MIME: image/png, image/jpeg Maximálny počet obrázkov v poli: 3 Podmienky: Jedna skutočná URL na každý objekt images[]. Počet prvkov poľa je odlišný od tohto koncového reťazca. Platí, keď: Iba JSON images/edits; JSON images/generations neparsuje referencie images. | Predvolené— |
Poleimage | Typfile | PožiadavkaVoliteľné | Hodnoty a limity Maximálny počet dekódovaných bajtov: 10 485 760 Typy MIME: image/png, image/jpeg Platí, keď: generovanie cez multipart/form-data | Predvolené— |
Poleimage[] | Typfile[] | PožiadavkaVoliteľné | Hodnoty a limity Maximálny počet položiek: 3 Maximálny počet dekódovaných bajtov: 10 485 760 Typy MIME: image/png, image/jpeg Platí, keď: generovanie cez multipart/form-data | Predvolené— |
Kombinácie vstupných podkladov
Z textu na obrázok · Povinné: prompt
reference_images_generation · Povinné: prompt
Parametre a životný cyklus metódy
| Parameter | Špecifikácia |
|---|---|
Parametermaterial_types | Špecifikáciatext |
Parameterrequired | Špecifikáciamodel, prompt |
Parameteroptional_controls | Špecifikácianull |
Parametercontent_type | Špecifikáciaapplication/json |
Životný cyklus: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · skutočne vrátené task_id alebo záznam v knižnici médií
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.
Cenník
Sadzby metód Ailoot
POST /v1/images/generations- Vstup
- 0,003 USD za vstupný obrázok
- Výstup
- 0,04 USD za obrázok 1K
- Výstup
- 0,075 USD za obrázok 2K
Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →
Príklady požiadaviek
Ailoot · Obrázky
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");
Prijať a uložiť výsledky
Ailoot · Obrázky
Stiahnite každý vrátený obrázok alebo uložte jeho obsah Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Uchovať všetky dokončené výsledky
Uložte každý dokončený obrázok; stiahnite obsah z každej vrátenej URL alebo dekódujte jeho obsah Base64.
Uložte každú dátovú položku. Dekódujte každé b64_json alebo stiahnite obsah z každej vrátenej podpísanej URL. Príponu názvu súboru vyberte podľa skutočného typu MIME/bajtov.
Ak treba overiť pôvodnú odpoveď
Ak je potrebné skontrolovať výsledok generovania alebo úpravy obrázka, uchovajte pôvodné operation_id/X-Client-Request-ID a vrátené informácie o výsledku. Existujúce vlastné výsledky obnovte cez knižnicu médií pomocou skutočných hodnôt task_id alebo asset_id. Požiadavku na generovanie/úpravu znova neodosielajte ani nevytvárajte URL na priebežné zisťovanie stavu z operation_id.
Polia odpovede
| Pole | Typ |
|---|---|
Polecreated | Typinteger |
Poledata[].url | Typstring |
Poledata[].b64_json | Typbase64 string |
Poleusage | Typobject |
Chyby a ďalšie kroky
| Odpoveď | Podmienka | Ďalší krok |
|---|---|---|
Odpoveď400 · invalid_request_error | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |
Odpoveďserver_error | PodmienkaVrátená odpoveď uvádza, že operáciu alebo výsledok je potrebné skontrolovať | Ďalší krokUchovajte pôvodné vrátené ID operácie/úlohy, hlavičky požiadavky a odpoveď; naďalej čítajte údaje o tejto pôvodnej operácii podporovaným spôsobom. Požiadavku na vytvorenie znova neodosielajte. |
Aliasy
Aliasy modelov
Ailoot qwen-image-3.0-pro, qwen-image, qwen-image-latest
Aliasy ciest metód
Použite cesty metód uvedené vyššie.
Súvisiace ID na volanie
FAQ · qwen-image-3.0-pro
- Aké vstupy a výsledky sú dostupné?
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- Aké polia používa požiadavka?
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[]- Aké limity platia?
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