models

Google: Nano Banana 2.1

Markdown · JSON

Google: Nano Banana 2.1

Gemini Nano Banana 2.1 genereert en bewerkt beelden in een gesprek op basis van tekst en visueel materiaal. Het verbetert tekstweergave, de indeling van infographics en consistentie over meerdere beurten, met uitvoer van 1K–4K en maximaal 14 referentiebeelden voor een afgebakende visuele opdracht.

Over het model

Deze beschrijving gaat over de mogelijkheden van het model. De via Ailoot beschikbare invoer, uitvoer en opties staan hieronder voor de geselecteerde methode.

Gemini Nano Banana 2.1 is Googles model voor beeldgeneratie en bewerking in gesprekken. Het is een update van Nano Banana 2 met verbeteringen in visueel realisme, het volgen van instructies, tekstweergave en karakterconsistentie tijdens opeenvolgende bewerkingen. De invoertabel omvat tekst, beelden, video en PDF, terwijl de uitvoer beeld en tekst is. Dat maakt het bruikbaar voor een productscène, een infographic of een visuele reeks die via meerdere specifieke revisies wordt ontwikkeld.

Het model biedt uitvoer in 1K, 2K en 4K, met 1K als standaard. Het neemt Nano Banana 2’s optie 0.5K niet over. De gedocumenteerde beeldverhoudingen omvatten 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 en 21:9, plus de hoge of panoramische formaten 1:4, 4:1, 1:8 en 8:1. Google vermeldt oplossingen voor tegelartefacten in die laatste brede en hoge formaten bij 2K en 4K. Resolutielabels zijn grootteklassen, geen vaste rechthoek: een vierkant 4K-beeld is 4096 × 4096, terwijl de gedocumenteerde 16:9-uitvoer in 4K 5504 × 3072 is.

Tekst vormt een belangrijk deel van de visuele werkstroom. Het model is ontworpen om leesbare, vormgegeven tekst weer te geven en infographic-elementen nauwkeuriger te organiseren. Bereid de exacte kop, labels en leesvolgorde voor en vraag daarna om het beeld met die goedgekeurde tekst. Benoem voor een menu, diagram of instructiegrafiek het verband tussen een bijschrift en het bijbehorende visuele element. Google raadt aan eerst de formulering te maken en vervolgens om het beeld te vragen, zodat de visuele compositie met een vastgelegde tekstbriefing begint.

Het samenvoegen van referentiebeelden ondersteunt maximaal 14 beelden. Het gedocumenteerde profiel omvat consistentie voor maximaal vier personages en getrouwheid voor maximaal tien objecten. Geef elke referentie een rol: het product dat herkenbaar moet blijven, het uiterlijk van het personage, de beoogde achtergrond of de visuele stijl. Een voorbeeldbriefing voor een product is: “Gebruik beeld A voor de flesvorm en het label. Gebruik beeld B voor het oppervlak en de belichting. Houd het product ongewijzigd, plaats het naast een opgevouwen handdoek en laat erboven vrije ruimte voor de aangeleverde kop.”

Grounding met Google Web Search en Image Search kan actuele informatie en visuele context voor generatie bieden. Image Search levert opgehaalde webbeelden als referenties; gewone webgrounding levert informatie over het onderwerp. Dit is bruikbaar voor een feitelijke grafiek of een scène waarvan het uiterlijk afhangt van een echt object. De beeldzoekwerkstroom ondersteunt hiervoor niet het ophalen van beelden van echte personen. Antwoorden met grounding bevatten bron- en toeschrijvingsmetadata in Googles gedocumenteerde werkstroom, dus een toepassing moet die samen met het gegenereerde resultaat bewaren.

Denken is instelbaar op minimal, medium en high, met medium als standaard voor dit exacte model. Het helpt het model de compositie en ingewikkeldere instructies te doorlopen vóór de uiteindelijke uitvoer. De beeldhandleiding beschrijft tussentijdse compositiebeelden binnen dat proces; die staan los van het beoogde eindresultaat. Kies de vereiste eindindeling, beeldverhouding en resolutie expliciet in plaats van te verwachten dat alleen de promptbeschrijving elke uitvoerinstelling vastlegt.

