modely

Google: Nano Banana Pro (Gemini 3 Pro Image)

Markdown · JSON

Google: Nano Banana Pro (Gemini 3 Pro Image)

Nano Banana Pro (Gemini 3 Pro Image) je obrazový model spoločnosti Google riadený uvažovaním na zložitý dizajn, produktové makety a faktické vizualizácie. Prijíma text a obrazové referencie a generuje obrázky s textom, s výstupom 1K–4K a podrobným tvorivým ovládaním.

O modeli

Tento opis pokrýva možnosti modelu. Dostupné vstupy, výstupy a voľby v Ailoot sú uvedené nižšie pre vybranú metódu.

Nano Banana Pro je model Gemini 3 Pro Image spoločnosti Google na generovanie a úpravy obrázkov riadené uvažovaním. Výrobca kladie do centra zamýšľaného použitia zložitý grafický dizajn, produktové makety s vysokou vernosťou predlohe a faktickú vizualizáciu dát. Prijíma text a obrázky a vytvára obrázok a text. Táto pomenovaná obrazová edícia Pro je založená na Gemini 3 Pro, pričom si zachováva vlastný profil vstupov a schopností pre obrazové úlohy.

Model podporuje obrázky 1K, 2K a 4K. Dokumentované tvary zahŕňajú 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 a 21:9. Štvorcový obrázok 4K má rozmery 4096 × 4096; obrázok 4K s pomerom 16:9 má rozmery 5504 × 3072. Rozlíšenie a pomer strán vyberte podľa artefaktu, ktorý potrebujete, či už ide o plagát na výšku, produktovú scénu alebo širokú vysvetľujúcu grafiku. Možnosť 0.5K a ďalšie extrémne pomery Gemini 3.1 Flash Image nie sú súčasťou tejto tabuľky Pro.

Vykresľovanie textu podporuje čitateľné písmo na plagátoch, diagramoch a ďalších navrhnutých artefaktoch. Pri zložitej infografike poskytnite podkladové fakty, presné znenie, poradie čítania a vzťah medzi označeniami a vizuálnymi prvkami. Oddeľte informácie, ktoré sa majú odovzdať, od požadovaného umeleckého štýlu. Google odporúča najprv pripraviť text a potom generovať obrázok, ktorý ho obsahuje. To je obzvlášť užitočné, keď kompozícia spája nadpis, diagram a viacero krátkych popisov.

Viacobrazový vstup podporuje až 14 referencií. Tabuľka funkcií Google opisuje až šesť objektových referencií pre vernosť, až päť referencií postáv pre konzistentnosť a až tri štýlové referencie. Tieto úlohy pomáhajú pripraviť zložený vizuál: produktová fotografia definuje vzhľad, samostatný obrázok určuje prostredie a štýlový obrázok ovplyvňuje spracovanie. Povedzte modelu, ktoré detaily sú záväzné a ktoré referencie poskytujú inšpiráciu, namiesto žiadosti o nerozlišujúce spojenie všetkých viditeľných prvkov.

Ukotvenie v Google Search môže poskytnúť informácie zo skutočného sveta pre faktickú vizualizáciu alebo scénu ovplyvnenú aktuálnymi podmienkami. Obrazový postup Pro dokumentuje webové ukotvenie; rozšírenie Image Search je dokumentované osobitne pre Nano Banana 2.1 a Gemini 3.1 Flash Image. Pri dátovej grafike poskytnite hodnoty, ktoré chcete zobraziť, alebo si v postupe výrobcu vyžiadajte zdrojovo ukotvené informácie a potom výslovne určte vzťah, označenia a rozloženie. Generovanie informované vyhľadávaním stále vytvára obrázok určený na kontrolu, nie náhradu overenia zobrazených faktov.

Uvažovanie podporuje zostavenie zložitého promptu pred konečným vykreslením. Obrazová príručka opisuje priebežné obrázky používané na testovanie kompozície a logiky, ktoré sa líšia od konečného artefaktu. Na túto edíciu Pro neprenášajte tabuľku ovládania minimal/high z Nano Banana 2 ani tabuľku Nano Banana 2.1 s predvolenou úrovňou medium. Pri náročnom dizajne poskytnite úplné zadanie s vizuálnou hierarchiou, požadovanými vzťahmi medzi objektmi a prvkami, ktoré musia prežiť neskoršie úpravy.

Karta modelu opisuje podstatné pretrvávajúce obmedzenia: veľmi malý text a dlhé pasáže sa môžu vykresliť zle, vzhľad postavy sa môže medzi referenciou a výsledkom zmeniť a maskované úpravy alebo úpravy podľa náčrtku môžu pokyn splniť iba čiastočne alebo zanechať stopy. Model môže tiež zameniť ľavú a pravú stranu alebo skopírovať zdrojový prvok do novej kompozície. Pri produktovej úprave výslovne určte zachovávanú geometriu a označenia a skontrolujte upravenú oblasť; pri diagrame porovnajte smer šípok a relatívne polohy objektov.

Aktuálna tabuľka API uvádza vstupný limit 65 536 tokenov a výstupný limit 32 768 tokenov. Podporované sú generovanie obrázkov, uvažovanie, ukotvenie vo vyhľadávaní a dávkové spracovanie; generovanie zvuku, volanie funkcií, vykonávanie kódu, ukladanie do vyrovnávacej pamäte, štruktúrované výstupy, vyhľadávanie v súboroch, kontext URL a Live API sú nepodporované. Obrazová úloha v tomto profile neprijíma zvukový ani video vstup. Generované obrázky obsahujú SynthID a požadovaný počet výstupných obrázkov sa nie vždy dodrží presne.

