Google은 2026년 10월 6일 Nano Banana 2.1을 출시했으며, Gemini API에서 gemini-nano-banana-2.1 모델 ID로 호출할 수 있습니다. Nano Banana 2(Gemini 3.1 Flash Image)의 업데이트 버전으로, 더 나은 시각적 품질, 마스크 스타일 편집, 턴 간 더 강력한 캐릭터 일관성을 제공합니다. 또한 공개된 모든 해상도에서 Nano Banana 2보다 이미지당 비용이 절반입니다.
이 글에서는 빈 터미널에서 이미지 파일을 저장할 때까지의 전체 흐름을 다룹니다. 종횡비, 2K·4K 출력, 이미지 편집, 멀티턴 변경, 참조 이미지, 검색 접지, 비용까지 단계별로 확인합니다. 아래 요청은 모두 Apidog에 저장해 두면 Nano Banana 2.1과 현재 사용하는 모델을 반복 비교할 수 있습니다.
배경 지식이 필요하다면 Nano Banana 2.1이란 무엇인가를 먼저 참고하세요.
필요한 것
| 항목 | 값 |
|---|---|
| 기본 URL | https://generativelanguage.googleapis.com/v1beta |
| 인증 헤더 | x-goog-api-key: $GEMINI_API_KEY |
| 모델 ID | gemini-nano-banana-2.1 |
| 엔드포인트 | POST /v1beta/interactions |
| 해상도 | 1K(기본값), 2K, 4K |
| 입력 | 텍스트, 이미지(최대 14개 참조), 동영상 |
| Python SDK | pip install google-genai |
| JavaScript SDK | npm install @google/genai |
모든 예제는 Google의 2.1 이미지 생성 문서에서 사용하는 Interactions API를 기준으로 합니다.
1단계: Gemini API 키 받기
- Google AI Studio를 열고 로그인합니다.
- Get API key로 이동해 Google Cloud 프로젝트에서 키를 생성합니다.
- 해당 프로젝트에서 결제를 활성화합니다. Google 가격 페이지에서 Nano Banana 2.1의 무료 등급은 “사용 불가”로 표시되므로 API 호출에는 유료 프로젝트가 필요합니다.
- 키를 환경 변수로 내보냅니다.
export GEMINI_API_KEY="your-key-here"
Google은 AI Studio 플레이그라운드에서도 2.1을 제공하므로 프롬프트를 빠르게 시험할 수 있습니다. 다만 무료 계정에서 생성 가능한 횟수는 게시되지 않았습니다. 자세한 내용은 Nano Banana 2.1을 무료로 사용하는 방법과 Gemini API 키 받기를 참고하세요.
2단계: 첫 이미지 생성
curl로 요청 보내기
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"
}
]
}'
응답은 JSON이며, 생성 이미지는 이미지 콘텐츠 블록의 base64 데이터로 전달됩니다. curl만으로는 바로 파일로 저장하기 불편하므로 SDK 또는 디코딩 스크립트를 사용하는 편이 좋습니다.
Python으로 이미지 저장하기
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))
interaction.output_image는 마지막으로 생성된 이미지 블록을 반환합니다. data는 base64 문자열이므로 파일에 쓰기 전에 반드시 디코딩해야 합니다.
JavaScript로 이미지 저장하기
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"));
}
Gemini 3 이미지 모델은 그리기 전에 구도를 계획합니다. 이 과정에서 최대 두 개의 중간 “생각 이미지”가 생성될 수 있으며, 이에 대한 별도 요금은 부과되지 않습니다. API에서 생각 기능을 끄는 옵션은 없습니다.
3단계: 종횡비, 해상도, 이미지 전용 출력 설정
response_format으로 출력 형식을 제어합니다. "type": "image"를 지정하면 대화 텍스트 없이 이미지만 반환하므로 응답 크기가 줄고 파싱도 단순해집니다.
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",
},
)
구현 시 다음을 확인하세요.
-
image_size는1K,2K,4K만 허용합니다. 대문자K를 사용해야 하며2k같은 값은 거부됩니다. - Nano Banana 2.1에는 512px 계층이 없습니다. 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도 지원합니다. - 2K
16:9출력은 2752x1536, 4K16:9출력은 5504x3072입니다. - 텍스트와 이미지를 함께 받고 싶다면 목록 형태로 지정합니다.
response_format = [
{"type": "text"},
{"type": "image"},
]
4단계: 기존 이미지 편집
원본 이미지를 base64 image 블록으로 보내고, 텍스트 지침으로 변경 범위를 명확히 지정합니다.
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",
},
],
)
마스크 파일 없이 마스크 스타일 인페인팅
별도 마스크 파일을 업로드하는 방식은 아닙니다. 대신 프롬프트에서 변경 영역과 유지 영역을 정확히 정의합니다.
제공된 이미지를 사용하여 [특정 요소]만 [새 요소/설명]으로 변경합니다. 이미지의 나머지 모든 부분은 원래 스타일, 조명 및 구성을 유지하여 정확히 동일하게 유지합니다.
편집 프롬프트에는 다음 세 가지를 포함하세요.
- 변경할 요소를 하나로 좁힙니다.
- 대체할 요소의 재질, 색상, 스타일을 구체적으로 설명합니다.
- 변경하지 않을 영역을 다시 명시합니다.
예를 들어 “소파를 더 좋게 만들어라”처럼 모호하게 지시하면 모델이 방 전체를 다시 그릴 수 있습니다.
5단계: 멀티턴 편집으로 반복하기
이미지를 점진적으로 개선할 때는 멀티턴 편집을 사용합니다. 이전 상호작용의 id를 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",
},
)
REST 요청에서는 동일한 필드를 JSON 본문에 추가합니다.
{
"previous_interaction_id": "<PREVIOUS_INTERACTION_ID>"
}
이 방식은 캐릭터, 제품, 인포그래픽처럼 여러 차례 수정이 필요한 작업에 적합합니다. Nano Banana 2.1의 멀티턴 캐릭터 일관성은 여러 편집 라운드에서도 대상이 인식 가능하게 유지되는 것을 목표로 합니다.
6단계: 최대 14개의 참조 이미지 결합
input 목록에 image 블록을 추가하면 여러 참조 이미지를 하나의 생성 요청에 포함할 수 있습니다. Google 문서 기준으로 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",
},
)
참조 이미지는 입력 토큰으로 계산됩니다. 2.1의 입력 비용은 Nano Banana 2보다 3배 높으므로, 참조 이미지를 많이 쓰는 워크플로우에서는 실제 요청 기준으로 비용을 측정한 뒤 전환 여부를 결정해야 합니다.
7단계: Google 검색으로 이미지 접지
날씨 차트, 최근 이벤트 등 최신 사실에 의존하는 이미지를 만들 때는 검색 도구를 추가합니다.
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"],
}
],
)
-
{"type": "google_search"}만 지정하면 웹 검색을 사용합니다. -
image_search를 추가하면 모델이 웹 이미지를 시각적 컨텍스트로 활용할 수 있습니다. - 이 기능은 Nano Banana 2.1과 Nano Banana 2에서 지원됩니다.
- 접지 과정에서 검색된 실제 사람 이미지는 사용할 수 없습니다.
- 접지된 결과를 사용자에게 표시한다면
google_search_result단계에서 반환되는search_suggestions도 표시해야 합니다.
8단계: Apidog에서 테스트하기
스크립트는 자동 생성에 적합하지만, 프롬프트·키·모델 ID가 계속 동작하는지 빠르게 확인하려면 저장된 HTTP 요청이 편리합니다. Apidog에서 다음과 같이 구성하세요.
- 환경을 만들고
GEMINI_API_KEY변수를 추가합니다. - 새 요청을 생성합니다.
POST https://generativelanguage.googleapis.com/v1beta/interactions
- 헤더를 추가합니다.
x-goog-api-key: {{GEMINI_API_KEY}}
-
model,input,response_format이 포함된 JSON 본문을 붙여넣고 보내기(Send)를 클릭합니다. - 응답 후 스크립트에 상태 코드와 이미지 블록 검증을 추가합니다.
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((s) =>
s.type === "model_output" &&
(s.content || []).some((c) => c.type === "image" && c.data)
);
pm.expect(hasImage).to.be.true;
});
- 요청을 복제한 뒤
model만gemini-3.1-flash-image로 변경합니다. - 동일한 프롬프트로 두 요청을 실행해 상태 코드, 응답 시간, 응답 크기, 이미지 품질을 비교합니다.
더 넓은 기능 차이는 Nano Banana 2.1 vs Nano Banana 2 vs Pro에서 확인할 수 있습니다.
비용
2026년 10월 7일 Google 가격 페이지 기준 유료 등급은 다음과 같습니다.
| 모델 | 입력 / 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 |
Nano Banana 2.1의 이미지 출력 비용은 100만 토큰당 $30입니다.
- 1K 이미지: 1,120토큰
- 2K 이미지: 1,680토큰
- 4K 이미지: 2,520토큰
텍스트 및 생각 출력은 100만 토큰당 $7.50입니다. 검색 접지는 Gemini 3.x 모델 전체에서 공유되는 월 5,000건의 무료 요청을 포함하며, 초과 후에는 1,000건당 $14가 부과됩니다.
비용 계산 예시
짧은 텍스트 프롬프트(각각 약 100개 입력 토큰)로 2K 제품 이미지 1,000개를 생성한다고 가정합니다.
- 출력:
1,000 × $0.0504= $50.40 - 입력:
100,000 토큰 × $1.50 / 1M= $0.15 - 총계: 약 $50.55 생각 텍스트 토큰 비용은 추가될 수 있습니다.
Nano Banana 2에서 같은 작업은 약 $101입니다. 배치 API를 사용하면 2.1의 2K 가격은 $0.0252까지 낮아져 출력 비용은 $25.20이 됩니다. 대신 배치 작업은 최대 24시간의 처리 시간과 더 높은 속도 제한을 전제로 합니다.
Nano Banana 2 비용 세부 사항은 Nano Banana 2 API 가격 분석에서 확인할 수 있습니다.
일반적인 오류
다음은 일반적인 Gemini API 동작입니다. Nano Banana 2.1 전용 오류는 별도로 문서화되어 있지 않습니다.
| 오류 | 가능한 원인 | 해결책 |
|---|---|---|
400 INVALID_ARGUMENT |
소문자 image_size, 지원하지 않는 비율, 잘못된 input
|
2k 대신 2K 사용, 지원 비율 목록과 입력 구조 확인 |
403 PERMISSION_DENIED |
잘못된 키 또는 결제가 없는 프로젝트 | API 키 확인 및 결제 활성화 |
404 NOT_FOUND |
모델 ID 오타 |
gemini-nano-banana-2.1을 정확히 사용 |
429 RESOURCE_EXHAUSTED |
속도 제한 도달 | 잠시 기다린 뒤 재시도하거나 배치 사용 |
500 / 503
|
일시적 서버 문제 | 지수적 백오프로 재시도 |
| 200 응답이지만 이미지 없음 | 프롬프트 차단 또는 텍스트 전용 응답 |
response_format에 "type": "image" 지정, 프롬프트 문구 변경 |
지수적 백오프가 필요하다면 재시도 간격을 점진적으로 늘리세요.
import time
for attempt in range(5):
try:
interaction = client.interactions.create(
model="gemini-nano-banana-2.1",
input="A product photo of a ceramic mug on a wooden table",
)
break
except Exception:
time.sleep(2 ** attempt)
else:
raise RuntimeError("요청 재시도 횟수를 초과했습니다.")
자주 묻는 질문
Nano Banana 2.1 API에 무료 등급이 있나요?
아니요. Google은 API 무료 등급을 “사용 불가”로 표시합니다. AI Studio 플레이그라운드는 2.1에 연결되지만, Google은 해당 무료 한도를 게시하지 않았습니다.
2.1은 Nano Banana 2의 드롭인 대체품인가요?
대부분 그렇습니다. 모델 ID를 gemini-nano-banana-2.1로 교체하면 됩니다. 다만 512px 계층은 사라졌고 입력 토큰 비용이 더 비싸므로 참조 이미지가 많은 편집은 비용을 검토해야 합니다.
생성된 이미지에 워터마크가 있나요?
예. 모든 출력에는 SynthID 워터마크가 포함됩니다.
동영상에서 이미지를 생성할 수 있나요?
예. 2.1은 텍스트 프롬프트와 함께 YouTube URL 같은 video 입력 블록을 허용합니다.
이전 Nano Banana 2 API 가이드도 적용되나요?
개념은 대부분 동일합니다. 이전 모델 작업은 Nano Banana 2 API 가이드를 참고하세요.
요약
Nano Banana 2.1은 Nano Banana 2보다 이미지당 절반의 가격으로 더 나은 이미지를 목표로 하며, 동일한 Interactions API 구조를 유지합니다.
구현 순서는 간단합니다.
- 결제가 활성화된 Gemini API 키를 준비합니다.
-
gemini-nano-banana-2.1로 이미지 하나를 생성합니다. -
response_format으로 해상도와 종횡비를 지정합니다. - 기존 이미지 편집에는 이미지 블록과 구체적인 유지 조건을 함께 보냅니다.
- 반복 편집에는
previous_interaction_id를 사용합니다. - Apidog에 요청과 이미지 검증 어설션을 저장합니다.
- 동일 요청을 이전 모델 ID로 복제해 품질, 시간, 응답 크기, 비용을 비교합니다.
Top comments (0)