圖像生成
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:先移除額外尺寸/畫質參數,使用本頁最小請求。不同型號的限制不能混用。- 同一提示再次生成不保證相同圖片;需要保留的細節請在編輯指令中寫清楚。
