DEV Community

Cover image for วิธีใช้ Nano Banana 2.1 API
Thanawat Wongchai
Thanawat Wongchai

Posted on Originally published at apidog.com

วิธีใช้ Nano Banana 2.1 API

Google เปิดตัว Nano Banana 2.1 เมื่อวันที่ 6 ตุลาคม 2026 และเรียกใช้ผ่าน Gemini API ด้วยรหัสโมเดล gemini-nano-banana-2.1 ได้แล้ว โมเดลนี้อัปเดตจาก Nano Banana 2 (Gemini 3.1 Flash Image) โดยปรับปรุงคุณภาพภาพ การแก้ไขแบบมาสก์ด้วยคำสั่ง และความสอดคล้องของตัวละครในการแก้ไขหลายรอบ อีกทั้งค่าใช้จ่ายต่อภาพลดลงเหลือครึ่งหนึ่งของ Nano Banana 2 ในทุกความละเอียดที่รองรับ

ลองใช้ Apidog วันนี้

บทความนี้จะพาคุณเรียก API จาก Terminal สร้างและบันทึกภาพ ตั้งค่าอัตราส่วนและความละเอียด แก้ไขภาพ ทำงานแบบหลายรอบ ใช้ภาพอ้างอิง ใช้ Google Search และตรวจสอบต้นทุน คุณสามารถบันทึกและเล่นซ้ำทุกคำขอใน Apidog เพื่อเปรียบเทียบ Nano Banana 2.1 กับโมเดลที่ใช้งานอยู่ได้

ต้องการข้อมูลเบื้องต้นก่อนเริ่มใช้งาน? อ่าน Nano Banana 2.1 คืออะไร สำหรับรายละเอียดสิ่งที่เปลี่ยนแปลงและสิ่งที่ Google ยังไม่ได้เผยแพร่

สิ่งที่คุณต้องมี

รายการ ค่า
URL พื้นฐาน https://generativelanguage.googleapis.com/v1beta
ส่วนหัวการรับรองความถูกต้อง x-goog-api-key: $GEMINI_API_KEY
รหัสโมเดล gemini-nano-banana-2.1
ปลายทาง POST /v1beta/interactions
ความละเอียด 1K (ค่าเริ่มต้น), 2K, 4K
อินพุต ข้อความ, รูปภาพ (สูงสุด 14 รูปอ้างอิง), วิดีโอ
Python SDK pip install google-genai
JavaScript SDK npm install @google/genai

ตัวอย่างทั้งหมดใช้ Interactions API ซึ่งเป็น API ที่เอกสารการสร้างภาพของ Google ใช้สำหรับ Nano Banana 2.1

ขั้นตอนที่ 1: รับคีย์ Gemini API

  1. เปิด Google AI Studio และเข้าสู่ระบบ
  2. ไปที่ รับคีย์ API แล้วสร้างคีย์ใน Google Cloud project
  3. เปิดใช้การเรียกเก็บเงินสำหรับโปรเจกต์นั้น โดยหน้าการกำหนดราคาของ Google ระบุว่า Nano Banana 2.1 ไม่มีบริการ API แบบฟรี
  4. ส่งออกคีย์เป็น environment variable:
export GEMINI_API_KEY="your-key-here"
Enter fullscreen mode Exit fullscreen mode

Google เชื่อมโยง 2.1 กับ AI Studio playground ซึ่งเหมาะสำหรับทดสอบพรอมต์ แต่ยังไม่ได้เผยแพร่จำนวนภาพที่บัญชีฟรีสร้างได้ คู่มือ วิธีใช้ Nano Banana 2.1 ฟรี ครอบคลุมเส้นทางดังกล่าว และ การรับคีย์ Gemini API อธิบายการตั้งค่าคีย์เพิ่มเติม

ขั้นตอนที่ 2: สร้างภาพแรกของคุณ

เรียกด้วย curl

เริ่มจากส่งข้อความไปยัง POST /v1beta/interactions:

curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-nano-banana-2.1",
    "input": [
      {
        "type": "text",
        "text": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

การตอบกลับเป็น JSON โดยข้อมูลภาพอยู่ในรูปแบบ base64 ภายในบล็อกรูปภาพ ใช้ SDK หรือสคริปต์เพื่อถอดรหัสและบันทึกเป็นไฟล์

Python

ติดตั้ง SDK ก่อน:

pip install google-genai
Enter fullscreen mode Exit fullscreen mode

จากนั้นสร้างภาพและบันทึกเป็น PNG:

from google import genai
import base64

client = genai.Client()  # อ่านค่า GEMINI_API_KEY

interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input="Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme",
)

with open("generated_image.png", "wb") as f:
    f.write(base64.b64decode(interaction.output_image.data))
Enter fullscreen mode Exit fullscreen mode

interaction.output_image จะคืนบล็อกรูปภาพล่าสุด และฟิลด์ data เป็น base64 จึงต้องถอดรหัสก่อนเขียนลงไฟล์

JavaScript

ติดตั้ง SDK:

npm install @google/genai
Enter fullscreen mode Exit fullscreen mode

สร้างไฟล์ JavaScript เช่น generate-image.mjs:

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

const ai = new GoogleGenAI({});

const interaction = await ai.interactions.create({
  model: "gemini-nano-banana-2.1",
  input: "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme",
});

const image = interaction.output_image;

if (image) {
  fs.writeFileSync("nano-banana.png", Buffer.from(image.data, "base64"));
}
Enter fullscreen mode Exit fullscreen mode

โมเดลสร้างภาพ Gemini 3 จะคิดก่อนสร้างภาพ และอาจสร้าง “ภาพความคิด” ชั่วคราวได้สูงสุดสองภาพระหว่างวางองค์ประกอบ ภาพเหล่านี้ไม่มีค่าใช้จ่ายและไม่สามารถปิดได้ผ่าน API

ขั้นตอนที่ 3: ตั้งค่าอัตราส่วนภาพ ความละเอียด และเอาต์พุตเฉพาะรูปภาพ

ใช้ response_format เพื่อกำหนดรูปแบบเอาต์พุต หากตั้งค่า "type": "image" API จะคืนเฉพาะรูปภาพโดยไม่รวมข้อความการสนทนา ทำให้ response เล็กลงและประมวลผลง่ายขึ้น

interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input="A product shot of a matte black coffee grinder on a marble counter",
    response_format={
        "type": "image",
        "mime_type": "image/png",
        "aspect_ratio": "16:9",
        "image_size": "2K",
    },
)
Enter fullscreen mode Exit fullscreen mode

ข้อควรตรวจสอบก่อนส่งคำขอ:

  • image_size รองรับ 1K, 2K และ 4K เท่านั้น และต้องใช้ K ตัวพิมพ์ใหญ่ เช่น 2K ไม่ใช่ 2k
  • Nano Banana 2.1 ไม่มีระดับ 512px ซึ่งเป็นระดับของ Nano Banana 2
  • อัตราส่วนที่รองรับคือ 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, 1:4, 4:1, 1:8 และ 8:1
  • ภาพ 16:9 ที่ความละเอียด 2K มีขนาด 2752x1536 และที่ 4K มีขนาด 5504x3072
  • หากต้องการทั้งข้อความและรูปภาพ ให้ส่งรายการ response format:
response_format=[
    {"type": "text"},
    {"type": "image"},
]
Enter fullscreen mode Exit fullscreen mode

ขั้นตอนที่ 4: แก้ไขรูปภาพที่มีอยู่

ส่งรูปภาพเป็นบล็อก image ในรูปแบบ base64 พร้อมคำสั่งข้อความ ตัวอย่างนี้เปลี่ยนเฉพาะโซฟาสีน้ำเงิน โดยระบุสิ่งที่ต้องรักษาไว้อย่างชัดเจน:

import base64

with open("living_room.png", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode("utf-8")

interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input=[
        {
            "type": "text",
            "text": (
                "Using the provided image of a living room, change only the blue sofa "
                "to be a vintage, brown leather chesterfield sofa. Keep the rest of "
                "the room, including the pillows on the sofa and the lighting, unchanged."
            ),
        },
        {
            "type": "image",
            "data": image_b64,
            "mime_type": "image/png",
        },
    ],
)
Enter fullscreen mode Exit fullscreen mode

การ Inpainting สไตล์มาสก์โดยไม่ต้องใช้ไฟล์มาสก์

API ไม่มีการอัปโหลดไฟล์มาสก์แยกต่างหาก แต่คุณกำหนดพื้นที่ที่จะแก้ด้วยข้อความ ตัวอย่างเทมเพลต:

จากภาพที่ให้มา ให้เปลี่ยนเฉพาะ [องค์ประกอบเฉพาะ] เป็น [องค์ประกอบ/คำอธิบายใหม่] รักษาส่วนอื่น ๆ ทั้งหมดในภาพให้เหมือนเดิมทุกประการ โดยคงสไตล์ แสง และองค์ประกอบเดิมไว้

