Source: https://ailoot.ai/models/ms/google-gemini-nano-banana-2-1/
Canonical: https://ailoot.ai/models/ms/google-gemini-nano-banana-2-1/
Language: ms

# Google: Nano Banana 2.1

[Markdown](https://ailoot.ai/models/ms/google-gemini-nano-banana-2-1/index.md) · [JSON](https://ailoot.ai/models/ms/google-gemini-nano-banana-2-1/facts.json)

## [Google: Nano Banana 2.1](https://ailoot.ai/models/ms/google-gemini-nano-banana-2-1/)

Gemini Nano Banana 2.1 menjana dan menyunting imej secara perbualan daripada teks dan bahan visual. Model ini menambah baik pemaparan teks, susun atur infografik dan konsistensi merentas giliran, dengan output 1K–4K dan sehingga 14 imej rujukan untuk taklimat visual yang ditetapkan.

- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/google-gemini-nano-banana-2-1/#method-0)
- [**Ailoot Ultra · Imej** `POST /v1/images/generations` `google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/google-gemini-nano-banana-2-1/#method-1)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/google-gemini-nano-banana-2-1/#method-2)

Tentang model

Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.

Gemini Nano Banana 2.1 ialah model penjanaan imej dan penyuntingan perbualan Google. Ia merupakan kemas kini Nano Banana 2, dengan penambahbaikan pada realisme visual, pematuhan arahan, pemaparan teks dan konsistensi watak merentas suntingan berturutan. Jadual inputnya merangkumi teks, imej, video dan PDF, manakala output ialah imej dan teks. Ini menjadikannya berguna untuk adegan produk, infografik atau siri visual yang berkembang melalui beberapa pindaan khusus.

Model menawarkan output 1K, 2K dan 4K, dengan 1K sebagai lalai. Ia tidak mewarisi pilihan 0.5K Nano Banana 2. Nisbah bidang yang didokumenkan merangkumi 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 dan 21:9, serta format tinggi atau panorama 1:4, 4:1, 1:8 dan 8:1. Google mengenal pasti pembaikan artifak jubinan dalam format lebar dan tinggi terakhir itu pada 2K dan 4K. Label resolusi ialah aras saiz, bukannya satu segi empat tepat tetap: imej 4K segi empat sama ialah 4096 × 4096, manakala output 4K 16:9 yang didokumenkan ialah 5504 × 3072.

Teks ialah bahagian penting dalam aliran kerja visual. Model direka untuk memaparkan ungkapan bergaya yang jelas dibaca dan menyusun elemen infografik dengan lebih tepat. Sediakan tajuk, label dan turutan bacaan yang tepat, kemudian minta imej dengan teks yang telah diluluskan itu. Untuk menu, rajah atau grafik arahan, nyatakan hubungan antara kapsyen dengan elemen visualnya. Google mengesyorkan menyediakan ungkapan dahulu sebelum meminta imej supaya komposisi visual bermula dengan taklimat teks yang telah diputuskan.

Penggabungan imej rujukan menyokong sehingga 14 imej. Profil yang didokumenkan meliputi konsistensi sehingga empat watak dan kesetiaan sehingga sepuluh objek. Tetapkan peranan setiap rujukan: produk yang mesti kekal dikenali, rupa watak, latar belakang yang diingini atau gaya visual. Contoh taklimat produk ialah: “Gunakan imej A untuk bentuk botol dan label. Gunakan imej B untuk permukaan dan pencahayaan. Kekalkan produk tanpa perubahan, letakkannya di sebelah tuala berlipat dan sediakan ruang kosong di atasnya untuk tajuk yang dibekalkan.”

Pembumian Google Web Search dan Image Search boleh membekalkan maklumat semasa serta konteks visual untuk penjanaan. Image Search membekalkan imej web yang ditemui sebagai rujukan; pembumian web biasa membekalkan maklumat tentang subjek. Ini berguna untuk grafik berfakta atau adegan yang penampilannya bergantung pada objek sebenar. Aliran kerja carian imej tidak menyokong pencarian imej manusia dunia sebenar untuk tujuan ini. Respons berasaskan sumber membawa metadata sumber dan atribusi dalam aliran kerja Google yang didokumenkan, jadi aplikasi perlu menyimpannya bersama hasil terjana.

Pemikiran boleh ditetapkan kepada aras minimal, medium dan high, dengan medium sebagai lalai bagi model khusus ini. Ia membantu model menyelesaikan komposisi dan arahan lebih kompleks sebelum output akhir. Panduan imej menerangkan imej komposisi sementara dalam proses itu; imej tersebut berbeza daripada hasil akhir yang dimaksudkan. Pilih susun atur akhir, nisbah bidang dan resolusi yang diperlukan secara jelas, daripada mengharapkan huraian prom sahaja menetapkan setiap tetapan output.

Penyuntingan perbualan membolehkan susulan mengubah satu bahagian hasil sedia ada: melaraskan cahaya, memindahkan objek atau menterjemahkan label sambil mengekalkan komposisi lain. Bawa imej atau interaksi terdahulu ke giliran seterusnya dan nyatakan perubahan yang diminta serta ciri yang perlu dikekalkan. Untuk siri watak, kekalkan rujukan rupa yang konsisten dan gunakan rujukan pose apabila sudut baharu atau pose kompleks penting. Taklimat pindaan praktikal boleh menyatakan: “Kekalkan produk, label dan susun atur; ubah latar belakang sahaja kepada kelabu yang lebih hangat.”

Jadual model memberikan had input 131,072 token dan had output 32,768 token. Penjanaan imej dan pembumian carian disokong, manakala penjanaan audio, pelaksanaan kod, pemanggilan fungsi, output berstruktur, cache, carian fail, konteks URL dan Live API tidak disenaraikan sebagai disokong untuk edisi ini. Video boleh menjadi sumber bagi imej pegun terjana; ia tidak menjadikan model ini penjana video. Google turut menyatakan bahawa permintaan bilangan imej yang tepat mungkin tidak menghasilkan bilangan tersebut. Semua imej terjana merangkumi tera air SynthID.

Untuk taklimat pertama yang berguna, berikan tujuan imej, subjek, komposisi, pencahayaan, pandangan kamera, teks wajib dan bentuk output. Contohnya, minta infografik potret dengan tiga langkah berlabel, tajuk yang boleh dibaca dan hierarki warna yang ditetapkan, kemudian semak ungkapan serta kedudukan relatif sebelum suntingan seterusnya. Hasil boleh menjadi ilustrasi produk, grafik editorial atau rujukan reka bentuk, dengan imej terpilih dan teks penerangannya disimpan bersama.

Tugas praktikal

### Tugas praktikal

Contoh teknikal dalam bahasa Inggeris

```
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.
```

#### Hasil yang dijangka

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

#### Semak hasil

```
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`](https://ailoot.ai/models/ms/#m=google%2Fgemini-nano-banana-2.1&route=Ultra&caller=google%2Fgemini-nano-banana-2.1&fmt=chat)

Google /`google/gemini-nano-banana-2.1`

### Pengenalan

Gemini Nano Banana 2.1 menjana dan menyunting imej secara perbualan daripada teks dan bahan visual. Model ini menambah baik pemaparan teks, susun atur infografik dan konsistensi merentas giliran, dengan output 1K–4K dan sehingga 14 imej rujukan untuk taklimat visual yang ditetapkan.

Input yang diterima

Teks

Hasil

Teks

### Tersedia di Ailoot · input & kaedah

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions`

Input

`text`

Output

`text`

Format output

json atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had google/gemini-nano-banana-2.1 | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had Contoh: system, user, assistant, tool, function Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model. Bergantung pada model | Lalai— |
| Medan`messages[].content` | Jenis`string\|content_part[]\|null` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_calls` | Jenis`tool_call[]` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].tool_call_id` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan | Lalai— |
| Medan`messages[].name` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`messages[].reasoning_content` | Jenis`string` | KeperluanPilihan | Nilai & had Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya | Lalai— |
| Medan`messages[].reasoning_details` | Jenis`object\|array` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`max_completion_tokens` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |
| Medan`stream_options.include_usage` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`temperature` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`top_p` | Jenis`number` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`stop` | Jenis`string\|string[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools` | Jenis`function_tool[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`tools[].type` | Jenis`string` | KeperluanPilihan | Nilai & had function Bergantung pada model | Lalai— |
| Medan`tools[].function.name` | Jenis`string` | KeperluanDiperlukan | Nilai & had Terpakai apabila: alat fungsi dibekalkan | Lalai— |
| Medan`tools[].function.description` | Jenis`string` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tools[].function.parameters` | Jenis`JSON_schema` | KeperluanPilihan | Nilai & had | Lalai— |
| Medan`tool_choice` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`parallel_tool_calls` | Jenis`boolean` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`response_format` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning_effort` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`reasoning` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`service_tier` | Jenis`string` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`instructions` | Jenis`string` | KeperluanPilihan | Nilai & had Medan keserasian | Lalai— |
| Medan`functions` | Jenis`function[]` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`function_call` | Jenis`string\|object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`prompt_cache_options` | Jenis`object` | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
| Medan`modalities` | Jenis`string[]` | KeperluanPilihan | Nilai & had text | Lalai— |
| Medan`provider` | Jenis`object` | KeperluanPilihan | Nilai & had Syarat: provider.options ditolak pada laluan teks Ultra ini | Lalai— |
| Medan`cache_control.ttl` | Jenis`string` | KeperluanPilihan | Nilai & had Syarat: 1h ditolak pada lokasi cache prompt yang digunakan | Lalai— |

Gabungan bahan input

**Teks** · Teks UTF8

`messages[].content`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, messages |
| Parameter`material_types` | Kontraktext |
| Parameter`messages` | Kontraktatasusunan mesej dengan struktur role/content |
| Parameter`file_material` | Kontrakdokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan |
| Parameter`optional_controls` | Kontrakstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parameter`control_scope` | Kontrakkhusus model; alat fungsi pengguna berbeza daripada alat yang dihoskan |
| Parameter`output_modalities` | Kontraktext |
| Parameter`hosted_operations` | Kontrakfalse |
| Parameter`multimodal_input_binding` | Kontraknull |

Kitar hayat: `synchronous_or_streamed`

Hantar ID model yang tepat bersama messages.

Panjang konteks bukan had output.

Fail teks boleh membekalkan teks literal; input imej/audio/objek fail memerlukan pengikatan tepat.

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · minimal

Kadar standard Apabila usaha penaakulan ditetapkan kepada minimal

Harga cache eksplisit

Tidak diaktifkan Apabila cache eksplisit diminta

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.003** / 1K token Output · Token output **$0.015** / 1K token Input · Bacaan cache **—** / 1K token Input · Penulisan cache **—** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token Output · Token keluaran imej **$0.06** / 1K token imej |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.003** / 1K token Output · Token output **$0.015** / 1K token Input · Bacaan cache **—** / 1K token Input · Penulisan cache **—** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

#### Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Google: Nano Banana 2.1

#### Harga mengikut konfigurasi

| Konfigurasi | Syarat pengebilan | Caj |
| --- | --- | --- |
| KonfigurasiGoogle: Nano Banana 2.1 · Konfigurasi lalai | Syarat pengebilanKonfigurasi lalai | Caj Input · Token input **USD 0.003** / 1K token Output · Token output **USD 0.015** / 1K token Output · Imej keluaran **USD 0.06** / 1K token Output · Carian web **USD 0.028** setiap carian |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · OpenAI Chat

curlPython SDKPenstriman Python

```bash
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
```

```python
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"))
```

```python
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")
```

### Terima dan simpan hasil

#### Ailoot Ultra · OpenAI Chat

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`choices[].index` | Jenisinteger |
| Medan`choices[].message.content` | Jenisstring\|null |
| Medan`choices[].message.tool_calls` | Jenistool\_call\[\] |
| Medan`choices[].message.reasoning_content` | Jenisstring |
| Medan`choices[].message.reasoning_details` | Jenisobject\|array |
| Medan`choices[].finish_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

**Ailoot Ultra** [`google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/#m=google%2Fgemini-nano-banana-2.1&route=Ultra&caller=google%2Fgemini-nano-banana-2.1&fmt=chat)

#### Alias laluan kaedah

`/v1/images`

#### ID pemanggil berkaitan

[`google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/#m=google%2Fgemini-nano-banana-2.1&route=Ultra&caller=google%2Fgemini-nano-banana-2.1&fmt=chat)

**Ailoot Ultra · Imej** `POST /v1/images/generations` `google/gemini-nano-banana-2.1`

[`google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/#m=google%2Fgemini-nano-banana-2.1&route=Ultra&caller=google%2Fgemini-nano-banana-2.1&fmt=images)

Google /`google/gemini-nano-banana-2.1`

### Pengenalan

Gemini Nano Banana 2.1 menjana dan menyunting imej secara perbualan daripada teks dan bahan visual. Model ini menambah baik pemaparan teks, susun atur infografik dan konsistensi merentas giliran, dengan output 1K–4K dan sehingga 14 imej rujukan untuk taklimat visual yang ditetapkan.

Input yang diterima

Teks · Imej

Hasil

Imej

### Tersedia di Ailoot · input & kaedah

**Ailoot Ultra · Imej** `POST /v1/images/generations`

Input

`text`, `image`

Output

`image`

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had google/gemini-nano-banana-2.1 | Lalai— |
| Medan`prompt` | Jenis`string` | KeperluanDiperlukan | Nilai & had Panjang minimum: 1 | Lalai— |
| Medan`resolution` | Jenis`string` | KeperluanPilihan | Nilai & had 1K, 2K, 4K | Lalai— |
| Medan`aspect_ratio` | Jenis`string` | KeperluanPilihan | Nilai & had 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 | Lalai— |
| Medan`n` | Jenis`integer` | KeperluanPilihan | Nilai & had Minimum: 1 Maksimum: 1 | Lalai— |
| Medan`input_references` | Jenis`array` | KeperluanPilihan | Nilai & had Item minimum: 0 Item maksimum: 14 | Lalai— |
| Medan`provider` | Jenis`object` | KeperluanPilihan | Nilai & had | Lalai— |

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, prompt |
| Parameter`material_types` | Kontraktext, image |

Kitar hayat: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · task\_id sebenar yang dikembalikan atau rekod pustaka media

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

`GET /v1/media/assets`

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

### Pelan harga

##### Cara caj akhir dikira

Kadar yang dipaparkan menganggarkan kos sebelum penjanaan. Caj akhir dikira berdasarkan kos yang direkodkan untuk penjanaan asal. Tempoh output yang diukur dan kuantiti ramalan bukan kuantiti akhir yang boleh dibilkan.

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Tidak dinyatakan Apabila mod pantas dipilih

Mod flex

Tidak dinyatakan Apabila mod flex dipilih

Usaha penaakulan maksimum

Tidak dinyatakan Apabila usaha penaakulan maksimum menggunakan pelarasan default

#### Anggaran kadar untuk perbandingan

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Kuantiti ramalan | Caj |
| --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Kuantiti ramalan— | Caj Input · Token input · Anggaran untuk perbandingan sahaja **—** / 1K token Output · Token output · Anggaran untuk perbandingan sahaja **—** / 1K token Input · Bacaan cache · Anggaran untuk perbandingan sahaja **—** / 1K token Input · Penulisan cache · Anggaran untuk perbandingan sahaja **—** / 1K token Input · Penulisan cache, 1 jam · Anggaran untuk perbandingan sahaja **—** / 1K token |
| KonfigurasiAnggaran kos penjanaan | Jadual kadar— | Kuantiti ramalananggaran untuk satu penjanaan | Caj Output · Anggaran kos penjanaan · Anggaran untuk perbandingan sahaja **$0.24576** anggaran sebelum penjanaan Anggaran ini bukan caj tambahan atau kadar tetap bagi penjanaan yang telah selesai. |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · Imej

curl

```bash
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
```

### Terima dan simpan hasil

#### Ailoot Ultra · Imej

Muat turun setiap imej yang dikembalikan atau simpan kandungan Base64-nya

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

Pembacaan kandungan lain

Baca aset sedia ada yang menjadi milik anda

```bash
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.
```

##### Simpan semua hasil yang selesai

Simpan setiap imej yang selesai; dapatkan setiap URL yang dikembalikan atau nyahkod kandungan Base64-nya.

Simpan respons dan pengepala yang lengkap, setiap output sebenar, pengecam asal yang dikembalikan serta semua medan penggunaan. Pulihkan operasi asal tanpa menghantar permintaan penciptaan sekali lagi.

##### Jika respons asal perlu disemak

Simpan X-Client-Request-ID yang dikembalikan untuk penyelarasan rekod. Baca hanya nilai task\_id/asset\_id sebenar yang dikembalikan atau pustaka media milik anda; jangan sekali-kali bina URL tugas daripada ID operasi atau hantar semula permintaan penciptaan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`created` | Jenis |
| Medan`data[].url` | Jenis |
| Medan`data[].b64_json` | Jenis |
| Medan`usage` | Jenis |

### Alias

#### Alias model

**Ailoot Ultra** [`google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/#m=google%2Fgemini-nano-banana-2.1&route=Ultra&caller=google%2Fgemini-nano-banana-2.1&fmt=images)

#### Alias laluan kaedah

`/v1/images`

#### ID pemanggil berkaitan

[`google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/#m=google%2Fgemini-nano-banana-2.1&route=Ultra&caller=google%2Fgemini-nano-banana-2.1&fmt=images)

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

[`google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/#m=google%2Fgemini-nano-banana-2.1&route=Ultra&caller=google%2Fgemini-nano-banana-2.1&fmt=messages)

Google /`google/gemini-nano-banana-2.1`

### Pengenalan

Gemini Nano Banana 2.1 menjana dan menyunting imej secara perbualan daripada teks dan bahan visual. Model ini menambah baik pemaparan teks, susun atur infografik dan konsistensi merentas giliran, dengan output 1K–4K dan sehingga 14 imej rujukan untuk taklimat visual yang ditetapkan.

Input yang diterima

Teks

Hasil

json · sse

### Tersedia di Ailoot · input & kaedah

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages`

Input

`text`

Output

`json`, `sse`

Format output

JSON atau SSE

| Medan | Jenis | Keperluan | Nilai & had | Lalai |
| --- | --- | --- | --- | --- |
| Medan`model` | Jenis`string` | KeperluanDiperlukan | Nilai & had google/gemini-nano-banana-2.1 | Lalai— |
| Medan`messages` | Jenis`message[]` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`messages[].role` | Jenis`string` | KeperluanDiperlukan | Nilai & had user, assistant | Lalai— |
| Medan`messages[].content` | Jenis`string` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`max_tokens` | Jenis`integer` | KeperluanDiperlukan | Nilai & had | Lalai— |
| Medan`stream` | Jenis`boolean` | KeperluanPilihan | Nilai & had | Lalaifalse |

Gabungan bahan input

**Teks** · Teks UTF-8

`rentetan messages[].content`

Parameter kaedah dan kitar hayat

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, messages, max\_tokens |
| Parameter`optional_controls` | Kontrakstream |
| Parameter`material_types` | Kontraktext |
| Parameter`text_file_material` | KontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan. |

Kitar hayat: `synchronous_or_streamed`

### Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas

Kadar standard Apabila mod pantas dipilih

Mod flex

Kadar standard Apabila mod flex dipilih

Usaha penaakulan maksimum

Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default

Usaha penaakulan · high

Kadar standard Apabila usaha penaakulan ditetapkan kepada high

Usaha penaakulan · minimal

Kadar standard Apabila usaha penaakulan ditetapkan kepada minimal

Harga cache eksplisit

Tidak diaktifkan Apabila cache eksplisit diminta

#### Kadar Ailoot

#### Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
| --- | --- | --- | --- | --- |
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.003** / 1K token Output · Token output **$0.015** / 1K token Input · Bacaan cache **—** / 1K token Input · Penulisan cache **—** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token Output · Token keluaran imej **$0.06** / 1K token imej |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input **$0.003** / 1K token Output · Token output **$0.015** / 1K token Input · Bacaan cache **—** / 1K token Input · Penulisan cache **—** / 1K token Input · Penulisan cache, 1 jam **—** / 1K token |

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. [Cara rizab dan penyelesaian caj berfungsi →](https://ailoot.ai/docs/ms/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · Anthropic Messages

Badan JSON minimum yang lengkapcurl · gunakan dokumen UTF-8 andaPython · simpan hasil lengkap

```json
{
  "model": "google/gemini-nano-banana-2.1",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
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
```

```python
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))
```

### Terima dan simpan hasil

#### Ailoot Ultra · Anthropic Messages

JSON atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

##### Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons

| Medan | Jenis |
| --- | --- |
| Medan`id` | Jenisstring |
| Medan`model` | Jenisstring |
| Medan`content[]` | Jenistext\|thinking\|tool\_use\|other content block |
| Medan`stop_reason` | Jenisstring\|null |
| Medan`usage` | Jenisobject |

Ralat dan langkah seterusnya

| Respons | Syarat | Langkah seterusnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |

### Alias

#### Alias model

**Ailoot Ultra** [`google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/#m=google%2Fgemini-nano-banana-2.1&route=Ultra&caller=google%2Fgemini-nano-banana-2.1&fmt=messages)

#### Alias laluan kaedah

`/v1/images`

#### ID pemanggil berkaitan

[`google/gemini-nano-banana-2.1`](https://ailoot.ai/models/ms/#m=google%2Fgemini-nano-banana-2.1&route=Ultra&caller=google%2Fgemini-nano-banana-2.1&fmt=messages)

FAQ · Google: Nano Banana 2.1

Apakah input dan hasil yang tersedia?

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

Apakah medan yang digunakan oleh permintaan?

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

Apakah had yang terpakai?

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

Sambungkan Ailoot kepada Claude Code, OpenCode, Hermes atau aplikasi anda.

## Syarikat dan portfolio projeknya

Syarikat dan portfolio projeknya: jutaan pelanggan; jualan bernilai berbilion setiap bulan.

## Beli token dengan diskaun.

Diskaun langganan untuk penggunaan berkala. Kod promosi — sehingga 50% bagi pembelian token.

Langganan

Pilih pelan berdiskaun untuk permintaan berkala anda.

Kod promosi sehingga 50%

Masukkan kod semasa pembelian. Harga dikira semula mengikut promosi semasa.

Perbelanjaan dalam sejarah

Model, token dan jumlah disimpan bagi setiap permintaan.

[Pilih langganan](https://ailoot.ai/docs/ms/billing/subscriptions/) · [Lihat harga model](https://ailoot.ai/models/ms/)

## Sambungkan API kepada produk yang anda jual.

SaaS, aplikasi dan bot — di bawah tawaran rasmi serta perjanjian lesen Ailoot. Untuk jualan semula, mohon lesen penjual semula.

Aplikasi komersial

Tambahkan penjanaan teks, imej, video dan audio pada ciri berbayar perkhidmatan anda.

Lesen penjual semula

Hantar keterangan projek dan susunan akses. Minta terma penggunaan serta jualan semula secara bertulis.

Dokumen pada laman

Tawaran, perjanjian lesen dan dasar pemprosesan data tersedia sebelum sambungan.

[Mohon lesen penjual semula](mailto:support@ailoot.ai) · [Tawaran dan perjanjian lesen](https://ailoot.ai/legal/offer?lang=ms)

## Ailoot · Syarikat dan portfolio projeknya





Ailoot berteraskan pengalaman operasi yang mantap, pangkalan pelanggan yang besar, perkhidmatan yang stabil dan pemantauan KPI berterusan.





Syarikat dan portfolio projeknya: jutaan pelanggan; jualan bernilai berbilion setiap bulan.





Ailoot menggunakan pengalaman operasi ini untuk akses API kepada ciri AI dalam produk pelanggan, ejen, aplikasi dan automasi.
