Как склеить два изображения в одно с пониманием контекста: Nano Banana API

Большинство text-to-image моделей умеют рисовать с нуля, но плохо справляются с задачей "возьми объект с одной картинки и естественно помести его на другую". Nano Banana — сервис на базе мультимодальной модели Gemini от Google — заточен именно под это: он реально понимает содержимое переданных изображений, а не просто накладывает пиксели друг на друга. Разберём, как подключить генерацию и редактирование изображений через REST API Ace Data Cloud.

Что умеет Nano Banana

Сервис решает три типовые задачи разработчика:

  • Text-to-image — генерация изображения по текстовому описанию.
  • Image editing — редактирование одного изображения по инструкции (убрать водяной знак, заменить фон, дорисовать деталь).
  • Multi-image composition — если передать несколько изображений одновременно, модель понимает связи между ними и может, например, "переставить телефон с первого фото на стол со второго фото, подстроив угол и освещение".

Под капотом — модель Google Gemini с сильными способностями к пониманию изображений, доступны версии nano-banana, nano-banana-2, nano-banana-2-lite и nano-banana-pro с разным качеством и ценой за изображение.

Получение API-токена

Прежде чем звать API, нужен токен Ace Data Cloud:

  • Зарегистрируйтесь на платформе Ace Data Cloud — доступны GitHub, Google, e-mail или телефон. При регистрации начисляются бесплатные кредиты.
  • После входа токен виден прямо на главной странице личного кабинета — скопируйте его одним кликом.
  • Когда кредиты закончатся, пополнить баланс можно в разделе Console → Applications.

Один токен открывает доступ ко всем сервисам платформы — Nano Banana, Suno, Veo, Flux и другим — отдельная регистрация на каждый сервис не нужна.

Вызов API напрямую через curl

Endpoint для генерации и редактирования — один и тот же: POST /nano-banana/images. Модель и режим работы определяются телом запроса.

curl -X POST https://api.acedata.cloud/nano-banana/images \
  -H "Authorization: Bearer ВАШ_ТОКЕН" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "prompt": "Небольшой динозавр сидит у трещины в земле и смотрит вниз, стиль иллюстрации для страницы 404",
    "n": 1
  }'

Для редактирования уже существующего изображения (или композиции из нескольких) достаточно добавить массив URL исходных изображений и текстовую инструкцию:

curl -X POST https://api.acedata.cloud/nano-banana/images \
  -H "Authorization: Bearer ВАШ_ТОКЕН" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "prompt": "Перенеси телефон с первого изображения на стол со второго изображения, подбери угол и освещение так, чтобы выглядело естественно",
    "image_urls": [
      "https://example.com/phone.jpg",
      "https://example.com/desk.jpg"
    ]
  }'

Задачи обрабатываются асинхронно: ответ содержит идентификатор задачи, статус которой можно проверить через POST /nano-banana/tasks, передав туда task_id из первого ответа. Опрос бесплатный — тарифицируется только сама генерация.

Пример на Python

import requests
import time

TOKEN = "ВАШ_ТОКЕН"
HEADERS = {
    "Authorization": f"Bearer {TOKEN}",
    "Content-Type": "application/json",
}

def generate_image(prompt, model="nano-banana-pro", image_urls=None):
    payload = {"model": model, "prompt": prompt, "n": 1}
    if image_urls:
        payload["image_urls"] = image_urls
    resp = requests.post(
        "https://api.acedata.cloud/nano-banana/images",
        headers=HEADERS,
        json=payload,
        timeout=60,
    )
    resp.raise_for_status()
    return resp.json()

def check_task(task_id):
    resp = requests.post(
        "https://api.acedata.cloud/nano-banana/tasks",
        headers=HEADERS,
        json={"task_id": task_id},
        timeout=30,
    )
    resp.raise_for_status()
    return resp.json()

result = generate_image(
    "Убери водяной знак в правом нижнем углу изображения, заполнив фон",
    image_urls=["https://example.com/screenshot.png"],
)
task_id = result.get("task_id")

if task_id:
    for _ in range(20):
        status = check_task(task_id)
        if status.get("state") == "completed":
            print("Готово:", status.get("data"))
            break
        time.sleep(3)
else:
    print("Результат готов сразу:", result.get("data"))

Практические заметки

  • Модели :official — прямой доступ к оригинальным весам Google по официальному прайсу, тогда как базовые nano-banana/nano-banana-2/nano-banana-pro дешевле за счёт оптимизации инфраструктуры.
  • Разрешение (resolution: 1k / 2k / 4k) влияет на стоимость только для :official-моделей — учитывайте это при батчевой генерации большого объёма картинок.
  • Для мультимодальных инструкций формулируйте промпт максимально конкретно: указывайте, какой объект с какого изображения переносится и куда, а также желаемое освещение/ракурс — это заметно улучшает результат по сравнению с общими фразами.
  • Один и тот же токен работает для REST API, для MCP-серверов (если вы интегрируете модель в Claude Code, Cursor или другой агентский инструмент) и для остальных сервисов платформы — переключаться между ними можно без повторной настройки авторизации.

Оплата и масштабирование

Расход считается в кредитах за изображение и зависит от модели и разрешения. Пополнить баланс приложения можно картой, а для международных команд без банковской карты доступна оплата в USDC по протоколу X402 (сети Solana и Base) — с фиксированной скидкой 5% от суммы пополнения. Оформление пополнения и выбор способа оплаты — в разделе Console → Applications.

Полную документацию по всем параметрам запроса, доступным моделям и форматам ответа можно найти на странице Ace Data Cloud Documents.

Comments

Popular posts from this blog

Artistic QR Code API Integration Guidance

A Small Tip for Using AI Agents: Don’t Ask for the Plan Too Soon