modelli

Google: Nano Banana Pro (Gemini 3 Pro Image)

Markdown · JSON

Google: Nano Banana Pro (Gemini 3 Pro Image)

Nano Banana Pro (Gemini 3 Pro Image) è il modello di immagini di Google guidato dal ragionamento per design complessi, mockup di prodotto e visualizzazioni fattuali. Accetta testo e immagini di riferimento e genera immagini con testo, con output da 1K a 4K e controllo creativo dettagliato.

Informazioni sul modello

Questa descrizione illustra le funzionalità del modello. Gli input, gli output e le opzioni disponibili in Ailoot per il metodo selezionato sono elencati di seguito.

Nano Banana Pro è il modello Gemini 3 Pro Image di Google per generazione e modifica di immagini guidate dal ragionamento. Il produttore pone al centro dell'uso previsto progettazione grafica complessa, mockup di prodotto ad alta fedeltà e visualizzazione di dati fattuali. Accetta testo e immagini e produce immagini e testo. Questa edizione denominata Pro per immagini si basa su Gemini 3 Pro, pur mantenendo il proprio profilo di input e capacità per compiti di immagini.

Il modello supporta immagini 1K, 2K e 4K. I formati documentati comprendono 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 e 21:9. Un'immagine quadrata 4K misura 4096 × 4096; un'immagine 4K in 16:9 misura 5504 × 3072. Seleziona risoluzione e rapporto d'aspetto per l'artefatto necessario, che sia un poster verticale, una scena di prodotto o una grafica esplicativa larga. L'opzione 0.5K e gli ulteriori rapporti estremi di Gemini 3.1 Flash Image non fanno parte di questa tabella Pro.

La resa del testo supporta scritte chiare in poster, diagrammi e altre risorse progettate. Per un'infografica complessa, fornisci i fatti sottostanti, le diciture esatte, una sequenza di lettura e la relazione tra etichette ed elementi visivi. Separa le informazioni da comunicare dallo stile artistico desiderato. Google consiglia di preparare prima il testo e poi generare l'immagine che lo contiene. Questo è particolarmente utile quando una composizione combina un titolo, un diagramma e diverse brevi didascalie.

L'input con più immagini supporta fino a 14 riferimenti. La tabella delle funzionalità di Google descrive fino a sei riferimenti di oggetti per la fedeltà, fino a cinque riferimenti di personaggi per la coerenza e fino a tre riferimenti di stile. Questi ruoli aiutano a preparare un'immagine composita: una fotografia di prodotto definisce l'aspetto, un'immagine separata stabilisce l'ambientazione e un'immagine di stile orienta il trattamento visivo. Spiega al modello quali dettagli sono autorevoli e quali riferimenti forniscono ispirazione, anziché chiedergli di combinare indiscriminatamente ogni caratteristica visibile.

Il grounding tramite Google Search può fornire informazioni del mondo reale per una visualizzazione fattuale o una scena informata da condizioni attuali. Il flusso di immagini Pro documenta il grounding web; l'estensione Image Search è documentata specificamente per Nano Banana 2.1 e Gemini 3.1 Flash Image. Per una grafica di dati, fornisci i valori che vuoi mostrare o richiedi informazioni con grounding nel flusso del produttore, poi rendi espliciti relazione, etichette e impaginazione. La generazione informata dalla ricerca produce comunque un'immagine da controllare, non un sostituto della verifica dei fatti rappresentati.

Il ragionamento supporta la composizione di un prompt complesso prima della resa finale. La guida alle immagini descrive immagini intermedie usate per verificare composizione e logica, distinte dall'artefatto finale. Non trasferire la tabella di controllo minimal/high di Nano Banana 2 o la tabella con medium predefinito di Nano Banana 2.1 a questa edizione Pro. Per un design impegnativo, fornisci un brief completo con gerarchia visiva, relazioni richieste tra gli oggetti ed elementi che devono sopravvivere alle modifiche successive.

La scheda del modello descrive limiti residui sostanziali: testo molto piccolo e brani lunghi possono essere resi male, l'aspetto dei personaggi può cambiare tra un riferimento e un risultato, e modifiche con maschere o schizzi possono seguire l'istruzione solo in parte o lasciare segni. Può anche confondere sinistra e destra o copiare un elemento sorgente nella nuova composizione. Per una revisione di prodotto, specifica esplicitamente geometria ed etichette da conservare ed esamina l'area modificata; per un diagramma, confronta direzione delle frecce e posizioni relative degli oggetti.

La tabella API attuale indica un limite di input di 65,536 token e un limite di output di 32,768 token. Sono supportati generazione di immagini, thinking, grounding tramite ricerca ed elaborazione batch; non sono supportati generazione audio, chiamate di funzione, esecuzione di codice, caching, output strutturati, ricerca nei file, contesto URL e Live API. In questo profilo il compito di immagini non accetta input né audio né video. Le immagini generate includono SynthID e il numero richiesto di immagini di output non viene sempre rispettato esattamente.