Praktické produktové zadanie môže kombinovať obrázok produktu, referenciu osvetlenia a presný nadpis: „Zachovajte proporcie produktu a jeho písmo, zobrazte ho na svetlom kamennom povrchu pod jemným bočným svetlom a hornú tretinu nechajte voľnú pre dodaný nadpis.“ Pri faktickom diagrame identifikujte každú entitu a prepojenie a poskytnite schválené označenia. Výsledok dolaďujte v konverzácii pomenovaním jednej zmeny a prvkov, ktoré treba zachovať, a vybraný obrázok so sprievodným vysvetľujúcim textom uchovajte spolu ako dizajnový artefakt.

Praktická úloha

Praktická úloha

Technický príklad v angličtine

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.

Očakávaný výsledok

One landscape image with four labeled stages and arrows matching the supplied cycle.

Overenie výsledku

Inspect that arrows connect RETURN to INSPECT to WASH to REFILL in that order, with exact labels.
Ailoot · Obrázky POST /v1/images/generations gemini-3-pro-image

gemini-3-pro-image

Google /gemini-3-pro-image
ID modelu
  • gemini-3-pro-image
  • gemini-3-pro-image-preview
  • nano-banana-pro

Úvod

Nano Banana Pro (Gemini 3 Pro Image) je obrazový model spoločnosti Google riadený uvažovaním na zložitý dizajn, produktové makety a faktické vizualizácie. Prijíma text a obrazové referencie a generuje obrázky s textom, s výstupom 1K–4K a podrobným tvorivým ovládaním.

Povolené vstupy
Text
Výsledky
Obrázky

Dostupné v Ailoot · vstupy a metódy

Ailoot · Obrázky POST /v1/images/generations
Vstup
text
Výstup
image
Kontext
65 536 tokens
Maximálny výstup
32 768 tokens
Výstupný formát
Súbor obrázka
PoleTypPožiadavkaHodnoty a limityPredvolené
PolemodelTypstringPožiadavkaPovinnéHodnoty a limity
gemini-3-pro-image
Predvolené—
PolepromptTypstringPožiadavkaPovinnéHodnoty a limity
Minimálna dĺžka: 1
Predvolené—
PolenTypintegerPožiadavkaVoliteľnéHodnoty a limity
Minimum: 1
Predvolené1
Poleresponse_formatTypstringPožiadavkaVoliteľnéHodnoty a limity
url, b64_json
Predvolené—
PolestreamTypbooleanPožiadavkaVoliteľnéHodnoty a limityPredvolenéfalse
PolesizeTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolequalityTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolebackgroundTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleoutput_formatTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleoutput_compressionTypintegerPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolemoderationTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleinput_fidelityTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolestyleTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Polepartial_imagesTypintegerPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Kombinácie vstupných podkladov

Z textu na obrázok · Povinné: prompt

Parametre a životný cyklus metódy
ParameterŠpecifikácia
Parametermaterial_typesŠpecifikáciatext
ParameterrequiredŠpecifikáciamodel, prompt
Parameteroptional_controlsŠpecifikácianull
Parametercontent_typeŠpecifikáciaapplication/json

Životný cyklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · skutočne vrátené task_id alebo záznam v knižnici médií

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

Cenník

Sadzby metód Ailoot

Ailoot ObrázkyPOST /v1/images/generations
Vstup
0,002 USD / 1K obrazových tokenov
Výstup
0,134 USD za obrázok 1K
Výstup
0,134 USD za obrázok 2K
Výstup
0,24 USD za obrázok 4K

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →

Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

Ceny podľa konfigurácie

KonfiguráciaSadzobníkPoplatok
KonfiguráciaUltraSadzobníkZákladná sadzbaPoplatok
Vstup · Vstupné tokeny $0.004000 / 1K tokenov
Výstup · Výstupné tokeny $0.024000 / 1K tokenov
Vstup · obrázok $0.004000 / 1K tokenov
Výstup · výstup obrázka $0.24000 / 1K tokenov
Vstup · zvuk $0.004000 / 1K tokenov
Vstup · vyrovnávacia pamäť vstupného zvuku $0.0004000 / 1K tokenov
Výstup · vyhľadávanie na webe $0.028 za vyhľadávanie na webe
Výstup · interné uvažovanie $0.024000 / 1K tokenov
Vstup · Čítanie cache $0.0004000 / 1K tokenov
Vstup · Zápis do cache $0.000750000 / 1K tokenov

Príklady požiadaviek

Ailoot · Obrázky

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

Prijať a uložiť výsledky

Ailoot · Obrázky

Stiahnite každý vrátený obrázok alebo uložte jeho obsah Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Uchovať všetky dokončené výsledky

Uložte každý dokončený obrázok; stiahnite obsah z každej vrátenej URL alebo dekódujte jeho obsah Base64.

Uložte každú dátovú položku. Dekódujte každé b64_json alebo stiahnite obsah z každej vrátenej podpísanej URL. Príponu názvu súboru vyberte podľa skutočného typu MIME/bajtov.

Ak treba overiť pôvodnú odpoveď

Ak je potrebné skontrolovať výsledok generovania alebo úpravy obrázka, uchovajte pôvodné operation_id/X-Client-Request-ID a vrátené informácie o výsledku. Existujúce vlastné výsledky obnovte cez knižnicu médií pomocou skutočných hodnôt task_id alebo asset_id. Požiadavku na generovanie/úpravu znova neodosielajte ani nevytvárajte URL na priebežné zisťovanie stavu z operation_id.

Polia odpovede
PoleTyp
PolecreatedTypinteger
Poledata[].urlTypstring
Poledata[].b64_jsonTypbase64 string
PoleusageTypobject
Chyby a ďalšie kroky
OdpoveďPodmienkaĎalší krok
Odpoveď400 · invalid_request_errorPodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametraĎalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia.
Odpoveďserver_errorPodmienkaVrátená odpoveď uvádza, že operáciu alebo výsledok je potrebné skontrolovaťĎalší krokUchovajte pôvodné vrátené ID operácie/úlohy, hlavičky požiadavky a odpoveď; naďalej čítajte údaje o tejto pôvodnej operácii podporovaným spôsobom. Požiadavku na vytvorenie znova neodosielajte.

