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 Googlu řízený uvažováním pro náročné návrhářské úlohy, produktové vizualizace a faktografické vizualizace. Přijímá text a obrazové reference a generuje obrázky s textem ve velikostech 1K–4K, s podrobnými možnostmi tvůrčího ovládání.

O modelu

Tento popis zahrnuje schopnosti modelu. Vstupy, výstupy a možnosti dostupné v Ailoot jsou uvedeny níže pro vybranou metodu.

Nano Banana Pro je model Gemini 3 Pro Image od Googlu pro generování a úpravy obrázků řízené uvažováním. Výrobce staví do centra zamýšleného použití složitý grafický design, vysoce věrné produktové vizualizace a vizualizaci faktických dat. Přijímá text a obrázky a vytváří obrázky a text. Tato pojmenovaná obrazová edice Pro vychází z Gemini 3 Pro, přičemž si zachovává vlastní profil vstupů a schopností pro obrazové úlohy.

Model podporuje obrázky 1K, 2K a 4K. Dokumentované tvary zahrnují 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 a 21:9. Čtvercový obrázek 4K má 4096 × 4096; obrázek 16:9 ve 4K má 5504 × 3072. Rozlišení a poměr stran vyberte pro požadovaný výstup, ať jde o plakát na výšku, produktovou scénu nebo širokou vysvětlující grafiku. Možnost 0.5K a další extrémní poměry Gemini 3.1 Flash Image nejsou součástí této tabulky Pro.

Vykreslování textu podporuje zřetelné písmo v plakátech, diagramech a dalších navržených výstupech. U složité infografiky poskytněte podkladová fakta, přesné znění, posloupnost čtení a vztah mezi popisky a vizuálními prvky. Oddělte sdělované informace od požadovaného uměleckého stylu. Google doporučuje nejprve připravit text a poté generovat obrázek, který jej obsahuje. To je zvlášť užitečné, pokud kompozice kombinuje nadpis, diagram a několik krátkých popisků.

Vstup z více obrázků podporuje až 14 referencí. Tabulka funkcí Googlu popisuje až šest referencí objektů pro věrnost, až pět referencí postav pro konzistenci a až tři stylové reference. Tyto role pomáhají připravit složený vizuál: produktová fotografie definuje vzhled, samostatný obrázek stanovuje prostředí a stylový obrázek ovlivňuje zpracování. Sdělte modelu, které detaily jsou závazné a které reference poskytují inspiraci, místo abyste požadovali bez rozlišení kombinaci všech viditelných prvků.

Ukotvení pomocí Google Search může dodat informace ze skutečného světa pro faktografickou vizualizaci nebo scénu zohledňující aktuální podmínky. Obrazový pracovní postup Pro dokumentuje webové ukotvení; rozšíření Image Search je dokumentováno konkrétně pro Nano Banana 2.1 a Gemini 3.1 Flash Image. U datové grafiky poskytněte hodnoty, které chcete zobrazit, nebo v pracovním postupu výrobce požadujte ukotvené informace a poté výslovně určete vztah, popisky a rozvržení. Generování založené na informacích z vyhledávání stále vytváří obrázek ke kontrole, nikoli náhradu za ověření zobrazených faktů.

Uvažování podporuje sestavení složitého promptu před závěrečným vykreslením. Průvodce obrázky popisuje průběžné obrázky používané k testování kompozice a logiky, odlišné od konečného výstupu. Nepřenášejte do této edice Pro tabulku ovládání minimal/high z Nano Banana 2 ani tabulku Nano Banana 2.1 s výchozí hodnotou medium. U náročného designu poskytněte úplné zadání s vizuální hierarchií, požadovanými vztahy objektů a prvky, které musí zůstat zachovány i po pozdějších úpravách.

Karta modelu popisuje významná zbývající omezení: velmi drobný text a dlouhé pasáže se mohou vykreslovat špatně, vzhled postav se může mezi referencí a výsledkem měnit a úpravy pomocí masky či náčrtků mohou pokyn splnit jen částečně nebo zanechat stopy. Model také může zaměnit levou a pravou stranu nebo zkopírovat zdrojový prvek do nové kompozice. U revize produktu výslovně uveďte zachovávanou geometrii a popisky a zkontrolujte upravenou oblast; u diagramu porovnejte směry šipek a vzájemné pozice objektů.

Současná tabulka API uvádí vstupní limit 65,536 tokenů a výstupní limit 32,768 tokenů. Generování obrázků, přemýšlení, ukotvení ve vyhledávání a dávkové zpracování jsou podporovány; generování zvuku, volání funkcí, spouštění kódu, ukládání do mezipaměti, strukturované výstupy, vyhledávání v souborech, URL context a Live API nejsou podporovány. Obrazová úloha v tomto profilu nepřijímá zvukový ani video vstup. Generované obrázky obsahují SynthID a požadovaný počet výstupních obrázků není vždy dodržen přesně.

Praktické produktové zadání může spojit obrázek produktu, referenci osvětlení a přesný nadpis: „Zachovej proporce a text produktu, zobraz jej na světlém kamenném povrchu pod měkkým bočním světlem a horní třetinu ponech volnou pro dodaný nadpis.“ U faktografického diagramu určete každou entitu a spojení a poskytněte schválené popisky. Výsledek zdokonalujte v konverzaci pojmenováním jedné změny a prvků k zachování a vybraný obrázek s jeho vysvětlujícím textem uchovávejte společně jako designový výstup.

