model

Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)

Markdown · JSON

Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)

Nano Banana 2 (Gemini 3.1 Flash Image Preview) membuat dan menyunting gambar dari teks serta referensi visual. Keunggulan yang didokumentasikan mencakup konsistensi subjek, teks dalam gambar dan lokalisasi, perubahan melalui percakapan, serta kontrol kreatif atas komposisi, rasio aspek, dan resolusi.

Tentang model

Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.

Nano Banana 2 adalah model Gemini 3.1 Flash Image Google untuk pembuatan gambar dan penyuntingan melalui percakapan. Entri ini mempertahankan identitas Preview yang tepat. Deskripsi tertulis dapat mendefinisikan visual baru, sedangkan gambar masukan dapat menetapkan subjek, penampilan, atau komposisi yang akan dimodifikasi. Hasil dapat berisi gambar dan teks pendamping. Materi peluncuran Google menekankan pengetahuan dunia, rendering teks, dan konsistensi subjek, bersama kemampuan menyempurnakan adegan melalui giliran yang saling berkaitan.

Untuk kreasi visual yang berlandaskan sumber, model yang didokumentasikan dapat menggunakan informasi pencarian web dan gambar sebagai landasan pembuatan. Hal ini mendukung tugas seperti ilustrasi terinspirasi lokasi atau diagram berdasarkan informasi yang diberikan. Definisikan fakta sumber yang harus direpresentasikan dan bedakan fakta tersebut dari pilihan artistik. Pembuatan yang diinformasikan pencarian tidak menjadikan setiap detail gambar akhir sebagai pernyataan terverifikasi. Jika produk, tengara, atau diagram harus akurat, berikan referensi otoritatifnya dan periksa keluaran terhadap referensi tersebut.

Peluncuran menjelaskan peningkatan rendering teks dalam gambar dan lokalisasi. Untuk poster, infografis, atau mockup pemasaran, berikan kata-kata persis, bahasa, dan peran setiap elemen teks. Tetapkan terlebih dahulu naskah teksnya, lalu minta visual yang memuatnya, sesuai saran panduan gambar. Jelaskan urutan baca dan penekanan relatif agar judul utama, keterangan, dan label diagram tidak tertukar. Tinjau ejaan, tanda baca, dan hubungan antara label dan elemen yang diilustrasikan sebelum menggunakan gambar dalam publikasi.

Kontrol kreatif mencakup rasio aspek dan resolusi. Peluncuran menambahkan keluaran 512 piksel bersama pilihan 1K, 2K, dan 4K, serta menambahkan rasio aspek 4:1, 1:4, 8:1, dan 1:8. Panduan pengembang mengidentifikasi thinking minimal sebagai bawaan dan thinking high sebagai opsi untuk komposisi yang lebih rumit. Pilih penggunaan yang dimaksud sebelum menyusun komposisi: story vertikal, banner lebar, dan diagram ringkas memerlukan ruang berbeda untuk subjek serta tulisan. Pengaturan tersebut menjelaskan alur pembuatan dari pembuat untuk lini ini, bukan perubahan ukuran otomatis atas aset selesai yang sudah ada.

Untuk konsistensi subjek, beri label peran setiap referensi: penampilan produk, identitas karakter, latar belakang, atau gaya visual. Nyatakan detail yang harus dipertahankan, lalu sebutkan elemen yang harus diubah. Contoh tugas dapat menempatkan foto produk yang diberikan dalam adegan baru sambil mempertahankan bentuk, material, dan merek yang terlihat. Untuk rangkaian ilustrasi, pertahankan referensi yang sama dan definisikan detail spesifik adegan mana yang berubah. Referensi yang lebih banyak tidak menggantikan instruksi jelas tentang kontribusi setiap gambar.

Penyuntingan melalui percakapan berguna untuk revisi tertentu. Minta penyesuaian satu objek, latar belakang, atau pencahayaan sambil mempertahankan komposisi yang diterima. Panduan pembuat menjelaskan semantic masking, ketika area yang disunting diidentifikasi dengan kata-kata. Untuk pekerjaan multigiliran, pertahankan percakapan dan metadata konteks penalaran yang diwajibkan dalam antarmuka terpilih; panduan Gemini 3 menjelaskan bahwa thought signatures membantu membawa konteks tersebut. Deskripsi wilayah yang tidak diubah adalah instruksi untuk ditinjau terhadap gambar asli, bukan jaminan bahwa setiap piksel tetap identik.