Aliasy

Aliasy modelov

Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image

Aliasy ciest metód

/v1/images

Súvisiace ID na volanie

google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image

Ailoot · Obrázky POST /v1/images/generations gemini-3-pro-image-preview

gemini-3-pro-image-preview

Google /gemini-3-pro-image-preview
ID modelu
  • gemini-3-pro-image
  • gemini-3-pro-image-preview
  • nano-banana-pro

Úvod

Nano Banana Pro (Gemini 3 Pro Image) je obrazový model spoločnosti Google riadený uvažovaním na zložitý dizajn, produktové makety a faktické vizualizácie. Prijíma text a obrazové referencie a generuje obrázky s textom, s výstupom 1K–4K a podrobným tvorivým ovládaním.

Povolené vstupy
Text
Výsledky
Obrázky

Dostupné v Ailoot · vstupy a metódy

Ailoot · Obrázky POST /v1/images/generations
Vstup
text
Výstup
image
Kontext
65 536 tokens
Maximálny výstup
32 768 tokens
Výstupný formát
Súbor obrázka
PoleTypPožiadavkaHodnoty a limityPredvolené
PolemodelTypstringPožiadavkaPovinnéHodnoty a limity
gemini-3-pro-image-preview
Predvolené—
PolepromptTypstringPožiadavkaPovinnéHodnoty a limity
Minimálna dĺžka: 1
Predvolené—
PolenTypintegerPožiadavkaVoliteľnéHodnoty a limity
Minimum: 1
Predvolené1
Poleresponse_formatTypstringPožiadavkaVoliteľnéHodnoty a limity
url, b64_json
Predvolené—
PolestreamTypbooleanPožiadavkaVoliteľnéHodnoty a limityPredvolenéfalse
PolesizeTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolequalityTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolebackgroundTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleoutput_formatTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleoutput_compressionTypintegerPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolemoderationTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleinput_fidelityTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolestyleTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Polepartial_imagesTypintegerPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Kombinácie vstupných podkladov

Z textu na obrázok · Povinné: prompt

Parametre a životný cyklus metódy
ParameterŠpecifikácia
Parametermaterial_typesŠpecifikáciatext
ParameterrequiredŠpecifikáciamodel, prompt
Parameteroptional_controlsŠpecifikácianull
Parametercontent_typeŠpecifikáciaapplication/json

Životný cyklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · skutočne vrátené task_id alebo záznam v knižnici médií

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

Cenník

Sadzby metód Ailoot

Ailoot ObrázkyPOST /v1/images/generations
Vstup
0,002 USD / 1K obrazových tokenov
Výstup
0,134 USD za obrázok 1K
Výstup
0,134 USD za obrázok 2K
Výstup
0,24 USD za obrázok 4K

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →

Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

Ceny podľa konfigurácie

KonfiguráciaSadzobníkPoplatok
KonfiguráciaUltraSadzobníkZákladná sadzbaPoplatok
Vstup · Vstupné tokeny $0.004000 / 1K tokenov
Výstup · Výstupné tokeny $0.024000 / 1K tokenov
Vstup · obrázok $0.004000 / 1K tokenov
Výstup · výstup obrázka $0.24000 / 1K tokenov
Vstup · zvuk $0.004000 / 1K tokenov
Vstup · vyrovnávacia pamäť vstupného zvuku $0.0004000 / 1K tokenov
Výstup · vyhľadávanie na webe $0.028 za vyhľadávanie na webe
Výstup · interné uvažovanie $0.024000 / 1K tokenov
Vstup · Čítanie cache $0.0004000 / 1K tokenov
Vstup · Zápis do cache $0.000750000 / 1K tokenov

Príklady požiadaviek

Ailoot · Obrázky

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

Prijať a uložiť výsledky

Ailoot · Obrázky

Stiahnite každý vrátený obrázok alebo uložte jeho obsah Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Uchovať všetky dokončené výsledky

Uložte každý dokončený obrázok; stiahnite obsah z každej vrátenej URL alebo dekódujte jeho obsah Base64.

Uložte každú dátovú položku. Dekódujte každé b64_json alebo stiahnite obsah z každej vrátenej podpísanej URL. Príponu názvu súboru vyberte podľa skutočného typu MIME/bajtov.

Ak treba overiť pôvodnú odpoveď

Ak je potrebné skontrolovať výsledok generovania alebo úpravy obrázka, uchovajte pôvodné operation_id/X-Client-Request-ID a vrátené informácie o výsledku. Existujúce vlastné výsledky obnovte cez knižnicu médií pomocou skutočných hodnôt task_id alebo asset_id. Požiadavku na generovanie/úpravu znova neodosielajte ani nevytvárajte URL na priebežné zisťovanie stavu z operation_id.

Polia odpovede
PoleTyp
PolecreatedTypinteger
Poledata[].urlTypstring
Poledata[].b64_jsonTypbase64 string
PoleusageTypobject
Chyby a ďalšie kroky
OdpoveďPodmienkaĎalší krok
Odpoveď400 · invalid_request_errorPodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametraĎalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia.
Odpoveďserver_errorPodmienkaVrátená odpoveď uvádza, že operáciu alebo výsledok je potrebné skontrolovaťĎalší krokUchovajte pôvodné vrátené ID operácie/úlohy, hlavičky požiadavky a odpoveď; naďalej čítajte údaje o tejto pôvodnej operácii podporovaným spôsobom. Požiadavku na vytvorenie znova neodosielajte.