Praktická úloha

Praktická úloha

Technický příklad v angličtině

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čekávaný výsledek

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

Ověření 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 Googlu řízený uvažováním pro náročné návrhářské úlohy, produktové vizualizace a faktografické vizualizace. Přijímá text a obrazové reference a generuje obrázky s textem ve velikostech 1K–4K, s podrobnými možnostmi tvůrčího ovládání.

Přijímané vstupy
Text
Výsledky
Obrázky

Dostupné v Ailoot · vstupy a metody

Ailoot · Obrázky POST /v1/images/generations
Vstup
text
Výstup
image
Kontext
65 536 tokens
Maximální výstup
32 768 tokens
Výstupní formát
Soubor obrázku
PoleTypPožadavekHodnoty a limityVýchozí
PolemodelTypstringPožadavekPovinnéHodnoty a limity
gemini-3-pro-image
Výchozí—
PolepromptTypstringPožadavekPovinnéHodnoty a limity
Minimální délka: 1
Výchozí—
PolenTypintegerPožadavekVolitelnéHodnoty a limity
Minimum: 1
Výchozí1
Poleresponse_formatTypstringPožadavekVolitelnéHodnoty a limity
url, b64_json
Výchozí—
PolestreamTypbooleanPožadavekVolitelnéHodnoty a limityVýchozífalse
PolesizeTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolequalityTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolebackgroundTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleoutput_formatTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleoutput_compressionTypintegerPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolemoderationTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleinput_fidelityTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolestyleTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Polepartial_imagesTypintegerPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Kombinace vstupních materiálů

Text na obrázek · Povinné: prompt

Parametry a životní cyklus metody
ParametrKontrakt
Parametrmaterial_typesKontrakttext
ParametrrequiredKontraktmodel, prompt
Parametroptional_controlsKontraktnull
Parametrcontent_typeKontraktapplication/json

Životní cyklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · skutečně vrácené task_id nebo záznam v knihovně médií

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Struktury metod a ID jsou přesné; schopnosti dodavatele jsou oddělené od připuštění požadavku.

Tarify

Sazby metod Ailoot

Ailoot ObrázkyPOST /v1/images/generations
Vstup
0,002 US$ / 1K obrazových tokenů
Výstup
0,134 US$ za obrázek v rozlišení 1K
Výstup
0,134 US$ za obrázek v rozlišení 2K
Výstup
0,24 US$ za obrázek v rozlišení 4K

Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. Jak funguje rezervace a vyúčtování →

Podrobnosti referenčního tarifu

Referenční tabulky modelu nemění výběr metody, cenové nabídky ani poplatky. Skutečné poplatky používají sazby vybrané metody Ailoot.

Referenční tabulky modelu

Ceny podle konfigurace

KonfiguraceTabulka sazebPoplatek
KonfiguraceUltraTabulka sazebZákladní sazbaPoplatek
Vstup · Vstupní tokeny $0.004000 / 1K tokenů
Výstup · Výstupní tokeny $0.024000 / 1K tokenů
Vstup · obrázek $0.004000 / 1K tokenů
Výstup · výstup obrázku $0.24000 / 1K tokenů
Vstup · zvuk $0.004000 / 1K tokenů
Vstup · mezipaměť vstupního zvuku $0.0004000 / 1K tokenů
Výstup · vyhledávání na webu $0.028 za vyhledání na webu
Výstup · interní uvažování $0.024000 / 1K tokenů
Vstup · Čtení z mezipaměti $0.0004000 / 1K tokenů
Vstup · Zápis do mezipaměti $0.000750000 / 1K tokenů

Příklady požadavků

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

Přijímání a ukládání výsledků

Ailoot · Obrázky

Stáhněte každý vrácený obrázek nebo 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}
Uchovejte všechny dokončené výsledky

Uložte každý dokončený obrázek; stáhněte obsah každé vrácené URL nebo dekódujte obsah Base64.

Uložte všechny datové položky. Dekódujte každé b64_json nebo stáhněte soubor z každé vrácené podepsané URL. Příponu souboru zvolte podle skutečného typu MIME a bajtů.

Pokud je nutné ověřit původní odpověď

Pokud výsledek generování nebo úpravy obrázku vyžaduje kontrolu, uchovejte původní operation_id/X-Client-Request-ID a vrácené informace o výsledku. Existující vlastní výsledky obnovte prostřednictvím knihovny médií pomocí skutečných hodnot task_id nebo asset_id. Požadavek na generování či úpravu znovu neodesílejte a nevytvářejte URL pro dotazování na stav z operation_id.

Pole odpovědi
PoleTyp
PolecreatedTypinteger
Poledata[].urlTypstring
Poledata[].b64_jsonTypbase64 string
PoleusageTypobject
Chyby a další kroky
OdpověďPodmínkaDalší krok
Odpověď400 · invalid_request_errorPodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametruDalší krokPřed novým požadavkem na vytvoření opravte uvedená pole.
Odpověďserver_errorPodmínkaVrácená odpověď uvádí, že operaci nebo výsledek je třeba zkontrolovatDalší krokUchovejte původní vrácené ID operace nebo úlohy, hlavičky požadavku a odpověď; pokračujte v podporovaném načítání údajů o této původní operaci. Požadavek na vytvoření znovu neodesílejte.