แนวทางเขียนพรอมต์สำหรับการแก้ไข:

  1. ระบุองค์ประกอบที่ต้องการเปลี่ยนเพียงรายการเดียว
  2. บอกลักษณะของสิ่งที่จะใช้แทนให้ชัดเจน
  3. ระบุองค์ประกอบที่ต้องคงเดิม เช่น แสง มุมกล้อง สี หรือวัตถุอื่น

พรอมต์กว้าง ๆ เช่น “ทำให้โซฟาดูดีขึ้น” อาจทำให้โมเดลปรับหรือสร้างห้องใหม่ทั้งภาพได้

ขั้นตอนที่ 5: ทำซ้ำด้วยการแก้ไขแบบหลายรอบ

สำหรับการปรับภาพทีละรอบ ให้ส่ง id ของ interaction ก่อนหน้าใน previous_interaction_id แล้วส่งเฉพาะคำสั่งเปลี่ยนแปลงใหม่

interaction_2 = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input="Update this infographic to be in Spanish. Do not change any other elements of the image.",
    previous_interaction_id=interaction.id,
    response_format={
        "type": "image",
        "mime_type": "image/png",
        "aspect_ratio": "16:9",
        "image_size": "2K",
    },
)
Enter fullscreen mode Exit fullscreen mode

หากเรียกผ่าน REST ให้เพิ่มฟิลด์นี้ใน JSON body:

{
  "previous_interaction_id": "<PREVIOUS_INTERACTION_ID>"
}
Enter fullscreen mode Exit fullscreen mode

การทำงานแบบหลายรอบเป็นกรณีที่ความสอดคล้องของตัวละครใน 2.1 มีความสำคัญ ตัวละครหรือผลิตภัณฑ์ควรรักษารูปลักษณ์ที่จดจำได้ตลอดการแก้ไขหลายครั้ง

ขั้นตอนที่ 6: รวมภาพอ้างอิงได้สูงสุด 14 ภาพ

เพิ่มบล็อก image หลายรายการใน input ได้ เอกสารของ Google ระบุว่า Nano Banana 2.1 รองรับ:

  • ภาพวัตถุความละเอียดสูงสูงสุด 10 ภาพ
  • ภาพตัวละครสูงสุด 4 ภาพ
  • รวมทั้งหมดสูงสุด 14 ภาพ
interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input=[
        {
            "type": "text",
            "text": "An office group photo of these people, they are making funny faces.",
        },
        {"type": "image", "data": person_1_b64, "mime_type": "image/png"},
        {"type": "image", "data": person_2_b64, "mime_type": "image/png"},
        {"type": "image", "data": person_3_b64, "mime_type": "image/png"},
    ],
    response_format={
        "type": "image",
        "aspect_ratio": "5:4",
        "image_size": "2K",
    },
)
Enter fullscreen mode Exit fullscreen mode

ภาพอ้างอิงนับเป็น input token และค่าใช้จ่ายอินพุตของ 2.1 สูงกว่า Nano Banana 2 สามเท่า ดังนั้นเวิร์กโฟลว์ที่ใช้ภาพอ้างอิงจำนวนมากอาจทำให้ส่วนต่างของราคาต่อภาพลดลง ควรทดสอบกับคำขอจริงก่อนย้ายระบบ

ขั้นตอนที่ 7: อ้างอิงภาพด้วย Google Search

หากภาพต้องอ้างอิงข้อมูลปัจจุบัน เช่น เหตุการณ์ล่าสุดหรือแผนภูมิสภาพอากาศ ให้เพิ่มเครื่องมือค้นหา:

interaction = client.interactions.create(
    model="gemini-nano-banana-2.1",
    input="A detailed painting of a Timareta butterfly resting on a flower",
    tools=[
        {
            "type": "google_search",
            "search_types": ["web_search", "image_search"],
        }
    ],
)
Enter fullscreen mode Exit fullscreen mode

ข้อแตกต่างของการตั้งค่า:

  • {"type": "google_search"} ใช้ค้นหาเว็บเท่านั้น
  • การเพิ่ม "image_search" ช่วยให้โมเดลใช้ภาพจากเว็บเป็นบริบทภาพ
  • ความสามารถนี้รองรับใน Nano Banana 2.1 และ Nano Banana 2
  • ผลการค้นหาไม่สามารถใช้เป็นภาพอ้างอิงของบุคคลจริงได้
  • หากแสดงผลลัพธ์ที่อ้างอิงการค้นหาแก่ผู้ใช้ Google กำหนดให้แสดง search_suggestions ที่ส่งคืนในขั้นตอน google_search_result