Un brief pratico di prodotto può combinare un'immagine del prodotto, un riferimento di illuminazione e il titolo esatto: «Conserva le proporzioni e le scritte del prodotto, mostralo su una superficie di pietra chiara sotto una luce laterale morbida e lascia libero il terzo superiore per il titolo fornito». Per un diagramma fattuale, identifica ogni entità e connessione e fornisci le etichette approvate. Rifinisci il risultato in una conversazione indicando una modifica e le caratteristiche da conservare, mantenendo insieme l'immagine selezionata e il suo testo esplicativo come artefatto di design.

Caso pratico

Caso pratico

Esempio tecnico in inglese

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.

Risultato atteso

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

Verificare il risultato

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

gemini-3-pro-image

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

Introduzione

Nano Banana Pro (Gemini 3 Pro Image) è il modello di immagini di Google guidato dal ragionamento per design complessi, mockup di prodotto e visualizzazioni fattuali. Accetta testo e immagini di riferimento e genera immagini con testo, con output da 1K a 4K e controllo creativo dettagliato.

Input accettati
Testo
Risultati
Immagini

Disponibile in Ailoot · input e metodi

Ailoot · Immagini POST /v1/images/generations
Tipi di input
text
Tipi di output
image
Contesto
65.536 tokens
Output massimo
32.768 tokens
Formato di output
File immagine
CampoTipoRequisitoValori e limitiPredefinito
CampomodelTipostringRequisitoObbligatorioValori e limiti
gemini-3-pro-image
Predefinito—
CampopromptTipostringRequisitoObbligatorioValori e limiti
Lunghezza minima: 1
Predefinito—
CamponTipointegerRequisitoFacoltativoValori e limiti
Minimo: 1
Predefinito1
Camporesponse_formatTipostringRequisitoFacoltativoValori e limiti
url, b64_json
Predefinito—
CampostreamTipobooleanRequisitoFacoltativoValori e limitiPredefinitofalse
CamposizeTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampoqualityTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampobackgroundTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campooutput_formatTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campooutput_compressionTipointegerRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampomoderationTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campoinput_fidelityTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampostyleTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campopartial_imagesTipointegerRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Combinazioni di materiali in input

Da testo a immagine · Obbligatorio: prompt

Parametri e ciclo di vita del metodo
ParametroContratto
Parametromaterial_typesContrattotext
ParametrorequiredContrattomodel, prompt
Parametrooptional_controlsContrattonull
Parametrocontent_typeContrattoapplication/json

Ciclo di vita: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · task_id effettivamente restituito o record della libreria multimediale

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste.

Tariffe

Tariffe dei metodi Ailoot

Ailoot ImmaginiPOST /v1/images/generations
Input
0,002 USD / 1K token immagine
Output
0,134 USD per immagine 1K
Output
0,134 USD per immagine 2K
Output
0,24 USD per immagine 4K

Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →

Dettagli della tariffa di riferimento

I listini di riferimento del modello non modificano la selezione del metodo, i preventivi o gli addebiti. Gli addebiti attivi usano le tariffe del metodo Ailoot selezionato.

Listini di riferimento del modello

Prezzi per configurazione

ConfigurazioneListino delle tariffeCosto
ConfigurazioneUltraListino delle tariffeTariffa baseCosto
Input · Token in input $0.004000 / 1K token
Output · Token in output $0.024000 / 1K token
Input · immagine $0.004000 / 1K token
Output · immagine in uscita $0.24000 / 1K token
Input · audio $0.004000 / 1K token
Input · cache audio in ingresso $0.0004000 / 1K token
Output · ricerca web $0.028 per ricerca web
Output · ragionamento interno $0.024000 / 1K token
Input · Lettura dalla cache $0.0004000 / 1K token
Input · Scrittura nella cache $0.000750000 / 1K token

Esempi di richieste

Ailoot · Immagini

curlPython SDKNode.js SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3-pro-image", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gemini-3-pro-image', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gemini-3-pro-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");

Ricevi e salva i risultati

Ailoot · Immagini

Scarica ogni immagine restituita o salvane il contenuto Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Conserva tutti i risultati completati

Salva ogni immagine completata; recupera ogni URL restituito oppure decodificane il contenuto Base64.

Salva ogni elemento data. Decodifica ogni b64_json o recupera ogni URL firmato restituito. Scegli l'estensione del nome del file in base al MIME e ai byte effettivi.

Se occorre verificare la risposta originale

Se il risultato di una generazione o modifica di immagini richiede una verifica, conserva operation_id/X-Client-Request-ID originale e le informazioni sul risultato restituito. Recupera i risultati esistenti che ti appartengono tramite la libreria multimediale usando i valori effettivi di task_id o asset_id. Non reinviare la richiesta di generazione/modifica e non costruire un URL di polling a partire da operation_id.