Aliasy

Aliasy modelu

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

Aliasy cest metod

/v1/images

Související ID modelů

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 Googlu řízený uvažováním pro náročné návrhářské úlohy, produktové vizualizace a faktografické vizualizace. Přijímá text a obrazové reference a generuje obrázky s textem ve velikostech 1K–4K, s podrobnými možnostmi tvůrčího ovládání.

Přijímané vstupy
Text
Výsledky
Obrázky

Dostupné v Ailoot · vstupy a metody

Ailoot · Obrázky POST /v1/images/generations
Vstup
text
Výstup
image
Kontext
65 536 tokens
Maximální výstup
32 768 tokens
Výstupní formát
Soubor obrázku
PoleTypPožadavekHodnoty a limityVýchozí
PolemodelTypstringPožadavekPovinnéHodnoty a limity
gemini-3-pro-image-preview
Výchozí—
PolepromptTypstringPožadavekPovinnéHodnoty a limity
Minimální délka: 1
Výchozí—
PolenTypintegerPožadavekVolitelnéHodnoty a limity
Minimum: 1
Výchozí1
Poleresponse_formatTypstringPožadavekVolitelnéHodnoty a limity
url, b64_json
Výchozí—
PolestreamTypbooleanPožadavekVolitelnéHodnoty a limityVýchozífalse
PolesizeTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolequalityTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolebackgroundTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleoutput_formatTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleoutput_compressionTypintegerPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolemoderationTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleinput_fidelityTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolestyleTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Polepartial_imagesTypintegerPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Kombinace vstupních materiálů

Text na obrázek · Povinné: prompt

Parametry a životní cyklus metody
ParametrKontrakt
Parametrmaterial_typesKontrakttext
ParametrrequiredKontraktmodel, prompt
Parametroptional_controlsKontraktnull
Parametrcontent_typeKontraktapplication/json

Životní cyklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · skutečně vrácené task_id nebo záznam v knihovně médií

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Struktury metod a ID jsou přesné; schopnosti dodavatele jsou oddělené od připuštění požadavku.

Tarify

Sazby metod Ailoot

Ailoot ObrázkyPOST /v1/images/generations
Vstup
0,002 US$ / 1K obrazových tokenů
Výstup
0,134 US$ za obrázek v rozlišení 1K
Výstup
0,134 US$ za obrázek v rozlišení 2K
Výstup
0,24 US$ za obrázek v rozlišení 4K

Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. Jak funguje rezervace a vyúčtování →

Podrobnosti referenčního tarifu

Referenční tabulky modelu nemění výběr metody, cenové nabídky ani poplatky. Skutečné poplatky používají sazby vybrané metody Ailoot.

Referenční tabulky modelu

Ceny podle konfigurace

KonfiguraceTabulka sazebPoplatek
KonfiguraceUltraTabulka sazebZákladní sazbaPoplatek
Vstup · Vstupní tokeny $0.004000 / 1K tokenů
Výstup · Výstupní tokeny $0.024000 / 1K tokenů
Vstup · obrázek $0.004000 / 1K tokenů
Výstup · výstup obrázku $0.24000 / 1K tokenů
Vstup · zvuk $0.004000 / 1K tokenů
Vstup · mezipaměť vstupního zvuku $0.0004000 / 1K tokenů
Výstup · vyhledávání na webu $0.028 za vyhledání na webu
Výstup · interní uvažování $0.024000 / 1K tokenů
Vstup · Čtení z mezipaměti $0.0004000 / 1K tokenů
Vstup · Zápis do mezipaměti $0.000750000 / 1K tokenů

Příklady požadavků

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

Přijímání a ukládání výsledků

Ailoot · Obrázky

Stáhněte každý vrácený obrázek nebo 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}
Uchovejte všechny dokončené výsledky

Uložte každý dokončený obrázek; stáhněte obsah každé vrácené URL nebo dekódujte obsah Base64.

Uložte všechny datové položky. Dekódujte každé b64_json nebo stáhněte soubor z každé vrácené podepsané URL. Příponu souboru zvolte podle skutečného typu MIME a bajtů.

Pokud je nutné ověřit původní odpověď

Pokud výsledek generování nebo úpravy obrázku vyžaduje kontrolu, uchovejte původní operation_id/X-Client-Request-ID a vrácené informace o výsledku. Existující vlastní výsledky obnovte prostřednictvím knihovny médií pomocí skutečných hodnot task_id nebo asset_id. Požadavek na generování či úpravu znovu neodesílejte a nevytvářejte URL pro dotazování na stav z operation_id.

Pole odpovědi
PoleTyp
PolecreatedTypinteger
Poledata[].urlTypstring
Poledata[].b64_jsonTypbase64 string
PoleusageTypobject
Chyby a další kroky
OdpověďPodmínkaDalší krok
Odpověď400 · invalid_request_errorPodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametruDalší krokPřed novým požadavkem na vytvoření opravte uvedená pole.
Odpověďserver_errorPodmínkaVrácená odpověď uvádí, že operaci nebo výsledek je třeba zkontrolovatDalší krokUchovejte původní vrácené ID operace nebo úlohy, hlavičky požadavku a odpověď; pokračujte v podporovaném načítání údajů o této původní operaci. Požadavek na vytvoření znovu neodesílejte.

