models

qwen-image-3.0-pro

Markdown · JSON

qwen-image-3.0-pro

Szövegből képet generáló modell, különös tekintettel az összetett elrendezésekre, feliratokra és valósághű részletekre. Poszterekhez, storyboardokhoz, étlapokhoz és sűrű kompozíciójú anyagokhoz alkalmas.

A modellről

Ez a leírás a modell képességeit ismerteti. Az Ailootban elérhető bemenetek, kimenetek és lehetőségek alább, a kiválasztott metódusnál láthatók.

A Qwen-Image-3.0-Pro az Alibaba modellje olyan képek készítéséhez és szerkesztéséhez, amelyeknél fontos a kompozíció, a feliratok és az apró részletek. Felhasználási területei közé tartoznak a sűrű elrendezések, a kép a képben megoldások, az újságoldalak, a storyboardok, az étlapok és a feladatlapok. A jelenlegi Ailoot-kártyán szöveges utasításból történő képgenerálás szerepel. Az Alibaba szerkesztést és referenciaképes munkát is kínál; ezek a műveletek külön képbemeneti támogatást igényelnek, és a kártya jelenlegi metódusában nem érhetők el.

Szöveg és részletek a képen

A gyártó a legfeljebb 4,5 ezer tokenes hosszú utasításokat, a 12 nyelvű feliratokat és a több betűtípussal való munkát emeli ki. Ez az utasítás feldolgozásának ismertetett képessége, nem a formális kontextusablak közzétett mérete. A megjelölt tulajdonságok között szerepel a 10 pixeles apró feliratok, a bőr és a haj textúrájának, valamint az arckifejezés kisebb változásainak megjelenítése. Ezek a részletek közelről szemlélt anyagok készítésekor hasznosak.

A Qwen-Image-3.0-Pro weboldalak, játékok és élő közvetítési képernyők vizuális koncepcióihoz is használható. Az eredmény egyesítheti az illusztrációt, a képernyő szerkezetét és a megformázott feliratokat. A modell az elrendezés képét készíti el; a működő alkalmazáshoz külön megvalósítás szükséges.

Szerkesztés az Alibaba specifikációjában

Az Alibaba a szerkesztési módhoz egy és három közötti számú képet ad meg. Ebben az eljárásban a gyártó lehetővé teszi egy objektum összekapcsolását a referencia sorszámával és az anyagok kombinációjának leírását. Objektumok hozzáadása, eltávolítása és áthelyezése, valamint a cselekmény, a stílus, a részletek és a szöveg módosítása is rendelkezésre áll. A negatív leírás a nem kívánt elemek megjelölését segíti.

A gyártó szerkesztési módja JPG, JPEG, PNG, BMP, TIFF, WEBP és GIF formátumú bemeneti anyagokat fogad. Animált GIF esetén az első képkocka használatos. A fájlméret egyenként legfeljebb 10 MB; a gyártó 384 és 3072 pixel közötti oldalhosszúságú képeket ajánl. Ezek bemeneti ajánlások, nem az elkészült eredmény méretei.

A gyártó specifikációja kérésenként egy és hat közötti számú PNG-kimeneti képet határoz meg. Az eredmény területe 262 144 és 4 194 304 pixel közötti, ami 512 × 512 és 2048 × 2048 közötti négyzetes képeknek felel meg. Az 1:8 és 8:1 közötti képarányok megengedettek, ezért nyújtott kompozíciónál az oldalhosszt a kiválasztott képarány is meghatározza. Generálás előtt az utasítás további átdolgozása is rendelkezésre áll.

Ailoot · Képek POST /v1/images/generations qwen-image-3.0-pro

qwen-image-3.0-pro

Alibaba /qwen-image-3.0-pro
Modell ID-ja
  • qwen-image-3.0-pro
  • qwen-image
  • qwen-image-latest

Kezdő lépések

Szövegből képet generáló modell, különös tekintettel az összetett elrendezésekre, feliratokra és valósághű részletekre. Poszterekhez, storyboardokhoz, étlapokhoz és sűrű kompozíciójú anyagokhoz alkalmas.

Elfogadott bemenetek
Szöveg
Eredmények
Képek