Campi della risposta
CampoTipo
CampocreatedTipointeger
Campodata[].urlTipostring
Campodata[].b64_jsonTipobase64 string
CampousageTipoobject
Errori e passaggi successivi
RispostaCondizionePassaggio successivo
Risposta400 · invalid_request_errorCondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validiPassaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione.
Rispostaserver_errorCondizioneLa risposta restituita indica che l'operazione o il risultato richiede una verificaPassaggio successivoConserva l'ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l'operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione.

Alias

Alias del modello

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

Alias dei percorsi dei metodi

/v1/images

ID di chiamata correlati

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

Ailoot · Immagini POST /v1/images/generations gemini-3-pro-image-preview

gemini-3-pro-image-preview

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

Introduzione

Nano Banana Pro (Gemini 3 Pro Image) è il modello di immagini di Google guidato dal ragionamento per design complessi, mockup di prodotto e visualizzazioni fattuali. Accetta testo e immagini di riferimento e genera immagini con testo, con output da 1K a 4K e controllo creativo dettagliato.

Input accettati
Testo
Risultati
Immagini

Disponibile in Ailoot · input e metodi

Ailoot · Immagini POST /v1/images/generations
Tipi di input
text
Tipi di output
image
Contesto
65.536 tokens
Output massimo
32.768 tokens
Formato di output
File immagine
CampoTipoRequisitoValori e limitiPredefinito
CampomodelTipostringRequisitoObbligatorioValori e limiti
gemini-3-pro-image-preview
Predefinito—
CampopromptTipostringRequisitoObbligatorioValori e limiti
Lunghezza minima: 1
Predefinito—
CamponTipointegerRequisitoFacoltativoValori e limiti
Minimo: 1
Predefinito1
Camporesponse_formatTipostringRequisitoFacoltativoValori e limiti
url, b64_json
Predefinito—
CampostreamTipobooleanRequisitoFacoltativoValori e limitiPredefinitofalse
CamposizeTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampoqualityTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampobackgroundTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campooutput_formatTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campooutput_compressionTipointegerRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampomoderationTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campoinput_fidelityTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampostyleTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campopartial_imagesTipointegerRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Combinazioni di materiali in input

Da testo a immagine · Obbligatorio: prompt

Parametri e ciclo di vita del metodo
ParametroContratto
Parametromaterial_typesContrattotext
ParametrorequiredContrattomodel, prompt
Parametrooptional_controlsContrattonull
Parametrocontent_typeContrattoapplication/json

Ciclo di vita: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · task_id effettivamente restituito o record della libreria multimediale

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste.

Tariffe

Tariffe dei metodi Ailoot

Ailoot ImmaginiPOST /v1/images/generations
Input
0,002 USD / 1K token immagine
Output
0,134 USD per immagine 1K
Output
0,134 USD per immagine 2K
Output
0,24 USD per immagine 4K

Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →

Dettagli della tariffa di riferimento

I listini di riferimento del modello non modificano la selezione del metodo, i preventivi o gli addebiti. Gli addebiti attivi usano le tariffe del metodo Ailoot selezionato.

Listini di riferimento del modello

Prezzi per configurazione

ConfigurazioneListino delle tariffeCosto
ConfigurazioneUltraListino delle tariffeTariffa baseCosto
Input · Token in input $0.004000 / 1K token
Output · Token in output $0.024000 / 1K token
Input · immagine $0.004000 / 1K token
Output · immagine in uscita $0.24000 / 1K token
Input · audio $0.004000 / 1K token
Input · cache audio in ingresso $0.0004000 / 1K token
Output · ricerca web $0.028 per ricerca web
Output · ragionamento interno $0.024000 / 1K token
Input · Lettura dalla cache $0.0004000 / 1K token
Input · Scrittura nella cache $0.000750000 / 1K token

Esempi di richieste

Ailoot · Immagini

curlPython SDKNode.js SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3-pro-image-preview", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gemini-3-pro-image-preview', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gemini-3-pro-image-preview", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");

Ricevi e salva i risultati

Ailoot · Immagini

Scarica ogni immagine restituita o salvane il contenuto Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Conserva tutti i risultati completati

Salva ogni immagine completata; recupera ogni URL restituito oppure decodificane il contenuto Base64.

Salva ogni elemento data. Decodifica ogni b64_json o recupera ogni URL firmato restituito. Scegli l'estensione del nome del file in base al MIME e ai byte effettivi.

Se occorre verificare la risposta originale

Se il risultato di una generazione o modifica di immagini richiede una verifica, conserva operation_id/X-Client-Request-ID originale e le informazioni sul risultato restituito. Recupera i risultati esistenti che ti appartengono tramite la libreria multimediale usando i valori effettivi di task_id o asset_id. Non reinviare la richiesta di generazione/modifica e non costruire un URL di polling a partire da operation_id.

Campi della risposta
CampoTipo
CampocreatedTipointeger
Campodata[].urlTipostring
Campodata[].b64_jsonTipobase64 string
CampousageTipoobject
Errori e passaggi successivi
RispostaCondizionePassaggio successivo
Risposta400 · invalid_request_errorCondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validiPassaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione.
Rispostaserver_errorCondizioneLa risposta restituita indica che l'operazione o il risultato richiede una verificaPassaggio successivoConserva l'ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l'operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione.