Bewerken in gesprekken laat een vervolgvraag één deel van een bestaand resultaat wijzigen: het licht aanpassen, een object verplaatsen of labels vertalen met behoud van de rest van de compositie. Neem het eerdere beeld of de interactie mee naar de volgende beurt en benoem zowel de gevraagde wijziging als de kenmerken die moeten blijven. Houd bij een personagereeks de uiterlijkreferenties consistent en gebruik een posereferentie wanneer een nieuwe hoek of complexe pose belangrijk is. Een praktische revisiebriefing kan zeggen: “Behoud het product, de labels en de indeling; maak alleen de achtergrond warmer grijs.”

De modeltabel geeft een invoerlimiet van 131.072 tokens en een uitvoerlimiet van 32.768 tokens. Beeldgeneratie en zoekgrounding worden ondersteund, terwijl audiogeneratie, code-uitvoering, functieaanroepen, gestructureerde uitvoer, caching, zoeken in bestanden, URL-context en Live API voor deze editie niet als ondersteund zijn vermeld. Video kan als bron voor een gegenereerd stilstaand beeld dienen; dat maakt dit model geen videogenerator. Google merkt ook op dat een aanvraag voor een exact aantal beelden mogelijk niet dat aantal oplevert. Alle gegenereerde beelden bevatten een SynthID-watermerk.

Geef voor een bruikbare eerste briefing het doel, onderwerp, de compositie, belichting, camerahoek, vereiste tekst en uitvoervorm van het beeld. Vraag bijvoorbeeld om een staande infographic met drie gelabelde stappen, een leesbare kop en een gespecificeerde kleurhiërarchie en beoordeel daarna de formulering en onderlinge plaatsing vóór de volgende bewerking. Het resultaat kan een productillustratie, redactionele afbeelding of ontwerpreferentie worden, waarbij het gekozen beeld en de bijbehorende uitleg samen worden bewaard.

Praktische taak

Praktische taak

Technisch voorbeeld in het Engels

Refine an approved poster background

Edit the supplied event poster. Preserve every word, the headline hierarchy, illustration placement and portrait composition. Change only the background from cool white to warm ivory, keeping dark text readable and retaining the original accent color. Do not add shapes, badges, textures or extra captions. Return the revised poster image.

Verwacht resultaat

One edited poster with the original wording and layout preserved over a warm ivory background.

Resultaat controleren

Compare every word and element position against the supplied poster, then inspect text contrast.
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-nano-banana-2.1

google/gemini-nano-banana-2.1

Google /google/gemini-nano-banana-2.1

Aan de slag

Gemini Nano Banana 2.1 genereert en bewerkt beelden in een gesprek op basis van tekst en visueel materiaal. Het verbetert tekstweergave, de indeling van infographics en consistentie over meerdere beurten, met uitvoer van 1K–4K en maximaal 14 referentiebeelden voor een afgebakende visuele opdracht.

Toegestane invoer
Tekst
Resultaten
Tekst