Tabel pengembang Gemini 3 secara eksplisit menyebut gemini-3.1-flash-image-preview dengan alokasi masukan 128K dan keluaran 32K. Pertahankan nama model Preview yang tepat ketika mencatat suatu pembuatan. Pengaturan referensi, keluaran, dan resolusi yang tersedia harus disimpan bersama gambar sumber dan permintaan agar revisi dapat direproduksi secara konsisten. Untuk revisi, gunakan referensi sumber yang sama dan tentukan perubahan visual yang tepat, sambil mempertahankan peran setiap masukan yang telah diterima.

Panduan gambar memperingatkan bahwa jumlah gambar yang diminta mungkin tidak selalu diikuti dan mengidentifikasi penandaan SynthID untuk gambar yang dihasilkan. Periksa semua gambar yang dikembalikan dan teks pendamping apa pun, alih-alih menganggap hasilnya satu gambar tetap. Periksa identitas subjek, jumlah objek, kata-kata dalam gambar, komposisi, dan kesetiaan referensi pada ukuran tampilan yang dimaksud. Untuk adegan kompleks, tentukan komponen dalam urutan logis dan jelaskan penampilan yang diinginkan secara positif. Hasil yang berguna adalah aset visual yang telah ditinjau, dengan referensi sumber dan identitas model yang tepat disimpan untuk penyuntingan berikutnya.

Tugas praktis

Tugas praktis

Contoh teknis dalam bahasa Inggris

Create a four-stage growing guide

Create a friendly flat illustration for a gardening guide showing four tomato-growing stages from left to right: seed in soil, small seedling, leafy plant, mature plant with red tomatoes. Use a warm cream background, consistent pots and simple green shapes. Keep each stage clearly separated. Include no text, numbers, labels or decorative extra plants.

Hasil yang diharapkan

An image with four distinct growing stages in the specified order and a consistent illustration style.

Periksa hasil

Inspect the actual image for exactly four stages, the left-to-right progression and absence of text or extra plants.
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3.1-flash-image-preview

google/gemini-3.1-flash-image-preview

Google /google/gemini-3.1-flash-image-preview

Mulai

Nano Banana 2 (Gemini 3.1 Flash Image Preview) membuat dan menyunting gambar dari teks serta referensi visual. Keunggulan yang didokumentasikan mencakup konsistensi subjek, teks dalam gambar dan lokalisasi, perubahan melalui percakapan, serta kontrol kreatif atas komposisi, rasio aspek, dan resolusi.