Alias

Alias del modello

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

Alias dei percorsi dei metodi

/v1/images

ID di chiamata correlati

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

Ailoot · Immagini POST /v1/images/generations nano-banana-pro

nano-banana-pro

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

Introduzione

Nano Banana Pro (Gemini 3 Pro Image) è il modello di immagini di Google guidato dal ragionamento per design complessi, mockup di prodotto e visualizzazioni fattuali. Accetta testo e immagini di riferimento e genera immagini con testo, con output da 1K a 4K e controllo creativo dettagliato.

Input accettati
Testo
Risultati
Immagini

Disponibile in Ailoot · input e metodi

Ailoot · Immagini POST /v1/images/generations
Tipi di input
text
Tipi di output
image
Contesto
65.536 tokens
Output massimo
32.768 tokens
Formato di output
File immagine
CampoTipoRequisitoValori e limitiPredefinito
CampomodelTipostringRequisitoObbligatorioValori e limiti
nano-banana-pro
Predefinito—
CampopromptTipostringRequisitoObbligatorioValori e limiti
Lunghezza minima: 1
Predefinito—
CamponTipointegerRequisitoFacoltativoValori e limiti
Minimo: 1
Predefinito1
Camporesponse_formatTipostringRequisitoFacoltativoValori e limiti
url, b64_json
Predefinito—
CampostreamTipobooleanRequisitoFacoltativoValori e limitiPredefinitofalse
CamposizeTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampoqualityTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampobackgroundTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campooutput_formatTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campooutput_compressionTipointegerRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampomoderationTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campoinput_fidelityTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampostyleTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campopartial_imagesTipointegerRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Combinazioni di materiali in input

Da testo a immagine · Obbligatorio: prompt

Parametri e ciclo di vita del metodo
ParametroContratto
Parametromaterial_typesContrattotext
ParametrorequiredContrattomodel, prompt
Parametrooptional_controlsContrattonull
Parametrocontent_typeContrattoapplication/json

Ciclo di vita: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · task_id effettivamente restituito o record della libreria multimediale

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste.

Tariffe

Tariffe dei metodi Ailoot

Ailoot ImmaginiPOST /v1/images/generations
Input
0,002 USD / 1K token immagine
Output
0,134 USD per immagine 1K
Output
0,134 USD per immagine 2K
Output
0,24 USD per immagine 4K

Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →

Dettagli della tariffa di riferimento

I listini di riferimento del modello non modificano la selezione del metodo, i preventivi o gli addebiti. Gli addebiti attivi usano le tariffe del metodo Ailoot selezionato.

Listini di riferimento del modello

Prezzi per configurazione

ConfigurazioneListino delle tariffeCosto
ConfigurazioneUltraListino delle tariffeTariffa baseCosto
Input · Token in input $0.004000 / 1K token
Output · Token in output $0.024000 / 1K token
Input · immagine $0.004000 / 1K token
Output · immagine in uscita $0.24000 / 1K token
Input · audio $0.004000 / 1K token
Input · cache audio in ingresso $0.0004000 / 1K token
Output · ricerca web $0.028 per ricerca web
Output · ragionamento interno $0.024000 / 1K token
Input · Lettura dalla cache $0.0004000 / 1K token
Input · Scrittura nella cache $0.000750000 / 1K token

Esempi di richieste

Ailoot · Immagini

curlPython SDKNode.js SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "nano-banana-pro", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'nano-banana-pro', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "nano-banana-pro", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");

Ricevi e salva i risultati

Ailoot · Immagini

Scarica ogni immagine restituita o salvane il contenuto Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Conserva tutti i risultati completati

Salva ogni immagine completata; recupera ogni URL restituito oppure decodificane il contenuto Base64.

Salva ogni elemento data. Decodifica ogni b64_json o recupera ogni URL firmato restituito. Scegli l'estensione del nome del file in base al MIME e ai byte effettivi.

Se occorre verificare la risposta originale

Se il risultato di una generazione o modifica di immagini richiede una verifica, conserva operation_id/X-Client-Request-ID originale e le informazioni sul risultato restituito. Recupera i risultati esistenti che ti appartengono tramite la libreria multimediale usando i valori effettivi di task_id o asset_id. Non reinviare la richiesta di generazione/modifica e non costruire un URL di polling a partire da operation_id.

Campi della risposta
CampoTipo
CampocreatedTipointeger
Campodata[].urlTipostring
Campodata[].b64_jsonTipobase64 string
CampousageTipoobject
Errori e passaggi successivi
RispostaCondizionePassaggio successivo
Risposta400 · invalid_request_errorCondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validiPassaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione.
Rispostaserver_errorCondizioneLa risposta restituita indica che l'operazione o il risultato richiede una verificaPassaggio successivoConserva l'ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l'operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione.