Beschikbaar in Ailoot · invoer en methoden

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Invoer
text
Uitvoer
text
Uitvoerformaat
json of SSE
VeldTypeVereisteWaarden en limietenStandaard
VeldmodelTypestringVereisteVereistWaarden en limieten
google/gemini-nano-banana-2.1
Standaard—
VeldmessagesTypemessage[]VereisteVereistWaarden en limieten
Minimumaantal items: 1
Standaard—
Veldmessages[].roleTypestringVereisteVereistWaarden en limieten
Voorbeelden: system, user, assistant, tool, function
Voorwaarden: Deze rollen worden expliciet weergegeven door compatibiliteitstypen in de broncode; de exacte rollenverzameling van het model blijft modelspecifiek.
Afhankelijk van het model
Standaard—
Veldmessages[].contentTypestring|content_part[]|nullVereisteOptioneelWaarden en limietenStandaard—
Veldmessages[].tool_callsTypetool_call[]VereisteOptioneelWaarden en limietenStandaard—
Veldmessages[].tool_call_idTypestringVereisteOptioneelWaarden en limieten
Geldt wanneer: role=tool; gebruik het werkelijk teruggegeven ID
Standaard—
Veldmessages[].nameTypestringVereisteOptioneelWaarden en limietenStandaard—
Veldmessages[].reasoning_contentTypestringVereisteOptioneelWaarden en limieten
Geldt wanneer: Stuur de werkelijk teruggegeven redeneringen terug wanneer dit model ze gebruikt
Standaard—
Veldmessages[].reasoning_detailsTypeobject|arrayVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
Veldmax_tokensTypeintegerVereisteOptioneelWaarden en limieten
Minimum: 1
Afhankelijk van het model
Standaard—
Veldmax_completion_tokensTypeintegerVereisteOptioneelWaarden en limieten
Minimum: 1
Afhankelijk van het model
Standaard—
VeldstreamTypebooleanVereisteOptioneelWaarden en limietenStandaardfalse
Veldstream_options.include_usageTypebooleanVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
VeldtemperatureTypenumberVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
Veldtop_pTypenumberVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
VeldstopTypestring|string[]VereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
VeldtoolsTypefunction_tool[]VereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
Veldtools[].typeTypestringVereisteOptioneelWaarden en limieten
function
Afhankelijk van het model
Standaard—
Veldtools[].function.nameTypestringVereisteVereistWaarden en limieten
Geldt wanneer: functietool opgegeven
Standaard—
Veldtools[].function.descriptionTypestringVereisteOptioneelWaarden en limietenStandaard—
Veldtools[].function.parametersTypeJSON_schemaVereisteOptioneelWaarden en limietenStandaard—
Veldtool_choiceTypestring|objectVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
Veldparallel_tool_callsTypebooleanVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
Veldresponse_formatTypeobjectVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
Veldreasoning_effortTypestringVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
VeldreasoningTypeobjectVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
Veldservice_tierTypestringVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
VeldinstructionsTypestringVereisteOptioneelWaarden en limieten
Compatibiliteitsveld
Standaard—
VeldfunctionsTypefunction[]VereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
Veldfunction_callTypestring|objectVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
Veldprompt_cache_optionsTypeobjectVereisteOptioneelWaarden en limieten
Afhankelijk van het model
Standaard—
VeldmodalitiesTypestring[]VereisteOptioneelWaarden en limieten
text
Standaard—
VeldproviderTypeobjectVereisteOptioneelWaarden en limieten
Voorwaarden: provider.options wordt op deze Ultra-tekstroute geweigerd
Standaard—
Veldcache_control.ttlTypestringVereisteOptioneelWaarden en limieten
Voorwaarden: 1h wordt op de daadwerkelijke locaties voor promptcaching geweigerd
Standaard—
Combinaties van invoermaterialen

Tekst · UTF8-tekst

messages[].content

Methodeparameters en levenscyclus
ParameterContract
Parametercontent_typeContractapplication/json
ParameterrequiredContractmodel, messages
Parametermaterial_typesContracttext
ParametermessagesContractberichtenarray met de structuur role/content
Parameterfile_materialContractwerkelijk UTF-8-document ingevoegd als letterlijke tekst; er wordt geen bestands-ID afgeleid
Parameteroptional_controlsContractstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametercontrol_scopeContractmodelspecifiek; functietools van de gebruiker verschillen van gehoste tools
Parameteroutput_modalitiesContracttext
Parameterhosted_operationsContractfalse
Parametermultimodal_input_bindingContractnull

Levenscyclus: synchronous_or_streamed

Stuur het exacte model-ID mee met messages.

Contextlengte is geen uitvoerlimiet.

Een tekstbestand kan letterlijke tekst aanleveren; beeld-, audio- en bestandsobjectinvoer vereisen een exacte koppeling.

Tarieven

Tariefverwijzingen voegen geen verzoekopties toe. Ondersteunde parameters staan bij de geselecteerde methode.

Snelle modus
Standaardtarief Wanneer de snelle modus geselecteerd is
Flex-modus
Standaardtarief Wanneer de flex-modus geselecteerd is
Maximale redeneerinspanning
Standaardtarief Wanneer voor maximale redeneerinspanning de default-aanpassing wordt gebruikt
Redeneerinspanning · hoog
Standaardtarief Wanneer de redeneerinspanning hoog is
Redeneerinspanning · minimaal
Standaardtarief Wanneer de redeneerinspanning minimaal is
Tarieven voor expliciete caching
Niet ingeschakeld Wanneer expliciete caching wordt aangevraagd

Ailoot-tarieven

Prijzen per configuratie

Koppel elke kostenpost aan de getoonde voorwaarden. Gebruik één tarief voor elke groep alternatieve configuraties.

