Nano Banana 2 Lite vs 2.1 vs Pro: Perbandingan Model Gambar Google Flow

7 menit baca • 2 Juli 2026 (6 November 2026)

useapi.net adalah API pihak ketiga. Kami tidak berafiliasi dengan Google dan tidak disahkan oleh Google.

Daftar isi

  1. Pendahuluan
  2. Apa saja tiga model Nano Banana itu?
    1. Upscale ke 2K/4K
  3. Harga
  4. Prompt perbandingan
  5. Generate dengan ketiga model
  6. Contoh
  7. Model Nano Banana mana yang sebaiknya dipakai?
  8. Jalankan sendiri
  9. Pertanyaan yang sering diajukan
  10. Kesimpulan

Pendahuluan

Google Flow punya tiga model gambar Nano Banana, yaitu nano-banana-2-lite, nano-banana-2, dan nano-banana-pro, dan Google Flow API useapi.net menjalankan ketiganya dari satu prompt dengan akun Google Flow Anda. Gambar sudah termasuk di setiap langganan Google AI, akun gratis juga, sementara Gemini API resmi menagih $0,034 sampai $0,134 per gambar (per November 2026). Tidak perlu project Google Cloud dan tidak perlu API key.

Panduan ini menjalankan prompt yang persis sama di Lite, 2.1, dan Pro supaya Anda bisa melihat bedanya, lalu memberikan skrip Node.js siap jalan yang membuat seluruh set gambar dengan satu perintah. Ingin panduan dari nol dulu? Lihat tutorial pembuatan gambar, pasangan panduan ini.

Apa saja tiga model Nano Banana itu?

Pilih model per request dengan field model. Jika tidak diisi, Google Flow memakai nano-banana-2-lite, default-nya sejak Juli 2026. Ketiganya berjalan di langganan Google AI mana pun, termasuk akun gratis.

ID model Nama produk Paling cocok untuk Referensi (I2I) Kecepatan
nano-banana-2-lite (default) Nano Banana 2 Lite / Gemini 3.1 Flash-Lite Image gambar cepat dalam jumlah besar, di paket apa pun maks. 10 tercepat
nano-banana-2 Nano Banana 2.1 seimbang antara kualitas dan kecepatan maks. 10 cepat
nano-banana-pro Nano Banana Pro / Gemini 3 Pro Image fidelitas dan kepatuhan instruksi tertinggi maks. 10 lebih lambat

Ketiganya menerima rasio aspek yang sama (16:9, 4:3, 1:1, 3:4, 9:16, plus auto di mode gambar ke gambar), count (1–4), seed untuk hasil yang bisa diulang, hingga 10 gambar referensi, @-mention di dalam prompt, dan upscale ke 2K/4K. Alias lama imagen-4 (Google menghapus Imagen dari Google Flow pada Juli 2026) dan nano-banana masih diterima dan masing-masing dipetakan ke nano-banana-2-lite dan nano-banana-2. Detail lengkap tiap model ada di referensi POST /images.

Upscale ke 2K/4K

Gambar apa pun yang sudah dibuat bisa di-upscale dengan POST /images/upscale: kirim mediaGenerationId-nya dan resolution berisi 2k (default) atau 4k. Responsnya berupa base64 di encodedImage. 2k bisa dipakai di paket apa pun, dan 4k butuh Google AI Ultra.

Harga

Gambar tidak memakai kredit Flow di langganan Google AI mana pun, termasuk akun gratis, dan useapi.net tidak menagih biaya per gambar. Harga setiap model di setiap paket, dibandingkan dengan API resmi, ada di tabel harga Google Flow. Lihat panduan penyiapan untuk menghubungkan akun Anda.

Prompt perbandingan

Perbandingan model hanya berguna kalau prompt-nya sulit. Prompt ini sengaja dibuat sebagai adegan absurd dalam satu bingkai yang menguji beberapa hal sekaligus: gaya fotografi yang disebut namanya (David LaChapelle), tata letak ruang dengan banyak subjek (kawanan lebah yang membentuk panah di kiri atas, seekor lebah dengan perspektif paksa di kanan bawah), ketepatan properti (sarang madu yang meneteskan madu), ekspresi komedi tertentu (mata kartun o_O), dan nuansa yang saling bertabrakan, semuanya dalam satu gambar yang padu.