Alias

Alias del modello

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

Alias dei percorsi dei metodi

/v1/images

ID di chiamata correlati

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

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3-pro-image

google/gemini-3-pro-image

Google /google/gemini-3-pro-image

Introduzione

Nano Banana Pro (Gemini 3 Pro Image) è il modello di immagini di Google guidato dal ragionamento per design complessi, mockup di prodotto e visualizzazioni fattuali. Accetta testo e immagini di riferimento e genera immagini con testo, con output da 1K a 4K e controllo creativo dettagliato.

Input accettati
Testo
Risultati
Testo

Disponibile in Ailoot · input e metodi

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Tipi di input
text
Tipi di output
text
Formato di output
json o SSE
CampoTipoRequisitoValori e limitiPredefinito
CampomodelTipostringRequisitoObbligatorioValori e limiti
google/gemini-3-pro-image
Predefinito—
CampomessagesTipomessage[]RequisitoObbligatorioValori e limiti
Numero minimo di elementi: 1
Predefinito—
Campomessages[].roleTipostringRequisitoObbligatorioValori e limiti
Esempi: system, user, assistant, tool, function
Condizioni: Questi ruoli sono rappresentati esplicitamente dai tipi di compatibilità del codice sorgente; l’insieme esatto dei ruoli rimane specifico del modello.
Dipende dal modello
Predefinito—
Campomessages[].contentTipostring|content_part[]|nullRequisitoFacoltativoValori e limitiPredefinito—
Campomessages[].tool_callsTipotool_call[]RequisitoFacoltativoValori e limitiPredefinito—
Campomessages[].tool_call_idTipostringRequisitoFacoltativoValori e limiti
Si applica quando: role=tool; usa l’ID effettivamente restituito
Predefinito—
Campomessages[].nameTipostringRequisitoFacoltativoValori e limitiPredefinito—
Campomessages[].reasoning_contentTipostringRequisitoFacoltativoValori e limiti
Si applica quando: Reinserisci il ragionamento effettivamente restituito quando il modello lo utilizza
Predefinito—
Campomessages[].reasoning_detailsTipoobject|arrayRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campomax_tokensTipointegerRequisitoFacoltativoValori e limiti
Minimo: 1
Dipende dal modello
Predefinito—
Campomax_completion_tokensTipointegerRequisitoFacoltativoValori e limiti
Minimo: 1
Dipende dal modello
Predefinito—
CampostreamTipobooleanRequisitoFacoltativoValori e limitiPredefinitofalse
Campostream_options.include_usageTipobooleanRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampotemperatureTiponumberRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campotop_pTiponumberRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampostopTipostring|string[]RequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampotoolsTipofunction_tool[]RequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campotools[].typeTipostringRequisitoFacoltativoValori e limiti
function
Dipende dal modello
Predefinito—
Campotools[].function.nameTipostringRequisitoObbligatorioValori e limiti
Si applica quando: Funzione fornita come strumento
Predefinito—
Campotools[].function.descriptionTipostringRequisitoFacoltativoValori e limitiPredefinito—
Campotools[].function.parametersTipoJSON_schemaRequisitoFacoltativoValori e limitiPredefinito—
Campotool_choiceTipostring|objectRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campoparallel_tool_callsTipobooleanRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Camporesponse_formatTipoobjectRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Camporeasoning_effortTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CamporeasoningTipoobjectRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Camposervice_tierTipostringRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampoinstructionsTipostringRequisitoFacoltativoValori e limiti
Campo di compatibilità
Predefinito—
CampofunctionsTipofunction[]RequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campofunction_callTipostring|objectRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
Campoprompt_cache_optionsTipoobjectRequisitoFacoltativoValori e limiti
Dipende dal modello
Predefinito—
CampomodalitiesTipostring[]RequisitoFacoltativoValori e limiti
text
Predefinito—
CampoproviderTipoobjectRequisitoFacoltativoValori e limiti
Condizioni: provider.options viene rifiutato su questa rotta testuale Ultra
Predefinito—
Campocache_control.ttlTipostringRequisitoFacoltativoValori e limiti
Condizioni: 1h viene rifiutato nelle posizioni effettive della cache dei prompt
Predefinito—
Combinazioni di materiali in input

Testo · Testo UTF8

messages[].content

Parametri e ciclo di vita del metodo
ParametroContratto
Parametrocontent_typeContrattoapplication/json
ParametrorequiredContrattomodel, messages
Parametromaterial_typesContrattotext
ParametromessagesContrattoArray di messaggi con struttura role/content
Parametrofile_materialContrattoDocumento UTF-8 effettivo inserito come testo letterale; nessun ID di file dedotto
Parametrooptional_controlsContrattostream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametrocontrol_scopeContrattoSpecifico del modello; gli strumenti di funzione dell’utente differiscono dagli strumenti ospitati
Parametrooutput_modalitiesContrattotext
Parametrohosted_operationsContrattofalse
Parametromultimodal_input_bindingContrattonull

