Google: Nano Banana Pro (Gemini 3 Pro Image)
A Nano Banana Pro (Gemini 3 Pro Image) a Google gondolkodással vezérelt képmodellje összetett designhoz, termék-látványtervekhez és tényalapú vizualizációkhoz. Szöveget és képi referenciákat fogad, és szöveget tartalmazó képeket generál, 1K–4K kimenettel és részletes kreatív vezérléssel.
- Ailoot · Képek
POST /v1/images/generationsgemini-3-pro-image - Ailoot · Képek
POST /v1/images/generationsgemini-3-pro-image-preview - Ailoot · Képek
POST /v1/images/generationsnano-banana-pro - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgoogle/gemini-3-pro-image - Ailoot Ultra · Képek
POST /v1/images/generationsgoogle/gemini-3-pro-image - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgoogle/gemini-3-pro-image
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 Nano Banana Pro a Google Gemini 3 Pro Image modellje gondolkodással vezérelt képgeneráláshoz és szerkesztéshez. A fejlesztő az összetett grafikai tervezést, a nagy pontosságú termék-látványterveket és a tényalapú adatvizualizációt helyezi a tervezett felhasználás középpontjába. Szöveget és képeket fogad, és képet, valamint szöveget állít elő. Ez a névvel jelölt Pro képkiadás a Gemini 3 Pro modellre épül, miközben megtartja a képfeladatokra jellemző saját bemeneti és képességprofilját.
A modell 1K, 2K és 4K képeket támogat. A dokumentált formák között 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 és 21:9 szerepel. Egy négyzetes 4K kép 4096 × 4096; egy 16:9 arányú 4K kép 5504 × 3072. A felbontást és képarányt a szükséges anyaghoz válassza, legyen az álló poszter, termékjelenet vagy széles magyarázó grafika. A Gemini 3.1 Flash Image 0.5K lehetősége és további szélsőséges képarányai nem részei ennek a Pro-táblázatnak.
A szövegmegjelenítés támogatja a tisztán olvasható feliratokat posztereken, diagramokon és más tervezett anyagokon. Összetett infografikához adja meg az alapul szolgáló tényeket, a pontos szöveget, az olvasási sorrendet és a címkék, valamint a vizuális elemek kapcsolatát. Különítse el a közlendő információt a kívánt művészi stílustól. A Google a szöveg előzetes előkészítését, majd az azt tartalmazó kép generálását javasolja. Ez különösen hasznos, ha egy kompozíció címsort, diagramot és több rövid feliratot egyesít.
A többképes bemenet legfeljebb 14 referenciát támogat. A Google funkciótáblázata legfeljebb hat tárgyreferenciát ír le a hű megőrzéshez, legfeljebb öt karakterreferenciát az állandósághoz és legfeljebb három stílusreferenciát. E szerepek segítenek egy összetett vizuális anyag előkészítésében: egy termékfotó meghatározza a megjelenést, egy külön kép a környezetet, egy stíluskép pedig a megformálást. Mondja el a modellnek, mely részletek mérvadók és mely referenciák adnak inspirációt, ne kérje minden látható jellemző válogatás nélküli egyesítését.
A Google Search-alapú forráshoz kötés valós információt adhat tényalapú vizualizációhoz vagy aktuális körülményekre épülő jelenethez. A Pro képi munkafolyamata webes forráshoz kötést dokumentál; az Image Search kiterjesztés kifejezetten a Nano Banana 2.1 és Gemini 3.1 Flash Image modellekhez dokumentált. Adatgrafikához adja meg a bemutatni kívánt értékeket, vagy kérjen forráshoz kötött információt a fejlesztő munkafolyamatában, majd tegye egyértelművé a kapcsolatokat, címkéket és elrendezést. A kereséssel támogatott generálás továbbra is ellenőrizendő képet állít elő, nem helyettesíti az ábrázolt tények ellenőrzését.
A gondolkodás támogatja egy összetett prompt kompozíciójának kialakítását a végső megjelenítés előtt. A képi útmutató a kompozíció és logika tesztelésére használt köztes képeket ismertet, a végső eredménytől elkülönítve. Ne vigye át a Nano Banana 2 minimal/high vezérlőtáblázatát vagy a Nano Banana 2.1 medium alapértelmezésű táblázatát erre a Pro kiadásra. Igényes designhoz adjon teljes feladatleírást vizuális hierarchiával, szükséges tárgykapcsolatokkal és a későbbi szerkesztéseken át megőrzendő elemekkel.
A modellkártya jelentős fennmaradó korlátokat ír le: a nagyon apró szöveg és hosszú szövegrészek rosszul jelenhetnek meg, a karakter megjelenése változhat a referencia és az eredmény között, a maszkolt vagy vázlatos rajzokon alapuló szerkesztések pedig csak részben követhetik az utasítást vagy nyomot hagyhatnak. A modell összekeverheti a bal és jobb oldalt is, vagy egy forráselemet átmásolhat az új kompozícióba. Termékmódosításnál kifejezetten adja meg a megőrzendő geometriát és címkéket, és vizsgálja meg a szerkesztett területet; diagramnál vesse össze a nyilak irányát és a tárgyak egymáshoz viszonyított helyzetét.
A jelenlegi API-táblázat 65 536 tokenes bemeneti és 32 768 tokenes kimeneti korlátot ad meg. A képgenerálás, gondolkodás, keresésalapú forráshoz kötés és kötegelt feldolgozás támogatott; a hanggenerálás, függvényhívás, kódvégrehajtás, gyorsítótárazás, strukturált kimenetek, fájlkeresés, URL-kontextus és Live API nem támogatott. A képfeladat ebben a profilban sem hang-, sem videóbemenetet nem fogad. A generált képek SynthID-t tartalmaznak, és a modell nem mindig követi pontosan a kért kimeneti képszámot.
Egy gyakorlati termékfeladat egyesítheti a termék képét, egy világítási referenciát és a pontos címsort: „Őrizze meg a termék arányait és feliratait, mutassa halvány kőfelületen lágy oldalfényben, és hagyja üresen a felső harmadot a megadott címnek.” Tényalapú diagramhoz azonosítson minden entitást és kapcsolatot, és adja meg a jóváhagyott címkéket. Beszélgetésben finomítsa az eredményt egyetlen változtatás és a megőrzendő jellemzők megnevezésével, a kiválasztott képet és magyarázó szövegét együtt tartva meg tervezési anyagként.
Gyakorlati feladat
Gyakorlati feladat
Technikai példa angolul
Visualize a supplied packaging cycle
Create one landscape explanatory graphic showing this packaging return cycle: customer returns an empty jar, store inspects it, accepted jars are washed, clean jars are refilled. Use four large illustrated stages connected clockwise. Add only these exact labels: 'RETURN', 'INSPECT', 'WASH', 'REFILL'. Make the arrow direction and stage order unmistakable.Várt eredmény
One landscape image with four labeled stages and arrows matching the supplied cycle.Az eredmény ellenőrzése
Inspect that arrows connect RETURN to INSPECT to WASH to REFILL in that order, with exact labels.Ailoot · Képek POST /v1/images/generations gemini-3-pro-image
gemini-3-pro-imagegemini-3-pro-imagegemini-3-pro-image-previewnano-banana-pro
Kezdő lépések
A Nano Banana Pro (Gemini 3 Pro Image) a Google gondolkodással vezérelt képmodellje összetett designhoz, termék-látványtervekhez és tényalapú vizualizációkhoz. Szöveget és képi referenciákat fogad, és szöveget tartalmazó képeket generál, 1K–4K kimenettel és részletes kreatív vezérléssel.
- 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- Kontextus
- 65 536 tokens
- Maximális kimenet
- 32 768 tokens
- Kimeneti formátum
- Képfájl
| Mező | Típus | Követelmény | Értékek és korlátok | Alapértelmezett |
|---|---|---|---|---|
Mezőmodel | Típusstring | KövetelményKötelező | Értékek és korlátok gemini-3-pro-image | Alapértelmezett— |
Mezőprompt | Típusstring | KövetelményKötelező | Értékek és korlátok Minimális hossz: 1 | Alapértelmezett— |
Mezőn | Típusinteger | KövetelményOpcionális | Értékek és korlátok Minimum: 1 | Alapértelmezett1 |
Mezőresponse_format | Típusstring | KövetelményOpcionális | Értékek és korlátok url, b64_json | Alapértelmezett— |
Mezőstream | Típusboolean | KövetelményOpcionális | Értékek és korlátok | Alapértelmezettfalse |
Mezősize | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőquality | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőbackground | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőoutput_format | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőoutput_compression | Típusinteger | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőmoderation | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőinput_fidelity | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőstyle | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőpartial_images | Típusinteger | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Bemeneti anyagok kombinációi
Szövegből kép · Kötelező: prompt
Metódus paraméterei és életciklusa
| Paraméter | Szerződés |
|---|---|
Paramétermaterial_types | Szerződéstext |
Paraméterrequired | Szerződésmodel, prompt |
Paraméteroptional_controls | Szerződésnull |
Paramétercontent_type | Szerző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
POST /v1/images/generations- Bemenet
- 0,002 USD / 1K képtoken
- Kimenet
- 0,134 USD 1K felbontású képenként
- Kimenet
- 0,134 USD 2K felbontású képenként
- Kimenet
- 0,24 USD 4K 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 →
A referencia-díjszabás részletei
A modellszintű referenciatáblázatok nem módosítják a metódusválasztást, az árajánlatokat vagy a díjakat. A tényleges díjak a kiválasztott Ailoot-metódus díjtételeit használják.
Modell referenciatáblázatai
Árak beállításonként
| Beállítás | Díjtáblázat | Díj |
|---|---|---|
| BeállításUltra | DíjtáblázatAlapdíj | Díj Bemenet · Bemeneti tokenek $0.004000 / 1K token Kimenet · Kimeneti tokenek $0.024000 / 1K token Bemenet · kép $0.004000 / 1K token Kimenet · képkimenet $0.24000 / 1K token Bemenet · hang $0.004000 / 1K token Bemenet · bemeneti hang gyorsítótára $0.0004000 / 1K token Kimenet · webes keresés $0.028 webes keresésenként Kimenet · belső következtetés $0.024000 / 1K token Bemenet · Gyorsítótár olvasása $0.0004000 / 1K token Bemenet · Írás a gyorsítótárba $0.000750000 / 1K token |
Példakérések
Ailoot · Képek
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": "gemini-3-pro-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': 'gemini-3-pro-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": "gemini-3-pro-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}/contentGET /v1/media/assetsGET /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őcreated | Típusinteger |
Meződata[].url | Típusstring |
Meződata[].b64_json | Típusbase64 string |
Mezőusage | Típusobject |
Hibák és következő lépések
| Válasz | Feltétel | Következő lépés |
|---|---|---|
Válasz400 · invalid_request_error | FeltételÉrvénytelen kötelező mezők, az anyag érvénytelen reprezentációja vagy érvénytelen paraméterérték | Következő lépésJavítsa a jelzett mezőket egy új létrehozási kérés előtt. |
Válaszserver_error | FeltételA visszaadott válasz szerint a művelet vagy az eredmény ellenőrzést igényel | Kö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 gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
Metódusútvonalak álnevei
/v1/images
Kapcsolódó modellazonosítók
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot · Képek POST /v1/images/generations gemini-3-pro-image-preview
gemini-3-pro-image-previewgemini-3-pro-imagegemini-3-pro-image-previewnano-banana-pro
Kezdő lépések
A Nano Banana Pro (Gemini 3 Pro Image) a Google gondolkodással vezérelt képmodellje összetett designhoz, termék-látványtervekhez és tényalapú vizualizációkhoz. Szöveget és képi referenciákat fogad, és szöveget tartalmazó képeket generál, 1K–4K kimenettel és részletes kreatív vezérléssel.
- 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- Kontextus
- 65 536 tokens
- Maximális kimenet
- 32 768 tokens
- Kimeneti formátum
- Képfájl
| Mező | Típus | Követelmény | Értékek és korlátok | Alapértelmezett |
|---|---|---|---|---|
Mezőmodel | Típusstring | KövetelményKötelező | Értékek és korlátok gemini-3-pro-image-preview | Alapértelmezett— |
Mezőprompt | Típusstring | KövetelményKötelező | Értékek és korlátok Minimális hossz: 1 | Alapértelmezett— |
Mezőn | Típusinteger | KövetelményOpcionális | Értékek és korlátok Minimum: 1 | Alapértelmezett1 |
Mezőresponse_format | Típusstring | KövetelményOpcionális | Értékek és korlátok url, b64_json | Alapértelmezett— |
Mezőstream | Típusboolean | KövetelményOpcionális | Értékek és korlátok | Alapértelmezettfalse |
Mezősize | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőquality | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőbackground | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőoutput_format | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőoutput_compression | Típusinteger | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőmoderation | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőinput_fidelity | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőstyle | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőpartial_images | Típusinteger | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Bemeneti anyagok kombinációi
Szövegből kép · Kötelező: prompt
Metódus paraméterei és életciklusa
| Paraméter | Szerződés |
|---|---|
Paramétermaterial_types | Szerződéstext |
Paraméterrequired | Szerződésmodel, prompt |
Paraméteroptional_controls | Szerződésnull |
Paramétercontent_type | Szerző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
POST /v1/images/generations- Bemenet
- 0,002 USD / 1K képtoken
- Kimenet
- 0,134 USD 1K felbontású képenként
- Kimenet
- 0,134 USD 2K felbontású képenként
- Kimenet
- 0,24 USD 4K 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 →
A referencia-díjszabás részletei
A modellszintű referenciatáblázatok nem módosítják a metódusválasztást, az árajánlatokat vagy a díjakat. A tényleges díjak a kiválasztott Ailoot-metódus díjtételeit használják.
Modell referenciatáblázatai
Árak beállításonként
| Beállítás | Díjtáblázat | Díj |
|---|---|---|
| BeállításUltra | DíjtáblázatAlapdíj | Díj Bemenet · Bemeneti tokenek $0.004000 / 1K token Kimenet · Kimeneti tokenek $0.024000 / 1K token Bemenet · kép $0.004000 / 1K token Kimenet · képkimenet $0.24000 / 1K token Bemenet · hang $0.004000 / 1K token Bemenet · bemeneti hang gyorsítótára $0.0004000 / 1K token Kimenet · webes keresés $0.028 webes keresésenként Kimenet · belső következtetés $0.024000 / 1K token Bemenet · Gyorsítótár olvasása $0.0004000 / 1K token Bemenet · Írás a gyorsítótárba $0.000750000 / 1K token |
Példakérések
Ailoot · Képek
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": "gemini-3-pro-image-preview", "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': 'gemini-3-pro-image-preview', '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": "gemini-3-pro-image-preview", "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}/contentGET /v1/media/assetsGET /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őcreated | Típusinteger |
Meződata[].url | Típusstring |
Meződata[].b64_json | Típusbase64 string |
Mezőusage | Típusobject |
Hibák és következő lépések
| Válasz | Feltétel | Következő lépés |
|---|---|---|
Válasz400 · invalid_request_error | FeltételÉrvénytelen kötelező mezők, az anyag érvénytelen reprezentációja vagy érvénytelen paraméterérték | Következő lépésJavítsa a jelzett mezőket egy új létrehozási kérés előtt. |
Válaszserver_error | FeltételA visszaadott válasz szerint a művelet vagy az eredmény ellenőrzést igényel | Kö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 gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
Metódusútvonalak álnevei
/v1/images
Kapcsolódó modellazonosítók
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot · Képek POST /v1/images/generations nano-banana-pro
nano-banana-progemini-3-pro-imagegemini-3-pro-image-previewnano-banana-pro
Kezdő lépések
A Nano Banana Pro (Gemini 3 Pro Image) a Google gondolkodással vezérelt képmodellje összetett designhoz, termék-látványtervekhez és tényalapú vizualizációkhoz. Szöveget és képi referenciákat fogad, és szöveget tartalmazó képeket generál, 1K–4K kimenettel és részletes kreatív vezérléssel.
- 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- Kontextus
- 65 536 tokens
- Maximális kimenet
- 32 768 tokens
- Kimeneti formátum
- Képfájl
| Mező | Típus | Követelmény | Értékek és korlátok | Alapértelmezett |
|---|---|---|---|---|
Mezőmodel | Típusstring | KövetelményKötelező | Értékek és korlátok nano-banana-pro | Alapértelmezett— |
Mezőprompt | Típusstring | KövetelményKötelező | Értékek és korlátok Minimális hossz: 1 | Alapértelmezett— |
Mezőn | Típusinteger | KövetelményOpcionális | Értékek és korlátok Minimum: 1 | Alapértelmezett1 |
Mezőresponse_format | Típusstring | KövetelményOpcionális | Értékek és korlátok url, b64_json | Alapértelmezett— |
Mezőstream | Típusboolean | KövetelményOpcionális | Értékek és korlátok | Alapértelmezettfalse |
Mezősize | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőquality | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőbackground | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőoutput_format | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőoutput_compression | Típusinteger | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőmoderation | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőinput_fidelity | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőstyle | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőpartial_images | Típusinteger | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Bemeneti anyagok kombinációi
Szövegből kép · Kötelező: prompt
Metódus paraméterei és életciklusa
| Paraméter | Szerződés |
|---|---|
Paramétermaterial_types | Szerződéstext |
Paraméterrequired | Szerződésmodel, prompt |
Paraméteroptional_controls | Szerződésnull |
Paramétercontent_type | Szerző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
POST /v1/images/generations- Bemenet
- 0,002 USD / 1K képtoken
- Kimenet
- 0,134 USD 1K felbontású képenként
- Kimenet
- 0,134 USD 2K felbontású képenként
- Kimenet
- 0,24 USD 4K 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 →
A referencia-díjszabás részletei
A modellszintű referenciatáblázatok nem módosítják a metódusválasztást, az árajánlatokat vagy a díjakat. A tényleges díjak a kiválasztott Ailoot-metódus díjtételeit használják.
Modell referenciatáblázatai
Árak beállításonként
| Beállítás | Díjtáblázat | Díj |
|---|---|---|
| BeállításUltra | DíjtáblázatAlapdíj | Díj Bemenet · Bemeneti tokenek $0.004000 / 1K token Kimenet · Kimeneti tokenek $0.024000 / 1K token Bemenet · kép $0.004000 / 1K token Kimenet · képkimenet $0.24000 / 1K token Bemenet · hang $0.004000 / 1K token Bemenet · bemeneti hang gyorsítótára $0.0004000 / 1K token Kimenet · webes keresés $0.028 webes keresésenként Kimenet · belső következtetés $0.024000 / 1K token Bemenet · Gyorsítótár olvasása $0.0004000 / 1K token Bemenet · Írás a gyorsítótárba $0.000750000 / 1K token |
Példakérések
Ailoot · Képek
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": "nano-banana-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': 'nano-banana-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": "nano-banana-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}/contentGET /v1/media/assetsGET /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őcreated | Típusinteger |
Meződata[].url | Típusstring |
Meződata[].b64_json | Típusbase64 string |
Mezőusage | Típusobject |
Hibák és következő lépések
| Válasz | Feltétel | Következő lépés |
|---|---|---|
Válasz400 · invalid_request_error | FeltételÉrvénytelen kötelező mezők, az anyag érvénytelen reprezentációja vagy érvénytelen paraméterérték | Következő lépésJavítsa a jelzett mezőket egy új létrehozási kérés előtt. |
Válaszserver_error | FeltételA visszaadott válasz szerint a művelet vagy az eredmény ellenőrzést igényel | Kö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 gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
Metódusútvonalak álnevei
/v1/images
Kapcsolódó modellazonosítók
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3-pro-image
google/gemini-3-pro-imageKezdő lépések
A Nano Banana Pro (Gemini 3 Pro Image) a Google gondolkodással vezérelt képmodellje összetett designhoz, termék-látványtervekhez és tényalapú vizualizációkhoz. Szöveget és képi referenciákat fogad, és szöveget tartalmazó képeket generál, 1K–4K kimenettel és részletes kreatív vezérléssel.
- Elfogadott bemenetek
- Szöveg
- Eredmények
- Szöveg
Elérhető az Ailootban · bemenetek és metódusok
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Bemenet
text- Kimenet
text- Kimeneti formátum
- json vagy SSE
| Mező | Típus | Követelmény | Értékek és korlátok | Alapértelmezett |
|---|---|---|---|---|
Mezőmodel | Típusstring | KövetelményKötelező | Értékek és korlátok google/gemini-3-pro-image | Alapértelmezett— |
Mezőmessages | Típusmessage[] | KövetelményKötelező | Értékek és korlátok Minimális elemszám: 1 | Alapértelmezett— |
Mezőmessages[].role | Típusstring | KövetelményKötelező | Értékek és korlátok Példák: system, user, assistant, tool, function Feltételek: Ezeket a szerepeket a forráskód kompatibilitási típusai kifejezetten reprezentálják; a pontos szerepkészlet továbbra is modellspecifikus. Modelltől függ | Alapértelmezett— |
Mezőmessages[].content | Típusstring|content_part[]|null | KövetelményOpcionális | Értékek és korlátok | Alapértelmezett— |
Mezőmessages[].tool_calls | Típustool_call[] | KövetelményOpcionális | Értékek és korlátok | Alapértelmezett— |
Mezőmessages[].tool_call_id | Típusstring | KövetelményOpcionális | Értékek és korlátok Akkor alkalmazandó, ha: role=tool; használja a ténylegesen visszaadott ID-t | Alapértelmezett— |
Mezőmessages[].name | Típusstring | KövetelményOpcionális | Értékek és korlátok | Alapértelmezett— |
Mezőmessages[].reasoning_content | Típusstring | KövetelményOpcionális | Értékek és korlátok Akkor alkalmazandó, ha: Küldje vissza a ténylegesen visszaadott gondolkodási tartalmat, ha ez a modell használja | Alapértelmezett— |
Mezőmessages[].reasoning_details | Típusobject|array | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőmax_tokens | Típusinteger | KövetelményOpcionális | Értékek és korlátok Minimum: 1 Modelltől függ | Alapértelmezett— |
Mezőmax_completion_tokens | Típusinteger | KövetelményOpcionális | Értékek és korlátok Minimum: 1 Modelltől függ | Alapértelmezett— |
Mezőstream | Típusboolean | KövetelményOpcionális | Értékek és korlátok | Alapértelmezettfalse |
Mezőstream_options.include_usage | Típusboolean | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőtemperature | Típusnumber | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőtop_p | Típusnumber | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőstop | Típusstring|string[] | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőtools | Típusfunction_tool[] | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőtools[].type | Típusstring | KövetelményOpcionális | Értékek és korlátok function Modelltől függ | Alapértelmezett— |
Mezőtools[].function.name | Típusstring | KövetelményKötelező | Értékek és korlátok Akkor alkalmazandó, ha: Függvényeszköz megadva | Alapértelmezett— |
Mezőtools[].function.description | Típusstring | KövetelményOpcionális | Értékek és korlátok | Alapértelmezett— |
Mezőtools[].function.parameters | TípusJSON_schema | KövetelményOpcionális | Értékek és korlátok | Alapértelmezett— |
Mezőtool_choice | Típusstring|object | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőparallel_tool_calls | Típusboolean | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőresponse_format | Típusobject | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőreasoning_effort | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőreasoning | Típusobject | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőservice_tier | Típusstring | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőinstructions | Típusstring | KövetelményOpcionális | Értékek és korlátok Kompatibilitási mező | Alapértelmezett— |
Mezőfunctions | Típusfunction[] | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőfunction_call | Típusstring|object | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőprompt_cache_options | Típusobject | KövetelményOpcionális | Értékek és korlátok Modelltől függ | Alapértelmezett— |
Mezőmodalities | Típusstring[] | KövetelményOpcionális | Értékek és korlátok text | Alapértelmezett— |
Mezőprovider | Típusobject | KövetelményOpcionális | Értékek és korlátok Feltételek: A provider.options elutasításra kerül ezen az Ultra szöveges útvonalon | Alapértelmezett— |
Mezőcache_control.ttl | Típusstring | KövetelményOpcionális | Értékek és korlátok Feltételek: Az 1h elutasításra kerül a tényleges prompt-gyorsítótárazási helyeken | Alapértelmezett— |
Bemeneti anyagok kombinációi
Szöveg · UTF8 szöveg
messages[].content
Metódus paraméterei és életciklusa
| Paraméter | Szerződés |
|---|---|
Paramétercontent_type | Szerződésapplication/json |
Paraméterrequired | Szerződésmodel, messages |
Paramétermaterial_types | Szerződéstext |
Paramétermessages | Szerződésüzenettömb role/content szerkezettel |
Paraméterfile_material | Szerződésa tényleges UTF-8 dokumentum szó szerinti szövegként beillesztve; nincs kikövetkeztetett fájlazonosító |
Paraméteroptional_controls | Szerződésstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Paramétercontrol_scope | Szerződésmodellspecifikus; a felhasználói függvényeszközök eltérnek a hosztolt eszközöktől |
Paraméteroutput_modalities | Szerződéstext |
Paraméterhosted_operations | Szerződésfalse |
Paramétermultimodal_input_binding | Szerződésnull |
Életciklus: synchronous_or_streamed
Küldje el a pontos modellazonosítót a messages mellett.
A kontextushossz nem kimeneti felső korlát.
Egy szövegfájl szó szerinti szöveget adhat meg; a kép-/hang-/fájlobjektum-bemenetek pontos hozzárendelést igényelnek.
Díjcsomagok
A díjszabás nem ad új kérési lehetőségeket. A támogatott paraméterek a kiválasztott módszernél szerepelnek.
- Gyors mód
- Normál díjszabás Ha a gyors mód van kiválasztva
- Flex mód
- Normál díjszabás Ha a flex mód van kiválasztva
- Maximális gondolkodási ráfordítás
- Normál díjszabás Ha a maximális gondolkodási ráfordításra a default beállításhoz tartozó korrekció vonatkozik
- Explicit gyorsítótárazás díjai
- Nincs engedélyezve Ha explicit gyorsítótárazást kérnek
Ailoot-díjak
Árak beállításonként
Minden díjat a megjelenített feltételekhez rendeljen. Az alternatív beállítások minden csoportjához egy díjtételt használjon.
| Beállítás | Díjtáblázat | Kontextustokenek, több mint | Kontextustokenek, legfeljebb | Díj |
|---|---|---|---|---|
| BeállításTokenenkénti alapárak | DíjtáblázatAlapdíj | Kontextustokenek, több mint— | Kontextustokenek, legfeljebbNincs felső korlát | Díj Bemenet · Bemeneti tokenek $0.004 / 1K token Kimenet · Kimeneti tokenek $0.024 / 1K token Bemenet · Gyorsítótár olvasása $0.0004 / 1K token Bemenet · Írás a gyorsítótárba $0.00075 / 1K token Bemenet · Írás a gyorsítótárba, 1 óra — / 1K token Kimenet · Kimeneti képtokenek $0.24 / 1K képtoken |
| BeállításA kéréshossz szerinti 1. ársáv | Díjtáblázat— | Kontextustokenek, több mint0 | Kontextustokenek, legfeljebbNincs felső korlát | Díj Bemenet · Bemeneti tokenek $0.004 / 1K token Kimenet · Kimeneti tokenek $0.024 / 1K token Bemenet · Gyorsítótár olvasása $0.0004 / 1K token Bemenet · Írás a gyorsítótárba $0.00075 / 1K token Bemenet · Írás a gyorsítótárba, 1 óra — / 1K token |
A referencia-díjszabás részletei
A modellszintű referenciatáblázatok nem módosítják a metódusválasztást, az árajánlatokat vagy a díjakat. A tényleges díjak a kiválasztott Ailoot-metódus díjtételeit használják.
Google: Nano Banana Pro (Gemini 3 Pro Image)
Árak beállításonként
| Beállítás | Elszámolási feltételek | Díj |
|---|---|---|
| BeállításGoogle: Nano Banana Pro (Gemini 3 Pro Image) · Alapértelmezett beállítások | Elszámolási feltételekAlapértelmezett konfiguráció | Díj Bemenet · Bemeneti tokenek 0,004 USD / 1K token Kimenet · Kimeneti tokenek 0,024 USD / 1K token Bemenet · Bemeneti kép 0,004 USD / 1K token Kimenet · Kimeneti kép 0,24 USD / 1K token Bemenet · Hangbemenet 0,004 USD / 1K token Bemenet · Hangadatok olvasása a gyorsítótárból 0,0004 USD / 1K token Kimenet · Webes keresés 0,028 USD keresésenként Kimenet · Következtetési tokenek 0,024 USD / 1K token Bemenet · Gyorsítótár olvasása 0,0004 USD / 1K token Bemenet · Gyorsítótárba írás · 5 perc 0,00075 USD / 1K token |
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 Ultra · OpenAI Chat
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-3-pro-image", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')
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/chat/completions \
-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 json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-3-pro-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.chat.completions.stream(model='google/gemini-3-pro-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_completion()
save_result(final.to_dict(mode="json"),"stream-result")
Eredmények fogadása és mentése
Ailoot Ultra · OpenAI Chat
json vagy SSE
Őrizzen meg minden elkészült eredményt
Őrizzen meg minden teljes visszaadott választ, fájlt és tartalomrészt.
Őrizze meg az összes válaszváltozatot és azok tartalmát/eszközhívásait/gondolkodási tartalmát. SSE esetén válaszváltozat- és eszközindex szerint állítsa össze a részleges frissítéseket, és tartsa meg a végső befejezési okot és a használati adatokat.
Ha az eredeti választ ellenőrizni kell
Őrizze meg a kérés-/válaszazonosítókat és a fejléceket. Nincs megadva általános URL a szöveges feladatok lekéréséhez.
Válaszmezők
| Mező | Típus |
|---|---|
Mezőchoices[].index | Típusinteger |
Mezőchoices[].message.content | Típusstring|null |
Mezőchoices[].message.tool_calls | Típustool_call[] |
Mezőchoices[].message.reasoning_content | Típusstring |
Mezőchoices[].message.reasoning_details | Típusobject|array |
Mezőchoices[].finish_reason | Típusstring|null |
Mezőusage | Típusobject |
Hibák és következő lépések
| Válasz | Feltétel | Következő lépés |
|---|---|---|
Válasz400 · invalid_request_error | FeltételÉrvénytelen kötelező mezők, az anyag érvénytelen reprezentációja vagy érvénytelen paraméterérték | Következő lépésJavítsa a jelzett mezőket egy új létrehozási kérés előtt. |
Álnevek
Modell álnevei
Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
Metódusútvonalak álnevei
/v1/images
Kapcsolódó modellazonosítók
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot Ultra · Képek POST /v1/images/generations google/gemini-3-pro-image
google/gemini-3-pro-imageKezdő lépések
A Nano Banana Pro (Gemini 3 Pro Image) a Google gondolkodással vezérelt képmodellje összetett designhoz, termék-látványtervekhez és tényalapú vizualizációkhoz. Szöveget és képi referenciákat fogad, és szöveget tartalmazó képeket generál, 1K–4K kimenettel és részletes kreatív vezérléssel.
- Elfogadott bemenetek
- Szöveg · Képek
- Eredmények
- Képek
Elérhető az Ailootban · bemenetek és metódusok
Ailoot Ultra · Képek POST /v1/images/generations
- Bemenet
text,image- Kimenet
image
| Mező | Típus | Követelmény | Értékek és korlátok | Alapértelmezett |
|---|---|---|---|---|
Mezőmodel | Típusstring | KövetelményKötelező | Értékek és korlátok google/gemini-3-pro-image | Alapértelmezett— |
Mezőprompt | Típusstring | KövetelményKötelező | Értékek és korlátok Minimális hossz: 1 | Alapértelmezett— |
Mezőresolution | Típusstring | KövetelményOpcionális | Értékek és korlátok 1K, 2K, 4K | Alapértelmezett— |
Mezőaspect_ratio | Típusstring | KövetelményOpcionális | Értékek és korlátok 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 | Alapértelmezett— |
Mezőn | Típusinteger | KövetelményOpcionális | Értékek és korlátok Minimum: 1 Maximum: 1 | Alapértelmezett— |
Mezőinput_references | Típusarray | KövetelményOpcionális | Értékek és korlátok Minimális elemszám: 0 Maximális elemszám: 14 | Alapértelmezett— |
Mezőprovider | Típusobject | KövetelményOpcionális | Értékek és korlátok | Alapértelmezett— |
Metódus paraméterei és életciklusa
| Paraméter | Szerződés |
|---|---|
Paramétercontent_type | Szerződésapplication/json |
Paraméterrequired | Szerződésmodel, prompt |
Paramétermaterial_types | Szerződéstext, image |
É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}
Díjcsomagok
A végső díj számítása
A megjelenített díjtételek a generálás előtti költségbecsléshez szolgálnak. A végleges díj az eredeti generáláshoz rögzített költségből számítódik. A kimenet mért időtartama és az előre jelzett mennyiségek nem azonosak a véglegesen elszámolandó mennyiséggel.
A díjszabás nem ad új kérési lehetőségeket. A támogatott paraméterek a kiválasztott módszernél szerepelnek.
- Gyors mód
- Nincs megadva Ha a gyors mód van kiválasztva
- Flex mód
- Nincs megadva Ha a flex mód van kiválasztva
- Maximális gondolkodási ráfordítás
- Nincs megadva Ha a maximális gondolkodási ráfordításra a default beállításhoz tartozó korrekció vonatkozik
Becsült díjak összehasonlításhoz
Árak beállításonként
Minden díjat a megjelenített feltételekhez rendeljen. Az alternatív beállítások minden csoportjához egy díjtételt használjon.
| Beállítás | Díjtáblázat | Előre jelzett mennyiség | Díj |
|---|---|---|---|
| BeállításTokenek alapdíjai | DíjtáblázatAlapdíj | Előre jelzett mennyiség— | Díj Bemenet · Bemeneti tokenek · Becslés, csak összehasonlításra — / 1K token Kimenet · Kimeneti tokenek · Becslés, csak összehasonlításra — / 1K token Bemenet · Gyorsítótár olvasása · Becslés, csak összehasonlításra — / 1K token Bemenet · Írás a gyorsítótárba · Becslés, csak összehasonlításra — / 1K token Bemenet · Írás a gyorsítótárba, 1 óra · Becslés, csak összehasonlításra — / 1K token |
| BeállításA generálás becsült költsége | Díjtáblázat— | Előre jelzett mennyiségbecslés egy generálásra | Díj Kimenet · Becsült generálási költség · Becslés, csak összehasonlításra $0.98304 becslés a generálás előtt Ez a becslés nem jelent további díjat, és nem rögzített díjszabás az elkészült generálásra. |
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 Ultra · Képek
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'google/gemini-3-pro-image', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
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
Eredmények fogadása és mentése
Ailoot Ultra · 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}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
További tartalomlekérések
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
-H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
Ő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.
Őrizze meg a teljes választ és a fejléceket, minden tényleges kimenetet, az eredetileg visszaadott azonosítókat és az összes használati adatmezőt. Az eredeti műveletet állítsa helyre, a létrehozási kérés újbóli beküldése nélkül.
Ha az eredeti választ ellenőrizni kell
Őrizze meg a visszaadott X-Client-Request-ID értéket az egyeztetéshez. Csak a ténylegesen visszaadott task_id/asset_id értékekkel kérdezzen le, vagy használja a saját médiatárat; soha ne állítson össze feladat-URL-t a műveletazonosítóból, és soha ne küldje be újra a létrehozási kérést.
Válaszmezők
| Mező | Típus |
|---|---|
Mezőcreated | Típus |
Meződata[].url | Típus |
Meződata[].b64_json | Típus |
Mezőusage | Típus |
Álnevek
Modell álnevei
Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
Metódusútvonalak álnevei
/v1/images
Kapcsolódó modellazonosítók
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3-pro-image
google/gemini-3-pro-imageKezdő lépések
A Nano Banana Pro (Gemini 3 Pro Image) a Google gondolkodással vezérelt képmodellje összetett designhoz, termék-látványtervekhez és tényalapú vizualizációkhoz. Szöveget és képi referenciákat fogad, és szöveget tartalmazó képeket generál, 1K–4K kimenettel és részletes kreatív vezérléssel.
- Elfogadott bemenetek
- Szöveg
- Eredmények
- json · sse
Elérhető az Ailootban · bemenetek és metódusok
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Bemenet
text- Kimenet
json,sse- Kimeneti formátum
- JSON vagy SSE
| Mező | Típus | Követelmény | Értékek és korlátok | Alapértelmezett |
|---|---|---|---|---|
Mezőmodel | Típusstring | KövetelményKötelező | Értékek és korlátok google/gemini-3-pro-image | Alapértelmezett— |
Mezőmessages | Típusmessage[] | KövetelményKötelező | Értékek és korlátok | Alapértelmezett— |
Mezőmessages[].role | Típusstring | KövetelményKötelező | Értékek és korlátok user, assistant | Alapértelmezett— |
Mezőmessages[].content | Típusstring | KövetelményKötelező | Értékek és korlátok | Alapértelmezett— |
Mezőmax_tokens | Típusinteger | KövetelményKötelező | Értékek és korlátok | Alapértelmezett— |
Mezőstream | Típusboolean | KövetelményOpcionális | Értékek és korlátok | Alapértelmezettfalse |
Bemeneti anyagok kombinációi
Szöveg · UTF-8 szöveg
messages[].content karakterlánc
Metódus paraméterei és életciklusa
| Paraméter | Szerződés |
|---|---|
Paramétercontent_type | Szerződésapplication/json |
Paraméterrequired | Szerződésmodel, messages, max_tokens |
Paraméteroptional_controls | Szerződésstream |
Paramétermaterial_types | Szerződéstext |
Paramétertext_file_material | SzerződésOlvassa el a tényleges UTF-8 dokumentumot, és tegye a szövegét a jelzett bemeneti karakterláncba vagy az üzenettartalom karakterláncába. |
Életciklus: synchronous_or_streamed
Díjcsomagok
A díjszabás nem ad új kérési lehetőségeket. A támogatott paraméterek a kiválasztott módszernél szerepelnek.
- Gyors mód
- Normál díjszabás Ha a gyors mód van kiválasztva
- Flex mód
- Normál díjszabás Ha a flex mód van kiválasztva
- Maximális gondolkodási ráfordítás
- Normál díjszabás Ha a maximális gondolkodási ráfordításra a default beállításhoz tartozó korrekció vonatkozik
- Explicit gyorsítótárazás díjai
- Nincs engedélyezve Ha explicit gyorsítótárazást kérnek
Ailoot-díjak
Árak beállításonként
Minden díjat a megjelenített feltételekhez rendeljen. Az alternatív beállítások minden csoportjához egy díjtételt használjon.
| Beállítás | Díjtáblázat | Kontextustokenek, több mint | Kontextustokenek, legfeljebb | Díj |
|---|---|---|---|---|
| BeállításTokenenkénti alapárak | DíjtáblázatAlapdíj | Kontextustokenek, több mint— | Kontextustokenek, legfeljebbNincs felső korlát | Díj Bemenet · Bemeneti tokenek $0.004 / 1K token Kimenet · Kimeneti tokenek $0.024 / 1K token Bemenet · Gyorsítótár olvasása $0.0004 / 1K token Bemenet · Írás a gyorsítótárba $0.00075 / 1K token Bemenet · Írás a gyorsítótárba, 1 óra — / 1K token Kimenet · Kimeneti képtokenek $0.24 / 1K képtoken |
| BeállításA kéréshossz szerinti 1. ársáv | Díjtáblázat— | Kontextustokenek, több mint0 | Kontextustokenek, legfeljebbNincs felső korlát | Díj Bemenet · Bemeneti tokenek $0.004 / 1K token Kimenet · Kimeneti tokenek $0.024 / 1K token Bemenet · Gyorsítótár olvasása $0.0004 / 1K token Bemenet · Írás a gyorsítótárba $0.00075 / 1K token Bemenet · Írás a gyorsítótárba, 1 óra — / 1K token |
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 Ultra · Anthropic Messages
{
"model": "google/gemini-3-pro-image",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3-pro-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3-pro-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Eredmények fogadása és mentése
Ailoot Ultra · Anthropic Messages
JSON vagy SSE
Őrizzen meg minden elkészült eredményt
Őrizzen meg minden teljes visszaadott választ, fájlt és tartalomrészt.
Őrizze meg az összes tartalomblokkot, a gondolkodási tartalom aláírásait és a tényleges eszközhasználati ID-kat. Állítsa össze az összes SSE-blokk részleges frissítését; az első szövegblokk nem a teljes kimenet.
Ha az eredeti választ ellenőrizni kell
Őrizze meg a kérés-/válaszazonosítókat és a fejléceket. Nincs megadva általános URL a szöveges feladatok lekéréséhez.
Válaszmezők
| Mező | Típus |
|---|---|
Mezőid | Típusstring |
Mezőmodel | Típusstring |
Mezőcontent[] | Típustext|thinking|tool_use|other content block |
Mezőstop_reason | Típusstring|null |
Mezőusage | Típusobject |
Hibák és következő lépések
| Válasz | Feltétel | Következő lépés |
|---|---|---|
Válasz400 · invalid_request_error | FeltételÉrvénytelen kötelező mezők, az anyag érvénytelen reprezentációja vagy érvénytelen paraméterérték | Következő lépésJavítsa a jelzett mezőket egy új létrehozási kérés előtt. |
Álnevek
Modell álnevei
Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image
Metódusútvonalak álnevei
/v1/images
Kapcsolódó modellazonosítók
google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image
FAQ · Google: Nano Banana Pro (Gemini 3 Pro Image)
- Milyen bemenetek és eredmények érhetők el?
POST /v1/images/generations·gemini-3-pro-image:text→imagePOST /v1/images/generations·gemini-3-pro-image-preview:text→imagePOST /v1/images/generations·nano-banana-pro:text→imagePOST /v1/chat/completions·google/gemini-3-pro-image:text→textPOST /v1/images/generations·google/gemini-3-pro-image:text,image→imagePOST /v1/messages·google/gemini-3-pro-image:text→json,sse- Mely mezőket használja a kérés?
POST /v1/images/generations·gemini-3-pro-image:model,prompt,n,response_format,streamPOST /v1/images/generations·gemini-3-pro-image-preview:model,prompt,n,response_format,streamPOST /v1/images/generations·nano-banana-pro:model,prompt,n,response_format,streamPOST /v1/chat/completions·google/gemini-3-pro-image:model,messages,stream,modalities,providerPOST /v1/images/generations·google/gemini-3-pro-image:model,prompt,resolution,aspect_ratio,n,input_references,providerPOST /v1/messages·google/gemini-3-pro-image:model,messages,max_tokens,stream- Milyen korlátok érvényesek?
POST /v1/images/generations·gemini-3-pro-image:ctx:65536;max_out:32768;n.minimum:1POST /v1/images/generations·gemini-3-pro-image-preview:ctx:65536;max_out:32768;n.minimum:1POST /v1/images/generations·nano-banana-pro:ctx:65536;max_out:32768;n.minimum:1POST /v1/chat/completions·google/gemini-3-pro-image:messages.min_items:1POST /v1/images/generations·google/gemini-3-pro-image:n.minimum:1;n.maximum:1