A visually breathtaking, beautifully absurd, single-frame photograph in the hyper-saturated,
glossy, surreal-comedy editorial style of David LaChapelle, shot at a sun-dappled backyard
apiary at golden hour on an 85mm f/1.4 lens with creamy shallow depth of field. In the center
midground, a gorgeous, radiant young woman beekeeper with an elegant figure, flawless glowing
sun-kissed skin and a warm playful smile, incongruously wearing a tiny mini bikini and a
beekeeper's veil hat pushed back off her face, stands among the wooden hive boxes on the grass and lifts a single
open beehive frame heavy with golden honeycomb, thick honey oozing and stringing down in glossy
ribbons and catching the light. She looks directly into the camera, delighted and completely
unbothered by the bees swirling around her. In the top-left of the frame, a dense swarm of bees
bunches together and organizes into a bold, unmistakable arrow / pointer shape aimed straight at
her, as if frantically calling everyone's attention. In the extreme bottom-right foreground of
the exact same scene, photobombing the lens, is a huge forced-perspective close-up of a single
frazzled worker bee, staring directly into the camera with bulging, mind-blown "o_O" cartoon
googly eyes, completely frozen in comical disbelief. Single cohesive image, seamless depth of
field, no cut-ins, warm dynamic backlighting, glistening honey highlights, crazy situational
comedy, hyper-detailed, masterpiece.

Generate dengan ketiga model

Anda butuh API token useapi.net dan akun Google Flow yang sudah terhubung. POST /images bersifat sinkron: satu panggilan menunggu sampai gambar selesai (biasanya 20–60 detik, dan model Pro bisa sampai sekitar 2 menit saat beban tinggi) lalu mengembalikan array media[] dengan satu entri per gambar, jadi tidak ada jobid yang perlu di-poll.

Satu panggilan saja, ganti model untuk membandingkan:

curl -X POST "https://api.useapi.net/v1/google-flow/images" \
  -H "Authorization: Bearer $USEAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "aspectRatio": "9:16",
    "count": 4,
    "prompt": "A beekeeper at golden hour lifting a dripping honeycomb frame, a swarm forming an arrow in the sky, a forced-perspective bee with o_O googly eyes in the foreground"
  }' > result.json

# setiap gambar ada di .media[N].image.generatedImage.fifeUrl
curl -o pro_1.jpg "$(jq -r '.media[0].image.generatedImage.fifeUrl' result.json)"

Untuk menjalankan seluruh perbandingan dengan satu perintah, skrip Node.js di bawah membaca prompts.json (satu entri per model, semuanya dengan prompt yang sama), mengirim masing-masing, lalu menyimpan setiap gambar yang dikembalikan dengan nama file berlabel model, dengan mengunduhnya dari fifeUrl atau men-decode encodedImage inline jika URL-nya tidak ada. Gambar yang gagal dicatat di log dan skrip lanjut ke berikutnya. Anda butuh Node.js v21+. Taruh kedua file di satu folder lalu jalankan node ./google-flow-nano-banana-compare.mjs API_TOKEN EMAIL, dengan API_TOKEN berisi API token useapi.net Anda dan EMAIL berisi akun Google Flow yang terhubung. Skrip mencari akun berdasarkan email, memeriksa health-nya sebelum mengirim, dan tidak mengirim captchaToken: worker useapi.net menyelesaikan reCAPTCHA secara otomatis.

Lebih suka clone dan menjalankannya? Skrip lengkap, versi Python, dan prompts.json ada di GitHub di useapi/google-flow-api.