Aliasy

Aliasy modelu

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

Aliasy cest metod

/v1/images

Související ID modelů

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 Googlu řízený uvažováním pro náročné návrhářské úlohy, produktové vizualizace a faktografické vizualizace. Přijímá text a obrazové reference a generuje obrázky s textem ve velikostech 1K–4K, s podrobnými možnostmi tvůrčího ovládání.

Přijímané vstupy
Text
Výsledky
Obrázky

Dostupné v Ailoot · vstupy a metody

Ailoot · Obrázky POST /v1/images/generations
Vstup
text
Výstup
image
Kontext
65 536 tokens
Maximální výstup
32 768 tokens
Výstupní formát
Soubor obrázku
PoleTypPožadavekHodnoty a limityVýchozí
PolemodelTypstringPožadavekPovinnéHodnoty a limity
nano-banana-pro
Výchozí—
PolepromptTypstringPožadavekPovinnéHodnoty a limity
Minimální délka: 1
Výchozí—
PolenTypintegerPožadavekVolitelnéHodnoty a limity
Minimum: 1
Výchozí1
Poleresponse_formatTypstringPožadavekVolitelnéHodnoty a limity
url, b64_json
Výchozí—
PolestreamTypbooleanPožadavekVolitelnéHodnoty a limityVýchozífalse
PolesizeTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolequalityTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolebackgroundTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleoutput_formatTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleoutput_compressionTypintegerPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolemoderationTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleinput_fidelityTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolestyleTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Polepartial_imagesTypintegerPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Kombinace vstupních materiálů

Text na obrázek · Povinné: prompt

Parametry a životní cyklus metody
ParametrKontrakt
Parametrmaterial_typesKontrakttext
ParametrrequiredKontraktmodel, prompt
Parametroptional_controlsKontraktnull
Parametrcontent_typeKontraktapplication/json

Životní cyklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · skutečně vrácené task_id nebo záznam v knihovně médií

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Struktury metod a ID jsou přesné; schopnosti dodavatele jsou oddělené od připuštění požadavku.

Tarify

Sazby metod Ailoot

Ailoot ObrázkyPOST /v1/images/generations
Vstup
0,002 US$ / 1K obrazových tokenů
Výstup
0,134 US$ za obrázek v rozlišení 1K
Výstup
0,134 US$ za obrázek v rozlišení 2K
Výstup
0,24 US$ za obrázek v rozlišení 4K

Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. Jak funguje rezervace a vyúčtování →

Podrobnosti referenčního tarifu

Referenční tabulky modelu nemění výběr metody, cenové nabídky ani poplatky. Skutečné poplatky používají sazby vybrané metody Ailoot.

Referenční tabulky modelu

Ceny podle konfigurace

KonfiguraceTabulka sazebPoplatek
KonfiguraceUltraTabulka sazebZákladní sazbaPoplatek
Vstup · Vstupní tokeny $0.004000 / 1K tokenů
Výstup · Výstupní tokeny $0.024000 / 1K tokenů
Vstup · obrázek $0.004000 / 1K tokenů
Výstup · výstup obrázku $0.24000 / 1K tokenů
Vstup · zvuk $0.004000 / 1K tokenů
Vstup · mezipaměť vstupního zvuku $0.0004000 / 1K tokenů
Výstup · vyhledávání na webu $0.028 za vyhledání na webu
Výstup · interní uvažování $0.024000 / 1K tokenů
Vstup · Čtení z mezipaměti $0.0004000 / 1K tokenů
Vstup · Zápis do mezipaměti $0.000750000 / 1K tokenů

Příklady požadavků

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

Přijímání a ukládání výsledků

Ailoot · Obrázky

Stáhněte každý vrácený obrázek nebo 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}
Uchovejte všechny dokončené výsledky

Uložte každý dokončený obrázek; stáhněte obsah každé vrácené URL nebo dekódujte obsah Base64.

Uložte všechny datové položky. Dekódujte každé b64_json nebo stáhněte soubor z každé vrácené podepsané URL. Příponu souboru zvolte podle skutečného typu MIME a bajtů.

Pokud je nutné ověřit původní odpověď

Pokud výsledek generování nebo úpravy obrázku vyžaduje kontrolu, uchovejte původní operation_id/X-Client-Request-ID a vrácené informace o výsledku. Existující vlastní výsledky obnovte prostřednictvím knihovny médií pomocí skutečných hodnot task_id nebo asset_id. Požadavek na generování či úpravu znovu neodesílejte a nevytvářejte URL pro dotazování na stav z operation_id.

Pole odpovědi
PoleTyp
PolecreatedTypinteger
Poledata[].urlTypstring
Poledata[].b64_jsonTypbase64 string
PoleusageTypobject
Chyby a další kroky
OdpověďPodmínkaDalší krok
Odpověď400 · invalid_request_errorPodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametruDalší krokPřed novým požadavkem na vytvoření opravte uvedená pole.
Odpověďserver_errorPodmínkaVrácená odpověď uvádí, že operaci nebo výsledek je třeba zkontrolovatDalší krokUchovejte původní vrácené ID operace nebo úlohy, hlavičky požadavku a odpověď; pokračujte v podporovaném načítání údajů o této původní operaci. Požadavek na vytvoření znovu neodesílejte.