Aliasy

Aliasy modelov

Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image

Aliasy ciest metód

/v1/images

Súvisiace ID na volanie

google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image

Ailoot · Obrázky POST /v1/images/generations nano-banana-pro

nano-banana-pro

Google /nano-banana-pro
ID modelu
  • gemini-3-pro-image
  • gemini-3-pro-image-preview
  • nano-banana-pro

Úvod

Nano Banana Pro (Gemini 3 Pro Image) je obrazový model spoločnosti Google riadený uvažovaním na zložitý dizajn, produktové makety a faktické vizualizácie. Prijíma text a obrazové referencie a generuje obrázky s textom, s výstupom 1K–4K a podrobným tvorivým ovládaním.

Povolené vstupy
Text
Výsledky
Obrázky

Dostupné v Ailoot · vstupy a metódy

Ailoot · Obrázky POST /v1/images/generations
Vstup
text
Výstup
image
Kontext
65 536 tokens
Maximálny výstup
32 768 tokens
Výstupný formát
Súbor obrázka
PoleTypPožiadavkaHodnoty a limityPredvolené
PolemodelTypstringPožiadavkaPovinnéHodnoty a limity
nano-banana-pro
Predvolené—
PolepromptTypstringPožiadavkaPovinnéHodnoty a limity
Minimálna dĺžka: 1
Predvolené—
PolenTypintegerPožiadavkaVoliteľnéHodnoty a limity
Minimum: 1
Predvolené1
Poleresponse_formatTypstringPožiadavkaVoliteľnéHodnoty a limity
url, b64_json
Predvolené—
PolestreamTypbooleanPožiadavkaVoliteľnéHodnoty a limityPredvolenéfalse
PolesizeTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolequalityTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolebackgroundTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleoutput_formatTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleoutput_compressionTypintegerPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolemoderationTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleinput_fidelityTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolestyleTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Polepartial_imagesTypintegerPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Kombinácie vstupných podkladov

Z textu na obrázok · Povinné: prompt

Parametre a životný cyklus metódy
ParameterŠpecifikácia
Parametermaterial_typesŠpecifikáciatext
ParameterrequiredŠpecifikáciamodel, prompt
Parameteroptional_controlsŠpecifikácianull
Parametercontent_typeŠpecifikáciaapplication/json

Životný cyklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · skutočne vrátené task_id alebo záznam v knižnici médií

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.

Cenník

Sadzby metód Ailoot

Ailoot ObrázkyPOST /v1/images/generations
Vstup
0,002 USD / 1K obrazových tokenov
Výstup
0,134 USD za obrázok 1K
Výstup
0,134 USD za obrázok 2K
Výstup
0,24 USD za obrázok 4K

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →

Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Referenčné sadzobníky modelu

Ceny podľa konfigurácie

KonfiguráciaSadzobníkPoplatok
KonfiguráciaUltraSadzobníkZákladná sadzbaPoplatok
Vstup · Vstupné tokeny $0.004000 / 1K tokenov
Výstup · Výstupné tokeny $0.024000 / 1K tokenov
Vstup · obrázok $0.004000 / 1K tokenov
Výstup · výstup obrázka $0.24000 / 1K tokenov
Vstup · zvuk $0.004000 / 1K tokenov
Vstup · vyrovnávacia pamäť vstupného zvuku $0.0004000 / 1K tokenov
Výstup · vyhľadávanie na webe $0.028 za vyhľadávanie na webe
Výstup · interné uvažovanie $0.024000 / 1K tokenov
Vstup · Čítanie cache $0.0004000 / 1K tokenov
Vstup · Zápis do cache $0.000750000 / 1K tokenov

Príklady požiadaviek

Ailoot · Obrázky

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

Prijať a uložiť výsledky

Ailoot · Obrázky

Stiahnite každý vrátený obrázok alebo uložte jeho obsah Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Uchovať všetky dokončené výsledky

Uložte každý dokončený obrázok; stiahnite obsah z každej vrátenej URL alebo dekódujte jeho obsah Base64.

Uložte každú dátovú položku. Dekódujte každé b64_json alebo stiahnite obsah z každej vrátenej podpísanej URL. Príponu názvu súboru vyberte podľa skutočného typu MIME/bajtov.

Ak treba overiť pôvodnú odpoveď

Ak je potrebné skontrolovať výsledok generovania alebo úpravy obrázka, uchovajte pôvodné operation_id/X-Client-Request-ID a vrátené informácie o výsledku. Existujúce vlastné výsledky obnovte cez knižnicu médií pomocou skutočných hodnôt task_id alebo asset_id. Požiadavku na generovanie/úpravu znova neodosielajte ani nevytvárajte URL na priebežné zisťovanie stavu z operation_id.

Polia odpovede
PoleTyp
PolecreatedTypinteger
Poledata[].urlTypstring
Poledata[].b64_jsonTypbase64 string
PoleusageTypobject
Chyby a ďalšie kroky
OdpoveďPodmienkaĎalší krok
Odpoveď400 · invalid_request_errorPodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametraĎalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia.
Odpoveďserver_errorPodmienkaVrátená odpoveď uvádza, že operáciu alebo výsledok je potrebné skontrolovaťĎalší krokUchovajte pôvodné vrátené ID operácie/úlohy, hlavičky požiadavky a odpoveď; naďalej čítajte údaje o tejto pôvodnej operácii podporovaným spôsobom. Požiadavku na vytvorenie znova neodosielajte.

Aliasy

Aliasy modelov

Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image

Aliasy ciest metód

/v1/images

Súvisiace ID na volanie

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-image

Google /google/gemini-3-pro-image

Úvod

Nano Banana Pro (Gemini 3 Pro Image) je obrazový model spoločnosti Google riadený uvažovaním na zložitý dizajn, produktové makety a faktické vizualizácie. Prijíma text a obrazové referencie a generuje obrázky s textom, s výstupom 1K–4K a podrobným tvorivým ovládaním.