ConfiguratieTariefstaffelContexttokens, meer danContexttokens, tot en metKosten
ConfiguratieBasistarieven voor tokensTariefstaffelBasistariefContexttokens, meer dan—Contexttokens, tot en metGeen bovengrensKosten
Invoer · Invoertokens $0.003 / 1K tokens
Uitvoer · Uitvoertokens $0.015 / 1K tokens
Invoer · Cache lezen — / 1K tokens
Invoer · Cache schrijven — / 1K tokens
Invoer · Cache schrijven, 1 uur — / 1K tokens
Uitvoer · Tokens voor afbeeldingsuitvoer $0.06 / 1K afbeeldingstokens
ConfiguratieAanvraaglengte · niveau 1Tariefstaffel—Contexttokens, meer dan0Contexttokens, tot en metGeen bovengrensKosten
Invoer · Invoertokens $0.003 / 1K tokens
Uitvoer · Uitvoertokens $0.015 / 1K tokens
Invoer · Cache lezen — / 1K tokens
Invoer · Cache schrijven — / 1K tokens
Invoer · Cache schrijven, 1 uur — / 1K tokens

Details van het referentietarief

Referentiestaffels op modelniveau veranderen de methodeselectie, kostenramingen of afschrijvingen niet. Voor de actieve kostenberekening gelden de tarieven van de geselecteerde Ailoot-methode.

Google: Nano Banana 2.1

Prijzen per configuratie

ConfiguratieFactureringsvoorwaardenKosten
ConfiguratieGoogle: Nano Banana 2.1 · StandaardconfiguratieFactureringsvoorwaardenStandaardconfiguratieKosten
Invoer · Invoertokens US$ 0,003 / 1K tokens
Uitvoer · Uitvoertokens US$ 0,015 / 1K tokens
Uitvoer · Uitvoerafbeelding US$ 0,06 / 1K tokens
Uitvoer · Zoeken op het web US$ 0,028 per zoekopdracht

Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. Zo werken reservering en afrekening →

Voorbeeldverzoeken

Ailoot Ultra · OpenAI Chat

curlPython SDKPython-stream
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-nano-banana-2.1", "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-nano-banana-2.1',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-nano-banana-2.1',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")

Resultaten ophalen en opslaan

Ailoot Ultra · OpenAI Chat

json of SSE

Alle voltooide resultaten bewaren

Bewaar elk volledig teruggegeven antwoord, bestand en inhoudsonderdeel.

Bewaar elke keuze en de bijbehorende inhoud, toolaanroepen en redeneringen. Voeg in SSE delta’s samen per keuze-/toolindex en bewaar de uiteindelijke reden van beëindiging en de verbruiksgegevens.

Als het oorspronkelijke antwoord moet worden gecontroleerd

Bewaar aanvraag-/antwoord-ID’s en headers. Er wordt geen algemene URL meegeleverd om teksttaken op te halen.

Antwoordvelden
VeldType
Veldchoices[].indexTypeinteger
Veldchoices[].message.contentTypestring|null
Veldchoices[].message.tool_callsTypetool_call[]
Veldchoices[].message.reasoning_contentTypestring
Veldchoices[].message.reasoning_detailsTypeobject|array
Veldchoices[].finish_reasonTypestring|null
VeldusageTypeobject
Fouten en vervolgstappen
AntwoordVoorwaardeVolgende stap
Antwoord400 · invalid_request_errorVoorwaardeVerplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldigVolgende stapCorrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.

Aliasnamen

Modelaliasnamen

Ailoot Ultra google/gemini-nano-banana-2.1

Aliasnamen voor methodepaden

/v1/images

Gerelateerde aanroeper-ID’s

google/gemini-nano-banana-2.1

Ailoot Ultra · Afbeeldingen POST /v1/images/generations google/gemini-nano-banana-2.1

google/gemini-nano-banana-2.1

Google /google/gemini-nano-banana-2.1

Aan de slag

Gemini Nano Banana 2.1 genereert en bewerkt beelden in een gesprek op basis van tekst en visueel materiaal. Het verbetert tekstweergave, de indeling van infographics en consistentie over meerdere beurten, met uitvoer van 1K–4K en maximaal 14 referentiebeelden voor een afgebakende visuele opdracht.

Toegestane invoer
Tekst · Afbeeldingen
Resultaten
Afbeeldingen

Beschikbaar in Ailoot · invoer en methoden