ขั้นตอนที่ 8: ทดสอบคำขอใน Apidog

สคริปต์เหมาะสำหรับการสร้างภาพ แต่เมื่อคุณต้องการตรวจสอบว่าพรอมต์ คีย์ และโมเดลยังทำงานได้ ให้บันทึกคำขอใน Apidog เพื่อเรียกซ้ำและเปรียบเทียบผลได้รวดเร็วขึ้น

  1. สร้าง Environment และเพิ่มตัวแปร GEMINI_API_KEY
  2. สร้างคำขอ:
POST https://generativelanguage.googleapis.com/v1beta/interactions
Enter fullscreen mode Exit fullscreen mode
  1. เพิ่ม header:
x-goog-api-key: {{GEMINI_API_KEY}}
Enter fullscreen mode Exit fullscreen mode
  1. วาง JSON body ที่มี model, input และ response_format
  2. กด Send
  3. เพิ่มสคริปต์หลังการตอบกลับเพื่อตรวจสอบทั้งสถานะและบล็อกรูปภาพ:
pm.test("status is 200", () => {
  pm.response.to.have.status(200);
});

pm.test("response contains an image block", () => {
  const steps = pm.response.json().steps || [];

  const hasImage = steps.some((step) =>
    step.type === "model_output" &&
    (step.content || []).some(
      (content) => content.type === "image" && content.data
    )
  );

  pm.expect(hasImage).to.be.true;
});
Enter fullscreen mode Exit fullscreen mode
  1. ทำซ้ำคำขอ แล้วเปลี่ยน model เป็น gemini-3.1-flash-image
  2. ส่งทั้งสองคำขอด้วยพรอมต์และการตั้งค่าเดียวกัน

คุณจะได้การเปรียบเทียบ Nano Banana 2.1 กับ Nano Banana 2 แบบเคียงข้างกัน พร้อมสถานะ เวลา และขนาด response ของแต่ละคำขอ สำหรับการเปรียบเทียบคุณสมบัติเพิ่มเติม ดู Nano Banana 2.1 vs Nano Banana 2 vs Pro

ค่าใช้จ่าย

ระดับแบบชำระเงินตามหน้าการกำหนดราคาของ Google ณ วันที่ 7 ตุลาคม 2026:

โมเดล อินพุต / 1M ภาพ 1K ภาพ 2K ภาพ 4K แบทช์ 1K
Nano Banana 2.1 $1.50 $0.0336 $0.0504 $0.0756 $0.0168
Nano Banana 2 $0.50 $0.067 $0.101 $0.151 $0.034
Nano Banana Pro $2.00 $0.134 $0.134 $0.24 $0.067

เอาต์พุตภาพของ 2.1 มีราคา $30 ต่อ 1 ล้านโทเค็น:

  • ภาพ 1K ใช้ 1,120 โทเค็น
  • ภาพ 2K ใช้ 1,680 โทเค็น
  • ภาพ 4K ใช้ 2,520 โทเค็น

เอาต์พุตข้อความและการคิดมีราคา $7.50 ต่อ 1 ล้านโทเค็น ส่วนการอ้างอิงผลการค้นหารวมคำขอฟรี 5,000 ครั้งต่อเดือนที่แชร์กันในโมเดล Gemini 3.x หลังจากนั้นคิด $14 ต่อ 1,000 ครั้ง

ตัวอย่างการคำนวณ: สร้างภาพผลิตภัณฑ์ 1,000 ภาพ ที่ความละเอียด 2K โดยใช้พรอมต์ข้อความสั้นประมาณ 100 input token ต่อภาพ

  • เอาต์พุต: 1,000 x $0.0504 = $50.40
  • อินพุต: 100,000 x $1.50 / 1M = $0.15
  • รวม: ประมาณ $50.55 บวกค่า token สำหรับข้อความการคิด หากมี

งานเดียวกันบน Nano Banana 2 มีค่าใช้จ่ายประมาณ $101 ผ่าน Batch API ราคา 2K ของ 2.1 ลดลงเหลือ $0.0252 ทำให้ค่าเอาต์พุตลดเหลือ $25.20 หากรับเวลาประมวลผลได้ งานแบบ Batch แลกเวลาสูงสุด 24 ชั่วโมงกับขีดจำกัดอัตราที่สูงขึ้นได้