Povolené vstupy
Text
Výsledky
Text

Dostupné v Ailoot · vstupy a metódy

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Vstup
text
Výstup
text
Výstupný formát
json alebo SSE
PoleTypPožiadavkaHodnoty a limityPredvolené
PolemodelTypstringPožiadavkaPovinnéHodnoty a limity
google/gemini-3-pro-image
Predvolené—
PolemessagesTypmessage[]PožiadavkaPovinnéHodnoty a limity
Minimálny počet položiek: 1
Predvolené—
Polemessages[].roleTypstringPožiadavkaPovinnéHodnoty a limity
Príklady: system, user, assistant, tool, function
Podmienky: Tieto roly sú výslovne zastúpené typmi kompatibility v zdrojovom kóde; presný súbor rolí zostáva závislý od modelu.
Závisí od modelu
Predvolené—
Polemessages[].contentTypstring|content_part[]|nullPožiadavkaVoliteľnéHodnoty a limityPredvolené—
Polemessages[].tool_callsTyptool_call[]PožiadavkaVoliteľnéHodnoty a limityPredvolené—
Polemessages[].tool_call_idTypstringPožiadavkaVoliteľnéHodnoty a limity
Platí, keď: role=tool; použite skutočne vrátené ID
Predvolené—
Polemessages[].nameTypstringPožiadavkaVoliteľnéHodnoty a limityPredvolené—
Polemessages[].reasoning_contentTypstringPožiadavkaVoliteľnéHodnoty a limity
Platí, keď: Posielajte späť skutočne vrátené uvažovanie, ak ho tento model používa
Predvolené—
Polemessages[].reasoning_detailsTypobject|arrayPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Polemax_tokensTypintegerPožiadavkaVoliteľnéHodnoty a limity
Minimum: 1
Závisí od modelu
Predvolené—
Polemax_completion_tokensTypintegerPožiadavkaVoliteľnéHodnoty a limity
Minimum: 1
Závisí od modelu
Predvolené—
PolestreamTypbooleanPožiadavkaVoliteľnéHodnoty a limityPredvolenéfalse
Polestream_options.include_usageTypbooleanPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PoletemperatureTypnumberPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poletop_pTypnumberPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolestopTypstring|string[]PožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PoletoolsTypfunction_tool[]PožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poletools[].typeTypstringPožiadavkaVoliteľnéHodnoty a limity
function
Závisí od modelu
Predvolené—
Poletools[].function.nameTypstringPožiadavkaPovinnéHodnoty a limity
Platí, keď: poskytnutý nástroj typu funkcia
Predvolené—
Poletools[].function.descriptionTypstringPožiadavkaVoliteľnéHodnoty a limityPredvolené—
Poletools[].function.parametersTypJSON_schemaPožiadavkaVoliteľnéHodnoty a limityPredvolené—
Poletool_choiceTypstring|objectPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleparallel_tool_callsTypbooleanPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleresponse_formatTypobjectPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Polereasoning_effortTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolereasoningTypobjectPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleservice_tierTypstringPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PoleinstructionsTypstringPožiadavkaVoliteľnéHodnoty a limity
Pole kompatibility
Predvolené—
PolefunctionsTypfunction[]PožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Polefunction_callTypstring|objectPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
Poleprompt_cache_optionsTypobjectPožiadavkaVoliteľnéHodnoty a limity
Závisí od modelu
Predvolené—
PolemodalitiesTypstring[]PožiadavkaVoliteľnéHodnoty a limity
text
Predvolené—
PoleproviderTypobjectPožiadavkaVoliteľnéHodnoty a limity
Podmienky: provider.options sa na tejto textovej trase Ultra odmieta
Predvolené—
Polecache_control.ttlTypstringPožiadavkaVoliteľnéHodnoty a limity
Podmienky: Hodnota 1h sa v skutočne používaných poliach cache promptov odmieta
Predvolené—
Kombinácie vstupných podkladov

Text · Text UTF8

messages[].content

Parametre a životný cyklus metódy
ParameterŠpecifikácia
Parametercontent_typeŠpecifikáciaapplication/json
ParameterrequiredŠpecifikáciamodel, messages
Parametermaterial_typesŠpecifikáciatext
ParametermessagesŠpecifikáciapole správ so štruktúrou role/content
Parameterfile_materialŠpecifikáciaskutočný dokument UTF-8 vložený ako doslovný text; ID súboru sa neodvodzuje
Parameteroptional_controlsŠpecifikáciastream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametercontrol_scopeŠpecifikáciazávisí od modelu; používateľské nástroje typu funkcia sa líšia od nástrojov prevádzkovaných službou
Parameteroutput_modalitiesŠpecifikáciatext
Parameterhosted_operationsŠpecifikáciafalse
Parametermultimodal_input_bindingŠpecifikácianull

Životný cyklus: synchronous_or_streamed

Pošlite presné ID modelu spolu s messages.

Dĺžka kontextu nie je horná hranica výstupu.

Textový súbor môže poskytnúť doslovný text; obrazové a zvukové vstupy a vstupy so súborovými objektmi potrebujú presné naviazanie.

Cenník

Tarifné údaje nepridávajú možnosti požiadavky. Podporované parametre sú uvedené pri vybranej metóde.

Rýchly režim
Štandardná sadzba Keď je zvolený rýchly režim
Režim Flex
Štandardná sadzba Keď je zvolený režim flex
Maximálna úroveň uvažovania
Štandardná sadzba Keď sa pri maximálnej úrovni uvažovania používa predvolená úprava (default)
Ceny explicitnej cache
Nie je zapnuté Keď sa požaduje explicitná cache

