> ## Documentation Index
> Fetch the complete documentation index at: https://docs.laozhang.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Nano Banana 2 API 가격과 사용법: 이미지 생성·편집

> Google 계정 없이 LaoZhang API 키로 gemini-3.1-flash-image를 호출합니다. 512px~4K 호출당 $0.055, 종횡비 14종, 바로 실행할 수 있는 코드를 제공합니다.

Nano Banana 2는 이미지 속 텍스트를 안정적으로 렌더링하고 여러 참조 이미지를 잘 합성하며, Nano Banana 모델 중 유일하게 512px 미리보기 크기를 제공합니다.

## Nano Banana 2 지원 범위

| 항목 | 내용 |
| - | - |
| 모델 ID | `gemini-3.1-flash-image`(안정 버전), Google Gemini 3.1 Flash Image |
| 가격 | 512px부터 4K까지 **호출당 \$0.055**, 생성과 편집 동일 |
| 계정 | Google 계정 불필요, LaoZhang API 키만 있으면 됨 |
| 엔드포인트 | Gemini 네이티브 `generateContent`는 종횡비와 출력 크기를 지정할 수 있고, OpenAI 호환 chat completions에는 종횡비·크기 설정이 없음 |
| 동시 요청과 속도 제한 | 플랫폼 차원의 동시 요청 제한과 스로틀링 없음. `429`는 업스트림 용량 때문에 발생하며, [동시 요청과 429](https://docs.laozhang.ai/ko/faq/api-concurrency.md) 참고 |
| 과금 | HTTP 200 응답은 이미지가 없어도 한 번 과금되고, 200이 아닌 응답은 과금되지 않음. [Nano Banana 개요](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-image.md)의 과금 절 참고 |

공개 가격은 2026년 9월 24일 기준이며, 최신 가격은 [AI 모델 API 가격표](https://docs.laozhang.ai/ko/models.md)에서 볼 수 있습니다. 이 모델은 Google 공식 채널에서 제공되며, 1K~~4K 이미지는 Google 표준 가격(1K \$0.067, 2K \$0.101, 4K \$0.151)보다 저렴합니다. 1K~~4K만 필요하다면 같은 요청을 받는 [Nano Banana 2.1](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-2-1-image.md)이 호출당 \$0.045입니다.

![Nano Banana 2로 생성한, 등불 아래 손글씨 NOODLES 간판이 걸린 야시장 음식 노점](https://mintcdn.com/laozhangai-edd05f2c/YuJHjB7ivlJQODe0/images/samples/nb2-en-generate.jpg?fit=max\&auto=format\&n=YuJHjB7ivlJQODe0\&q=85\&s=7d354f14a97893f8b3386acd4203cf74)

아래 생성 예제의 출력: 2K, 16:9. 프롬프트: Generate an image of a night market food stall with a hand-painted sign that reads "NOODLES", warm lantern light.

### 파라미터와 제한

| 파라미터 | 값 |
| - | - |
| 출력 크기 `imageSize` | `512`, `1K`(기본값), `2K`, `4K` |
| 종횡비 `aspectRatio` | Gemini 네이티브 경로에서 14종: `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` |
| 참조 이미지 | 최대 14장: 객체 이미지 최대 10장, 인물 일관성을 위한 캐릭터 이미지 최대 4장 |
| 사고(thinking) | `minimal`(기본값) 또는 `high`. 모델이 렌더링하기 전에 프롬프트를 먼저 추론 |
| Google 검색 그라운딩 | 웹 검색과 이미지 검색 |

Google은 [지원 중단 페이지](https://ai.google.dev/gemini-api/docs/deprecations)에서 `gemini-3.1-flash-image-preview`를 2026년 6월 25일에 종료했다고 밝혔습니다. LaoZhang API에서는 `-preview` ID가 대응하는 안정 ID로 매핑되지만, 안정 ID인 `gemini-3.1-flash-image`를 직접 사용하세요. 다섯 가지 Nano Banana 모델을 모두 비교하려면 [Nano Banana 개요](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-image.md)를 참고하세요.

## 호출 전 준비

**1. API 키 발급**

[토큰 관리](https://api.laozhang.ai/token)에서 토큰 생성(创建令牌) 창을 열고, **과금 방식**(计费模式)을 **사용량 우선**(按量优先, 권장) 또는 **건당 과금**(按次计费)으로 설정한 뒤 **생성**(创建)을 클릭합니다. Nano Banana 2에는 호출당 가격만 있어 사용량 과금(按量计费) 키로는 호출할 수 없습니다. 요청이 언제 과금되는지는 [Nano Banana 개요](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-image.md)의 과금 절에서 설명합니다.

![LaoZhang API 콘솔의 토큰 생성 창. 과금 방식이 건당 과금(按次计费)으로 설정되어 있음](https://mintcdn.com/laozhangai-edd05f2c/_loZ0Jy0ZI__xJ9z/images/token-create-per-request.png?fit=max\&auto=format\&n=_loZ0Jy0ZI__xJ9z\&q=85\&s=1fdceb804bb3ad50f83a21ec65b4d807)

**2. 키 설정과 의존성 설치**

```bash theme={null}
export LAOZHANG_API_KEY="sk-..."  # LaoZhang API 키로 바꾸세요
python -m pip install openai requests
```

**3. cURL용 저장 함수 추가**

cURL 예제에는 `jq`가 필요합니다. 아래 셸 함수를 정의해 두면 Gemini 네이티브 응답의 마지막 이미지(중간 이미지가 함께 오더라도 최종 결과)를 `mimeType`에 맞는 확장자로 저장합니다.

```bash theme={null}
save_image() {
  local image='[.candidates[]?.content.parts[]? | select(.inlineData and (.thought | not))][-1].inlineData'
  local ext
  case "$(jq -r "$image.mimeType" "$1")" in
    image/png) ext=png ;;
    image/jpeg) ext=jpg ;;
    image/webp) ext=webp ;;
    *) jq '{error, promptFeedback, finishReasons: [.candidates[]?.finishReason]}' "$1"; return 1 ;;
  esac
  jq -r "$image.data" "$1" | base64 --decode > "$2.$ext" && echo "저장됨: $2.$ext"
}
```

응답에 이미지가 없으면 이 함수는 대신 `error`, `promptFeedback`, `finishReason` 필드를 출력합니다.

## 이미지 생성

> [tab] cURL
>
> ```bash theme={null}
> curl --fail-with-body --max-time 300 \
>   "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "contents": [{
>       "role": "user",
>       "parts": [{"text": "Generate an image of a night market food stall with a hand-painted sign that reads \"NOODLES\", warm lantern light."}]
>     }],
>     "generationConfig": {
>       "responseModalities": ["IMAGE"],
>       "imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
>     }
>   }' \
>   -o nb2-response.json
>
> save_image nb2-response.json nb2-night-market
> ```

> [tab] Python
>
> 아래 스크립트를 `nano_banana_2.py`로 저장하세요. 프롬프트로 이미지를 생성하거나, 프롬프트 뒤에 적은 이미지를 편집합니다.
>
> ```python theme={null}
> """Nano Banana 2(gemini-3.1-flash-image)로 이미지를 생성하거나 편집합니다."""
> import argparse
> import base64
> import os
> import sys
> from pathlib import Path
>
> import requests
>
> URL = "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent"
> RATIOS = ["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"]
> SIZES = ["512", "1K", "2K", "4K"]
> MIME_TYPES = {".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp"}
> EXTENSIONS = {"image/png": "png", "image/jpeg": "jpg", "image/webp": "webp"}
>
> parser = argparse.ArgumentParser(description="이미지를 생성하거나, 전달한 이미지를 편집합니다.")
> parser.add_argument("prompt")
> parser.add_argument("images", nargs="*", help="참조 이미지(PNG, JPEG, WebP) 최대 14장")
> parser.add_argument("--ratio", choices=RATIOS, help="종횡비. 생략하면 1:1이거나 입력 이미지를 따릅니다")
> parser.add_argument("--size", default="1K", choices=SIZES)
> parser.add_argument("--out", default="nano-banana-2", help="확장자를 뺀 출력 파일 이름")
> args = parser.parse_args()
> if len(args.images) > 14:
>     sys.exit("참조 이미지는 최대 14장까지 보낼 수 있습니다.")
>
> parts = [{"text": args.prompt}]
> for path in args.images:
>     mime = MIME_TYPES.get(Path(path).suffix.lower())
>     if mime is None:
>         sys.exit(f"PNG, JPEG, WebP 파일을 사용하세요: {path}")
>     data = base64.b64encode(Path(path).read_bytes()).decode("ascii")
>     parts.append({"inlineData": {"mimeType": mime, "data": data}})
>
> image_config = {"imageSize": args.size}
> if args.ratio:
>     image_config["aspectRatio"] = args.ratio
>
> response = requests.post(
>     URL,
>     headers={"Authorization": f"Bearer {os.environ['LAOZHANG_API_KEY']}"},
>     json={
>         "contents": [{"role": "user", "parts": parts}],
>         "generationConfig": {"responseModalities": ["IMAGE"], "imageConfig": image_config},
>     },
>     timeout=300,
> )
> if response.status_code != 200:
>     sys.exit(f"HTTP {response.status_code}: {response.text[:500]}")
>
> result = response.json()
> images = [
>     part["inlineData"]
>     for candidate in result.get("candidates") or []
>     for part in (candidate.get("content") or {}).get("parts") or []
>     if "inlineData" in part and not part.get("thought")
> ]
> if not images:
>     reasons = [candidate.get("finishReason") for candidate in result.get("candidates") or []]
>     sys.exit(f"반환된 이미지가 없습니다: {result.get('promptFeedback') or reasons}")
> for number, image in enumerate(images, start=1):
>     suffix = "" if number == 1 else f"-{number}"
>     output = Path(f"{args.out}{suffix}.{EXTENSIONS.get(image['mimeType'], 'bin')}")
>     output.write_bytes(base64.b64decode(image["data"]))
>     print("저장됨:", output)
> ```
>
> 4K, 16:9 이미지를 생성합니다.
>
> ```bash theme={null}
> python nano_banana_2.py "Generate an image of a night market food stall with a hand-painted sign that reads \"NOODLES\", warm lantern light." --ratio 16:9 --size 4K --out nb2-night-market
> ```

이미지는 `candidates[0].content.parts[].inlineData.data`에 Base64로 들어 있고, 형식은 `mimeType`으로 알 수 있습니다. 두 예제 모두 이를 디코딩해 형식에 맞는 PNG, JPEG, WebP 파일로 저장합니다.

크기가 클수록 렌더링 시간이 길어지므로 클라이언트 타임아웃을 넉넉하게 잡으세요. 예제는 300초까지 기다립니다.

### 출력 크기

`imageSize`는 `512`부터 `4K`까지 네 가지 값을 받으며, K는 대문자로 씁니다. 기본값은 `1K`입니다. Google이 공개한 Nano Banana 2의 픽셀 크기는 다음과 같습니다.

| 종횡비 | 1K | 2K | 4K |
| - | - | - | - |
| 1:1 | 1024×1024 | 2048×2048 | 4096×4096 |
| 1:4 | 512×2048 | 1024×4096 | 2048×8192 |
| 1:8 | 384×3072 | 768×6144 | 1536×12288 |
| 2:3 | 848×1264 | 1696×2528 | 3392×5056 |
| 3:2 | 1264×848 | 2528×1696 | 5056×3392 |
| 3:4 | 896×1200 | 1792×2400 | 3584×4800 |
| 4:1 | 2048×512 | 4096×1024 | 8192×2048 |
| 4:3 | 1200×896 | 2400×1792 | 4800×3584 |
| 4:5 | 928×1152 | 1856×2304 | 3712×4608 |
| 5:4 | 1152×928 | 2304×1856 | 4608×3712 |
| 8:1 | 3072×384 | 6144×768 | 12288×1536 |
| 9:16 | 768×1376 | 1536×2752 | 3072×5504 |
| 16:9 | 1376×768 | 2752×1536 | 5504×3072 |
| 21:9 | 1584×672 | 3168×1344 | 6336×2688 |

`512`에서 1:1 이미지는 512×512입니다. 다른 512px 크기는 Google의 [이미지 생성 가이드](https://ai.google.dev/gemini-api/docs/image-generation)에서 확인하세요.

## 이미지 편집

지시문을 먼저 보내고, 참조 이미지를 `inlineData` 파트로 이어서 보냅니다. 프롬프트에서는 이미지를 순서대로 "첫 번째 이미지", "두 번째 이미지"처럼 가리키세요. Nano Banana 2는 참조 이미지를 최대 14장 받으며, 객체 이미지는 최대 10장, 캐릭터 이미지는 최대 4장입니다.

> [tab] cURL
>
> 로컬 파일 두 개를 합성하는 요청입니다. 큰 이미지가 셸 인자 길이 제한을 넘지 않도록 `jq`로 본문을 만들고, 각 `mimeType`이 파일과 일치하는지 확인하세요.
>
> ```bash theme={null}
> base64 < product.png | tr -d '\n' > product.b64
> base64 < scene.jpg | tr -d '\n' > scene.b64
> jq -n --rawfile product product.b64 --rawfile scene scene.b64 '{
>   contents: [{
>     role: "user",
>     parts: [
>       {text: "첫 번째 이미지의 제품을 두 번째 이미지의 테이블 위에 놓아 주세요. 장면의 조명에 맞추고 제품 라벨이 읽히도록 유지하세요."},
>       {inlineData: {mimeType: "image/png", data: $product}},
>       {inlineData: {mimeType: "image/jpeg", data: $scene}}
>     ]
>   }],
>   generationConfig: {
>     responseModalities: ["IMAGE"],
>     imageConfig: {aspectRatio: "3:2", imageSize: "2K"}
>   }
> }' > nb2-edit-request.json
>
> curl --fail-with-body --max-time 300 \
>   "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "Content-Type: application/json" \
>   --data-binary @nb2-edit-request.json \
>   -o nb2-edit-response.json
>
> save_image nb2-edit-response.json nb2-product-scene
> ```

> [tab] Python
>
> 위 이미지 생성 절의 `nano_banana_2.py`를 쓰고, 프롬프트 뒤에 파일을 나열하세요.
>
> ```bash theme={null}
> # 이미지 한 장 편집
> python nano_banana_2.py "이 낮 거리 사진을 네온이 비치는 비 오는 밤 장면으로 바꿔 주세요. 건물은 그대로 유지하세요." street.jpg --ratio 3:2 --size 2K --out nb2-street
>
> # 참조 이미지 세 장 합성: 제품, 장면, 분위기를 정할 세 번째 이미지
> python nano_banana_2.py "첫 번째 이미지의 제품을 두 번째 이미지의 테이블 위에 놓고, 세 번째 이미지의 화풍으로 그려 주세요." product.png scene.jpg style.jpg --ratio 3:2 --size 2K --out nb2-composite
> ```

바뀌지 않아야 할 부분을 분명히 쓰고, 정밀하게 제어하려면 요청마다 변경 사항을 하나씩만 설명하세요. 연작에서 인물을 일관되게 유지하려면 인물 사진을 캐릭터 참조(최대 4장)로 넘기세요.

Base64로 인코딩한 이미지를 포함해 요청 본문 전체를 20MB 이내로 유지하세요. 참조 이미지가 크거나 이미 CDN에 있다면, 그 이미지의 `inlineData` 파트를 URL을 담은 `fileData` 파트로 바꿉니다.

```json theme={null}
{"fileData": {"mimeType": "image/jpeg", "fileUri": "https://cdn.example.com/your-photo.jpg"}}
```

서버가 이미지를 내려받으므로 URL은 로그인 없이 접근할 수 있어야 합니다. 전체 조건은 [Nano Banana 개요](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-image.md)의 큰 이미지와 이미지 URL 절에 있습니다.

## Google 검색으로 이미지 그라운딩

일기 예보나 최근 결과처럼 최신 정보를 바탕으로 이미지를 만들려면 `googleSearch` 도구를 추가하세요. 모델이 이미지와 함께 쓴 텍스트도 받으려면 `responseModalities`에 `TEXT`를 허용합니다.

```bash theme={null}
curl --fail-with-body --max-time 300 \
  "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent" \
  -H "Authorization: Bearer $LAOZHANG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"role": "user", "parts": [{"text": "현재 도쿄의 5일간 일기 예보를 인포그래픽 이미지로 생성해 주세요."}]}],
    "tools": [{"googleSearch": {}}],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
    }
  }' \
  -o nb2-grounded-response.json

save_image nb2-grounded-response.json nb2-tokyo-weather
jq -r '.candidates[0].content.parts[] | select(.text) | .text' nb2-grounded-response.json
```

Nano Banana 모델 중 Google 이미지 검색 결과까지 시각 참조로 쓸 수 있는 것은 Nano Banana 2와 Nano Banana 2.1뿐입니다. 켜는 방법은 아래 자주 묻는 질문에 있습니다. 그라운딩 결과를 최종 사용자에게 보여 준다면 Google의 [그라운딩 가이드](https://ai.google.dev/gemini-api/docs/google-search)에 따라 검색 제안을 표시하세요.

## OpenAI 호환 경로 사용

앱이 이미 OpenAI SDK를 쓴다면 chat completions로 Nano Banana 2를 호출할 수 있습니다. 이 경로에는 종횡비와 크기 설정이 없어서, 텍스트만 보낸 프롬프트는 1K 1:1 이미지를 반환합니다. 이미지는 `message.content` 안에 Base64 데이터 URL로 들어옵니다.

아래 스크립트를 `nano_banana_2_chat.py`로 저장하세요.

```python theme={null}
"""OpenAI 호환 경로로 Nano Banana 2 이미지를 생성하거나 편집합니다."""
import argparse
import base64
import os
import re
import sys
from pathlib import Path

from openai import OpenAI

MIME_TYPES = {".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp"}
EXTENSIONS = {"png": "png", "jpeg": "jpg", "jpg": "jpg", "webp": "webp"}

parser = argparse.ArgumentParser(description="이미지를 생성하거나, 전달한 이미지를 편집합니다.")
parser.add_argument("prompt")
parser.add_argument("images", nargs="*", help="편집할 이미지(PNG, JPEG, WebP)")
parser.add_argument("--out", default="nano-banana-2-chat", help="확장자를 뺀 출력 파일 이름")
args = parser.parse_args()

content = args.prompt
if args.images:  # 편집: 지시문과 로컬 이미지를 데이터 URL로 보냅니다
    content = [{"type": "text", "text": args.prompt}]
    for path in args.images:
        mime = MIME_TYPES.get(Path(path).suffix.lower())
        if mime is None:
            sys.exit(f"PNG, JPEG, WebP 파일을 사용하세요: {path}")
        encoded = base64.b64encode(Path(path).read_bytes()).decode("ascii")
        content.append({"type": "image_url", "image_url": {"url": f"data:{mime};base64,{encoded}"}})

# max_retries=0: 타임아웃 뒤 자동 재시도하면 이미지가 두 번 생성되어 두 번 과금될 수 있습니다
client = OpenAI(api_key=os.environ["LAOZHANG_API_KEY"], base_url="https://api.laozhang.ai/v1", timeout=300, max_retries=0)
reply = client.chat.completions.create(
    model="gemini-3.1-flash-image",
    messages=[{"role": "user", "content": content}],
)
text = reply.choices[0].message.content or ""

found = re.findall(r"data:image/(png|jpe?g|webp);base64,([A-Za-z0-9+/=]+)", text)
if not found:
    sys.exit(f"반환된 이미지가 없습니다: {text[:300]}")
for number, (kind, encoded) in enumerate(found, start=1):
    suffix = "" if number == 1 else f"-{number}"
    output = Path(f"{args.out}{suffix}.{EXTENSIONS[kind]}")
    output.write_bytes(base64.b64decode(encoded + "=" * (-len(encoded) % 4)))
    print("저장됨:", output)
```

이미지를 생성한 다음 로컬 파일을 편집합니다.

```bash theme={null}
python nano_banana_2_chat.py "비 내리는 거리에 떠 있는 종이배 이미지를 생성해 주세요. 반사광은 부드럽게." --out nb2-chat-boat
python nano_banana_2_chat.py "이 사진을 반 고흐 스타일의 유화로 바꿔 주세요. 구도는 유지하세요." photo.jpg --out nb2-chat-painting
```

## 오류와 과금

다음 목록에 있는 값을 보내세요.

| 필드 | 허용 값 |
| - | - |
| `aspectRatio` | 위 14종 중 하나 |
| `imageSize` | `512`, `1K`, `2K`, `4K` |

* `1:4`, `4:1`, `1:8`, `8:1` 종횡비는 Nano Banana 2와 Nano Banana 2.1에서만 동작합니다.
* Google은 `2k`처럼 소문자로 쓴 크기를 거부합니다.
* 프롬프트가 이미지를 요청하지 않았거나 안전 검사가 출력을 차단한 경우처럼, 이미지 없이 HTTP 200이 반환될 수 있습니다. 이때도 한 번 과금됩니다. `finishReason`(있으면 `promptFeedback`도)을 확인하고 프롬프트나 참조 이미지를 바꾼 뒤 다시 보내세요. [Nano Banana 개요](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-image.md)의 빈 응답 과금 피하기 절을 참고하세요.
* HTTP 401은 키나 `Authorization: Bearer` 헤더가 잘못되었다는 뜻입니다. 429와 5xx는 백오프를 두고 재시도하고, 타임아웃이 난 요청은 다시 보내기 전에 호출 로그를 확인하세요.

[Nano Banana 개요](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-image.md)의 과금 규칙은 모든 Nano Banana 모델에 똑같이 적용됩니다.

## 자주 묻는 질문

### 512px 이미지는 어떻게 요청하나요?

Gemini 네이티브 경로에서 `generationConfig.imageConfig.imageSize`를 문자열 `512`로 설정하세요. 이 값은 Nano Banana 2만 받습니다. 다른 값은 위 출력 크기 절에 있습니다.

### 사고 수준은 어떻게 바꾸나요? 가격에 영향이 있나요?

Nano Banana 2와 Nano Banana 2 Lite는 지연 시간과 품질을 맞바꿀 수 있는 두 가지 사고 수준, `minimal`(기본값)과 `high`를 지원하며 LaoZhang API는 이 설정을 그대로 전달합니다. Gemini 네이티브 경로에서는 `generationConfig.thinkingConfig.thinkingLevel`에 설정합니다. 예를 들면 `"thinkingConfig": {"thinkingLevel": "high"}`입니다.

사고 수준은 가격에 영향을 주지 않습니다. LaoZhang API는 호출 단위로만 과금하므로 `high` 요청도 Nano Banana 2의 호출당 가격 그대로입니다(Google 자체 과금에서는 사고 토큰이 추가로 붙습니다). Nano Banana Pro는 항상 사고하며 수준을 바꿀 수 없습니다.

### 이미지 검색 그라운딩은 어떻게 켜고, 제한은 무엇인가요?

위 Google 검색으로 이미지 그라운딩 절의 Google 검색 도구에 `searchTypes`를 추가하고, `webSearch`와 `imageSearch`를 모두 나열하세요.

```json theme={null}
"tools": [{"googleSearch": {"searchTypes": {"webSearch": {}, "imageSearch": {}}}}]
```

Google의 [generateContent 레퍼런스](https://ai.google.dev/api/generate-content)에 따르면 다음과 같습니다.

* `searchTypes`가 없는 도구는 웹 검색만 쓰고, `imageSearch`만 넣으면 이미지 검색만 씁니다.
* 위처럼 두 유형을 모두 나열하면 둘 다 쓸 수 있으며, 검색 여부와 유형은 모델이 정합니다.
* `searchTypes`는 객체여야 하며 배열로 보내면 효과가 없습니다. 이미지 검색을 쓰면 응답의 `groundingMetadata`에 `imageSearchQueries`가 들어갑니다.

Google이 밝힌 제한은 다음과 같습니다.

* 이미지 검색 그라운딩은 Nano Banana 2와 Nano Banana 2.1만 지원합니다.
* 웹 검색으로 찾은 실제 인물 이미지는 현재 쓸 수 없습니다.
* 그라운딩 결과를 최종 사용자에게 보여 줄 때는 검색 제안을 표시해야 합니다.

그라운딩 요청은 호출당 가격에 검색 1회당 \$0.014가 추가됩니다. 검색 횟수는 모델이 정하며 호출 로그에서 확인할 수 있습니다. [Nano Banana 개요](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-image.md)의 과금 절을 참고하세요.

## 관련 페이지와 출처

* [Nano Banana 개요](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-image.md) — 5종 모델, 두 프로토콜, 과금 비교
* [Nano Banana 2.1](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-2-1-image.md) — 더 낮은 호출당 가격으로 1K\~4K를 제공하는 새 버전
* [Nano Banana 2 Lite](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-2-lite-api.md) — 저비용 1K 이미지
* [Nano Banana Pro](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-pro-image.md) — 복잡한 레이아웃과 브랜드 핵심 에셋
* [Standard 편집](https://docs.laozhang.ai/ko/api-capabilities/nano-banana-image-edit.md) — `gemini-2.5-flash-image` 편집을 Nano Banana 2로 옮기기
* [Google: Nano Banana image generation](https://ai.google.dev/gemini-api/docs/image-generation) — 크기, 종횡비, 참조 이미지 제한, 사고, 그라운딩
* [Google: generateContent 레퍼런스](https://ai.google.dev/api/generate-content) — `imageConfig`, `thinkingConfig`, Google 검색 도구 필드
* [Google: Gemini API 지원 중단](https://ai.google.dev/gemini-api/docs/deprecations) — 업스트림 모델 종료 일정
* [호출 로그](https://docs.laozhang.ai/en/faq/call-logs.md) — 요청별 상태와 청구 금액 확인


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.