Ciclo di vita: synchronous_or_streamed

Invia l’ID esatto del modello con messages.

La lunghezza del contesto non è un limite di uscita.

Un file di testo può fornire testo letterale; gli ingressi immagine/audio/oggetto file richiedono un’associazione esatta.

Tariffe

Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.

Modalità rapida
Tariffa standard Quando è selezionata la modalità rapida
Modalità flex
Tariffa standard Quando è selezionata la modalità flex
Sforzo massimo di ragionamento
Tariffa standard Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)
Tariffe della cache esplicita
Non abilitato Quando viene richiesta una cache esplicita

Tariffe Ailoot

Prezzi per configurazione

Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.

ConfigurazioneListino delle tariffeToken di contesto, più diToken di contesto, fino al limite inclusoCosto
ConfigurazioneTariffe di base dei tokenListino delle tariffeTariffa baseToken di contesto, più di—Token di contesto, fino al limite inclusoNessun limite superioreCosto
Input · Token in input $0.004 / 1K token
Output · Token in output $0.024 / 1K token
Input · Lettura dalla cache $0.0004 / 1K token
Input · Scrittura nella cache $0.00075 / 1K token
Input · Scrittura nella cache, 1 ora — / 1K token
Output · Token immagine in uscita $0.24 / 1K token immagine
ConfigurazioneFascia 1 di lunghezza della richiestaListino delle tariffe—Token di contesto, più di0Token di contesto, fino al limite inclusoNessun limite superioreCosto
Input · Token in input $0.004 / 1K token
Output · Token in output $0.024 / 1K token
Input · Lettura dalla cache $0.0004 / 1K token
Input · Scrittura nella cache $0.00075 / 1K token
Input · Scrittura nella cache, 1 ora — / 1K token

Dettagli della tariffa di riferimento

I listini di riferimento del modello non modificano la selezione del metodo, i preventivi o gli addebiti. Gli addebiti attivi usano le tariffe del metodo Ailoot selezionato.

Google: Nano Banana Pro (Gemini 3 Pro Image)

Prezzi per configurazione

ConfigurazioneCondizioni di fatturazioneCosto
ConfigurazioneGoogle: Nano Banana Pro (Gemini 3 Pro Image) · Configurazione predefinitaCondizioni di fatturazioneConfigurazione predefinitaCosto
Input · Token in input 0,004 USD / 1K token
Output · Token in output 0,024 USD / 1K token
Input · Immagine in ingresso 0,004 USD / 1K token
Output · Immagine in uscita 0,24 USD / 1K token
Input · Audio in ingresso 0,004 USD / 1K token
Input · Lettura dalla cache audio 0,0004 USD / 1K token
Output · Ricerca web 0,028 USD per ricerca
Output · Token di ragionamento 0,024 USD / 1K token
Input · Lettura dalla cache 0,0004 USD / 1K token
Input · Scrittura nella cache · 5 minuti 0,00075 USD / 1K token

Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →

Esempi di richieste

Ailoot Ultra · OpenAI Chat

curlPython SDKStreaming Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-3-pro-image", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-3-pro-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='google/gemini-3-pro-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Ricevi e salva i risultati

Ailoot Ultra · OpenAI Chat

json o SSE

Conserva tutti i risultati completati

Conserva ogni risposta, file e parte di contenuto restituiti per intero.

Conserva ogni scelta con contenuto, chiamate agli strumenti e ragionamento. In SSE assembla i delta per indice di scelta e strumento e conserva il motivo finale di completamento e i dati di utilizzo.

Se occorre verificare la risposta originale

Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.

Campi della risposta
CampoTipo
Campochoices[].indexTipointeger
Campochoices[].message.contentTipostring|null
Campochoices[].message.tool_callsTipotool_call[]
Campochoices[].message.reasoning_contentTipostring
Campochoices[].message.reasoning_detailsTipoobject|array
Campochoices[].finish_reasonTipostring|null
CampousageTipoobject
Errori e passaggi successivi
RispostaCondizionePassaggio successivo
Risposta400 · invalid_request_errorCondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validiPassaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione.

Alias

Alias del modello

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

Alias dei percorsi dei metodi

/v1/images

ID di chiamata correlati

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

Ailoot Ultra · Immagini POST /v1/images/generations google/gemini-3-pro-image

google/gemini-3-pro-image

Google /google/gemini-3-pro-image

Introduzione

Nano Banana Pro (Gemini 3 Pro Image) è il modello di immagini di Google guidato dal ragionamento per design complessi, mockup di prodotto e visualizzazioni fattuali. Accetta testo e immagini di riferimento e genera immagini con testo, con output da 1K a 4K e controllo creativo dettagliato.

Input accettati
Testo · Immagini
Risultati
Immagini

Disponibile in Ailoot · input e metodi