Sadzby Ailoot

Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

KonfiguráciaSadzobníkPočet tokenov kontextu väčší nežTokeny kontextu, najviac (vrátane hranice)Poplatok
KonfiguráciaZákladné sadzby za tokenySadzobníkZákladná sadzbaPočet tokenov kontextu väčší než—Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranicePoplatok
Vstup · Vstupné tokeny $0.004 / 1K tokenov
Výstup · Výstupné tokeny $0.024 / 1K tokenov
Vstup · Čítanie cache $0.0004 / 1K tokenov
Vstup · Zápis do cache $0.00075 / 1K tokenov
Vstup · Zápis do cache, 1 hod — / 1K tokenov
Výstup · Tokeny výstupného obrázka $0.24 / 1K obrazových tokenov
KonfiguráciaPásmo dĺžky požiadavky 1Sadzobník—Počet tokenov kontextu väčší než0Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranicePoplatok
Vstup · Vstupné tokeny $0.004 / 1K tokenov
Výstup · Výstupné tokeny $0.024 / 1K tokenov
Vstup · Čítanie cache $0.0004 / 1K tokenov
Vstup · Zápis do cache $0.00075 / 1K tokenov
Vstup · Zápis do cache, 1 hod — / 1K tokenov

Podrobnosti referenčnej tarify

Referenčné sadzobníky modelu nemenia výber metódy, cenové odhady ani poplatky. Aktívne poplatky používajú sadzby vybranej metódy Ailoot.

Google: Nano Banana Pro (Gemini 3 Pro Image)

Ceny podľa konfigurácie

KonfiguráciaPodmienky účtovaniaPoplatok
KonfiguráciaGoogle: Nano Banana Pro (Gemini 3 Pro Image) · Predvolená konfiguráciaPodmienky účtovaniaPredvolená konfiguráciaPoplatok
Vstup · Vstupné tokeny 0,004 USD / 1K tokenov
Výstup · Výstupné tokeny 0,024 USD / 1K tokenov
Vstup · Vstupný obrázok 0,004 USD / 1K tokenov
Výstup · Výstupný obrázok 0,24 USD / 1K tokenov
Vstup · Zvukový vstup 0,004 USD / 1K tokenov
Vstup · Čítanie zvuku z vyrovnávacej pamäte 0,0004 USD / 1K tokenov
Výstup · Vyhľadávanie na webe 0,028 USD za vyhľadávanie
Výstup · Tokeny uvažovania 0,024 USD / 1K tokenov
Vstup · Čítanie cache 0,0004 USD / 1K tokenov
Vstup · Zápis do vyrovnávacej pamäte · 5 minút 0,00075 USD / 1K tokenov

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →

Príklady požiadaviek

Ailoot Ultra · OpenAI Chat

curlPython SDKStreamovanie v jazyku Python
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")

Prijať a uložiť výsledky

Ailoot Ultra · OpenAI Chat

json alebo SSE

Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte každý variant odpovede a jeho obsah, volania nástrojov a uvažovanie. V SSE zostavujte čiastkové zmeny podľa indexu variantu/nástroja a zachovajte konečný dôvod ukončenia aj údaje o spotrebe.

Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede
PoleTyp
Polechoices[].indexTypinteger
Polechoices[].message.contentTypstring|null
Polechoices[].message.tool_callsTyptool_call[]
Polechoices[].message.reasoning_contentTypstring
Polechoices[].message.reasoning_detailsTypobject|array
Polechoices[].finish_reasonTypstring|null
PoleusageTypobject
Chyby a ďalšie kroky
OdpoveďPodmienkaĎalší krok
Odpoveď400 · invalid_request_errorPodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametraĎalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia.

Aliasy

Aliasy modelov

Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image

Aliasy ciest metód

/v1/images

Súvisiace ID na volanie

google/gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro, gemini-3-pro-image

Ailoot Ultra · Obrázky POST /v1/images/generations google/gemini-3-pro-image

google/gemini-3-pro-image

Google /google/gemini-3-pro-image

Úvod

Nano Banana Pro (Gemini 3 Pro Image) je obrazový model spoločnosti Google riadený uvažovaním na zložitý dizajn, produktové makety a faktické vizualizácie. Prijíma text a obrazové referencie a generuje obrázky s textom, s výstupom 1K–4K a podrobným tvorivým ovládaním.

Povolené vstupy
Text · Obrázky
Výsledky
Obrázky

Dostupné v Ailoot · vstupy a metódy

Ailoot Ultra · Obrázky POST /v1/images/generations
Vstup
text, image
Výstup
image
PoleTypPožiadavkaHodnoty a limityPredvolené
PolemodelTypstringPožiadavkaPovinnéHodnoty a limity
google/gemini-3-pro-image
Predvolené—
PolepromptTypstringPožiadavkaPovinnéHodnoty a limity
Minimálna dĺžka: 1
Predvolené—
PoleresolutionTypstringPožiadavkaVoliteľnéHodnoty a limity
1K, 2K, 4K
Predvolené—
Poleaspect_ratioTypstringPožiadavkaVoliteľnéHodnoty a limity
1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9
Predvolené—
PolenTypintegerPožiadavkaVoliteľnéHodnoty a limity
Minimum: 1
Maximum: 1
Predvolené—
Poleinput_referencesTyparrayPožiadavkaVoliteľnéHodnoty a limity
Minimálny počet položiek: 0
Maximálny počet položiek: 14
Predvolené—
PoleproviderTypobjectPožiadavkaVoliteľnéHodnoty a limityPredvolené—
Parametre a životný cyklus metódy
ParameterŠpecifikácia
Parametercontent_typeŠpecifikáciaapplication/json
ParameterrequiredŠpecifikáciamodel, prompt
Parametermaterial_typesŠpecifikáciatext, image

