Hình ảnh
Tạo hình ảnh
Tạo hình ảnh dựa trên một câu lệnh (prompt)
Tổng quan
Sử dụng GET /v1/models?recommended_for=image để lấy các model hình ảnh hiện tại, sau đó gửi model đã chọn một cách tường minh.
gpt-image-2 là một model GPT Image tính phí theo token. TokenLab tuân theo bảng phân bổ sử dụng chính thức của OpenAI cho đầu vào văn bản, đầu vào hình ảnh, đầu vào được lưu trong bộ nhớ đệm (cached input) và token đầu ra hình ảnh; model này không được tính phí cố định theo mỗi hình ảnh.
Đối với việc tạo hình ảnh bằng gpt-image-2, các tham số công khai được hỗ trợ bao gồm prompt, n, size, quality, response_format, async, background, output_format, output_compression hoặc compression, moderation và user. background chấp nhận giá trị auto hoặc opaque; transparent không được hỗ trợ. Hãy bỏ qua size hoặc quality để TokenLab sử dụng giá trị auto; các giá trị size tùy chỉnh phải tuân theo hợp đồng WIDTHxHEIGHT linh hoạt được ghi lại bên dưới.
input_fidelity không nằm trong các trường được TokenLab hỗ trợ hiện tại cho gpt-image-2; hãy bỏ qua tham số này nếu không yêu cầu sẽ trả về lỗi 400 unsupported_parameter.
Lưu ý về hành vi của Model
Các model thuộc dòng hình ảnh Google Gemini không chia sẻ cùng một hợp đồng chọn model:
gemini-3.1-flash-image,gemini-nano-banana-2.1,gemini-3-pro-image,nano-banana-2.1vànano-banana-prohỗ trợaspect_ratiocộng vớiresolution(1k,2k,4k) cho các thao tác text-to-image, image-to-image và image-edit công khai.nano-banana-2hỗ trợaspect_ratiovàresolution(1k,2k,4k) cho cả tạo hình ảnh từ văn bản (text-to-image) và từ hình ảnh (image-to-image).gemini-3.1-flash-lite-imagevànano-banana-2-litehỗ trợ text-to-image, image-to-image và image-edit chỉ ở độ phân giải1k.nano-bananahỗ trợaspect_rationhưng không hiển thị lựa chọnresolutioncông khai.- Đối với image-to-image với
gemini-3.1-flash-image,gemini-nano-banana-2.1,gemini-3.1-flash-lite-imagehoặcgemini-3-pro-image, hãy sử dụng endpoint này vớioperation: "image-to-image"và các hình ảnh tham chiếu. Gửi các yêu cầu image-edit cho các model này đến/v1/images/edits. - Đối với các yêu cầu hình ảnh tham chiếu Nano Banana, hãy sử dụng
nano-banana-2,nano-banana-2.1,nano-banana-2-litehoặcnano-banana-protrên endpoint này (/v1/images/generations) vớioperation: "image-to-image"vàimage_urls. Các yêu cầu image-edit chonano-banana-2,nano-banana-2.1,nano-banana-2-litevànano-banana-procũng sử dụng endpoint này, vớioperation: "image-edit". Không gửi các yêu cầu hình ảnh tham chiếu Nano Banana đến/v1/images/edits. - Hình ảnh tham chiếu trên endpoint này có thể được cung cấp dưới dạng JSON
image_url/image_urls, hoặc dưới dạng tệp multipartimage.images[]vàfile_idkhông được chấp nhận trên/v1/images/generations; chỉ tạo các tham chiếu/v1/filescho các model/v1/images/editscó tài liệu ghi nhậnimages[].file_id.
Đối với các dòng hình ảnh Google, hãy ưu tiên sử dụng aspect_ratio và chỉ gửi resolution khi model hỗ trợ rõ ràng.
Các model hình ảnh xAI Grok Imagine (grok-imagine-image, grok-imagine-image-2.0 và model cũ grok-imagine-image-pro) hỗ trợ aspect_ratio cộng với resolution (1k, 2k). grok-imagine-image-pro được giữ lại như một ID tương thích cho grok-imagine-image-2.0.
Phần thân yêu cầu
Thời gian chờ yêu cầu đồng bộ (Synchronous request timeout): Một số yêu cầu hình ảnh trả về hình ảnh cuối cùng ngay lập tức và chờ quá trình tạo hoàn tất. Các yêu cầu có độ phân giải cao hoặc chất lượng cao có thể mất gần một phút hoặc lâu hơn, vì vậy hãy đặt thời gian chờ (timeout) của HTTP client của bạn ít nhất là 120s. Nếu phản hồi tạo hình ảnh bao gồm status: "pending", task_id hoặc poll_url, hãy làm theo poll_url được trả về.
Model cần sử dụng (ví dụ: gpt-image-2, flux-pro-1.1 hoặc nano-banana-pro). Truy vấn GET /v1/models?recommended_for=image để xem danh sách khuyến nghị hiện tại.
Mô tả văn bản về hình ảnh mong muốn.
URL hình ảnh tham chiếu HTTPS công khai cho việc tạo image-to-image. Đối với các yêu cầu hình ảnh tham chiếu Nano Banana, hãy đặt operation thành image-to-image; nano-banana-pro có thể bao gồm resolution.
Các URL hình ảnh tham chiếu HTTPS công khai. Sử dụng trường này cho một hoặc nhiều hình ảnh tham chiếu trong các yêu cầu JSON. file_id và images[] không được hỗ trợ trên endpoint này.
Các URL hình ảnh tham chiếu bổ sung cho các model phân biệt giữa đầu vào chính và các tham chiếu.
Tệp hình ảnh tham chiếu multipart cho việc tạo image-to-image. Sử dụng trường này khi hình ảnh nguồn là riêng tư hoặc được bảo vệ bởi header. Trường này khác với file_id của /v1/files, vốn không được chấp nhận trên endpoint này.
1Số lượng hình ảnh cần tạo (1-10, tùy thuộc vào model).
Kích thước hình ảnh. Sử dụng trường này cho các dòng hình ảnh kiểu OpenAI và các model khác chấp nhận kích thước pixel chính xác.
Đối với gpt-image-2, size chấp nhận auto hoặc WIDTHxHEIGHT. Các kích thước tùy chỉnh phải là bội số của 16, cạnh dài nhất tối đa là 3840px, tỷ lệ cạnh dài/ngắn tối đa là 3:1 và tổng số pixel phải nằm trong khoảng từ 655,360 đến 8,294,400. aspect_ratio và resolution không nằm trong chi tiết model TokenLab hiện tại cho gpt-image-2.
Đối với các model hình ảnh Google có các cấp độ phân giải (gemini-3.1-flash-image, gemini-nano-banana-2.1, gemini-3-pro-image, gemini-3.1-flash-lite-image, nano-banana-2, nano-banana-2.1 và nano-banana-pro), size chấp nhận kích thước đầu ra từ bảng kích thước của model, chẳng hạn như 1376x768 (16:9 ở 1K), hoặc một cấp độ phân giải: 1K, 2K hoặc 4K. TokenLab gửi một cấp độ dưới dạng resolution, vì vậy yêu cầu và giá của nó giống như khi sử dụng resolution. Một cấp độ mà model không hỗ trợ (ví dụ 2K trên gemini-3.1-flash-lite-image), hoặc một cấp độ khác với resolution, sẽ trả về lỗi 400 với mã invalid_image_size_contract và các allowed_resolutions của model. Đối với các model này, định dạng được khuyến nghị là aspect_ratio với resolution.
Bộ chọn tỷ lệ khung hình phụ thuộc vào model.
Các giá trị phổ biến của dòng hình ảnh Google bao gồm 1:1, 16:9, 9:16, 3:2 và 2:3.
Độ phân giải đầu ra phụ thuộc vào model. gemini-3.1-flash-image, gemini-nano-banana-2.1, gemini-3-pro-image, nano-banana-2, nano-banana-2.1 và nano-banana-pro hỗ trợ 1k, 2k và 4k; các model hình ảnh Grok Imagine hỗ trợ 1k và 2k. Hãy bỏ qua trường này trừ khi model và thao tác được chọn hỗ trợ rõ ràng.
Chất lượng hình ảnh. Các model GPT Image như gpt-image-2 sử dụng auto, low, medium hoặc high. Các model khác có thể sử dụng các giá trị khác; hãy kiểm tra chi tiết model trước khi gửi một giá trị không phải mặc định.
Cách thức trả về hình ảnh: url hoặc b64_json.
- Bỏ qua: khi model trả về byte hình ảnh, mỗi hình ảnh sẽ nằm trong
data[].b64_json, và cũng nằm trongdata[].urlkhi TokenLab đã lưu trữ nó. Khi model trả về một liên kết, mỗi hình ảnh sẽ nằm trongdata[].url. url: mỗi hình ảnh chỉ nằm trongdata[].url.b64_json: mỗi hình ảnh chỉ nằm trongdata[].b64_jsondưới dạng dữ liệu Base64.
Các liên kết là URL kết quả phương tiện của TokenLab. Chúng có hiệu lực trong 30 ngày. Xem Lưu trữ dữ liệu.
falseĐặt thành true với gpt-image-2 hoặc các model hình ảnh FLUX/BFL chính thức để tạo tác vụ trước. Các tác vụ hình ảnh async đã hoàn thành sẽ trả về URL bất kể response_format được yêu cầu; hãy sử dụng các yêu cầu đồng bộ khi bạn cần b64_json.
Bộ chọn phong cách tùy chọn. Chỉ gửi trường này khi model được chọn ghi lại rõ ràng; hãy bỏ qua nó đối với gpt-image-2 trừ khi siêu dữ liệu model có quy định khác.
Một định danh duy nhất cho người dùng cuối.
Phản hồi
Phản hồi nội tuyến (Inline Response)
Dấu thời gian Unix của thời điểm tạo.
Mảng các hình ảnh đã tạo.
Mỗi đối tượng chứa:
url(string): URL kết quả phương tiện của TokenLab cho hình ảnh, có hiệu lực trong 30 ngày. Không có mặt khiresponse_formatlàb64_json. Khiresponse_formatbị bỏ qua, trường này sẽ thiếu nếu TokenLab không thể lưu trữ hình ảnh.b64_json(string): Dữ liệu hình ảnh Base64. Có mặt khiresponse_formatlàb64_json, hoặc khi trường này bị bỏ qua và model trả về byte hình ảnh.revised_prompt(string): Bản sửa đổi câu lệnh tùy chọn, khi model được chọn trả về một bản sửa đổi.
Phản hồi tác vụ Async (Async Task Response)
Đặt async: true với gpt-image-2 hoặc các model hình ảnh FLUX/BFL chính thức để tạo một tác vụ thay vì chờ đợi hình ảnh cuối cùng trong yêu cầu tạo. Phản hồi bao gồm status: "pending", task_id và poll_url. Hãy thăm dò (poll) /v1/tasks/{task_id} cho đến khi tác vụ đạt trạng thái completed hoặc failed.
Các tác vụ hình ảnh async chỉ trả về URL hình ảnh cuối cùng. Nếu bạn cần dữ liệu hình ảnh b64_json thô, hãy sử dụng yêu cầu đồng bộ.
Việc thanh toán có thể giữ trước số tiền ước tính khi tác vụ được tạo. Các tác vụ đã hoàn thành được tính phí theo mức sử dụng thực tế, và các tác vụ thất bại hoặc hết thời gian chờ sẽ được hoàn lại hoặc hủy bỏ.
Dấu thời gian Unix của thời điểm tạo.
Định danh tác vụ duy nhất để thăm dò.
Trạng thái ban đầu: pending.
URL tương đối để thăm dò kết quả, ví dụ /v1/tasks/{id}.
Trống trong khi tác vụ đang chờ xử lý. Các tác vụ hình ảnh đã hoàn thành trả về URL hình ảnh đã tạo trong data[].url.
Khi bạn nhận được status: "pending", hãy sử dụng poll_url hoặc GET /v1/tasks/{task_id} để truy xuất kết quả.
Yêu cầu
curl -X POST "https://api.tokenlab.sh/v1/images/generations" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3-pro-image",
"prompt": "A cinematic portrait of a white cat sitting on a rainy windowsill",
"aspect_ratio": "16:9",
"resolution": "2k"
}'from openai import OpenAI
client = OpenAI(
api_key="sk-your-api-key",
base_url="https://api.tokenlab.sh/v1"
)
response = client.images.generate(
model="gemini-3-pro-image",
prompt="A cinematic portrait of a white cat sitting on a rainy windowsill",
extra_body={"aspect_ratio": "16:9", "resolution": "2k"}
)
print(response.data[0].url)import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'sk-your-api-key',
baseURL: 'https://api.tokenlab.sh/v1'
});
const response = await client.images.generate({
model: 'gemini-3-pro-image',
prompt: 'A cinematic portrait of a white cat sitting on a rainy windowsill',
aspect_ratio: '16:9',
resolution: '2k'
});
console.log(response.data[0].url);<?php
$ch = curl_init('https://api.tokenlab.sh/v1/images/generations');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer sk-your-api-key'
],
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gemini-3-pro-image',
'prompt' => 'A cinematic portrait of a white cat sitting on a rainy windowsill',
'aspect_ratio' => '16:9',
'resolution' => '2k'
])
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
echo $data['data'][0]['url'];Ví dụ về dòng hình ảnh chỉ sử dụng tỷ lệ: đối với nano-banana, gửi aspect_ratio nhưng bỏ qua resolution:
{
"model": "nano-banana",
"prompt": "A clean editorial product shot of a citrus soda can",
"aspect_ratio": "16:9"
}Ví dụ về hình ảnh tham chiếu Nano Banana Pro: gửi yêu cầu đến /v1/images/generations, không phải /v1/images/edits. resolution là tùy chọn và có thể được đặt thành 1k, 2k hoặc 4k:
{
"model": "nano-banana-pro",
"prompt": "Create a clean cinematic character image based on the reference images",
"operation": "image-to-image",
"image_urls": ["https://example.com/reference-1.png"],
"aspect_ratio": "1:1",
"resolution": "2k"
}Ví dụ tải lên multipart trực tiếp cho hình ảnh nguồn riêng tư hoặc cục bộ. Không chuyển file_id đến /v1/images/generations:
curl -X POST "https://api.tokenlab.sh/v1/images/generations" \
-H "Authorization: Bearer sk-your-api-key" \
-F "model=nano-banana-pro" \
-F "prompt=Create a clean cinematic character image based on this reference" \
-F "operation=image-to-image" \
-F "image=@reference.png" \
-F "aspect_ratio=1:1" \
-F "resolution=2k"Phản hồi
{
"created": 1706000000,
"data": [
{
"url": "https://...",
"revised_prompt": "A fluffy white cat with bright eyes sitting peacefully on a wooden windowsill, watching raindrops stream down the glass window..."
}
]
}Chọn một Model
Truy vấn GET /v1/models?recommended_for=image hoặc sử dụng trang Models để biết tính khả dụng, khả năng và giá cả hiện tại.
Không nên mã hóa cứng (hard-code) một model là luôn đồng bộ hoặc luôn bất đồng bộ. Nếu phản hồi tạo hình ảnh trả về status: "pending", hãy làm theo poll_url và thăm dò cho đến khi hoàn tất.
Xử lý các phản hồi dựa trên tác vụ
Đối với các model hình ảnh, luôn kiểm tra xem phản hồi có chứa status: "pending" / status: "processing" hay không:
import requests
import time
def generate_image(prompt, model="gpt-image-2"):
# Tạo yêu cầu hình ảnh
response = requests.post(
"https://api.tokenlab.sh/v1/images/generations",
headers={"Authorization": "Bearer sk-your-api-key"},
json={"model": model, "prompt": prompt, "async": True},
timeout=120
)
response.raise_for_status()
data = response.json()
# Kiểm tra xem có dựa trên tác vụ không
if data.get("status") in ("pending", "processing"):
task_id = data["task_id"]
poll_url = data.get("poll_url")
print(f"Image task started: {task_id}")
# Thăm dò kết quả
while True:
status_resp = requests.get(
f"https://api.tokenlab.sh{poll_url}" if poll_url else f"https://api.tokenlab.sh/v1/tasks/{task_id}",
headers={"Authorization": "Bearer sk-your-api-key"},
timeout=30
)
status_resp.raise_for_status()
status_data = status_resp.json()
if status_data["status"] == "completed":
return status_data["data"][0]["url"]
elif status_data["status"] == "failed":
raise Exception(status_data.get("error", "Generation failed"))
time.sleep(3)
else:
# Phản hồi nội tuyến
return data["data"][0]["url"]
# Sử dụng
url = generate_image("a beautiful sunset over mountains", model="gpt-image-2")
print(f"Generated image: {url}")Hy Image 3.5 Preview tạo ra các hình ảnh vuông 1024-pixel từ văn bản và chỉnh sửa hình ảnh tham chiếu bằng các hướng dẫn bằng văn bản. Model này hữu ích cho việc phác thảo hình ảnh và tinh chỉnh bố cục.
{
"model": "hy-image-v3.5-preview",
"prompt": "A yellow lemon on a white table",
"size": "1024x1024",
"n": 1,
"response_format": "url"
}Xác thực
BearerAuth Xác thực bằng Khóa API. Tạo hoặc quản lý khóa API trong Dashboard > API > API Keys.
Vị trí: header
Header
Chính sách phân phối theo yêu cầu. Ghi đè các mặc định của API key và Workspace. Tự động thử TokenLab Verified trước và có thể chuyển đổi một lần sang Official chỉ trước khi xuất, chấp nhận yêu cầu hoặc tạo tài nguyên cố định.
Giá trị hợp lệ
- "auto"
- "verified"
- "official"
Phản hồi
application/json
application/json
application/json
application/json
application/json
application/json
application/json