Masukan yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · masukan & metode

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Masukan
text
Keluaran
text
Format keluaran
json atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
google/gemini-3.1-flash-image-preview
Bawaan—
KolommessagesJenismessage[]PersyaratanWajibNilai & batasan
Item minimum: 1
Bawaan—
Kolommessages[].roleJenisstringPersyaratanWajibNilai & batasan
Contoh: system, user, assistant, tool, function
Kondisi: Peran ini direpresentasikan secara eksplisit oleh tipe kompatibilitas dalam kode sumber; kumpulan peran model yang tepat tetap khusus untuk tiap model.
Bergantung pada model
Bawaan—
Kolommessages[].contentJenisstring|content_part[]|nullPersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].tool_callsJenistool_call[]PersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].tool_call_idJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: role=tool; gunakan ID yang benar-benar dikembalikan
Bawaan—
Kolommessages[].nameJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].reasoning_contentJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: Kirim kembali penalaran yang benar-benar dikembalikan jika model ini menggunakannya
Bawaan—
Kolommessages[].reasoning_detailsJenisobject|arrayPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolommax_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
Kolommax_completion_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
Kolomstream_options.include_usageJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtemperatureJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtop_pJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomstopJenisstring|string[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtoolsJenisfunction_tool[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtools[].typeJenisstringPersyaratanOpsionalNilai & batasan
function
Bergantung pada model
Bawaan—
Kolomtools[].function.nameJenisstringPersyaratanWajibNilai & batasan
Berlaku jika: alat fungsi disediakan
Bawaan—
Kolomtools[].function.descriptionJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolomtools[].function.parametersJenisJSON_schemaPersyaratanOpsionalNilai & batasanBawaan—
Kolomtool_choiceJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomparallel_tool_callsJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomresponse_formatJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomreasoning_effortJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomreasoningJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomservice_tierJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolominstructionsJenisstringPersyaratanOpsionalNilai & batasan
Kolom kompatibilitas
Bawaan—
KolomfunctionsJenisfunction[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomfunction_callJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprompt_cache_optionsJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolommodalitiesJenisstring[]PersyaratanOpsionalNilai & batasan
text
Bawaan—
KolomproviderJenisobjectPersyaratanOpsionalNilai & batasan
Kondisi: provider.options ditolak pada rute teks Ultra ini
Bawaan—
Kolomcache_control.ttlJenisstringPersyaratanOpsionalNilai & batasan
Kondisi: 1h ditolak pada lokasi cache prompt yang digunakan
Bawaan—
Kombinasi bahan masukan

Teks · Teks UTF8

messages[].content

Parameter metode dan siklus hidup
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages
Parametermaterial_typesKontraktext
ParametermessagesKontrakarray pesan dengan struktur role/content
Parameterfile_materialKontrakdokumen UTF-8 yang sebenarnya dimasukkan sebagai teks apa adanya; ID file tidak disimpulkan
Parameteroptional_controlsKontrakstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametercontrol_scopeKontrakkhusus model; alat fungsi pengguna berbeda dari alat yang dihosting
Parameteroutput_modalitiesKontraktext
Parameterhosted_operationsKontrakfalse
Parametermultimodal_input_bindingKontraknull

Siklus hidup: synchronous_or_streamed

Kirim ID model yang tepat bersama messages.

Panjang konteks bukan batas keluaran.

File teks dapat menyediakan teks apa adanya; masukan gambar/audio/objek file memerlukan pengikatan yang tepat.

Paket

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast
Tarif standar Saat mode fast dipilih
Mode Flex
Tarif standar Saat mode flex dipilih
Upaya penalaran maksimum
Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default
Upaya penalaran · high
Tarif standar Saat upaya penalaran bernilai high
Upaya penalaran · minimal
Tarif standar Saat upaya penalaran bernilai minimal
Harga cache eksplisit
Tidak diaktifkan Saat cache eksplisit diminta

Tarif Ailoot

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiTarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.001 / 1K token
Keluaran · Token keluaran $0.006 / 1K token
Masukan · Pembacaan cache — / 1K token
Masukan · Penulisan cache — / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
Keluaran · Token gambar keluaran $0.12 / 1K token gambar
KonfigurasiPanjang permintaan · tingkat 1Jadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.001 / 1K token
Keluaran · Token keluaran $0.006 / 1K token
Masukan · Pembacaan cache — / 1K token
Masukan · Penulisan cache — / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Detail tarif referensi

Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.

google/gemini-3.1-flash-image-preview

Harga menurut konfigurasi

KonfigurasiKondisi penagihanBiaya
Konfigurasigoogle/gemini-3.1-flash-image-preview · Konfigurasi bawaanKondisi penagihanKonfigurasi bawaanBiaya
Masukan · Masukan US$0,001 / 1K token
Keluaran · Keluaran US$0,12 / 1K token
google/gemini-3.1-flash-image-preview

Harga menurut konfigurasi

KonfigurasiKondisi penagihanBiaya
Konfigurasigoogle/gemini-3.1-flash-image-preview · Konfigurasi bawaanKondisi penagihanKonfigurasi bawaanBiaya
Masukan · Masukan US$0,001 / 1K token
Keluaran · Keluaran US$0,12 / 1K token
google/gemini-3.1-flash-image-preview

Harga menurut konfigurasi

KonfigurasiKondisi penagihanBiaya
Konfigurasigoogle/gemini-3.1-flash-image-preview · Konfigurasi bawaanKondisi penagihanKonfigurasi bawaanBiaya
Masukan · Masukan US$0,00 per pemanggilan
Keluaran · Keluaran US$0,16 per pemanggilan
google/gemini-3.1-flash-image-preview

Harga menurut konfigurasi

KonfigurasiKondisi penagihanBiaya
Konfigurasigoogle/gemini-3.1-flash-image-preview · Konfigurasi bawaanKondisi penagihanKonfigurasi bawaanBiaya
Masukan · Masukan US$0,00 per pemanggilan
Keluaran · Keluaran US$0,32 per pemanggilan
google/gemini-3.1-flash-image-preview

Harga menurut konfigurasi

KonfigurasiKondisi penagihanBiaya
Konfigurasigoogle/gemini-3.1-flash-image-preview · Konfigurasi bawaanKondisi penagihanKonfigurasi bawaanBiaya
Masukan · Masukan US$0,00 per pemanggilan
Keluaran · Keluaran US$0,00 per pemanggilan
Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)

Harga menurut konfigurasi

KonfigurasiKondisi penagihanBiaya
KonfigurasiGoogle: Nano Banana 2 (Gemini 3.1 Flash Image Preview) · Konfigurasi bawaanKondisi penagihanKonfigurasi bawaanBiaya
Masukan · Token masukan US$0,001 / 1K token
Keluaran · Token keluaran US$0,006 / 1K token
Keluaran · Gambar keluaran US$0,12 / 1K token
Keluaran · Pencarian web US$0,028 per pencarian

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Contoh permintaan

Ailoot Ultra · OpenAI Chat

curlPython SDKAliran 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.1-flash-image-preview", "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.1-flash-image-preview',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.1-flash-image-preview',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, berkas, dan bagian konten yang dikembalikan.

Simpan setiap alternatif jawaban beserta konten, panggilan alat, dan penalarannya. Dalam SSE, gabungkan delta menurut indeks alternatif jawaban/alat, lalu pertahankan alasan penghentian akhir dan data penggunaan.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
Kolomchoices[].indexJenisinteger
Kolomchoices[].message.contentJenisstring|null
Kolomchoices[].message.tool_callsJenistool_call[]
Kolomchoices[].message.reasoning_contentJenisstring
Kolomchoices[].message.reasoning_detailsJenisobject|array
Kolomchoices[].finish_reasonJenisstring|null
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot Ultra google/gemini-3.1-flash-image-preview

Alias jalur metode

/v1/images

ID pemanggil terkait

google/gemini-3.1-flash-image-preview

Ailoot Ultra · Gambar POST /v1/images/generations google/gemini-3.1-flash-image-preview

google/gemini-3.1-flash-image-preview

Google /google/gemini-3.1-flash-image-preview

Mulai

Nano Banana 2 (Gemini 3.1 Flash Image Preview) membuat dan menyunting gambar dari teks serta referensi visual. Keunggulan yang didokumentasikan mencakup konsistensi subjek, teks dalam gambar dan lokalisasi, perubahan melalui percakapan, serta kontrol kreatif atas komposisi, rasio aspek, dan resolusi.

Masukan yang diterima
Teks · Gambar
Hasil
Gambar

Tersedia di Ailoot · masukan & metode

Ailoot Ultra · Gambar POST /v1/images/generations
Masukan
text, image
Keluaran
image
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
google/gemini-3.1-flash-image-preview
Bawaan—
KolompromptJenisstringPersyaratanWajibNilai & batasan
Panjang minimum: 1
Bawaan—
KolomresolutionJenisstringPersyaratanOpsionalNilai & batasan
512, 1K, 2K, 4K
Bawaan—
Kolomaspect_ratioJenisstringPersyaratanOpsionalNilai & batasan
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
Bawaan—
KolomnJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Maksimum: 1
Bawaan—
Kolominput_referencesJenisarrayPersyaratanOpsionalNilai & batasan
Item minimum: 0
Item maksimum: 14
Bawaan—
KolomproviderJenisobjectPersyaratanOpsionalNilai & batasanBawaan—
Parameter metode dan siklus hidup
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, prompt
Parametermaterial_typesKontraktext, image

Siklus hidup: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · task_id aktual yang dikembalikan atau catatan pustaka media

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

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Paket

Cara menghitung biaya akhir

Tarif yang ditampilkan memperkirakan biaya sebelum pembuatan. Biaya akhir dihitung dari biaya yang tercatat untuk proses pembuatan awal. Durasi keluaran yang terukur dan kuantitas perkiraan bukanlah kuantitas akhir yang ditagihkan.

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast
Tidak ditentukan Saat mode fast dipilih
Mode Flex
Tidak ditentukan Saat mode flex dipilih
Upaya penalaran maksimum
Tidak ditentukan Saat upaya penalaran maksimum menggunakan penyesuaian default

Perkiraan tarif untuk perbandingan

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifJumlah perkiraanBiaya
KonfigurasiTarif dasar tokenJadwal tarifTarif dasarJumlah perkiraan—Biaya
Masukan · Token masukan · Perkiraan hanya untuk perbandingan — / 1K token
Keluaran · Token keluaran · Perkiraan hanya untuk perbandingan — / 1K token
Masukan · Pembacaan cache · Perkiraan hanya untuk perbandingan — / 1K token
Masukan · Penulisan cache · Perkiraan hanya untuk perbandingan — / 1K token
Masukan · Penulisan cache, 1 jam · Perkiraan hanya untuk perbandingan — / 1K token
KonfigurasiPerkiraan biaya pembuatanJadwal tarif—Jumlah perkiraanestimasi satu kali pembuatanBiaya
Keluaran · Perkiraan biaya pembuatan · Perkiraan hanya untuk perbandingan $0.49152 estimasi sebelum pembuatan

Perkiraan ini bukan biaya tambahan maupun tarif tetap untuk proses pembuatan yang telah selesai.

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Contoh permintaan

Ailoot Ultra · Gambar

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.1-flash-image-preview', '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 · Gambar

Unduh setiap gambar yang dikembalikan atau simpan konten 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 konten lain
Baca aset yang sudah ada dan menjadi milik Anda
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 gambar yang selesai; ambil setiap URL yang dikembalikan atau dekode konten Base64-nya.

Simpan respons dan header secara lengkap, setiap keluaran aktual, identifikator asli yang dikembalikan, dan semua kolom usage. Pulihkan operasi asli tanpa mengirim ulang permintaan pembuatan.

Jika respons asli perlu diperiksa

Simpan X-Client-Request-ID yang dikembalikan untuk rekonsiliasi. Baca hanya nilai task_id/asset_id yang benar-benar dikembalikan atau pustaka media milik Anda; jangan pernah membuat URL tugas dari ID operasi dan jangan pernah mengirim ulang permintaan pembuatan.

Kolom respons
KolomJenis
KolomcreatedJenis
Kolomdata[].urlJenis
Kolomdata[].b64_jsonJenis
KolomusageJenis

Alias

Alias model

Ailoot Ultra google/gemini-3.1-flash-image-preview

Alias jalur metode

/v1/images

ID pemanggil terkait

google/gemini-3.1-flash-image-preview

Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3.1-flash-image-preview

google/gemini-3.1-flash-image-preview

Google /google/gemini-3.1-flash-image-preview

Mulai

Nano Banana 2 (Gemini 3.1 Flash Image Preview) membuat dan menyunting gambar dari teks serta referensi visual. Keunggulan yang didokumentasikan mencakup konsistensi subjek, teks dalam gambar dan lokalisasi, perubahan melalui percakapan, serta kontrol kreatif atas komposisi, rasio aspek, dan resolusi.

Masukan yang diterima
Teks
Hasil
json · sse

Tersedia di Ailoot · masukan & metode

Ailoot Ultra · Anthropic Messages POST /v1/messages
Masukan
text
Keluaran
json, sse
Format keluaran
JSON atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
google/gemini-3.1-flash-image-preview
Bawaan—
KolommessagesJenismessage[]PersyaratanWajibNilai & batasanBawaan—
Kolommessages[].roleJenisstringPersyaratanWajibNilai & batasan
user, assistant
Bawaan—
Kolommessages[].contentJenisstringPersyaratanWajibNilai & batasanBawaan—
Kolommax_tokensJenisintegerPersyaratanWajibNilai & batasanBawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
Kombinasi bahan masukan

Teks · Teks UTF-8

string messages[].content

Parameter metode dan siklus hidup
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages, max_tokens
Parameteroptional_controlsKontrakstream
Parametermaterial_typesKontraktext
Parametertext_file_materialKontrakBaca dokumen UTF-8 yang sebenarnya dan masukkan teksnya ke string masukan atau konten pesan yang ditunjukkan.

Siklus hidup: synchronous_or_streamed

Paket

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast
Tarif standar Saat mode fast dipilih
Mode Flex
Tarif standar Saat mode flex dipilih
Upaya penalaran maksimum
Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default
Upaya penalaran · high
Tarif standar Saat upaya penalaran bernilai high
Upaya penalaran · minimal
Tarif standar Saat upaya penalaran bernilai minimal
Harga cache eksplisit
Tidak diaktifkan Saat cache eksplisit diminta

Tarif Ailoot

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiTarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.001 / 1K token
Keluaran · Token keluaran $0.006 / 1K token
Masukan · Pembacaan cache — / 1K token
Masukan · Penulisan cache — / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
Keluaran · Token gambar keluaran $0.12 / 1K token gambar
KonfigurasiPanjang permintaan · tingkat 1Jadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.001 / 1K token
Keluaran · Token keluaran $0.006 / 1K token
Masukan · Pembacaan cache — / 1K token
Masukan · Penulisan cache — / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Contoh permintaan

Ailoot Ultra · Anthropic Messages

Isi permintaan JSON minimal yang lengkapcurl · gunakan dokumen UTF-8 AndaPython · simpan hasil secara lengkap
{
  "model": "google/gemini-3.1-flash-image-preview",
  "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.1-flash-image-preview', '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.1-flash-image-preview', '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, berkas, dan bagian konten yang dikembalikan.

Simpan semua blok konten, tanda tangan penalaran, dan ID penggunaan alat yang sebenarnya. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan keluaran.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
KolomidJenisstring
KolommodelJenisstring
Kolomcontent[]Jenistext|thinking|tool_use|other content block
Kolomstop_reasonJenisstring|null
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot Ultra google/gemini-3.1-flash-image-preview

Alias jalur metode

/v1/images

ID pemanggil terkait

google/gemini-3.1-flash-image-preview

FAQ · Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)
Input dan hasil apa yang tersedia?

POST /v1/chat/completions · google/gemini-3.1-flash-image-preview: text → text

POST /v1/images/generations · google/gemini-3.1-flash-image-preview: text, image → image

POST /v1/messages · google/gemini-3.1-flash-image-preview: text → json, sse

Kolom apa yang digunakan permintaan?

POST /v1/chat/completions · google/gemini-3.1-flash-image-preview: model, messages, stream, modalities, provider

POST /v1/images/generations · google/gemini-3.1-flash-image-preview: model, prompt, resolution, aspect_ratio, n, input_references, provider

POST /v1/messages · google/gemini-3.1-flash-image-preview: model, messages, max_tokens, stream

Batasan apa yang berlaku?

POST /v1/chat/completions · google/gemini-3.1-flash-image-preview: messages.min_items: 1

POST /v1/images/generations · google/gemini-3.1-flash-image-preview: n.minimum: 1; n.maximum: 1

Rincian selengkapnya

Hubungkan Ailoot ke Claude Code, OpenCode, Hermes, atau aplikasi Anda.

Perusahaan dan portofolio proyeknya

Perusahaan dan portofolio proyeknya: jutaan pelanggan; penjualan miliaran setiap bulan.

Beli token dengan diskon.

Diskon langganan untuk pekerjaan rutin. Kode promo — hingga 50% untuk pembelian token.

Langganan
Pilih paket dengan diskon untuk permintaan rutin Anda.
Kode promo hingga 50%
Masukkan kode saat membeli. Harga dihitung ulang sesuai promosi aktif.
Biaya dalam riwayat
Model, token, dan jumlah tagihan disimpan untuk setiap permintaan.

Pilih langganan · Lihat harga model

Hubungkan API ke produk yang Anda jual.

SaaS, aplikasi, dan bot — sesuai penawaran dan perjanjian lisensi Ailoot. Untuk penjualan kembali, mintalah lisensi reseller.

Aplikasi komersial
Integrasikan pembuatan teks, gambar, video, dan suara dalam fitur berbayar layanan Anda.
Lisensi reseller
Kirim deskripsi proyek dan skema akses. Mintalah ketentuan penggunaan dan penjualan kembali secara tertulis.
Dokumen di situs
Penawaran, perjanjian lisensi, dan kebijakan pemrosesan data tersedia sebelum koneksi.

Minta lisensi reseller · Penawaran dan perjanjian lisensi