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í.
- Ailoot · Obrázky
POST /v1/images/generationsgemini-3-pro-image - Ailoot · Obrázky
POST /v1/images/generationsgemini-3-pro-image-preview - Ailoot · Obrázky
POST /v1/images/generationsnano-banana-pro - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgoogle/gemini-3-pro-image - Ailoot Ultra · Obrázky
POST /v1/images/generationsgoogle/gemini-3-pro-image - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgoogle/gemini-3-pro-image
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-imagegemini-3-pro-imagegemini-3-pro-image-previewnano-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
| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
|---|---|---|---|---|
Polemodel | Typstring | PožadavekPovinné | Hodnoty a limity gemini-3-pro-image | Výchozí— |
Poleprompt | Typstring | PožadavekPovinné | Hodnoty a limity Minimální délka: 1 | Výchozí— |
Polen | Typinteger | PožadavekVolitelné | Hodnoty a limity Minimum: 1 | Výchozí1 |
Poleresponse_format | Typstring | PožadavekVolitelné | Hodnoty a limity url, b64_json | Výchozí— |
Polestream | Typboolean | PožadavekVolitelné | Hodnoty a limity | Výchozífalse |
Polesize | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polequality | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polebackground | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleoutput_format | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleoutput_compression | Typinteger | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polemoderation | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleinput_fidelity | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polestyle | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polepartial_images | Typinteger | Pož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
| Parametr | Kontrakt |
|---|---|
Parametrmaterial_types | Kontrakttext |
Parametrrequired | Kontraktmodel, prompt |
Parametroptional_controls | Kontraktnull |
Parametrcontent_type | Kontraktapplication/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
POST /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
| Konfigurace | Tabulka sazeb | Poplatek |
|---|---|---|
| KonfiguraceUltra | Tabulka sazebZákladní sazba | Poplatek 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
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}/contentGET /v1/media/assetsGET /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
| Pole | Typ |
|---|---|
Polecreated | Typinteger |
Poledata[].url | Typstring |
Poledata[].b64_json | Typbase64 string |
Poleusage | Typobject |
Chyby a další kroky
| Odpověď | Podmínka | Další krok |
|---|---|---|
Odpověď400 · invalid_request_error | PodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametru | Další krokPřed novým požadavkem na vytvoření opravte uvedená pole. |
Odpověďserver_error | PodmínkaVrácená odpověď uvádí, že operaci nebo výsledek je třeba zkontrolovat | Další 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-previewgemini-3-pro-imagegemini-3-pro-image-previewnano-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
| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
|---|---|---|---|---|
Polemodel | Typstring | PožadavekPovinné | Hodnoty a limity gemini-3-pro-image-preview | Výchozí— |
Poleprompt | Typstring | PožadavekPovinné | Hodnoty a limity Minimální délka: 1 | Výchozí— |
Polen | Typinteger | PožadavekVolitelné | Hodnoty a limity Minimum: 1 | Výchozí1 |
Poleresponse_format | Typstring | PožadavekVolitelné | Hodnoty a limity url, b64_json | Výchozí— |
Polestream | Typboolean | PožadavekVolitelné | Hodnoty a limity | Výchozífalse |
Polesize | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polequality | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polebackground | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleoutput_format | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleoutput_compression | Typinteger | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polemoderation | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleinput_fidelity | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polestyle | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polepartial_images | Typinteger | Pož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
| Parametr | Kontrakt |
|---|---|
Parametrmaterial_types | Kontrakttext |
Parametrrequired | Kontraktmodel, prompt |
Parametroptional_controls | Kontraktnull |
Parametrcontent_type | Kontraktapplication/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
POST /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
| Konfigurace | Tabulka sazeb | Poplatek |
|---|---|---|
| KonfiguraceUltra | Tabulka sazebZákladní sazba | Poplatek 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
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}/contentGET /v1/media/assetsGET /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
| Pole | Typ |
|---|---|
Polecreated | Typinteger |
Poledata[].url | Typstring |
Poledata[].b64_json | Typbase64 string |
Poleusage | Typobject |
Chyby a další kroky
| Odpověď | Podmínka | Další krok |
|---|---|---|
Odpověď400 · invalid_request_error | PodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametru | Další krokPřed novým požadavkem na vytvoření opravte uvedená pole. |
Odpověďserver_error | PodmínkaVrácená odpověď uvádí, že operaci nebo výsledek je třeba zkontrolovat | Další 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-progemini-3-pro-imagegemini-3-pro-image-previewnano-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
| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
|---|---|---|---|---|
Polemodel | Typstring | PožadavekPovinné | Hodnoty a limity nano-banana-pro | Výchozí— |
Poleprompt | Typstring | PožadavekPovinné | Hodnoty a limity Minimální délka: 1 | Výchozí— |
Polen | Typinteger | PožadavekVolitelné | Hodnoty a limity Minimum: 1 | Výchozí1 |
Poleresponse_format | Typstring | PožadavekVolitelné | Hodnoty a limity url, b64_json | Výchozí— |
Polestream | Typboolean | PožadavekVolitelné | Hodnoty a limity | Výchozífalse |
Polesize | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polequality | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polebackground | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleoutput_format | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleoutput_compression | Typinteger | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polemoderation | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleinput_fidelity | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polestyle | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polepartial_images | Typinteger | Pož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
| Parametr | Kontrakt |
|---|---|
Parametrmaterial_types | Kontrakttext |
Parametrrequired | Kontraktmodel, prompt |
Parametroptional_controls | Kontraktnull |
Parametrcontent_type | Kontraktapplication/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
POST /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
| Konfigurace | Tabulka sazeb | Poplatek |
|---|---|---|
| KonfiguraceUltra | Tabulka sazebZákladní sazba | Poplatek 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
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}/contentGET /v1/media/assetsGET /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
| Pole | Typ |
|---|---|
Polecreated | Typinteger |
Poledata[].url | Typstring |
Poledata[].b64_json | Typbase64 string |
Poleusage | Typobject |
Chyby a další kroky
| Odpověď | Podmínka | Další krok |
|---|---|---|
Odpověď400 · invalid_request_error | PodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametru | Další krokPřed novým požadavkem na vytvoření opravte uvedená pole. |
Odpověďserver_error | PodmínkaVrácená odpověď uvádí, že operaci nebo výsledek je třeba zkontrolovat | Další 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Ú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
| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
|---|---|---|---|---|
Polemodel | Typstring | PožadavekPovinné | Hodnoty a limity google/gemini-3-pro-image | Výchozí— |
Polemessages | Typmessage[] | PožadavekPovinné | Hodnoty a limity Minimální počet položek: 1 | Výchozí— |
Polemessages[].role | Typstring | Pož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[].content | Typstring|content_part[]|null | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Polemessages[].tool_calls | Typtool_call[] | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Polemessages[].tool_call_id | Typstring | PožadavekVolitelné | Hodnoty a limity Platí, když: role=tool; použijte skutečně vrácené ID | Výchozí— |
Polemessages[].name | Typstring | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Polemessages[].reasoning_content | Typstring | Pož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_details | Typobject|array | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polemax_tokens | Typinteger | PožadavekVolitelné | Hodnoty a limity Minimum: 1 Závisí na modelu | Výchozí— |
Polemax_completion_tokens | Typinteger | PožadavekVolitelné | Hodnoty a limity Minimum: 1 Závisí na modelu | Výchozí— |
Polestream | Typboolean | PožadavekVolitelné | Hodnoty a limity | Výchozífalse |
Polestream_options.include_usage | Typboolean | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poletemperature | Typnumber | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poletop_p | Typnumber | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polestop | Typstring|string[] | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poletools | Typfunction_tool[] | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poletools[].type | Typstring | PožadavekVolitelné | Hodnoty a limity function Závisí na modelu | Výchozí— |
Poletools[].function.name | Typstring | PožadavekPovinné | Hodnoty a limity Platí, když: nástroj typu funkce je dodán | Výchozí— |
Poletools[].function.description | Typstring | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Poletools[].function.parameters | TypJSON_schema | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Poletool_choice | Typstring|object | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleparallel_tool_calls | Typboolean | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleresponse_format | Typobject | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polereasoning_effort | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polereasoning | Typobject | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleservice_tier | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleinstructions | Typstring | PožadavekVolitelné | Hodnoty a limity Pole kompatibility | Výchozí— |
Polefunctions | Typfunction[] | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polefunction_call | Typstring|object | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleprompt_cache_options | Typobject | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polemodalities | Typstring[] | PožadavekVolitelné | Hodnoty a limity text | Výchozí— |
Poleprovider | Typobject | PožadavekVolitelné | Hodnoty a limity Podmínky: provider.options je na této textové trase Ultra odmítáno | Výchozí— |
Polecache_control.ttl | Typstring | Pož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
| Parametr | Kontrakt |
|---|---|
Parametrcontent_type | Kontraktapplication/json |
Parametrrequired | Kontraktmodel, messages |
Parametrmaterial_types | Kontrakttext |
Parametrmessages | Kontraktpole zpráv se strukturou role/content |
Parametrfile_material | Kontraktskutečný dokument UTF-8 vložený jako doslovný text; ID souboru se neodvozuje |
Parametroptional_controls | Kontraktstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Parametrcontrol_scope | Kontraktspecifické pro model; nástroje uživatelských funkcí se liší od hostovaných nástrojů |
Parametroutput_modalities | Kontrakttext |
Parametrhosted_operations | Kontraktfalse |
Parametrmultimodal_input_binding | Kontraktnull |
Ž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.
| Konfigurace | Tabulka sazeb | Tokeny kontextu, více než | Tokeny kontextu, do uvedené hodnoty včetně | Poplatek |
|---|---|---|---|---|
| KonfiguraceZákladní sazby za tokeny | Tabulka sazebZákladní sazba | Tokeny kontextu, více než— | Tokeny kontextu, do uvedené hodnoty včetněBez horní meze | Poplatek 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 1 | Tabulka sazeb— | Tokeny kontextu, více než0 | Tokeny kontextu, do uvedené hodnoty včetněBez horní meze | Poplatek 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
| Konfigurace | Podmínky účtování | Poplatek |
|---|---|---|
| KonfiguraceGoogle: Nano Banana Pro (Gemini 3 Pro Image) · Výchozí konfigurace | Podmínky účtováníVýchozí konfigurace | Poplatek 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
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
| Pole | Typ |
|---|---|
Polechoices[].index | Typinteger |
Polechoices[].message.content | Typstring|null |
Polechoices[].message.tool_calls | Typtool_call[] |
Polechoices[].message.reasoning_content | Typstring |
Polechoices[].message.reasoning_details | Typobject|array |
Polechoices[].finish_reason | Typstring|null |
Poleusage | Typobject |
Chyby a další kroky
| Odpověď | Podmínka | Další krok |
|---|---|---|
Odpověď400 · invalid_request_error | PodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametru | Další 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Ú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
| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
|---|---|---|---|---|
Polemodel | Typstring | PožadavekPovinné | Hodnoty a limity google/gemini-3-pro-image | Výchozí— |
Poleprompt | Typstring | PožadavekPovinné | Hodnoty a limity Minimální délka: 1 | Výchozí— |
Poleresolution | Typstring | PožadavekVolitelné | Hodnoty a limity 1K, 2K, 4K | Výchozí— |
Poleaspect_ratio | Typstring | Pož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í— |
Polen | Typinteger | PožadavekVolitelné | Hodnoty a limity Minimum: 1 Maximum: 1 | Výchozí— |
Poleinput_references | Typarray | PožadavekVolitelné | Hodnoty a limity Minimální počet položek: 0 Maximální počet položek: 14 | Výchozí— |
Poleprovider | Typobject | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Parametry a životní cyklus metody
| Parametr | Kontrakt |
|---|---|
Parametrcontent_type | Kontraktapplication/json |
Parametrrequired | Kontraktmodel, prompt |
Parametrmaterial_types | Kontrakttext, 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.
| Konfigurace | Tabulka sazeb | Předpokládané množství | Poplatek |
|---|---|---|---|
| KonfiguraceZákladní sazby za tokeny | Tabulka sazebZákladní sazba | Př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
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}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Další načtení obsahu
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
| Pole | Typ |
|---|---|
Polecreated | Typ |
Poledata[].url | Typ |
Poledata[].b64_json | Typ |
Poleusage | Typ |
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Ú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
| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
|---|---|---|---|---|
Polemodel | Typstring | PožadavekPovinné | Hodnoty a limity google/gemini-3-pro-image | Výchozí— |
Polemessages | Typmessage[] | PožadavekPovinné | Hodnoty a limity | Výchozí— |
Polemessages[].role | Typstring | PožadavekPovinné | Hodnoty a limity user, assistant | Výchozí— |
Polemessages[].content | Typstring | PožadavekPovinné | Hodnoty a limity | Výchozí— |
Polemax_tokens | Typinteger | PožadavekPovinné | Hodnoty a limity | Výchozí— |
Polestream | Typboolean | PožadavekVolitelné | Hodnoty a limity | Výchozífalse |
Kombinace vstupních materiálů
Text · text UTF-8
řetězec messages[].content
Parametry a životní cyklus metody
| Parametr | Kontrakt |
|---|---|
Parametrcontent_type | Kontraktapplication/json |
Parametrrequired | Kontraktmodel, messages, max_tokens |
Parametroptional_controls | Kontraktstream |
Parametrmaterial_types | Kontrakttext |
Parametrtext_file_material | KontraktPř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.
| Konfigurace | Tabulka sazeb | Tokeny kontextu, více než | Tokeny kontextu, do uvedené hodnoty včetně | Poplatek |
|---|---|---|---|---|
| KonfiguraceZákladní sazby za tokeny | Tabulka sazebZákladní sazba | Tokeny kontextu, více než— | Tokeny kontextu, do uvedené hodnoty včetněBez horní meze | Poplatek 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 1 | Tabulka sazeb— | Tokeny kontextu, více než0 | Tokeny kontextu, do uvedené hodnoty včetněBez horní meze | Poplatek 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
{
"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
| Pole | Typ |
|---|---|
Poleid | Typstring |
Polemodel | Typstring |
Polecontent[] | Typtext|thinking|tool_use|other content block |
Polestop_reason | Typstring|null |
Poleusage | Typobject |
Chyby a další kroky
| Odpověď | Podmínka | Další krok |
|---|---|---|
Odpověď400 · invalid_request_error | PodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametru | Další 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→imagePOST /v1/images/generations·gemini-3-pro-image-preview:text→imagePOST /v1/images/generations·nano-banana-pro:text→imagePOST /v1/chat/completions·google/gemini-3-pro-image:text→textPOST /v1/images/generations·google/gemini-3-pro-image:text,image→imagePOST /v1/messages·google/gemini-3-pro-image:text→json,sse- Jaká pole požadavek používá?
POST /v1/images/generations·gemini-3-pro-image:model,prompt,n,response_format,streamPOST /v1/images/generations·gemini-3-pro-image-preview:model,prompt,n,response_format,streamPOST /v1/images/generations·nano-banana-pro:model,prompt,n,response_format,streamPOST /v1/chat/completions·google/gemini-3-pro-image:model,messages,stream,modalities,providerPOST /v1/images/generations·google/gemini-3-pro-image:model,prompt,resolution,aspect_ratio,n,input_references,providerPOST /v1/messages·google/gemini-3-pro-image:model,messages,max_tokens,stream- Jaké limity platí?
POST /v1/images/generations·gemini-3-pro-image:ctx:65536;max_out:32768;n.minimum:1POST /v1/images/generations·gemini-3-pro-image-preview:ctx:65536;max_out:32768;n.minimum:1POST /v1/images/generations·nano-banana-pro:ctx:65536;max_out:32768;n.minimum:1POST /v1/chat/completions·google/gemini-3-pro-image:messages.min_items:1POST /v1/images/generations·google/gemini-3-pro-image:n.minimum:1;n.maximum:1