Elérhető az Ailootban · bemenetek és metódusok

Ailoot · Képek POST /v1/images/generations
Bemenet
text
Kimenet
image
Kimeneti formátum
Képfájl
MezőTípusKövetelményÉrtékek és korlátokAlapértelmezett
MezőmodelTípusstringKövetelményKötelezőÉrtékek és korlátok
qwen-image-3.0-pro
Alapértelmezett—
MezőpromptTípusstringKövetelményKötelezőÉrtékek és korlátok
Minimális hossz: 1
Alapértelmezett—
MezőnTípusintegerKövetelményOpcionálisÉrtékek és korlátok
Minimum: 1
Alapértelmezett1
Mezőresponse_formatTípusstringKövetelményOpcionálisÉrtékek és korlátok
url, b64_json
Alapértelmezett—
MezőstreamTípusbooleanKövetelményOpcionálisÉrtékek és korlátokAlapértelmezettfalse
MezősizeTípusstringKövetelményOpcionálisÉrtékek és korlátok
Modelltől függ
Alapértelmezett—
Mezőpartial_imagesTípusintegerKövetelményOpcionálisÉrtékek és korlátok
Modelltől függ
Alapértelmezett—
Mezőimages[].image_urlTípusstringKövetelményNem támogatottÉrtékek és korlátok
Maximális dekódolt bájtszám: 10 485 760
MIME-típusok: image/png, image/jpeg
Tömbönkénti maximális képszám: 3
Feltételek: Minden images[] objektumhoz egy tényleges URL-cím tartozik. A tömb elemszáma ettől a karakterlánc-levélértéktől külön mennyiség.
Akkor alkalmazandó, ha: Csak a JSON images/edits esetén; a JSON images/generations nem dolgozza fel az images referenciákat.
Alapértelmezett—
MezőimageTípusfileKövetelményOpcionálisÉrtékek és korlátok
Maximális dekódolt bájtszám: 10 485 760
MIME-típusok: image/png, image/jpeg
Akkor alkalmazandó, ha: multipart/form-data generálás
Alapértelmezett—
Mezőimage[]Típusfile[]KövetelményOpcionálisÉrtékek és korlátok
Maximális elemszám: 3
Maximális dekódolt bájtszám: 10 485 760
MIME-típusok: image/png, image/jpeg
Akkor alkalmazandó, ha: multipart/form-data generálás
Alapértelmezett—
Bemeneti anyagok kombinációi

Szövegből kép · Kötelező: prompt

reference_images_generation · Kötelező: prompt

Metódus paraméterei és életciklusa
ParaméterSzerződés
Paramétermaterial_typesSzerződéstext
ParaméterrequiredSzerződésmodel, prompt
Paraméteroptional_controlsSzerződésnull
Paramétercontent_typeSzerződésapplication/json

Életciklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · A ténylegesen visszaadott task_id vagy a médiatár bejegyzése

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

A metódusok szerkezete és azonosítói pontosak; a beszállítói képesség különbözik a kérelmek befogadásától.

Díjcsomagok

Ailoot-metódusok díjai

Ailoot KépekPOST /v1/images/generations
Bemenet
0,003 USD bemeneti képenként
Kimenet
0,04 USD 1K felbontású képenként
Kimenet
0,075 USD 2K felbontású képenként

Az Ailoot a kérés előtt becsült összeget foglal le. Az eredmény után a mért használat alapján elszámolja a végső díjat. Folyamatos átvitel esetén a végső használati rekordot használja. A foglalás és az elszámolás működése →

Példakérések

Ailoot · Képek

curlPython SDKNode.js SDK
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");

Eredmények fogadása és mentése

Ailoot · Képek

Töltsön le minden visszaadott képet, vagy mentse a Base64-tartalmat

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Őrizzen meg minden elkészült eredményt

Mentsen minden elkészült képet; töltse le az összes visszaadott URL tartalmát, vagy dekódolja a Base64-tartalmat.

Mentsen minden adatelemet. Dekódoljon minden b64_json értéket, vagy töltse le minden visszaadott, aláírt URL tartalmát. A fájlnév kiterjesztését a tényleges MIME-típus/bájtok alapján válassza ki.