Ailoot Ultra · Immagini POST /v1/images/generations
Tipi di input
text, image
Tipi di output
image
CampoTipoRequisitoValori e limitiPredefinito
CampomodelTipostringRequisitoObbligatorioValori e limiti
google/gemini-3-pro-image
Predefinito—
CampopromptTipostringRequisitoObbligatorioValori e limiti
Lunghezza minima: 1
Predefinito—
CamporesolutionTipostringRequisitoFacoltativoValori e limiti
1K, 2K, 4K
Predefinito—
Campoaspect_ratioTipostringRequisitoFacoltativoValori e limiti
1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9
Predefinito—
CamponTipointegerRequisitoFacoltativoValori e limiti
Minimo: 1
Massimo: 1
Predefinito—
Campoinput_referencesTipoarrayRequisitoFacoltativoValori e limiti
Numero minimo di elementi: 0
Numero massimo di elementi: 14
Predefinito—
CampoproviderTipoobjectRequisitoFacoltativoValori e limitiPredefinito—
Parametri e ciclo di vita del metodo
ParametroContratto
Parametrocontent_typeContrattoapplication/json
ParametrorequiredContrattomodel, prompt
Parametromaterial_typesContrattotext, image

Ciclo di vita: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · task_id effettivamente restituito o record della libreria multimediale

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Tariffe

Calcolo del costo finale

Le tariffe visualizzate stimano il costo prima della generazione. L'addebito finale viene calcolato in base al costo registrato per la generazione originale. La durata misurata dell'output e le quantità previste non costituiscono la quantità finale fatturabile.

Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.

Modalità rapida
Non specificato Quando è selezionata la modalità rapida
Modalità flex
Non specificato Quando è selezionata la modalità flex
Sforzo massimo di ragionamento
Non specificato Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)

Tariffe stimate per il confronto

Prezzi per configurazione

Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.

ConfigurazioneListino delle tariffeQuantità previstaCosto
ConfigurazioneTariffe base dei tokenListino delle tariffeTariffa baseQuantità prevista—Costo
Input · Token in input · Stima solo a fini di confronto — / 1K token
Output · Token in output · Stima solo a fini di confronto — / 1K token
Input · Lettura dalla cache · Stima solo a fini di confronto — / 1K token
Input · Scrittura nella cache · Stima solo a fini di confronto — / 1K token
Input · Scrittura nella cache, 1 ora · Stima solo a fini di confronto — / 1K token
ConfigurazioneCosto stimato della generazioneListino delle tariffe—Quantità previstastima per una generazioneCosto
Output · Costo di generazione stimato · Stima solo a fini di confronto $0.98304 stima prima della generazione

Questa stima non è un addebito aggiuntivo né una tariffa fissa per la generazione completata.

Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →

Esempi di richieste

Ailoot Ultra · Immagini

curl
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'google/gemini-3-pro-image', 'prompt': 'a red panda astronaut floating in space, studio lighting'}

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT

Ricevi e salva i risultati

Ailoot Ultra · Immagini

Scarica ogni immagine restituita o salvane il contenuto Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Altre letture di contenuto
Leggi le risorse esistenti di tua proprietà
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.
Conserva tutti i risultati completati

Salva ogni immagine completata; recupera ogni URL restituito oppure decodificane il contenuto Base64.

Conserva la risposta completa e gli header, ogni output effettivo, gli identificatori originali restituiti e tutti i campi di utilizzo. Recupera l'operazione originale senza inviare nuovamente la richiesta di creazione.

Se occorre verificare la risposta originale

Conserva l'X-Client-Request-ID restituito per la riconciliazione. Leggi solo i valori task_id/asset_id effettivamente restituiti o la tua libreria multimediale; non costruire mai un URL del task a partire dall'ID dell'operazione e non reinviare mai la richiesta di creazione.

Campi della risposta
CampoTipo
CampocreatedTipo
Campodata[].urlTipo
Campodata[].b64_jsonTipo
CampousageTipo

Alias

Alias del modello

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

Alias dei percorsi dei metodi

/v1/images

ID di chiamata correlati

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

Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3-pro-image

google/gemini-3-pro-image

Google /google/gemini-3-pro-image

Introduzione

Nano Banana Pro (Gemini 3 Pro Image) è il modello di immagini di Google guidato dal ragionamento per design complessi, mockup di prodotto e visualizzazioni fattuali. Accetta testo e immagini di riferimento e genera immagini con testo, con output da 1K a 4K e controllo creativo dettagliato.

Input accettati
Testo
Risultati
json · sse

Disponibile in Ailoot · input e metodi

Ailoot Ultra · Anthropic Messages POST /v1/messages
Tipi di input
text
Tipi di output
json, sse
Formato di output
JSON o SSE
CampoTipoRequisitoValori e limitiPredefinito
CampomodelTipostringRequisitoObbligatorioValori e limiti
google/gemini-3-pro-image
Predefinito—
CampomessagesTipomessage[]RequisitoObbligatorioValori e limitiPredefinito—
Campomessages[].roleTipostringRequisitoObbligatorioValori e limiti
user, assistant
Predefinito—
Campomessages[].contentTipostringRequisitoObbligatorioValori e limitiPredefinito—
Campomax_tokensTipointegerRequisitoObbligatorioValori e limitiPredefinito—
CampostreamTipobooleanRequisitoFacoltativoValori e limitiPredefinitofalse
Combinazioni di materiali in input