Životný cyklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · skutočne vrátené task_id alebo záznam v knižnici médií

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Cenník

Ako sa vypočíta konečný poplatok

Zobrazené sadzby slúžia na odhad nákladov pred generovaním. Konečný poplatok sa vypočíta z nákladov zaznamenaných pri pôvodnom generovaní. Namerané trvanie výstupu a predpokladané množstvá nepredstavujú konečné účtované množstvo.

Tarifné údaje nepridávajú možnosti požiadavky. Podporované parametre sú uvedené pri vybranej metóde.

Rýchly režim
Neuvedené Keď je zvolený rýchly režim
Režim Flex
Neuvedené Keď je zvolený režim flex
Maximálna úroveň uvažovania
Neuvedené Keď sa pri maximálnej úrovni uvažovania používa predvolená úprava (default)

Odhadované sadzby na porovnanie

Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

KonfiguráciaSadzobníkOdhadované množstvoPoplatok
KonfiguráciaZákladné sadzby za tokenySadzobníkZákladná sadzbaOdhadované množstvo—Poplatok
Vstup · Vstupné tokeny · Odhad iba na porovnanie — / 1K tokenov
Výstup · Výstupné tokeny · Odhad iba na porovnanie — / 1K tokenov
Vstup · Čítanie cache · Odhad iba na porovnanie — / 1K tokenov
Vstup · Zápis do cache · Odhad iba na porovnanie — / 1K tokenov
Vstup · Zápis do cache, 1 hod · Odhad iba na porovnanie — / 1K tokenov
KonfiguráciaOdhadované náklady na generovanieSadzobník—Odhadované množstvoodhad pre jedno generovaniePoplatok
Výstup · Odhadované náklady na generovanie · Odhad iba na porovnanie $0.98304 odhad pred generovaním

Tento odhad nepredstavuje dodatočný poplatok ani pevnú sadzbu za dokončené generovanie.

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →

Príklady požiadaviek

Ailoot Ultra · Obrázky

curl
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

Prijať a uložiť výsledky

Ailoot Ultra · Obrázky

Stiahnite každý vrátený obrázok alebo uložte jeho obsah Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Čítanie ďalšieho obsahu
Čítať existujúce podklady, ktoré vám patria
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.
Uchovať všetky dokončené výsledky

Uložte každý dokončený obrázok; stiahnite obsah z každej vrátenej URL alebo dekódujte jeho obsah Base64.

Uchovajte úplnú odpoveď a hlavičky, všetky skutočné výstupy, pôvodné vrátené identifikátory a všetky polia s údajmi o spotrebe. Obnovte pôvodnú operáciu bez opätovného odoslania požiadavky na vytvorenie.

Ak treba overiť pôvodnú odpoveď

Uchovajte vrátené X-Client-Request-ID na zosúladenie záznamov. Čítajte iba skutočne vrátené hodnoty task_id/asset_id alebo vlastnú knižnicu médií; nikdy nevytvárajte URL úlohy z ID operácie a nikdy znova neodosielajte požiadavku na vytvorenie.

Polia odpovede
PoleTyp
PolecreatedTyp
Poledata[].urlTyp
Poledata[].b64_jsonTyp
PoleusageTyp

Aliasy

Aliasy modelov

Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image

Aliasy ciest metód

/v1/images

Súvisiace ID na volanie

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-image

Google /google/gemini-3-pro-image

Úvod

Nano Banana Pro (Gemini 3 Pro Image) je obrazový model spoločnosti Google riadený uvažovaním na zložitý dizajn, produktové makety a faktické vizualizácie. Prijíma text a obrazové referencie a generuje obrázky s textom, s výstupom 1K–4K a podrobným tvorivým ovládaním.

Povolené vstupy
Text
Výsledky
json · sse

Dostupné v Ailoot · vstupy a metódy

Ailoot Ultra · Anthropic Messages POST /v1/messages
Vstup
text
Výstup
json, sse
Výstupný formát
JSON alebo SSE
PoleTypPožiadavkaHodnoty a limityPredvolené
PolemodelTypstringPožiadavkaPovinnéHodnoty a limity
google/gemini-3-pro-image
Predvolené—
PolemessagesTypmessage[]PožiadavkaPovinnéHodnoty a limityPredvolené—
Polemessages[].roleTypstringPožiadavkaPovinnéHodnoty a limity
user, assistant
Predvolené—
Polemessages[].contentTypstringPožiadavkaPovinnéHodnoty a limityPredvolené—
Polemax_tokensTypintegerPožiadavkaPovinnéHodnoty a limityPredvolené—
PolestreamTypbooleanPožiadavkaVoliteľnéHodnoty a limityPredvolenéfalse
Kombinácie vstupných podkladov

Text · Text UTF-8

reťazec messages[].content

Parametre a životný cyklus metódy
ParameterŠpecifikácia
Parametercontent_typeŠpecifikáciaapplication/json
ParameterrequiredŠpecifikáciamodel, messages, max_tokens
Parameteroptional_controlsŠpecifikáciastream
Parametermaterial_typesŠpecifikáciatext
Parametertext_file_materialŠpecifikáciaPrečítajte skutočný dokument UTF-8 a vložte jeho text do uvedeného vstupného reťazca alebo reťazca obsahu správy.

Životný cyklus: synchronous_or_streamed

Cenník

Tarifné údaje nepridávajú možnosti požiadavky. Podporované parametre sú uvedené pri vybranej metóde.

Rýchly režim
Štandardná sadzba Keď je zvolený rýchly režim
Režim Flex
Štandardná sadzba Keď je zvolený režim flex
Maximálna úroveň uvažovania
Štandardná sadzba Keď sa pri maximálnej úrovni uvažovania používa predvolená úprava (default)
Ceny explicitnej cache
Nie je zapnuté Keď sa požaduje explicitná cache