Ha az eredeti választ ellenőrizni kell

Ha egy képgenerálási vagy képszerkesztési eredmény ellenőrzést igényel, őrizze meg az eredeti operation_id/X-Client-Request-ID értéket és a visszaadott eredményadatokat. A saját, már meglévő eredményeket a médiatárból állítsa helyre a tényleges task_id vagy asset_id értékekkel. Ne küldje be újra a generálási/szerkesztési kérést, és ne állítson össze állapotlekérdezési URL-t az operation_id értékéből.

Válaszmezők
MezőTípus
MezőcreatedTípusinteger
Meződata[].urlTípusstring
Meződata[].b64_jsonTípusbase64 string
MezőusageTípusobject
Hibák és következő lépések
VálaszFeltételKövetkező lépés
Válasz400 · invalid_request_errorFeltételÉrvénytelen kötelező mezők, az anyag érvénytelen reprezentációja vagy érvénytelen paraméterértékKövetkező lépésJavítsa a jelzett mezőket egy új létrehozási kérés előtt.
Válaszserver_errorFeltételA visszaadott válasz szerint a művelet vagy az eredmény ellenőrzést igényelKövetkező lépésŐrizze meg az eredetileg visszaadott művelet- vagy feladatazonosítót, a kérés fejléceit és a választ; folytassa az eredeti művelet támogatott lekérdezéseit. Ne küldje be újra a létrehozási kérést.

Álnevek

Modell álnevei

Ailoot qwen-image-3.0-pro, qwen-image, qwen-image-latest

Metódusútvonalak álnevei

Használja a fent látható metódusútvonalakat.

Kapcsolódó modellazonosítók

qwen-image-3.0-pro, qwen-image, qwen-image-latest

Ailoot · Képek POST /v1/images/generations qwen-image

qwen-image

Alibaba /qwen-image
Modell ID-ja
  • qwen-image-3.0-pro
  • qwen-image
  • qwen-image-latest

Kezdő lépések

Szövegből képet generáló modell, különös tekintettel az összetett elrendezésekre, feliratokra és valósághű részletekre. Poszterekhez, storyboardokhoz, étlapokhoz és sűrű kompozíciójú anyagokhoz alkalmas.

Elfogadott bemenetek
Szöveg
Eredmények
Képek

Elérhető az Ailootban · bemenetek és metódusok

Ailoot · Képek POST /v1/images/generations
Bemenet
text
Kimenet
image
Kimeneti formátum
Képfájl
MezőTípusKövetelményÉrtékek és korlátokAlapértelmezett
MezőmodelTípusstringKövetelményKötelezőÉrtékek és korlátok
qwen-image
Alapértelmezett—
MezőpromptTípusstringKövetelményKötelezőÉrtékek és korlátok
Minimális hossz: 1
Alapértelmezett—
MezőnTípusintegerKövetelményOpcionálisÉrtékek és korlátok
Minimum: 1
Alapértelmezett1
Mezőresponse_formatTípusstringKövetelményOpcionálisÉrtékek és korlátok
url, b64_json
Alapértelmezett—
MezőstreamTípusbooleanKövetelményOpcionálisÉrtékek és korlátokAlapértelmezettfalse
MezősizeTípusstringKövetelményOpcionálisÉrtékek és korlátok
Modelltől függ
Alapértelmezett—
Mezőpartial_imagesTípusintegerKövetelményOpcionálisÉrtékek és korlátok
Modelltől függ
Alapértelmezett—
Mezőimages[].image_urlTípusstringKövetelményNem támogatottÉrtékek és korlátok
Maximális dekódolt bájtszám: 10 485 760
MIME-típusok: image/png, image/jpeg
Tömbönkénti maximális képszám: 3
Feltételek: Minden images[] objektumhoz egy tényleges URL-cím tartozik. A tömb elemszáma ettől a karakterlánc-levélértéktől külön mennyiség.
Akkor alkalmazandó, ha: Csak a JSON images/edits esetén; a JSON images/generations nem dolgozza fel az images referenciákat.
Alapértelmezett—
MezőimageTípusfileKövetelményOpcionálisÉrtékek és korlátok
Maximális dekódolt bájtszám: 10 485 760
MIME-típusok: image/png, image/jpeg
Akkor alkalmazandó, ha: multipart/form-data generálás
Alapértelmezett—
Mezőimage[]Típusfile[]KövetelményOpcionálisÉrtékek és korlátok
Maximális elemszám: 3
Maximális dekódolt bájtszám: 10 485 760
MIME-típusok: image/png, image/jpeg
Akkor alkalmazandó, ha: multipart/form-data generálás
Alapértelmezett—
Bemeneti anyagok kombinációi

