跳至內容
English
圖像生成

Nano Banana 圖像生成 ​

使用 Gemini 原生路由生成及編輯圖像。

本頁使用 Gemini 原生 generateContent 路由。請先確認帳戶的 Gemini 圖像模型已開通;不能把純文字模型直接用於生成圖片。

多語言 API 呼叫 ​

執行方式見多語言範例說明。先設定 API_KEY,並替換模型、檔案網址及 ID 占位值;四種方式會顯示相同請求的原始回應。

此處顯示 API 原始回應;圖片的 Base64 解碼、下載與保存請接續本頁或圖像概覽的完整流程。

bash
curl --fail-with-body --silent --show-error --max-time 180 \
  --request POST \
  --url "https://api.tokatlas.ai/v1beta/models/YOUR_ENABLED_GEMINI_IMAGE_MODEL_ID:generateContent" \
  --header "x-goog-api-key: $API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "A white ceramic cup on a pale gray background, studio lighting"
        }
      ]
    }
  ],
  "generationConfig": {
    "responseModalities": [
      "TEXT",
      "IMAGE"
    ]
  }
}'
python
import os
import requests

headers = {
    'x-goog-api-key': os.environ["API_KEY"],
    'Content-Type': 'application/json',
}
payload = {'contents': [{'role': 'user',
               'parts': [{'text': 'A white ceramic cup on a pale gray background, '
                                  'studio lighting'}]}],
 'generationConfig': {'responseModalities': ['TEXT', 'IMAGE']}}
response = requests.request(
    'POST', 'https://api.tokatlas.ai/v1beta/models/YOUR_ENABLED_GEMINI_IMAGE_MODEL_ID:generateContent', headers=headers,
    json=payload,
    timeout=180,
)
response.raise_for_status()
print(response.text)
js
if (!process.env.API_KEY) throw new Error("Set API_KEY first.");
const response = await fetch("https://api.tokatlas.ai/v1beta/models/YOUR_ENABLED_GEMINI_IMAGE_MODEL_ID:generateContent", {
  method: "POST",
  headers: {
    "x-goog-api-key": process.env.API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "A white ceramic cup on a pale gray background, studio lighting"
        }
      ]
    }
  ],
  "generationConfig": {
    "responseModalities": [
      "TEXT",
      "IMAGE"
    ]
  }
}),
  signal: AbortSignal.timeout(180_000),
});
if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}
console.log(await response.text());
java
import java.net.URI;
import java.net.http.*;
import java.time.Duration;

public class Example {
    public static void main(String[] args) throws Exception {
        String apiKey = System.getenv("API_KEY");
        if (apiKey == null || apiKey.isBlank()) {
            throw new IllegalArgumentException("Set API_KEY first.");
        }
        String payload = String.join("\n",
            "{",
            "  \"contents\": [",
            "    {",
            "      \"role\": \"user\",",
            "      \"parts\": [",
            "        {",
            "          \"text\": \"A white ceramic cup on a pale gray background, studio lighting\"",
            "        }",
            "      ]",
            "    }",
            "  ],",
            "  \"generationConfig\": {",
            "    \"responseModalities\": [",
            "      \"TEXT\",",
            "      \"IMAGE\"",
            "    ]",
            "  }",
            "}"
        );
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(30)).build();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.tokatlas.ai/v1beta/models/YOUR_ENABLED_GEMINI_IMAGE_MODEL_ID:generateContent"))
            .timeout(Duration.ofSeconds(180))
            .header("x-goog-api-key", apiKey)
            .header("Content-Type", "application/json")
            .method("POST", HttpRequest.BodyPublishers.ofString(payload))
            .build();
        HttpResponse<String> response = client.send(
            request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() < 200 || response.statusCode() >= 300) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": "
                + response.body());
        }
        System.out.println(response.body());
    }
}

模型選擇 ​

截至 2026-10-03,官方現行圖像型號包括 gemini-3.1-flash-image(Nano Banana 2)、gemini-3.1-flash-lite-image(Nano Banana 2 Lite)、gemini-3-pro-image(Nano Banana Pro)。從帳戶可用列表取得實際 ID;如果通道使用別名,請使用 Tokatlas 顯示的 ID。

1. 準備 ​

需要 Python 3。先替換金鑰及已開通的 Gemini 圖像模型 ID:

bash
python3 -m pip install requests
export API_KEY='YOUR_TOKATLAS_API_KEY'
export IMAGE_MODEL_ID='YOUR_ENABLED_GEMINI_IMAGE_MODEL_ID'

2. 生成並存檔 ​

儲存為 nano_banana.py,執行 python3 nano_banana.py。成功後會印出保存位置,並在目前目錄產生圖像。

python
import base64
import os
from pathlib import Path
from urllib.parse import quote
import requests

base = os.environ.get("API_BASE_URL", "https://api.tokatlas.ai").rstrip("/")
model = quote(os.environ["IMAGE_MODEL_ID"], safe="")
parts = [{"text": "A white ceramic cup on a pale gray background, studio lighting"}]
response = requests.post(
    f"{base}/v1beta/models/{model}:generateContent",
    headers={"x-goog-api-key": os.environ["API_KEY"]},
    json={"contents": [{"role": "user", "parts": parts}],
          "generationConfig": {"responseModalities": ["TEXT", "IMAGE"]}},
    timeout=180,
)
response.raise_for_status()
body = response.json()
count = 0
for candidate in body.get("candidates", []):
    for part in candidate.get("content", {}).get("parts", []):
        if part.get("text"):
            print(part["text"])
        inline = part.get("inlineData")
        if inline and inline.get("data"):
            extension = {"image/png": ".png", "image/jpeg": ".jpg",
                         "image/webp": ".webp"}.get(inline.get("mimeType"), ".image")
            path = Path(f"nano-banana-{count}{extension}")
            path.write_bytes(base64.b64decode(inline["data"], validate=True))
            print("Saved", path)
            count += 1
if not count:
    raise RuntimeError(f"No image returned; inspect candidate finish reasons and promptFeedback: {body}")

3. 編輯現有圖片 ​

依參考圖輸入將本機圖片加入 parts,並將文字改為明確的編輯指令。

排錯 ​

  • 404:確認完整模型 ID 與 /v1beta/models/{model}:generateContent 路徑。
  • 只有文字:檢查模型是否支援圖像輸出、responseModalities 及 promptFeedback/finishReason。
  • 400:先移除額外尺寸/畫質參數,使用本頁最小請求。不同型號的限制不能混用。
  • 同一提示再次生成不保證相同圖片;需要保留的細節請在編輯指令中寫清楚。

Google 官方圖像生成文件