Ailoot Ultra · Afbeeldingen POST /v1/images/generations
Invoer
text, image
Uitvoer
image
VeldTypeVereisteWaarden en limietenStandaard
VeldmodelTypestringVereisteVereistWaarden en limieten
google/gemini-nano-banana-2.1
Standaard—
VeldpromptTypestringVereisteVereistWaarden en limieten
Minimumlengte: 1
Standaard—
VeldresolutionTypestringVereisteOptioneelWaarden en limieten
1K, 2K, 4K
Standaard—
Veldaspect_ratioTypestringVereisteOptioneelWaarden en limieten
1:1, 1:4, 1:8, 2:3, 3:2, 3:4, 4:1, 4:3, 4:5, 5:4, 8:1, 9:16, 16:9, 21:9
Standaard—
VeldnTypeintegerVereisteOptioneelWaarden en limieten
Minimum: 1
Maximum: 1
Standaard—
Veldinput_referencesTypearrayVereisteOptioneelWaarden en limieten
Minimumaantal items: 0
Maximumaantal items: 14
Standaard—
VeldproviderTypeobjectVereisteOptioneelWaarden en limietenStandaard—
Methodeparameters en levenscyclus
ParameterContract
Parametercontent_typeContractapplication/json
ParameterrequiredContractmodel, prompt
Parametermaterial_typesContracttext, image

Levenscyclus: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · daadwerkelijk teruggegeven task_id of record in de mediabibliotheek

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Tarieven

Zo worden de uiteindelijke kosten berekend

De getoonde tarieven ramen de kosten vóór de generatie. De definitieve kosten worden berekend op basis van de kosten die voor de oorspronkelijke generatie zijn geregistreerd. De gemeten duur van het gegenereerde resultaat en de geraamde hoeveelheden vormen niet de definitieve factureerbare hoeveelheid.

Tariefverwijzingen voegen geen verzoekopties toe. Ondersteunde parameters staan bij de geselecteerde methode.

Snelle modus
Niet opgegeven Wanneer de snelle modus geselecteerd is
Flex-modus
Niet opgegeven Wanneer de flex-modus geselecteerd is
Maximale redeneerinspanning
Niet opgegeven Wanneer voor maximale redeneerinspanning de default-aanpassing wordt gebruikt

Geschatte tarieven ter vergelijking

Prijzen per configuratie

Koppel elke kostenpost aan de getoonde voorwaarden. Gebruik één tarief voor elke groep alternatieve configuraties.

ConfiguratieTariefstaffelVerwachte hoeveelheidKosten
ConfiguratieBasistarieven voor tokensTariefstaffelBasistariefVerwachte hoeveelheid—Kosten
Invoer · Invoertokens · Schatting uitsluitend ter vergelijking — / 1K tokens
Uitvoer · Uitvoertokens · Schatting uitsluitend ter vergelijking — / 1K tokens
Invoer · Cache lezen · Schatting uitsluitend ter vergelijking — / 1K tokens
Invoer · Cache schrijven · Schatting uitsluitend ter vergelijking — / 1K tokens
Invoer · Cache schrijven, 1 uur · Schatting uitsluitend ter vergelijking — / 1K tokens
ConfiguratieGeschatte generatiekostenTariefstaffel—Verwachte hoeveelheidschatting voor één generatieKosten
Uitvoer · Geschatte generatiekosten · Schatting uitsluitend ter vergelijking $0.24576 schatting vóór generatie

Deze raming is geen extra kost of vast tarief voor de voltooide generatie.

Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. Zo werken reservering en afrekening →

Voorbeeldverzoeken

Ailoot Ultra · Afbeeldingen

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-nano-banana-2.1', '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

Resultaten ophalen en opslaan

Ailoot Ultra · Afbeeldingen

Download elke teruggegeven afbeelding of sla de Base64-inhoud ervan op

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Lezen van andere inhoud
Bestaande eigen bestanden ophalen
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.
Alle voltooide resultaten bewaren

Sla elke voltooide afbeelding op; haal elke teruggegeven URL op of decodeer de bijbehorende Base64-inhoud.

Bewaar de volledige respons en headers, iedere daadwerkelijke uitvoer, de oorspronkelijk teruggegeven identificatoren en alle verbruiksvelden. Herstel de oorspronkelijke bewerking zonder de aanmaakaanvraag opnieuw in te dienen.

Als het oorspronkelijke antwoord moet worden gecontroleerd