Szövegből kép · Kötelező: prompt

reference_images_generation · Kötelező: prompt

Metódus paraméterei és életciklusa
ParaméterSzerződés
Paramétermaterial_typesSzerződéstext
ParaméterrequiredSzerződésmodel, prompt
Paraméteroptional_controlsSzerződésnull
Paramétercontent_typeSzerződésapplication/json

Életciklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · A ténylegesen visszaadott task_id vagy a médiatár bejegyzése

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

A metódusok szerkezete és azonosítói pontosak; a beszállítói képesség különbözik a kérelmek befogadásától.

Díjcsomagok

Ailoot-metódusok díjai

Ailoot KépekPOST /v1/images/generations
Bemenet
0,003 USD bemeneti képenként
Kimenet
0,04 USD 1K felbontású képenként
Kimenet
0,075 USD 2K felbontású képenként

Az Ailoot a kérés előtt becsült összeget foglal le. Az eredmény után a mért használat alapján elszámolja a végső díjat. Folyamatos átvitel esetén a végső használati rekordot használja. A foglalás és az elszámolás működése →

Példakérések

Ailoot · Képek

curlPython SDKNode.js SDK
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");

Eredmények fogadása és mentése

Ailoot · Képek

Töltsön le minden visszaadott képet, vagy mentse a Base64-tartalmat

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Őrizzen meg minden elkészült eredményt

Mentsen minden elkészült képet; töltse le az összes visszaadott URL tartalmát, vagy dekódolja a Base64-tartalmat.

Mentsen minden adatelemet. Dekódoljon minden b64_json értéket, vagy töltse le minden visszaadott, aláírt URL tartalmát. A fájlnév kiterjesztését a tényleges MIME-típus/bájtok alapján válassza ki.

Ha az eredeti választ ellenőrizni kell

Ha egy képgenerálási vagy képszerkesztési eredmény ellenőrzést igényel, őrizze meg az eredeti operation_id/X-Client-Request-ID értéket és a visszaadott eredményadatokat. A saját, már meglévő eredményeket a médiatárból állítsa helyre a tényleges task_id vagy asset_id értékekkel. Ne küldje be újra a generálási/szerkesztési kérést, és ne állítson össze állapotlekérdezési URL-t az operation_id értékéből.

Válaszmezők
MezőTípus
MezőcreatedTípusinteger
Meződata[].urlTípusstring
Meződata[].b64_jsonTípusbase64 string
MezőusageTípusobject
Hibák és következő lépések
VálaszFeltételKövetkező lépés
Válasz400 · invalid_request_errorFeltételÉrvénytelen kötelező mezők, az anyag érvénytelen reprezentációja vagy érvénytelen paraméterértékKövetkező lépésJavítsa a jelzett mezőket egy új létrehozási kérés előtt.
Válaszserver_errorFeltételA visszaadott válasz szerint a művelet vagy az eredmény ellenőrzést igényelKövetkező lépésŐrizze meg az eredetileg visszaadott művelet- vagy feladatazonosítót, a kérés fejléceit és a választ; folytassa az eredeti művelet támogatott lekérdezéseit. Ne küldje be újra a létrehozási kérést.

Álnevek

Modell álnevei

Ailoot qwen-image-3.0-pro, qwen-image, qwen-image-latest

Metódusútvonalak álnevei

Használja a fent látható metódusútvonalakat.

Kapcsolódó modellazonosítók

qwen-image-3.0-pro, qwen-image, qwen-image-latest

