Как склеить два изображения в одно с пониманием контекста: 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

How to Configure Claude Code with CC Switch and Ace Data Cloud

How to Build a Server-Side Image Editing Workflow with GPT-Image-2