Aliasy

Aliasy modelu

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

Aliasy cest metod

/v1/images

Související ID modelů

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 Googlu řízený uvažováním pro náročné návrhářské úlohy, produktové vizualizace a faktografické vizualizace. Přijímá text a obrazové reference a generuje obrázky s textem ve velikostech 1K–4K, s podrobnými možnostmi tvůrčího ovládání.

Přijímané vstupy
Text
Výsledky
Text

Dostupné v Ailoot · vstupy a metody

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Vstup
text
Výstup
text
Výstupní formát
json nebo SSE
PoleTypPožadavekHodnoty a limityVýchozí
PolemodelTypstringPožadavekPovinnéHodnoty a limity
google/gemini-3-pro-image
Výchozí—
PolemessagesTypmessage[]PožadavekPovinnéHodnoty a limity
Minimální počet položek: 1
Výchozí—
Polemessages[].roleTypstringPožadavekPovinnéHodnoty a limity
Příklady: system, user, assistant, tool, function
Podmínky: Tyto role jsou výslovně zastoupeny typy kompatibility zdrojového kódu; přesná sada rolí zůstává specifická pro daný model.
Závisí na modelu
Výchozí—
Polemessages[].contentTypstring|content_part[]|nullPožadavekVolitelnéHodnoty a limityVýchozí—
Polemessages[].tool_callsTyptool_call[]PožadavekVolitelnéHodnoty a limityVýchozí—
Polemessages[].tool_call_idTypstringPožadavekVolitelnéHodnoty a limity
Platí, když: role=tool; použijte skutečně vrácené ID
Výchozí—
Polemessages[].nameTypstringPožadavekVolitelnéHodnoty a limityVýchozí—
Polemessages[].reasoning_contentTypstringPožadavekVolitelnéHodnoty a limity
Platí, když: Předávejte zpět skutečně vrácené uvažování tam, kde je tento model používá
Výchozí—
Polemessages[].reasoning_detailsTypobject|arrayPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Polemax_tokensTypintegerPožadavekVolitelnéHodnoty a limity
Minimum: 1
Závisí na modelu
Výchozí—
Polemax_completion_tokensTypintegerPožadavekVolitelnéHodnoty a limity
Minimum: 1
Závisí na modelu
Výchozí—
PolestreamTypbooleanPožadavekVolitelnéHodnoty a limityVýchozífalse
Polestream_options.include_usageTypbooleanPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PoletemperatureTypnumberPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poletop_pTypnumberPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolestopTypstring|string[]PožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PoletoolsTypfunction_tool[]PožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poletools[].typeTypstringPožadavekVolitelnéHodnoty a limity
function
Závisí na modelu
Výchozí—
Poletools[].function.nameTypstringPožadavekPovinnéHodnoty a limity
Platí, když: nástroj typu funkce je dodán
Výchozí—
Poletools[].function.descriptionTypstringPožadavekVolitelnéHodnoty a limityVýchozí—
Poletools[].function.parametersTypJSON_schemaPožadavekVolitelnéHodnoty a limityVýchozí—
Poletool_choiceTypstring|objectPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleparallel_tool_callsTypbooleanPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleresponse_formatTypobjectPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Polereasoning_effortTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolereasoningTypobjectPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleservice_tierTypstringPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PoleinstructionsTypstringPožadavekVolitelnéHodnoty a limity
Pole kompatibility
Výchozí—
PolefunctionsTypfunction[]PožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Polefunction_callTypstring|objectPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
Poleprompt_cache_optionsTypobjectPožadavekVolitelnéHodnoty a limity
Závisí na modelu
Výchozí—
PolemodalitiesTypstring[]PožadavekVolitelnéHodnoty a limity
text
Výchozí—
PoleproviderTypobjectPožadavekVolitelnéHodnoty a limity
Podmínky: provider.options je na této textové trase Ultra odmítáno
Výchozí—
Polecache_control.ttlTypstringPožadavekVolitelnéHodnoty a limity
Podmínky: Hodnota 1h je ve skutečných umístěních mezipaměti promptů odmítána
Výchozí—
Kombinace vstupních materiálů

Text · text UTF8

messages[].content

Parametry a životní cyklus metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages
Parametrmaterial_typesKontrakttext
ParametrmessagesKontraktpole zpráv se strukturou role/content
Parametrfile_materialKontraktskutečný dokument UTF-8 vložený jako doslovný text; ID souboru se neodvozuje
Parametroptional_controlsKontraktstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametrcontrol_scopeKontraktspecifické pro model; nástroje uživatelských funkcí se liší od hostovaných nástrojů
Parametroutput_modalitiesKontrakttext
Parametrhosted_operationsKontraktfalse
Parametrmultimodal_input_bindingKontraktnull

Životní cyklus: synchronous_or_streamed

Odešlete přesné ID modelu spolu s messages.

Délka kontextu není limitem výstupu.

Textový soubor může dodat doslovný text; obrazové/zvukové vstupy a vstupy v podobě souborových objektů vyžadují přesnou vazbu.

Tarify