Ailoot · Képek POST /v1/images/generations qwen-image-latest

qwen-image-latest

Alibaba /qwen-image-latest
Modell ID-ja
  • qwen-image-3.0-pro
  • qwen-image
  • qwen-image-latest

Kezdő lépések

Szövegből képet generáló modell, különös tekintettel az összetett elrendezésekre, feliratokra és valósághű részletekre. Poszterekhez, storyboardokhoz, étlapokhoz és sűrű kompozíciójú anyagokhoz alkalmas.

Elfogadott bemenetek
Szöveg
Eredmények
Képek

Elérhető az Ailootban · bemenetek és metódusok

Ailoot · Képek POST /v1/images/generations
Bemenet
text
Kimenet
image
Kimeneti formátum
Képfájl
MezőTípusKövetelményÉrtékek és korlátokAlapértelmezett
MezőmodelTípusstringKövetelményKötelezőÉrtékek és korlátok
qwen-image-latest
Alapértelmezett—
MezőpromptTípusstringKövetelményKötelezőÉrtékek és korlátok
Minimális hossz: 1
Alapértelmezett—
MezőnTípusintegerKövetelményOpcionálisÉrtékek és korlátok
Minimum: 1
Alapértelmezett1
Mezőresponse_formatTípusstringKövetelményOpcionálisÉrtékek és korlátok
url, b64_json
Alapértelmezett—
MezőstreamTípusbooleanKövetelményOpcionálisÉrtékek és korlátokAlapértelmezettfalse
MezősizeTípusstringKövetelményOpcionálisÉrtékek és korlátok
Modelltől függ
Alapértelmezett—
Mezőpartial_imagesTípusintegerKövetelményOpcionálisÉrtékek és korlátok
Modelltől függ
Alapértelmezett—
Mezőimages[].image_urlTípusstringKövetelményNem támogatottÉrtékek és korlátok
Maximális dekódolt bájtszám: 10 485 760
MIME-típusok: image/png, image/jpeg
Tömbönkénti maximális képszám: 3
Feltételek: Minden images[] objektumhoz egy tényleges URL-cím tartozik. A tömb elemszáma ettől a karakterlánc-levélértéktől külön mennyiség.
Akkor alkalmazandó, ha: Csak a JSON images/edits esetén; a JSON images/generations nem dolgozza fel az images referenciákat.
Alapértelmezett—
MezőimageTípusfileKövetelményOpcionálisÉrtékek és korlátok
Maximális dekódolt bájtszám: 10 485 760
MIME-típusok: image/png, image/jpeg
Akkor alkalmazandó, ha: multipart/form-data generálás
Alapértelmezett—
Mezőimage[]Típusfile[]KövetelményOpcionálisÉrtékek és korlátok
Maximális elemszám: 3
Maximális dekódolt bájtszám: 10 485 760
MIME-típusok: image/png, image/jpeg
Akkor alkalmazandó, ha: multipart/form-data generálás
Alapértelmezett—
Bemeneti anyagok kombinációi

Szövegből kép · Kötelező: prompt

reference_images_generation · Kötelező: prompt

Metódus paraméterei és életciklusa
ParaméterSzerződés
Paramétermaterial_typesSzerződéstext
ParaméterrequiredSzerződésmodel, prompt
Paraméteroptional_controlsSzerződésnull
Paramétercontent_typeSzerződésapplication/json

Életciklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · A ténylegesen visszaadott task_id vagy a médiatár bejegyzése

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

A metódusok szerkezete és azonosítói pontosak; a beszállítói képesség különbözik a kérelmek befogadásától.

Díjcsomagok

Ailoot-metódusok díjai

Ailoot KépekPOST /v1/images/generations
Bemenet
0,003 USD bemeneti képenként
Kimenet
0,04 USD 1K felbontású képenként
Kimenet
0,075 USD 2K felbontású képenként

Az Ailoot a kérés előtt becsült összeget foglal le. Az eredmény után a mért használat alapján elszámolja a végső díjat. Folyamatos átvitel esetén a végső használati rekordot használja. A foglalás és az elszámolás működése →

Példakérések

Ailoot · Képek