Testo · Testo UTF-8

Stringa messages[].content

Parametri e ciclo di vita del metodo
ParametroContratto
Parametrocontent_typeContrattoapplication/json
ParametrorequiredContrattomodel, messages, max_tokens
Parametrooptional_controlsContrattostream
Parametromaterial_typesContrattotext
Parametrotext_file_materialContrattoLeggi il documento UTF-8 effettivo e inserisci il testo nell’ingresso indicato o nella stringa del contenuto del messaggio.

Ciclo di vita: synchronous_or_streamed

Tariffe

Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.

Modalità rapida
Tariffa standard Quando è selezionata la modalità rapida
Modalità flex
Tariffa standard Quando è selezionata la modalità flex
Sforzo massimo di ragionamento
Tariffa standard Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)
Tariffe della cache esplicita
Non abilitato Quando viene richiesta una cache esplicita

Tariffe Ailoot

Prezzi per configurazione

Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.

ConfigurazioneListino delle tariffeToken di contesto, più diToken di contesto, fino al limite inclusoCosto
ConfigurazioneTariffe di base dei tokenListino delle tariffeTariffa baseToken di contesto, più di—Token di contesto, fino al limite inclusoNessun limite superioreCosto
Input · Token in input $0.004 / 1K token
Output · Token in output $0.024 / 1K token
Input · Lettura dalla cache $0.0004 / 1K token
Input · Scrittura nella cache $0.00075 / 1K token
Input · Scrittura nella cache, 1 ora — / 1K token
Output · Token immagine in uscita $0.24 / 1K token immagine
ConfigurazioneFascia 1 di lunghezza della richiestaListino delle tariffe—Token di contesto, più di0Token di contesto, fino al limite inclusoNessun limite superioreCosto
Input · Token in input $0.004 / 1K token
Output · Token in output $0.024 / 1K token
Input · Lettura dalla cache $0.0004 / 1K token
Input · Scrittura nella cache $0.00075 / 1K token
Input · Scrittura nella cache, 1 ora — / 1K token

Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. Come funzionano la prenotazione e l’addebito finale →

Esempi di richieste

Ailoot Ultra · Anthropic Messages

Corpo JSON minimo completocurl · usa il tuo documento UTF-8Python · salva il risultato completo
{
  "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))

Ricevi e salva i risultati

Ailoot Ultra · Anthropic Messages

JSON o SSE

Conserva tutti i risultati completati

Conserva ogni risposta, file e parte di contenuto restituiti per intero.

Conserva tutti i blocchi di contenuto, le firme di ragionamento e gli ID effettivi di utilizzo degli strumenti. Assembla tutti i delta dei blocchi SSE; il primo blocco di testo non è l’uscita completa.

Se occorre verificare la risposta originale

Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.

Campi della risposta
CampoTipo
CampoidTipostring
CampomodelTipostring
Campocontent[]Tipotext|thinking|tool_use|other content block
Campostop_reasonTipostring|null
CampousageTipoobject
Errori e passaggi successivi
RispostaCondizionePassaggio successivo
Risposta400 · invalid_request_errorCondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validiPassaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione.

Alias

Alias del modello

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

Alias dei percorsi dei metodi

/v1/images

ID di chiamata correlati

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)
Quali input e risultati sono disponibili?

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

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

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

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

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

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

Quali campi usa la richiesta?

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

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

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

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

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

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

Quali limiti si applicano?

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

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

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

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

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

Maggiori dettagli

Collega Ailoot a Claude Code, OpenCode, Hermes o alla tua applicazione.

L’azienda e il suo portafoglio di progetti

L’azienda e il suo portafoglio di progetti: milioni di clienti; vendite nell’ordine dei miliardi ogni mese.

Acquista token con uno sconto.

Sconto con abbonamento per lavoro regolare. Codici fino al 50% sull’acquisto di token.

Abbonamento
Scegli un piano scontato per richieste regolari.
Codice fino al 50%
Inserisci il codice all’acquisto. Il prezzo si aggiorna secondo la promozione.
Spese nella cronologia
Modello, token e importo sono salvati per ogni richiesta.

Scegli abbonamento · Consulta prezzi dei modelli

Collega l’API al prodotto che vendi.

SaaS, app e bot secondo offerta e accordo di licenza Ailoot. Per rivendere, richiedi una licenza reseller.

Applicazione commerciale
Integra generazione di testo, immagini, video e suono nelle funzioni a pagamento.
Licenza reseller
Invia descrizione del progetto e schema di accesso. Richiedi condizioni scritte per uso e rivendita.
Documenti sul sito
Offerta, accordo di licenza e politica sui dati sono disponibili prima della connessione.

Richiedi licenza reseller · Offerta e accordo di licenza