Sadzby Ailoot

Ceny podľa konfigurácie

Každý poplatok priraďte k zobrazeným podmienkam. Pre každú skupinu alternatívnych konfigurácií použite jednu sadzbu.

KonfiguráciaSadzobníkPočet tokenov kontextu väčší nežTokeny kontextu, najviac (vrátane hranice)Poplatok
KonfiguráciaZákladné sadzby za tokenySadzobníkZákladná sadzbaPočet tokenov kontextu väčší než—Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranicePoplatok
Vstup · Vstupné tokeny $0.004 / 1K tokenov
Výstup · Výstupné tokeny $0.024 / 1K tokenov
Vstup · Čítanie cache $0.0004 / 1K tokenov
Vstup · Zápis do cache $0.00075 / 1K tokenov
Vstup · Zápis do cache, 1 hod — / 1K tokenov
Výstup · Tokeny výstupného obrázka $0.24 / 1K obrazových tokenov
KonfiguráciaPásmo dĺžky požiadavky 1Sadzobník—Počet tokenov kontextu väčší než0Tokeny kontextu, najviac (vrátane hranice)Bez hornej hranicePoplatok
Vstup · Vstupné tokeny $0.004 / 1K tokenov
Výstup · Výstupné tokeny $0.024 / 1K tokenov
Vstup · Čítanie cache $0.0004 / 1K tokenov
Vstup · Zápis do cache $0.00075 / 1K tokenov
Vstup · Zápis do cache, 1 hod — / 1K tokenov

Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →

Príklady požiadaviek

Ailoot Ultra · Anthropic Messages

Úplné minimálne telo požiadavky vo formáte JSONcurl · použite svoj dokument UTF-8Python · uložte úplný výsledok
{
  "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))

Prijať a uložiť výsledky

Ailoot Ultra · Anthropic Messages

JSON alebo SSE

Uchovať všetky dokončené výsledky

Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.

Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.

Ak treba overiť pôvodnú odpoveď

Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.

Polia odpovede
PoleTyp
PoleidTypstring
PolemodelTypstring
Polecontent[]Typtext|thinking|tool_use|other content block
Polestop_reasonTypstring|null
PoleusageTypobject
Chyby a ďalšie kroky
OdpoveďPodmienkaĎalší krok
Odpoveď400 · invalid_request_errorPodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametraĎalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia.

Aliasy

Aliasy modelov

Ailoot gemini-3-pro-image, gemini-3-pro-image-preview, nano-banana-pro
Ailoot Ultra google/gemini-3-pro-image

Aliasy ciest metód

/v1/images

Súvisiace ID na volanie

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)
Aké vstupy a výsledky sú dostupné?

POST /v1/images/generations · gemini-3-pro-image: text → image

POST /v1/images/generations · gemini-3-pro-image-preview: text → image

POST /v1/images/generations · nano-banana-pro: text → image

POST /v1/chat/completions · google/gemini-3-pro-image: text → text

POST /v1/images/generations · google/gemini-3-pro-image: text, image → image

POST /v1/messages · google/gemini-3-pro-image: text → json, sse

Aké polia používa požiadavka?

POST /v1/images/generations · gemini-3-pro-image: model, prompt, n, response_format, stream

POST /v1/images/generations · gemini-3-pro-image-preview: model, prompt, n, response_format, stream

POST /v1/images/generations · nano-banana-pro: model, prompt, n, response_format, stream

POST /v1/chat/completions · google/gemini-3-pro-image: model, messages, stream, modalities, provider

POST /v1/images/generations · google/gemini-3-pro-image: model, prompt, resolution, aspect_ratio, n, input_references, provider

POST /v1/messages · google/gemini-3-pro-image: model, messages, max_tokens, stream

Aké limity platia?

POST /v1/images/generations · gemini-3-pro-image: ctx: 65536; max_out: 32768; n.minimum: 1

POST /v1/images/generations · gemini-3-pro-image-preview: ctx: 65536; max_out: 32768; n.minimum: 1

POST /v1/images/generations · nano-banana-pro: ctx: 65536; max_out: 32768; n.minimum: 1

POST /v1/chat/completions · google/gemini-3-pro-image: messages.min_items: 1

POST /v1/images/generations · google/gemini-3-pro-image: n.minimum: 1; n.maximum: 1

Viac podrobností

Pripojte Ailoot k Claude Code, OpenCode, Hermes alebo vlastnej aplikácii.

Spoločnosť a jej portfólio projektov

Spoločnosť a jej portfólio projektov: milióny zákazníkov; mesačné tržby v miliardách.

Nakupujte tokeny so zľavou.

Zľava predplatného na pravidelnú prácu. Promo kódy až 50% na nákup tokenov.

Predplatné
Na pravidelné požiadavky vyberte tarifu so zľavou.
Promo kód až 50%
Pri nákupe zadajte kód. Cena sa prepočíta podľa prebiehajúcej akcie.
Výdavky v histórii
Pri každej požiadavke sa uloží model, tokeny a suma.

Vybrať predplatné · Zobraziť ceny modelov

Pripojte API k produktu, ktorý predávate.

SaaS, aplikácie a boti podľa ponuky a licenčnej zmluvy Ailoot. Na ďalší predaj požiadajte o licenciu predajcu.

Komerčná aplikácia
Začleňte generovanie textu, obrázkov, videa a zvuku do platených funkcií svojej služby.
Licencia pre predajcu
Pošlite popis projektu a spôsob poskytovania prístupu. Vyžiadajte písomné podmienky použitia a ďalšieho predaja.
Dokumenty na webe
Ponuka, licenčná zmluva a zásady spracovania dát sú dostupné pred pripojením.

Požiadať o licenciu predajcu · Ponuka a licenčná zmluva