curlPython SDKNode.js SDK
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");

Eredmények fogadása és mentése

Ailoot · Képek

Töltsön le minden visszaadott képet, vagy mentse a Base64-tartalmat

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Őrizzen meg minden elkészült eredményt

Mentsen minden elkészült képet; töltse le az összes visszaadott URL tartalmát, vagy dekódolja a Base64-tartalmat.

Mentsen minden adatelemet. Dekódoljon minden b64_json értéket, vagy töltse le minden visszaadott, aláírt URL tartalmát. A fájlnév kiterjesztését a tényleges MIME-típus/bájtok alapján válassza ki.

Ha az eredeti választ ellenőrizni kell

Ha egy képgenerálási vagy képszerkesztési eredmény ellenőrzést igényel, őrizze meg az eredeti operation_id/X-Client-Request-ID értéket és a visszaadott eredményadatokat. A saját, már meglévő eredményeket a médiatárból állítsa helyre a tényleges task_id vagy asset_id értékekkel. Ne küldje be újra a generálási/szerkesztési kérést, és ne állítson össze állapotlekérdezési URL-t az operation_id értékéből.

Válaszmezők
MezőTípus
MezőcreatedTípusinteger
Meződata[].urlTípusstring
Meződata[].b64_jsonTípusbase64 string
MezőusageTípusobject
Hibák és következő lépések
VálaszFeltételKövetkező lépés
Válasz400 · invalid_request_errorFeltételÉrvénytelen kötelező mezők, az anyag érvénytelen reprezentációja vagy érvénytelen paraméterértékKövetkező lépésJavítsa a jelzett mezőket egy új létrehozási kérés előtt.
Válaszserver_errorFeltételA visszaadott válasz szerint a művelet vagy az eredmény ellenőrzést igényelKövetkező lépésŐrizze meg az eredetileg visszaadott művelet- vagy feladatazonosítót, a kérés fejléceit és a választ; folytassa az eredeti művelet támogatott lekérdezéseit. Ne küldje be újra a létrehozási kérést.

Álnevek

Modell álnevei

Ailoot qwen-image-3.0-pro, qwen-image, qwen-image-latest

Metódusútvonalak álnevei

Használja a fent látható metódusútvonalakat.

Kapcsolódó modellazonosítók

qwen-image-3.0-pro, qwen-image, qwen-image-latest

FAQ · qwen-image-3.0-pro
Milyen bemenetek és eredmények érhetők el?

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

Mely mezőket használja a kérés?

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[]

Milyen korlátok érvényesek?

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

További részletek

Csatlakoztassa az Ailootot a Claude Code-hoz, OpenCode-hoz, Hermeshez vagy saját alkalmazásához.

A vállalat és projektportfóliója

A vállalat és projektportfóliója: ügyfelek milliói; havi értékesítés milliárdos nagyságrendben.

Vásároljon tokeneket kedvezménnyel.

Előfizetési kedvezmény rendszeres munkához. Promókódok — akár 50% tokenvásárlási kedvezmény.

Előfizetés
Válasszon kedvezményes tarifát a rendszeres kéréseihez.
Promókód akár 50%-ig
Vásárláskor adja meg a kódot. Az ár az érvényes akció szerint újraszámolódik.
Költségek az előzményekben
Minden kéréshez megmarad a modell, a tokenek és az összeg.

Előfizetés kiválasztása · Modellárak megtekintése

Csatlakoztassa az API-t az értékesített termékéhez.

SaaS, alkalmazások és botok — az Ailoot ajánlati feltételei és licencszerződése alapján. Viszonteladáshoz kérjen viszonteladói licencet.

Kereskedelmi alkalmazás
Építsen szöveg-, kép-, videó- és hanggenerálást szolgáltatása fizetős funkcióiba.
Viszonteladói licenc
Küldje el a projekt leírását és a hozzáférés módját. Kérjen írásos használati és viszonteladási feltételeket.
Dokumentumok a weboldalon
Az ajánlati feltételek, licencszerződés és adatkezelési szabályzat már a csatlakoztatás előtt elérhető.

Viszonteladói licenc kérése · Ajánlati feltételek és licencszerződés