Buka prompts.json
[
    {
        "model": "nano-banana-2-lite",
        "aspectRatio": "9:16",
        "count": 4,
        "prompt": "A beekeeper at golden hour lifting a dripping honeycomb frame in the surreal editorial style of David LaChapelle, a dense bee swarm forming a bold arrow in the top-left, a forced-perspective bee with o_O cartoon googly eyes photobombing the bottom-right. Single cohesive image, masterpiece."
    },
    {
        "model": "nano-banana-2",
        "aspectRatio": "9:16",
        "count": 4,
        "prompt": "A beekeeper at golden hour lifting a dripping honeycomb frame in the surreal editorial style of David LaChapelle, a dense bee swarm forming a bold arrow in the top-left, a forced-perspective bee with o_O cartoon googly eyes photobombing the bottom-right. Single cohesive image, masterpiece."
    },
    {
        "model": "nano-banana-pro",
        "aspectRatio": "9:16",
        "count": 4,
        "prompt": "A beekeeper at golden hour lifting a dripping honeycomb frame in the surreal editorial style of David LaChapelle, a dense bee swarm forming a bold arrow in the top-left, a forced-perspective bee with o_O cartoon googly eyes photobombing the bottom-right. Single cohesive image, masterpiece."
    }
]
Buka skrip google-flow-nano-banana-compare.mjs
/*

Script version 1.1, September 11, 2026

Batch-compare Google Flow's Nano Banana image models (2 Lite, 2.1, Pro) with the useapi.net API 🚀
Reads prompts.json (one entry per model), submits each to the synchronous POST /images endpoint,
and downloads every returned image with a model-labeled filename.
For more details visit https://useapi.net/docs/api-google-flow-v1/post-google-flow-images

Companion tutorial:
  https://useapi.net/docs/articles/google-flow-nano-banana-compare

Installation Instructions:
==========================

You need Node.js v21 or newer installed to run this script. Download and install Node.js from:

- Windows, macOS, Linux: https://nodejs.org/

After installation, verify by running the following command in a terminal:

   node -v

Running the Script:
===================

Usage: node google-flow-nano-banana-compare.mjs <API_TOKEN> <EMAIL> [PROMPTS_FILE]

Replace API_TOKEN with your actual useapi.net API token, see https://useapi.net/docs/start-here/setup-useapi
Replace EMAIL with configured Google Flow email account, see https://useapi.net/docs/start-here/setup-google-flow
If optional PROMPTS_FILE not provided prompts.json will be used.

Example:
--------

node google-flow-nano-banana-compare.mjs user:1234-abcdefhijklmnopqrstuv [email protected]

Changelog:
==========

- July 2, 2026: Initial release.
- September 11, 2026: Saves encodedImage when fifeUrl is absent, and writes a downloaded image only once it has been fully received, so a failed download leaves no partial file for the next run to skip as "already exists".

*/

import fs from 'fs/promises';
import { writeFile } from 'node:fs/promises';

// Constants
const DEFAULT_PROMPTS_FILE = 'prompts.json';
const DEFAULT_MODEL = 'nano-banana-2-lite';
const SLEEP_RETRY = 30 * 1000; // in milliseconds

const urlAccounts = 'https://api.useapi.net/v1/google-flow/accounts';
const urlImages = 'https://api.useapi.net/v1/google-flow/images';

// Utility to sleep for given milliseconds
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const elapsedTimeSec = (start) => (Date.now() - start) / 1000;

// Function to fetch configured Google Flow API accounts
async function fetchAccounts(apiToken) {
    const response = await fetch(urlAccounts, {
        headers: {
            'Accept': 'application/json',
            'Authorization': `Bearer ${apiToken}`
        }
    });

    if (!response.ok) {
        console.error(`⛔ Error fetching accounts (HTTP ${response.status}): ${response.statusText}`);
        process.exit(1);
    }

    return response.json();
}

// Save a single image from its signed fifeUrl. fifeUrl is normally present; when it is absent
// the image arrived inline as base64 in encodedImage. A failure is reported and skipped.
async function downloadImage(img, filename) {
    try {
        await fs.access(filename);
        console.log(`⚠️ ${filename} already exists. Skipping download.`);
        return;
    } catch {
        // File does not exist, proceed with downloading
    }

    const url = img?.fifeUrl;

    if (!url && img?.encodedImage) {
        console.log(`✅ Saving ${filename} from encodedImage`);
        try {
            await writeFile(filename, Buffer.from(img.encodedImage, 'base64'));
        } catch (err) {
            console.error(`⛔ Unable to save ${filename}: ${err}`);
        }
        return;
    }

    if (!url) {
        console.error(`🛑 No fifeUrl or encodedImage for ${filename}`);
        return;
    }

    console.log(`✅ Downloading ${filename}`);
    try {
        const imageResponse = await fetch(url);
        if (!imageResponse.ok) {
            console.error(`⛔ Unable to download ${filename} (HTTP ${imageResponse.status})`);
            return;
        }
        // Read the whole body before creating the file, so a failed download leaves no
        // partial file behind for the next run to skip as "already exists".
        const data = Buffer.from(await imageResponse.arrayBuffer());
        await writeFile(filename, data);
    } catch (err) {
        console.error(`⛔ Error during download: ${err}`);
    }
}

