Руководство API
Nano Banana 2 API
Здесь показаны настройки API, которые сейчас использует YingTu. Пример не содержит ваш настоящий ключ.
Быстрый старт
- 1
Создайте или выберите LaoZhang API Key.
- 2
Скопируйте текущий ID модели и Python-пример.
- 3
Сделайте один небольшой запрос и проверьте ответ.
Параметры запроса
- Эндпоинт генерации
- POST /v1beta/models/gemini-3.1-flash-image:generateContent
- Эндпоинт редактирования
- POST /v1beta/models/gemini-3.1-flash-image:generateContent
- Базовый URL
- https://api2.laozhang.ai
- Авторизация
- Bearer API Key
- Семейство запроса
- Gemini native
- Референсные изображения
- Поддерживается
- Лимит референсов
- До 5 изображений в YingTu (не максимум провайдера)
- Статус проверки
- Пока не подтверждено — нет доступной даты проверки.
Пример на Python
Замените ключ-заглушку и свой промпт.
Пример генерации
export LAOZHANG_API_KEY="replace-with-your-key"
curl --fail-with-body --max-time 500 \
-X POST 'https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent' \
-H "Authorization: Bearer ${LAOZHANG_API_KEY}" \
-H "Content-Type: application/json" \
--data '{"contents":[{"parts":[{"text":"A clean product photo of a matte ceramic coffee mug on a light stone table, soft window light, natural shadows, minimal styling."}]}],"generationConfig":{"responseModalities":["IMAGE"],"imageConfig":{"imageSize":"2K"}}}'
# The JSON response can contain base64 image data or an image URL.
# If this request times out, check request and billing logs before retrying.Пример редактирования по референсу
import base64
import mimetypes
import os
import sys
import requests
API_KEY = os.environ.get("LAOZHANG_API_KEY")
if not API_KEY:
raise RuntimeError("Set the LAOZHANG_API_KEY environment variable before running this example.")
API_URL = "https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent"
REQUEST_TIMEOUT_SECONDS = 500
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
def encode_image(image_path):
mime_type = mimetypes.guess_type(image_path)[0] or "image/jpeg"
with open(image_path, "rb") as image_file:
data = base64.b64encode(image_file.read()).decode("ascii")
return {"mime_type": mime_type, "data": data}
reference_1 = encode_image("image_1.jpg") # Replace with your image path
payload = {
"contents": [{
"parts": [
{"text": "A clean product photo of a matte ceramic coffee mug on a light stone table, soft window light, natural shadows, minimal styling."},
{"inline_data": reference_1}
]
}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {
"imageSize": "2K"
}
}
}
try:
response = requests.post(
API_URL,
headers=headers,
json=payload,
timeout=REQUEST_TIMEOUT_SECONDS,
)
except requests.Timeout as error:
print(
"Request timed out after 500 seconds. The result status may be unknown; "
"check call and billing logs before retrying.",
file=sys.stderr,
)
raise SystemExit(1) from error
if response.status_code != 200:
print(f"API error {response.status_code}: {response.text}", file=sys.stderr)
raise SystemExit(1)
try:
result = response.json()
except ValueError as error:
print("API returned a non-JSON response.", file=sys.stderr)
raise SystemExit(1) from error
if not isinstance(result, dict):
print("API returned an unexpected JSON shape.", file=sys.stderr)
raise SystemExit(1)
image_part = None
for candidate in result.get("candidates", []):
for part in candidate.get("content", {}).get("parts", []):
inline_data = part.get("inlineData") or part.get("inline_data")
if inline_data and inline_data.get("data"):
image_part = inline_data
break
if image_part:
break
if not image_part:
response_id = result.get("responseId", "not provided")
print(f"No image data in response. responseId={response_id}", file=sys.stderr)
raise SystemExit(1)
mime_type = image_part.get("mimeType") or image_part.get("mime_type") or "image/png"
encoded_image = image_part["data"]
if encoded_image.startswith("data:"):
header, encoded_image = encoded_image.split(",", 1)
mime_type = header[5:].split(";", 1)[0] or mime_type
extension_by_mime = {
"image/jpeg": "jpg",
"image/png": "png",
"image/webp": "webp",
"image/gif": "gif",
}
extension = extension_by_mime.get(mime_type, "bin")
output_path = f"output.{extension}"
with open(output_path, "wb") as output_file:
output_file.write(base64.b64decode(encoded_image, validate=True))
print(f"Image saved: {output_path} ({mime_type})")
Параметры запроса
Поля соответствуют текущему клиенту YingTu и примерам кода.
- model
- Обязателен. Используйте точный ID модели с этой страницы.
- prompt
- Обязателен. Передайте инструкцию, но не API Key.
- настройки вывода
generationConfig.imageConfig.aspectRatioиimageSize; автоматическая пропорция не отправляется.- референсы
- Необязательно. До 5 файлов в браузере YingTu передаются как
contents[].parts[].inline_data.
Ответ и тайм-аут
- Ответ с изображением
- Клиент читает base64 из
candidates[].content.parts[].inlineDataилиinline_dataи сохраняет MIME-тип. - Ответ без изображения
- Отсутствие изображения не считается успехом. При наличии показываются причина блокировки, завершения или response ID.
Тайм-аут клиента: 500 секунд
Через 500 секунд текущий клиент YingTu прекращает ожидание; результат и списание могут оставаться неизвестными.
Без автоматического повтора
YingTu не повторяет запрос автоматически. Перед новым платным вызовом проверьте журналы запросов и списаний.
Типичные ошибки
- Аутентификация
- Проверьте ключ в переменной окружения и Bearer-заголовок.
- Доступ или баланс
- Проверьте в LaoZhang доступ к модели, баланс, биллинг и ограничения аккаунта.
- Лимит запросов
- Снизьте параллелизм и изучите сообщение провайдера или аккаунта.
- Нет изображения
- Проверьте причины блокировки и завершения, сообщение API и response ID.
- Тайм-аут
- Итог может быть неизвестен; проверьте журналы вызовов и списаний до повтора.
Известные ограничения
Проверьте эти пункты перед использованием результата.
- Проверьте реальные размеры загруженного файла.
- Проверьте идентичность, логотипы, упаковку, цвета и мелкие детали.
- Доступность и задержка могут меняться.
- Цены, баланс, доступ и списания уточняйте в LaoZhang.
Вопросы об API
Где хранить API Key?
Используйте переменную окружения из примера. Не сохраняйте ключ в коде, логах или промпте.
Тайм-аут означает ошибку?
Не всегда. После 500 секунд результат или списание могут быть неизвестны; проверьте журналы.
Лимит референсов задан провайдером?
Нет. Это текущий лимит браузера YingTu из реестра модели.
Где проверить цену и доступ?
Актуальные цена, баланс, доступ и списания находятся в аккаунте LaoZhang.
Цена и оплата
На странице указана справочная цена. Актуальные цена, баланс, доступ и списания находятся в аккаунте LaoZhang.
- ID модели
- gemini-3.1-flash-image
- Справочная цена
- $0.055/ вызов
- Размеры вывода
- 512 / 1K / 2K / 4K
- Формат API
- Gemini native
Проверить модель в студии
Эти настройки сейчас доступны в студии изображений.
YingTuLaoZhang