Údaje o tarifech nepřidávají možnosti požadavku. Podporované parametry jsou uvedeny u vybrané metody.

Rychlý režim
Standardní sazba Při výběru rychlého režimu
Režim flex
Standardní sazba Při výběru režimu flex
Maximální intenzita uvažování
Standardní sazba Když se při maximální intenzitě uvažování použije výchozí úprava (default)
Ceny explicitní mezipaměti
Není zapnuto Při požadavku na explicitní mezipaměť

Sazby Ailoot

Ceny podle konfigurace

Přiřaďte každý poplatek k uvedeným podmínkám. Pro každou sadu alternativních konfigurací použijte jednu sazbu.

KonfiguraceTabulka sazebTokeny kontextu, více nežTokeny kontextu, do uvedené hodnoty včetněPoplatek
KonfiguraceZákladní sazby za tokenyTabulka sazebZákladní sazbaTokeny kontextu, více než—Tokeny kontextu, do uvedené hodnoty včetněBez horní mezePoplatek
Vstup · Vstupní tokeny $0.004 / 1K tokenů
Výstup · Výstupní tokeny $0.024 / 1K tokenů
Vstup · Čtení z mezipaměti $0.0004 / 1K tokenů
Vstup · Zápis do mezipaměti $0.00075 / 1K tokenů
Vstup · Zápis do mezipaměti, 1 hodina — / 1K tokenů
Výstup · Tokeny výstupního obrázku $0.24 / 1K obrazových tokenů
KonfiguracePásmo délky požadavku 1Tabulka sazeb—Tokeny kontextu, více než0Tokeny kontextu, do uvedené hodnoty včetněBez horní mezePoplatek
Vstup · Vstupní tokeny $0.004 / 1K tokenů
Výstup · Výstupní tokeny $0.024 / 1K tokenů
Vstup · Čtení z mezipaměti $0.0004 / 1K tokenů
Vstup · Zápis do mezipaměti $0.00075 / 1K tokenů
Vstup · Zápis do mezipaměti, 1 hodina — / 1K tokenů

Podrobnosti referenčního tarifu

Referenční tabulky modelu nemění výběr metody, cenové nabídky ani poplatky. Skutečné poplatky používají sazby vybrané metody Ailoot.

Google: Nano Banana Pro (Gemini 3 Pro Image)

Ceny podle konfigurace

KonfiguracePodmínky účtováníPoplatek
KonfiguraceGoogle: Nano Banana Pro (Gemini 3 Pro Image) · Výchozí konfiguracePodmínky účtováníVýchozí konfiguracePoplatek
Vstup · Vstupní tokeny 0,004 US$ / 1K tokenů
Výstup · Výstupní tokeny 0,024 US$ / 1K tokenů
Vstup · Vstupní obrázek 0,004 US$ / 1K tokenů
Výstup · Výstupní obrázek 0,24 US$ / 1K tokenů
Vstup · Zvukový vstup 0,004 US$ / 1K tokenů
Vstup · Čtení zvuku z mezipaměti 0,0004 US$ / 1K tokenů
Výstup · Vyhledávání na webu 0,028 US$ za vyhledání
Výstup · Tokeny uvažování 0,024 US$ / 1K tokenů
Vstup · Čtení z mezipaměti 0,0004 US$ / 1K tokenů
Vstup · Zápis do mezipaměti · 5 minut 0,00075 US$ / 1K tokenů

Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. Jak funguje rezervace a vyúčtování →

Příklady požadavků

Ailoot Ultra · OpenAI Chat

curlPython SDKStreamování v Pythonu
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")

Přijímání a ukládání výsledků

Ailoot Ultra · OpenAI Chat

json nebo SSE

Uchovejte všechny dokončené výsledky

Uchovejte každou úplnou vrácenou odpověď, soubor i část obsahu.

Zachovejte každou volbu a její obsah/volání nástrojů/uvažování. V SSE sestavujte přírůstky podle indexu volby/nástroje a zachovejte konečný důvod ukončení i údaje o využití.

Pokud je nutné ověřit původní odpověď

Zachovejte ID požadavků/odpovědí a hlavičky. Není dodána obecná URL pro načtení textové úlohy.

Pole odpovědi
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 další kroky
OdpověďPodmínkaDalší krok
Odpověď400 · invalid_request_errorPodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametruDalší krokPřed novým požadavkem na vytvoření opravte uvedená pole.

Aliasy

Aliasy modelu

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

Aliasy cest metod

/v1/images

Související ID modelů

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 Googlu řízený uvažováním pro náročné návrhářské úlohy, produktové vizualizace a faktografické vizualizace. Přijímá text a obrazové reference a generuje obrázky s textem ve velikostech 1K–4K, s podrobnými možnostmi tvůrčího ovládání.

Přijímané vstupy
Text · Obrázky
Výsledky
Obrázky

Dostupné v Ailoot · vstupy a metody