// Submit a single prompt to the synchronous POST /images endpoint and download the results.
async function submitImage(apiToken, email, prompt, index) {
    const model = prompt.model ?? DEFAULT_MODEL;

    // Build the request body.
    const body = { model, email, prompt: prompt.prompt };
    for (const key of ['aspectRatio', 'count', 'seed'])
        if (prompt[key] !== undefined) body[key] = prompt[key];

    console.log(`🚀 ${model} » Prompt #${index} • account ${email} …`);
    const startTime = Date.now();

    while (true) {
        const response = await fetch(urlImages, {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${apiToken}`
            },
            body: JSON.stringify(body)
        });

        const responseText = await response.text();

        if (response.status == 200) {
            const media = JSON.parse(responseText)?.media ?? [];

            if (media.length == 0)
                console.error(`🛑 200 OK but no media (moderated?) for ${model}`);

            // count > 1 returns multiple images in the media array.
            for (let i = 0; i < media.length; i++) {
                const img = media[i]?.image?.generatedImage;
                await downloadImage(img, `${model}_${i + 1}.jpg`);
            }
            console.log(`🆗 ${model} done (${elapsedTimeSec(startTime)} sec)`);
            return 200;
        }

        switch (response.status) {
            case 429:
            case 503:
                console.log(`🔄️ Retry on HTTP ${response.status}`, responseText);
                await sleep(SLEEP_RETRY);
                break;
            default:
                console.error(`🛑 ${model} failed with HTTP ${response.status}`, responseText);
                return response.status;
        }
    }
}

// Main function
async function main() {
    const apiToken = process.argv[2];
    const email = process.argv[3];
    const promptFile = process.argv[4] || DEFAULT_PROMPTS_FILE;

    if (!apiToken || !email) {
        console.error('Usage: node google-flow-nano-banana-compare.mjs <API_TOKEN> <EMAIL> [PROMPTS_FILE]');
        process.exit(1);
    }

    console.info('Script v1.1 • Node version ' + process.version);

    const accounts = await fetchAccounts(apiToken);

    if (!accounts[email]) {
        console.error(`⛔ Account ${email} not found. Please refer to https://useapi.net/docs/start-here/setup-google-flow`);
        process.exit(1);
    }

    if (accounts[email].health && accounts[email].health !== 'OK') {
        console.error(`⛔ Account ${email} health is '${accounts[email].health}'. Please resolve and update the account, see https://useapi.net/docs/start-here/setup-google-flow`);
        process.exit(1);
    }

    const prompts = JSON.parse(await fs.readFile(promptFile, 'utf8'));
    console.log(`Comparing ${prompts.length} model runs …`);

    const start = new Date();
    for (let i = 0; i < prompts.length; i++)
        await submitImage(apiToken, email, prompts[i], i + 1);

    console.info('COMPLETED', new Date(), '• elapsed', elapsedTimeSec(start), 'sec');
}

main();

Contoh

Berikut prompt peternak lebah yang sama yang dibuat oleh tiap model dalam 9:16, lewat Google Flow API ini. Perbedaannya konsisten: Pro paling rapi dan paling patuh pada instruksi, 2.1 paling dinamis, dan Lite paling cepat dengan hasil yang tetap dekat.

nano-banana-pro: paling rapi dan paling bergaya editorial, dan satu-satunya model yang konsisten menggambar jaring kerudung, lebah yang merayap di sarang, dan mata kartun o_O secara harfiah.

Hasil peternak lebah Nano Banana Pro lewat Google Flow API

nano-banana-2: interpretasi yang paling dinamis dan energik, dengan kawanan berbentuk panah yang paling jelas dan banyak detail situasi (sepatu bot kerja, lebah di bingkai).

Hasil peternak lebah nano-banana-2 lewat Google Flow API

nano-banana-2-lite: yang tercepat dari ketiganya (sekitar setengah waktu Pro dalam uji coba kami) sambil tetap mempertahankan komposisi, tetesan madu, dan lebah bermata melotot di latar depan.

Hasil peternak lebah Nano Banana 2 Lite lewat Google Flow API

Model Nano Banana mana yang sebaiknya dipakai?

  • Pilih nano-banana-pro saat fidelitas paling penting: gambar utama, adegan rumit dengan banyak subjek, teks yang presisi, atau kepatuhan instruksi. Model ini yang paling lambat dari ketiganya.
  • Pilih nano-banana-2 untuk keseimbangan yang baik antara kualitas dan kecepatan, atau saat Anda ingin interpretasi prompt yang lebih dinamis dan bergaya.
  • Pilih nano-banana-2-lite (default) untuk iterasi dan batch besar saat kecepatan penting dan kualitasnya tetap sangat dekat.

Karena bentuk request-nya sama, berganti model cukup mengubah satu kata di model: buat satu batch dengan ketiganya lalu pilih yang terbaik, persis seperti yang dilakukan skrip di atas.

Jalankan sendiri

Skrip Node.js lengkap, versi Python, dan prompts.json ada di useapi/google-flow-api/nano-banana-compare. Clone, edit prompts.json, lalu jalankan satu perintah untuk membuat seluruh set perbandingan dengan akun Google Flow Anda.

Pertanyaan yang sering diajukan

  • Apakah ada API Nano Banana 2.1 atau Nano Banana Pro? Lewat useapi.net, ada: Google Flow API menjalankan versi Google Flow sebagai nano-banana-2 (Nano Banana 2.1), nano-banana-2-lite, dan nano-banana-pro di POST /images. Di Gemini API resmi, Nano Banana 2.1 sekitar $0,034 per gambar 1K dan Nano Banana Pro $0,134 per gambar, sedangkan di sini tidak ada biaya per gambar (per November 2026).
  • Apa beda Nano Banana 2 Lite, 2.1, dan Pro? Lewat useapi.net ketiganya berjalan di endpoint yang sama, masing-masing dengan keunggulannya. nano-banana-pro (Gemini 3 Pro Image) paling rapi dan paling patuh pada instruksi, nano-banana-2 (Nano Banana 2.1) memberi interpretasi paling dinamis, dan nano-banana-2-lite (Gemini 3.1 Flash-Lite Image), yang menjadi default, butuh sekitar setengah waktu Pro dalam uji coba kami. Lihat Model mana yang sebaiknya dipakai?
  • Berapa biaya API Nano Banana? Lewat useapi.net, gambar tidak memakai kredit Flow di langganan Google AI mana pun, termasuk akun gratis, dan tidak ada Gemini API key atau akun penagihan Cloud yang perlu disiapkan. Di Gemini API resmi, Nano Banana 2 Lite sekitar $0,034 per gambar 1K (per November 2026). Lihat Harga.
  • Apakah gambar dimoderasi? Lewat useapi.net, prompt Anda tetap melewati moderasi konten milik Google sendiri, dan request yang ditolak mengembalikan hasil kosong. Keputusan moderasi berbeda-beda antar-request dan antar-model, jadi mencoba ulang, mengubah prompt, atau berganti model sering berhasil, karena tiap model Nano Banana memoderasi sedikit berbeda.
  • Apakah saya perlu captcha atau project Google Cloud? Lewat useapi.net Anda tidak perlu project Google Cloud maupun menyelesaikan captcha sendiri. Google Flow meminta reCAPTCHA untuk setiap gambar, dan worker useapi.net menyelesaikannya otomatis: akun Google Flow pertama Anda mendapat 300 penyelesaian gratis dengan key AntiCaptcha, CapSolver, dan EzCaptcha milik kami, lalu setelah itu Anda menambahkan key penyedia Anda sendiri. Skrip di panduan ini tidak mengirim captchaToken.

Kesimpulan

Kunjungi Server Discord atau Channel Telegram kami untuk pertanyaan dan masalah dukungan.

Lihat repo GitHub kami berisi contoh kode.

Dipublikasikan juga di

Juga dipublikasikan di dev.to (bahasa Inggris) dan didiskusikan di Reddit (bahasa Inggris).

Mulai memakai API

Satu langganan US$15/bulan mencakup semua API di useapi.net: satu token untuk semua layanan. Di setiap layanan Anda bisa menghubungkan hingga 3 akun milik Anda sendiri, dan useapi.net menangani REST API, load balancing, dan polling. Butuh lebih banyak akun? Setiap langganan tambahan US$10/bulan dan menambah 3 akun lagi per layanan.

Berlangganan — US$15/bulan Bayar dengan kripto

Tidak punya kartu kredit internasional? Anda bisa berlangganan dengan kripto (pembayaran kripto tidak bisa di-refund). Harga dan paket volume ada di halaman langganan. Jika membayar lewat Stripe, Anda mendapat refund penuh dalam 14 hari sejak pembelian pertama, selama jumlah generasi yang berhasil kurang dari 50. Sudah berlangganan? Ubah jumlahnya di Stripe Customer Portal, tidak perlu membeli lagi.