Bewaar de teruggegeven X-Client-Request-ID voor de reconciliatie. Lees uitsluitend daadwerkelijk teruggegeven task_id/asset_id-waarden of de eigen mediabibliotheek uit; bouw nooit een taak-URL op basis van de bewerkings-ID en dien de aanmaakaanvraag nooit opnieuw in.

Antwoordvelden
VeldType
VeldcreatedType
Velddata[].urlType
Velddata[].b64_jsonType
VeldusageType

Aliasnamen

Modelaliasnamen

Ailoot Ultra google/gemini-nano-banana-2.1

Aliasnamen voor methodepaden

/v1/images

Gerelateerde aanroeper-ID’s

google/gemini-nano-banana-2.1

Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-nano-banana-2.1

google/gemini-nano-banana-2.1

Google /google/gemini-nano-banana-2.1

Aan de slag

Gemini Nano Banana 2.1 genereert en bewerkt beelden in een gesprek op basis van tekst en visueel materiaal. Het verbetert tekstweergave, de indeling van infographics en consistentie over meerdere beurten, met uitvoer van 1K–4K en maximaal 14 referentiebeelden voor een afgebakende visuele opdracht.

Toegestane invoer
Tekst
Resultaten
json · sse

Beschikbaar in Ailoot · invoer en methoden

Ailoot Ultra · Anthropic Messages POST /v1/messages
Invoer
text
Uitvoer
json, sse
Uitvoerformaat
JSON of SSE
VeldTypeVereisteWaarden en limietenStandaard
VeldmodelTypestringVereisteVereistWaarden en limieten
google/gemini-nano-banana-2.1
Standaard—
VeldmessagesTypemessage[]VereisteVereistWaarden en limietenStandaard—
Veldmessages[].roleTypestringVereisteVereistWaarden en limieten
user, assistant
Standaard—
Veldmessages[].contentTypestringVereisteVereistWaarden en limietenStandaard—
Veldmax_tokensTypeintegerVereisteVereistWaarden en limietenStandaard—
VeldstreamTypebooleanVereisteOptioneelWaarden en limietenStandaardfalse
Combinaties van invoermaterialen

Tekst · UTF-8-tekst

messages[].content als tekenreeks

Methodeparameters en levenscyclus
ParameterContract
Parametercontent_typeContractapplication/json
ParameterrequiredContractmodel, messages, max_tokens
Parameteroptional_controlsContractstream
Parametermaterial_typesContracttext
Parametertext_file_materialContractLees het werkelijke UTF-8-document en plaats de tekst ervan in de aangegeven invoer of in de inhoudstekenreeks van een bericht.

Levenscyclus: synchronous_or_streamed

Tarieven

Tariefverwijzingen voegen geen verzoekopties toe. Ondersteunde parameters staan bij de geselecteerde methode.

Snelle modus
Standaardtarief Wanneer de snelle modus geselecteerd is
Flex-modus
Standaardtarief Wanneer de flex-modus geselecteerd is
Maximale redeneerinspanning
Standaardtarief Wanneer voor maximale redeneerinspanning de default-aanpassing wordt gebruikt
Redeneerinspanning · hoog
Standaardtarief Wanneer de redeneerinspanning hoog is
Redeneerinspanning · minimaal
Standaardtarief Wanneer de redeneerinspanning minimaal is
Tarieven voor expliciete caching
Niet ingeschakeld Wanneer expliciete caching wordt aangevraagd

Ailoot-tarieven

Prijzen per configuratie

Koppel elke kostenpost aan de getoonde voorwaarden. Gebruik één tarief voor elke groep alternatieve configuraties.

ConfiguratieTariefstaffelContexttokens, meer danContexttokens, tot en metKosten
ConfiguratieBasistarieven voor tokensTariefstaffelBasistariefContexttokens, meer dan—Contexttokens, tot en metGeen bovengrensKosten
Invoer · Invoertokens $0.003 / 1K tokens
Uitvoer · Uitvoertokens $0.015 / 1K tokens
Invoer · Cache lezen — / 1K tokens
Invoer · Cache schrijven — / 1K tokens
Invoer · Cache schrijven, 1 uur — / 1K tokens
Uitvoer · Tokens voor afbeeldingsuitvoer $0.06 / 1K afbeeldingstokens
ConfiguratieAanvraaglengte · niveau 1Tariefstaffel—Contexttokens, meer dan0Contexttokens, tot en metGeen bovengrensKosten
Invoer · Invoertokens $0.003 / 1K tokens
Uitvoer · Uitvoertokens $0.015 / 1K tokens
Invoer · Cache lezen — / 1K tokens
Invoer · Cache schrijven — / 1K tokens
Invoer · Cache schrijven, 1 uur — / 1K tokens

Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. Zo werken reservering en afrekening →