Ailoot Ultra · Obrázky POST /v1/images/generations
Vstup
text, image
Výstup
image
PoleTypPožadavekHodnoty a limityVýchozí
PolemodelTypstringPožadavekPovinnéHodnoty a limity
google/gemini-3-pro-image
Výchozí—
PolepromptTypstringPožadavekPovinnéHodnoty a limity
Minimální délka: 1
Výchozí—
PoleresolutionTypstringPožadavekVolitelnéHodnoty a limity
1K, 2K, 4K
Výchozí—
Poleaspect_ratioTypstringPožadavekVolitelnéHodnoty a limity
1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9
Výchozí—
PolenTypintegerPožadavekVolitelnéHodnoty a limity
Minimum: 1
Maximum: 1
Výchozí—
Poleinput_referencesTyparrayPožadavekVolitelnéHodnoty a limity
Minimální počet položek: 0
Maximální počet položek: 14
Výchozí—
PoleproviderTypobjectPožadavekVolitelnéHodnoty a limityVýchozí—
Parametry a životní cyklus metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, prompt
Parametrmaterial_typesKontrakttext, image

Životní cyklus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · skutečně vrácené task_id nebo záznam v knihovně médií

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Tarify

Jak se vypočítá konečný poplatek

Zobrazené sazby slouží k odhadu ceny před generováním. Konečný poplatek se vypočítá z nákladů zaznamenaných u původního generování. Naměřená délka výstupu ani odhadovaná množství nejsou konečným účtovaným množstvím.

Údaje o tarifech nepřidávají možnosti požadavku. Podporované parametry jsou uvedeny u vybrané metody.

Rychlý režim
Neuvedeno Při výběru rychlého režimu
Režim flex
Neuvedeno Při výběru režimu flex
Maximální intenzita uvažování
Neuvedeno Když se při maximální intenzitě uvažování použije výchozí úprava (default)

Odhadované sazby pro srovnání

Ceny podle konfigurace

Přiřaďte každý poplatek k uvedeným podmínkám. Pro každou sadu alternativních konfigurací použijte jednu sazbu.

KonfiguraceTabulka sazebPředpokládané množstvíPoplatek
KonfiguraceZákladní sazby za tokenyTabulka sazebZákladní sazbaPředpokládané množství—Poplatek
Vstup · Vstupní tokeny · Odhad pouze pro srovnání — / 1K tokenů
Výstup · Výstupní tokeny · Odhad pouze pro srovnání — / 1K tokenů
Vstup · Čtení z mezipaměti · Odhad pouze pro srovnání — / 1K tokenů
Vstup · Zápis do mezipaměti · Odhad pouze pro srovnání — / 1K tokenů
Vstup · Zápis do mezipaměti, 1 hodina · Odhad pouze pro srovnání — / 1K tokenů
KonfiguraceOdhadovaná cena generováníTabulka sazeb—Předpokládané množstvíodhad pro jedno generováníPoplatek
Výstup · Odhadovaná cena generování · Odhad pouze pro srovnání $0.98304 odhad před generováním

Tento odhad není dodatečným poplatkem ani pevnou sazbou za dokončené generování.

Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. Jak funguje rezervace a vyúčtování →

Příklady požadavků

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

Přijímání a ukládání výsledků

Ailoot Ultra · Obrázky

Stáhněte každý vrácený obrázek nebo 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}
Další načtení obsahu
Načíst existující soubory, které vám patří
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.
Uchovejte všechny dokončené výsledky

Uložte každý dokončený obrázek; stáhněte obsah každé vrácené URL nebo dekódujte obsah Base64.

Uchovejte úplnou odpověď a hlavičky, všechny skutečné výstupy, původní vrácené identifikátory a všechna pole s údaji o využití. Obnovte původní operaci bez opětovného odeslání požadavku na vytvoření.

Pokud je nutné ověřit původní odpověď

Uchovejte vrácené X-Client-Request-ID pro spárování záznamů. Načítejte pouze skutečně vrácené hodnoty task_id/asset_id nebo vlastní knihovnu médií; nikdy nevytvářejte URL úlohy z ID operace a nikdy znovu neodesílejte požadavek na vytvoření.

Pole odpovědi
PoleTyp
PolecreatedTyp
Poledata[].urlTyp
Poledata[].b64_jsonTyp
PoleusageTyp

Aliasy

Aliasy modelu

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

Aliasy cest metod

/v1/images

Související ID modelů

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 Googlu řízený uvažováním pro náročné návrhářské úlohy, produktové vizualizace a faktografické vizualizace. Přijímá text a obrazové reference a generuje obrázky s textem ve velikostech 1K–4K, s podrobnými možnostmi tvůrčího ovládání.

Přijímané vstupy
Text
Výsledky
json · sse

Dostupné v Ailoot · vstupy a metody

Ailoot Ultra · Anthropic Messages POST /v1/messages
Vstup
text
Výstup
json, sse
Výstupní formát
JSON nebo SSE
PoleTypPožadavekHodnoty a limityVýchozí
PolemodelTypstringPožadavekPovinnéHodnoty a limity
google/gemini-3-pro-image
Výchozí—
PolemessagesTypmessage[]PožadavekPovinnéHodnoty a limityVýchozí—
Polemessages[].roleTypstringPožadavekPovinnéHodnoty a limity
user, assistant
Výchozí—
Polemessages[].contentTypstringPožadavekPovinnéHodnoty a limityVýchozí—
Polemax_tokensTypintegerPožadavekPovinnéHodnoty a limityVýchozí—
PolestreamTypbooleanPožadavekVolitelnéHodnoty a limityVýchozífalse
Kombinace vstupních materiálů

Text · text UTF-8

