Image
Nano Banana 2.1 (Gemini Nano Banana 2.1)
Tạo và chỉnh sửa ảnh với Nano Banana 2.1 qua một endpoint bất đồng bộ, dùng thân generateContent của Google: 1K đến 4K, mức suy nghĩ, 14 ảnh tham chiếu.
Nano Banana 2.1 là mô hình ảnh gemini-nano-banana-2.1 của Google, bản cập nhật của Nano Banana 2. Hãy gửi thân yêu cầu generateContent của Google kèm trường model, giữ lại ID tác vụ được trả về, rồi truy vấn tác vụ đó để lấy ảnh đã hoàn thành. Ảnh tham chiếu được đặt trong contents dưới dạng URL fileData.
ID mô hình
| ID mô hình | Cách tính phí |
|---|---|
gemini-nano-banana-2.1 | Một mức giá cố định cho mỗi ảnh được giao, như nhau ở mọi kích thước |
Xem giá hiện tại trên trang mô hình.
Ví dụ nhanh
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-nano-banana-2.1",
"contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
}
}'Endpoint
POST https://api.seedrouter.ai/v1/images/generations| Header | Giá trị |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Thân yêu cầu là yêu cầu generateContent của Google với một bổ sung duy nhất: model, vì endpoint này không chứa tên mô hình trong đường dẫn. Phản hồi chứa ID tác vụ, không phải ảnh đã hoàn thành. Hãy giữ khóa API trong mã phía máy chủ. Không hỗ trợ gọi trực tiếp /v1beta/models/...:generateContent; hãy dùng endpoint này.
Tham số
| Tên | Kiểu | Bắt buộc | Mặc định | Ghi chú |
|---|---|---|---|---|
model | string | Có | — | gemini-nano-banana-2.1. |
contents | Content[] | Có | — | Từ 1 đến 32 lượt. Mỗi lượt có parts và role tùy chọn (user hoặc model); lượt cuối cùng là user. |
contents[].parts[].text | string | — | — | Một phần văn bản. Cần ít nhất một phần văn bản. |
contents[].parts[].fileData | object | Không | — | {"mimeType": "...", "fileUri": "https://..."}; tham chiếu tới ảnh, video hoặc PDF. Tổng cộng tối đa 14. |
systemInstruction | object | Không | — | {"parts": [{"text": "..."}]}. |
safetySettings | object[] | Không | — | Các cặp {"category", "threshold"}; xem bên dưới. |
tools | object[] | Không | — | [{"googleSearch": {}}] để tìm kiếm web, hoặc {"googleSearch": {"searchTypes": {"webSearch": {}, "imageSearch": {}}}} với một hoặc cả hai loại. Ảnh được tạo dựa trên kết quả tìm kiếm theo thời gian thực; giá mỗi ảnh không đổi. |
generationConfig.responseModalities | enum[] | Không | văn bản và hình ảnh | ["IMAGE"] để chỉ nhận ảnh, hoặc ["TEXT", "IMAGE"]. |
generationConfig.imageConfig.aspectRatio | enum | Không | Tỷ lệ của ảnh đầu vào, nếu không có thì 1:1 | 1:1, 1:4, 4:1, 1:8, 8:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9. |
generationConfig.imageConfig.imageSize | enum | Không | 1K | 1K, 2K, 4K. Chữ K viết hoa. Mô hình này không có 512. |
generationConfig.candidateCount | integer | Không | 1 | Chỉ 1. Mỗi yêu cầu trả về một ảnh. |
generationConfig.temperature | number | Không | Mặc định của mô hình | Từ 0 đến 2. |
generationConfig.topP | number | Không | Mặc định của mô hình | Từ 0 đến 1. |
generationConfig.topK | integer | Không | Mặc định của mô hình | Từ 1 trở lên. |
generationConfig.seed | integer | Không | — | Số nguyên 32 bit. |
generationConfig.maxOutputTokens | integer | Không | Mặc định của mô hình | Từ 1 đến 32.768. |
generationConfig.stopSequences | string[] | Không | — | Tối đa 5. |
generationConfig.mediaResolution | enum | Không | Mặc định của mô hình | MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Quy định số token mà media đầu vào sử dụng. |
generationConfig.thinkingConfig.thinkingLevel | enum | Không | MEDIUM | MINIMAL, MEDIUM, HIGH. Mức độ mô hình suy luận trước khi vẽ; mức càng cao càng mất nhiều thời gian. |
generationConfig.thinkingConfig.includeThoughts | boolean | Không | false | Trả về bản tóm tắt suy luận của mô hình dưới dạng output.thoughts. |
Danh mục an toàn: HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. Ngưỡng: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.
Các trường không xác định sẽ bị từ chối. Chưa hỗ trợ: nội dung được lưu đệm và responseFormat; hãy đặt tỷ lệ và kích thước bằng imageConfig. Không chấp nhận inlineData; hãy truyền media dưới dạng URL fileData.
Kích thước đầu ra
imageSize | Đầu ra 1:1 | Token hình ảnh |
|---|---|---|
1K | 1024×1024 | 1.120 |
2K | 2048×2048 | 1.680 |
4K | 4096×4096 | 2.520 |
Các tỷ lệ khung hình khác giữ nguyên số token; ví dụ 16:9 ở 1K là 1376×768, và 21:9 ở 4K là 6336×2688.
Các chế độ
Không có tham số chế độ riêng hay endpoint chỉnh sửa riêng.
| Thao tác | Tham số |
|---|---|
| Văn bản thành ảnh | một phần văn bản |
| Chỉnh sửa hoặc ghép ảnh | phần văn bản + một hoặc nhiều phần fileData |
| Chỉnh sửa nhiều lượt | các lượt user và model trước đó, rồi một lượt user mới (xem ghi chú bên dưới) |
Để tiếp tục một cuộc hội thoại, hãy dựng lại lượt model từ output.parts của tác vụ trước, theo đúng thứ tự: một phần văn bản trở thành {"text": ..., "thoughtSignature": ...} và một phần hình ảnh trở thành {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. Giữ nguyên từng thoughtSignature đúng như khi được trả về: đó là URL của chữ ký mà chúng tôi lưu giúp bạn (chữ ký của một ảnh 4K nặng vài megabyte), và chúng tôi khôi phục nó trước khi yêu cầu đến mô hình. Chỉ chấp nhận chữ ký từ kết quả tác vụ của chính bạn.
Chỉnh sửa với ảnh tham chiếu
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-nano-banana-2.1",
"contents": [{
"role": "user",
"parts": [
{"text": "Turn this photo into a watercolor painting. Keep the composition."},
{"fileData": {"mimeType": "image/jpeg", "fileUri": "https://example.com/photo.jpg"}}
]
}]
}'Hãy thay URL ví dụ bằng ảnh của bạn mà hệ thống truy cập được.
Đầu vào media
API này chỉ nhận tham chiếu bằng URL. Không chấp nhận inlineData base64, URL data: và tải lên dạng multipart. Playground tải các tệp đã chọn lên kho lưu trữ trước, rồi mới gửi URL của chúng.
Tham chiếu phải là URL HTTP(S) công khai, mỗi tệp nhỏ hơn 50 MB và tổng cộng không quá 100 MB: ảnh (image/png, image/jpeg, image/webp, image/heic, image/heif), video (video/mp4, video/mpeg, video/mov, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp) hoặc tài liệu PDF (application/pdf). mimeType phải khớp với tệp. URL được tải về trong lúc xử lý; ảnh không truy cập được sẽ khiến tác vụ thất bại, và tác vụ thất bại không bị tính phí.
Các yếu tố chi phí
Hãy xem phần giá của mô hình để biết giá hiện tại. gemini-nano-banana-2.1 tính một mức giá cố định cho mỗi ảnh được giao, bất kể kích thước, mức suy nghĩ hay prompt.
Hãy xem chi phí cuối cùng trong lịch sử sử dụng của tài khoản. Tác vụ thất bại không bị tính phí.
Lược đồ đầu ra
Khi gửi, API trả về một tham chiếu tác vụ:
{
"id": "task_...",
"model": "gemini-nano-banana-2.1",
"status": "processing",
"created_at": 1790310979
}Truy vấn tác vụ
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Hãy truy vấn vài giây một lần cho đến khi status là completed hoặc failed. Hết thời gian mạng trong lúc truy vấn không có nghĩa là việc tạo ảnh đã thất bại: hãy giữ ID tác vụ và tiếp tục kiểm tra. Đừng tạo tác vụ khác chỉ để xem tiến độ.
Ví dụ truy vấn đầy đủ
Hãy chạy đoạn này sau ví dụ gửi bằng Python ở trên.
import time
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "completed":
for image in task["output"]["data"]:
print(image["url"])
break
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(3)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Tác vụ đã hoàn tất
{
"id": "task_...",
"model": "gemini-nano-banana-2.1",
"status": "completed",
"created_at": 1790310979,
"finished_at": 1790311001,
"output": {
"created": 1790310999,
"data": [{"url": "https://static.seedrouter.ai/media/tasks/task_example/0.jpg"}],
"output_format": "jpeg",
"usage": {
"input_tokens": 22,
"output_tokens": 2297,
"total_tokens": 2319
}
}
}| Trường | Ý nghĩa |
|---|---|
id | Hãy giữ ID này cho các lần truy vấn sau. |
status | processing, completed hoặc failed. |
created_at, finished_at | Dấu thời gian Unix tính bằng giây. |
output.data[].url | URL của ảnh đã tạo. |
output.text | Văn bản mô hình trả về kèm ảnh, khi responseModalities có TEXT. Không bao gồm phần suy luận. |
output.thoughts | Bản tóm tắt suy luận của mô hình, khi includeThoughts là true. Các ảnh trung gian mô hình vẽ trong lúc suy luận không được giao. |
output.grounding_metadata | Khi dùng Google Search: webSearchQueries, imageSearchQueries, searchEntryPoint.renderedContent (HTML Search Suggestions mà bạn bắt buộc phải hiển thị) và groundingChunks (nguồn), đúng như Google trả về. |
output.output_format | Định dạng ảnh thực tế. |
output.parts | Các phần phản hồi cuối cùng theo thứ tự, dùng cho chỉnh sửa nhiều lượt: {"text", "thoughtSignature"} hoặc {"image": <index into data>, "thoughtSignature"}. thoughtSignature là một URL; hãy gửi lại nguyên vẹn. |
output.usage | Mức sử dụng token. output_tokens tính cả đầu ra văn bản, suy luận và hình ảnh. |
error | Lỗi có cấu trúc của một tác vụ thất bại. |
Không hỗ trợ streaming (streamGenerateContent); kết quả được giao qua tác vụ.
Lỗi
Những yêu cầu bị từ chối trước khi tác vụ được tạo sẽ trả về lỗi HTTP kèm đối tượng error. Tác vụ thất bại sau khi đã được tiếp nhận sẽ trả về HTTP 200 khi truy vấn, kèm status: "failed" và một đối tượng error. Ảnh bị bộ lọc an toàn của mô hình chặn sẽ thất bại với content_policy_violation; phản hồi không có ảnh sẽ thất bại với no_output.
Hãy xem danh mục lỗi dùng chung để biết mã lỗi, mã trạng thái HTTP và hướng dẫn thử lại.
{
"id": "task_...",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}Nếu chính lần gửi bị hết thời gian chờ, hãy kiểm tra lịch sử tác vụ trước khi gửi lại: yêu cầu đầu tiên có thể đã được tiếp nhận.
Mẹo
- Hãy mô tả chủ thể, bối cảnh, ánh sáng và phong cách bằng câu hoàn chỉnh.
- Khi chỉnh sửa, hãy nêu rõ phần cần thay đổi và phần phải giữ nguyên.
- Giá như nhau ở mọi kích thước, nên hãy yêu cầu đúng kích thước bạn cần:
1Kcho bản nháp,2Khoặc4Kcho ảnh hoàn chỉnh. - Đặt chính xác những chữ bạn muốn hiển thị trong dấu ngoặc kép và giữ chúng ngắn gọn.
- Dùng mức suy nghĩ
MINIMALđể có bản nháp nhanh hơn vàHIGHcho bố cục dày đặc như infographic. - Hãy lưu ảnh trả về vào kho lưu trữ của riêng bạn nếu cần bản sao lâu dài.