Voorbeeldverzoeken

Ailoot Ultra · Anthropic Messages

Volledige minimale JSON-bodycurl · gebruik je UTF-8-documentPython · sla het volledige resultaat op
{
  "model": "google/gemini-nano-banana-2.1",
  "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-nano-banana-2.1', '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-nano-banana-2.1', '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))

Resultaten ophalen en opslaan

Ailoot Ultra · Anthropic Messages

JSON of SSE

Alle voltooide resultaten bewaren

Bewaar elk volledig teruggegeven antwoord, bestand en inhoudsonderdeel.

Bewaar alle inhoudsblokken, handtekeningen van redeneringen en werkelijke toolgebruik-ID’s. Voeg alle SSE-blokdelta’s samen; het eerste tekstblok is niet de volledige uitvoer.

Als het oorspronkelijke antwoord moet worden gecontroleerd

Bewaar aanvraag-/antwoord-ID’s en headers. Er wordt geen algemene URL meegeleverd om teksttaken op te halen.

Antwoordvelden
VeldType
VeldidTypestring
VeldmodelTypestring
Veldcontent[]Typetext|thinking|tool_use|other content block
Veldstop_reasonTypestring|null
VeldusageTypeobject
Fouten en vervolgstappen
AntwoordVoorwaardeVolgende stap
Antwoord400 · invalid_request_errorVoorwaardeVerplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldigVolgende stapCorrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.

Aliasnamen

Modelaliasnamen

Ailoot Ultra google/gemini-nano-banana-2.1

Aliasnamen voor methodepaden

/v1/images

Gerelateerde aanroeper-ID’s

google/gemini-nano-banana-2.1

FAQ · Google: Nano Banana 2.1
Welke invoer en resultaten zijn beschikbaar?

POST /v1/chat/completions · google/gemini-nano-banana-2.1: text → text

POST /v1/images/generations · google/gemini-nano-banana-2.1: text, image → image

POST /v1/messages · google/gemini-nano-banana-2.1: text → json, sse

Welke velden gebruikt het verzoek?

POST /v1/chat/completions · google/gemini-nano-banana-2.1: model, messages, stream, modalities, provider

POST /v1/images/generations · google/gemini-nano-banana-2.1: model, prompt, resolution, aspect_ratio, n, input_references, provider

POST /v1/messages · google/gemini-nano-banana-2.1: model, messages, max_tokens, stream

Welke limieten gelden?

POST /v1/chat/completions · google/gemini-nano-banana-2.1: messages.min_items: 1

POST /v1/images/generations · google/gemini-nano-banana-2.1: n.minimum: 1; n.maximum: 1

Meer details

Verbind Ailoot met Claude Code, OpenCode, Hermes of je eigen applicatie.

Het bedrijf en zijn projectenportefeuille

Het bedrijf en zijn projectenportefeuille: miljoenen klanten; maandelijkse verkopen in de miljarden.

Koop tokens met korting.

Abonnementsvoordeel voor regelmatig gebruik. Promotiecodes geven tot 50% korting op tokens.

Abonnement
Kies een abonnement met korting voor je terugkerende verzoeken.
Promotiecode tot 50%
Vul de code bij aankoop in. De prijs wordt volgens de lopende actie herberekend.
Kosten in de geschiedenis
Model, tokens en bedrag worden per verzoek bewaard.

Kies een abonnement · Bekijk modelprijzen

Verbind de API met het product dat je verkoopt.

SaaS, apps en bots volgens de openbare aanbodvoorwaarden en licentieovereenkomst van Ailoot. Vraag voor doorverkoop een resellerlicentie aan.

Commerciële applicatie
Voeg tekst-, beeld-, video- en geluidsgeneratie aan betaalde functies van je service toe.
Resellerlicentie
Stuur een projectbeschrijving en toegangsschema. Vraag schriftelijke voorwaarden voor gebruik en doorverkoop.
Documenten op de site
Aanbodvoorwaarden, licentieovereenkomst en gegevensbeleid zijn vóór het verbinden beschikbaar.

Vraag een resellerlicentie aan · Aanbodvoorwaarden en licentieovereenkomst