řetězec messages[].content

Parametry a životní cyklus metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages, max_tokens
Parametroptional_controlsKontraktstream
Parametrmaterial_typesKontrakttext
Parametrtext_file_materialKontraktPřečtěte skutečný dokument UTF-8 a vložte jeho text do uvedeného pole input nebo do řetězce obsahu zprávy.

Životní cyklus: synchronous_or_streamed

Tarify

Údaje o tarifech nepřidávají možnosti požadavku. Podporované parametry jsou uvedeny u vybrané metody.

Rychlý režim
Standardní sazba Při výběru rychlého režimu
Režim flex
Standardní sazba Při výběru režimu flex
Maximální intenzita uvažování
Standardní sazba Když se při maximální intenzitě uvažování použije výchozí úprava (default)
Ceny explicitní mezipaměti
Není zapnuto Při požadavku na explicitní mezipaměť

Sazby Ailoot

Ceny podle konfigurace

Přiřaďte každý poplatek k uvedeným podmínkám. Pro každou sadu alternativních konfigurací použijte jednu sazbu.

KonfiguraceTabulka sazebTokeny kontextu, více nežTokeny kontextu, do uvedené hodnoty včetněPoplatek
KonfiguraceZákladní sazby za tokenyTabulka sazebZákladní sazbaTokeny kontextu, více než—Tokeny kontextu, do uvedené hodnoty včetněBez horní mezePoplatek
Vstup · Vstupní tokeny $0.004 / 1K tokenů
Výstup · Výstupní tokeny $0.024 / 1K tokenů
Vstup · Čtení z mezipaměti $0.0004 / 1K tokenů
Vstup · Zápis do mezipaměti $0.00075 / 1K tokenů
Vstup · Zápis do mezipaměti, 1 hodina — / 1K tokenů
Výstup · Tokeny výstupního obrázku $0.24 / 1K obrazových tokenů
KonfiguracePásmo délky požadavku 1Tabulka sazeb—Tokeny kontextu, více než0Tokeny kontextu, do uvedené hodnoty včetněBez horní mezePoplatek
Vstup · Vstupní tokeny $0.004 / 1K tokenů
Výstup · Výstupní tokeny $0.024 / 1K tokenů
Vstup · Čtení z mezipaměti $0.0004 / 1K tokenů
Vstup · Zápis do mezipaměti $0.00075 / 1K tokenů
Vstup · Zápis do mezipaměti, 1 hodina — / 1K tokenů

Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. Jak funguje rezervace a vyúčtování →

Příklady požadavků

Ailoot Ultra · Anthropic Messages

Úplné minimální tělo požadavku JSONcurl · použijte svůj dokument UTF-8Python · uložte úplný výsledek
{
  "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))

Přijímání a ukládání výsledků

Ailoot Ultra · Anthropic Messages

JSON nebo SSE

Uchovejte všechny dokončené výsledky

Uchovejte každou úplnou vrácenou odpověď, soubor i část obsahu.

Zachovejte všechny bloky obsahu, podpisy uvažování a skutečná ID použití nástrojů. Sestavte všechny přírůstky bloků SSE; první textový blok není úplný výstup.

Pokud je nutné ověřit původní odpověď

Zachovejte ID požadavků/odpovědí a hlavičky. Není dodána obecná URL pro načtení textové úlohy.

Pole odpovědi
PoleTyp
PoleidTypstring
PolemodelTypstring
Polecontent[]Typtext|thinking|tool_use|other content block
Polestop_reasonTypstring|null
PoleusageTypobject
Chyby a další kroky
OdpověďPodmínkaDalší krok
Odpověď400 · invalid_request_errorPodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametruDalší krokPřed novým požadavkem na vytvoření opravte uvedená pole.

Aliasy

Aliasy modelu

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

Aliasy cest metod

/v1/images

Související ID modelů

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)
Jaké vstupy a výsledky jsou 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

Jaká pole požadavek používá?

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

Jaké limity platí?

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

Další podrobnosti

Připojte Ailoot k Claude Code, OpenCode, Hermes nebo vlastní aplikaci.

Společnost a její portfolio projektů

Společnost a její portfolio projektů: miliony zákazníků; měsíční tržby v miliardách.

Nakupujte tokeny se slevou.

Sleva předplatného pro pravidelnou práci. Promo kódy až 50% na nákup tokenů.

Předplatné
Pro pravidelné požadavky vyberte tarif se slevou.
Promo kód až 50%
Při nákupu zadejte kód. Cena se přepočítá podle probíhající akce.
Výdaje v historii
U každého požadavku se uloží model, tokeny a částka.

Vybrat předplatné · Zobrazit ceny modelů

Připojte API k produktu, který prodáváte.

SaaS, aplikace a boti podle nabídky a licenční smlouvy Ailoot. Pro přeprodej požádejte o licenci přeprodejce.

Komerční aplikace
Začleňte generování textu, obrázků, videa a zvuku do placených funkcí své služby.
Licence pro přeprodejce
Pošlete popis projektu a způsob poskytování přístupu. Vyžádejte písemné podmínky použití a přeprodeje.
Dokumenty na webu
Nabídka, licenční smlouva a zásady zpracování dat jsou dostupné před připojením.

Požádat o licenci přeprodejce · Nabídka a licenční smlouva