อ่านรายละเอียดเพิ่มเติมได้ใน การวิเคราะห์การกำหนดราคา API ของ Nano Banana 2

ข้อผิดพลาดที่พบบ่อย

ตารางนี้ครอบคลุมพฤติกรรมทั่วไปของ Gemini API ไม่ใช่ข้อผิดพลาดที่บันทึกว่าเฉพาะเจาะจงกับ Nano Banana 2.1

ข้อผิดพลาด สาเหตุที่เป็นไปได้ การแก้ไข
400 INVALID_ARGUMENT image_size เป็นตัวพิมพ์เล็ก, อัตราส่วนไม่รองรับ, input ผิดรูปแบบ ใช้ 2K ไม่ใช่ 2k; ตรวจสอบรายการอัตราส่วนและ JSON
403 PERMISSION_DENIED คีย์ไม่ถูกต้อง หรือโปรเจกต์ไม่ได้เปิดใช้การเรียกเก็บเงิน ตรวจสอบคีย์และสถานะ billing ของโปรเจกต์
404 NOT_FOUND พิมพ์รหัสโมเดลผิด ใช้ gemini-nano-banana-2.1 ให้ถูกต้อง
429 RESOURCE_EXHAUSTED ถึงขีดจำกัดอัตราการใช้งาน รอสักครู่แล้วลองใหม่ หรือใช้ Batch
500 / 503 ปัญหาเซิร์ฟเวอร์ชั่วคราว ลองใหม่ด้วย Exponential Backoff
200 แต่ไม่มีภาพ พรอมต์ถูกบล็อก หรือคำตอบเป็นข้อความเท่านั้น ตั้งค่า "type": "image" และปรับคำสั่ง

ตัวอย่าง Exponential Backoff แบบง่ายใน Python:

import time

for attempt in range(5):
    try:
        interaction = client.interactions.create(
            model="gemini-nano-banana-2.1",
            input="Create a product photo of a ceramic mug",
        )
        break
    except Exception:
        if attempt == 4:
            raise

        time.sleep(2 ** attempt)
Enter fullscreen mode Exit fullscreen mode

คำถามที่พบบ่อย

มีบริการฟรีสำหรับ Nano Banana 2.1 API หรือไม่?

ไม่มี Google ระบุว่าบริการฟรีสำหรับ API นี้ “ไม่พร้อมใช้งาน” แม้ AI Studio playground จะเชื่อมโยงกับ 2.1 แต่ Google ยังไม่ได้เผยแพร่ขีดจำกัดฟรี

2.1 สามารถใช้แทน Nano Banana 2 ได้ทันทีหรือไม่?

ส่วนใหญ่ได้ เพียงเปลี่ยนรหัสโมเดลเป็น gemini-nano-banana-2.1 อย่างไรก็ตาม คุณจะเสียระดับ 512px และค่า input token สูงขึ้น ดังนั้นงานที่ใช้ภาพอ้างอิงจำนวนมากควรตรวจสอบต้นทุนก่อน

รูปภาพที่สร้างขึ้นมีลายน้ำหรือไม่?

มี เอาต์พุตทั้งหมดรวมลายน้ำ SynthID

ฉันสามารถสร้างภาพจากวิดีโอได้หรือไม่?

ได้ Nano Banana 2.1 รองรับบล็อกอินพุต video เช่น URL ของ YouTube ร่วมกับพรอมต์ข้อความ

คู่มือ API ของ Nano Banana 2 เดิมยังใช้ได้หรือไม่?

แนวคิดส่วนใหญ่ยังใช้ได้ ดู คู่มือ API ของ Nano Banana 2 สำหรับโมเดลรุ่นก่อนหน้า

สรุป

Nano Banana 2.1 ให้ภาพที่ดีขึ้นโดยมีราคาต่อภาพเพียงครึ่งหนึ่งของ Nano Banana 2 และยังใช้รูปแบบ Interactions API เดิม เริ่มจากสร้างคีย์ที่เปิดใช้ billing ทดสอบสร้างภาพหนึ่งภาพ แล้วบันทึกคำขอใน Apidog พร้อมการตรวจสอบสถานะและ image block

จากนั้นทำซ้ำคำขอเดิมโดยเปลี่ยนรหัสโมเดลเป็นรุ่นเก่า คุณจะเปรียบเทียบคุณภาพ ความเร็ว และต้นทุนของพรอมต์จริงได้ภายในเวลาไม่นาน

Top comments (0)