Сколько стоят 10 000 картинок: считаем бюджет на генерацию
Как посчитать бюджет на генерацию картинок через API: формула «картинки × цена», примеры для большого месячного объёма на разных моделях и разрешениях, неудачные запросы вне счёта и шаблон расчёта по ценам вашего аккаунта.
Редакция RendergridО редакции
Коротко
Бюджет на генерацию — это сумма строк «картинки × цена». Цена зависит от модели и разрешения, поэтому передавайте resolution в каждом запросе: без него картинка рисуется и оплачивается в разрешении по умолчанию. В счёт попадают только готовые картинки: сумма списывается при приёме запроса и сразу возвращается, если картинки нет. Примеры для 10 000 картинок в месяц — ниже, шаблон расчёта по ценам вашего аккаунта — в конце.
Из чего складывается бюджет на генерацию?
Бюджет складывается из строк. В каждой — модель, разрешение и число картинок, а сумма строки считается так: «сумма = картинки × цена». Цену берите в каталоге своего аккаунта: он показывает цены с учётом ваших договорённостей.
Корневое поле price в ответе каталога — цена самого дешёвого разрешения модели, а не цена вашей картинки. Берите цену выбранного разрешения из variants.
Цена зависит от модели и разрешения: смотрите её в каталоге или на странице цен. Если resolution не указан, картинка рисуется и оплачивается в разрешении по умолчанию — для Nano Banana Pro, Nano Banana 2 и Nano Banana 2.1 это 2K.
Какие запросы попадают в счёт?
Сумма списывается при приёме запроса, до начала работы. Если картинки нет, сумма возвращается сама и сразу: неудачный запрос бесплатен. Так же устроен отказ по правилам содержания: он приходит заданием со статусом failed, и сумма возвращается. Поэтому отдельная строка на неудачные запросы не нужна — считайте готовые картинки.
Готовая картинка оплачена, даже если вам не подошла. Если часть кадров придётся делать заново, добавьте их к числу картинок в расчёте. Как возврат выглядит в ответе API, показано в статье «Неудачный запрос бесплатен: как устроена оплата за картинку».
Сколько стоят 10 000 картинок в месяц?
Допустим, вы делаете 10 000 картинок в месяц. Это условный объём. В первой таблице весь объём идёт на одну модель в одном разрешении, во второй — делится между тремя моделями.
| Параметр | Nano Banana Flash | Nano Banana 2.1 | Nano Banana Pro | Источник |
|---|---|---|---|---|
| Разрешение | 1K | 2K | 4K | Допущение статьи |
| Картинок в месяц | 10 000 | 10 000 | 10 000 | Допущение статьи |
| Цена за картинку | $0,015 | $0,03 | $0,07 | Каталог Rendergrid |
Сумма каждого столбца — 10 000 × цена из этого столбца. Готовых сумм здесь нет: цены в каталоге могут измениться.
| Параметр | Nano Banana Flash | Nano Banana 2.1 | Nano Banana Pro | Источник |
|---|---|---|---|---|
| Разрешение | 1K | 2K | 4K | Допущение статьи |
| Картинок в месяц | 5 000 | 4 000 | 1 000 | Допущение статьи |
| Цена за картинку | $0,015 | $0,03 | $0,07 | Каталог Rendergrid |
Сумма = 5 000 × цена Nano Banana Flash в 1K + 4 000 × цена Nano Banana 2.1 в 2K + 1 000 × цена Nano Banana Pro в 4K.
Цены одной модели по разрешениям — в статьях «Nano Banana 2.1 API: цена за картинку в 1K, 2K и 4K» и «Nano Banana Pro API: цена за картинку у Google и в Rendergrid».
Как выглядят картинки из этих примеров?
Для столбцов первой таблицы мы сделали по одной картинке. Промпты у них разные, попытка одна, поэтому кадры не сравнивают ни модели, ни разрешения.
Промпт картинки в 1K
Один кремовый прямоугольный брусок мыла на бледно-голубой бумажной площадке. Ракурс три четверти, скруглённые края, мягкий свет слева и короткая тень. Минимальная композиция: мыло целиком в центре, гладкий фон и широкие свободные поля. Без надписей, логотипов, людей и водяных знаков.
Nano Banana Flash
nano-banana-flash · 1K · 1:1 · $0,015
Nano Banana Flash, 1K, 1:1, одна попытка. Мыло целиком в центре, фон гладкий, надписей нет. Бумага скорее серо-голубая, чем бледно-голубая, и упирается в левый и правый края кадра. Короткая тень от мыла почти не видна.
Промпт картинки в 2K
Кремовый прямоугольный брусок мыла рядом со сложенным белым полотенцем на бледно-голубой площадке. Ракурс три четверти, мягкий свет слева, видны гладкие края мыла и петли ткани. Оба предмета полностью помещаются в кадре, композиция спокойная и свободная. Без надписей, логотипов, людей и водяных знаков.
Nano Banana 2.1
nano-banana-2.1 · 2K · 1:1 · $0,03
Nano Banana 2.1, 2K, 1:1, одна попытка. Мыло с гладкими гранями стоит слева внизу, сложенное полотенце с видимыми петлями ткани — справа. Полотенце доходит до правого края кадра, хотя в промпте оба предмета должны помещаться целиком. Вверху — серая размытая полоса фона.
Промпт картинки в 4K
Кремовый прямоугольный брусок мыла на прозрачной стеклянной мыльнице, рядом мягкие складки белого полотенца. Основа бледно-голубая, ракурс три четверти, свет слева. Покажите тонкую кромку стекла, отражения и петли ткани. Вся группа целиком по центру, широкие свободные края. Без надписей, логотипов, людей и водяных знаков.
Nano Banana Pro
nano-banana-pro · 4K · 1:1 · $0,07
Nano Banana Pro, 4K, 1:1, одна попытка. Мыло и мыльница целиком по центру, у стекла видна тонкая кромка с бликами, у ткани — петли. Полотенце уходит за левый и правый края кадра, а в промпте просили широкие свободные края. Надписей нет.
Как не выйти за бюджет?
Задайте месячный лимит трат: на весь аккаунт — в личном кабинете, в разделе «Баланс и пополнение», или на один ключ — в разделе «Ключи API». Месяц считается календарным, по UTC. Когда лимит исчерпан, новые генерации не принимаются: запрос получает 402 с кодом ERR_INSUFFICIENT_BALANCE, а с баланса ничего не списывается. Возврат за неудачную картинку освобождает сумму. Подробнее — в документации по лимитам.
Где этот расчёт не подходит?
- 10 000 — допущение. Это объём из названия статьи, а не трафик Rendergrid и не чей-то аккаунт. Подставьте свой.
- Расчёт не выбирает модель. Он считает деньги, а не качество: проверяйте модель на своих промптах.
- Цены меняются. Повышение цены объявляют за 7 дней, снижение действует сразу. Пересчитайте бюджет, когда цены изменятся.
- Налоги не входят. Цены указаны без налогов: налоги вы платите сами (условия использования).
- Пополнение — отдельный вопрос. Его условия в расчёт не входят: они в разделе «Пополнение USDT» документации.
Как посчитать бюджет по ценам своего аккаунта?
Шаблон читает каталог вашего аккаунта, берёт цену выбранного разрешения из variants и умножает её на ваши числа. Запрос каталога ничего не списывает. Команда curl только получает каталог, а Python и Node.js считают сумму. Модели и числа в шаблоне условные — подставьте свои. Если цены для пары нет, шаблон останавливается: отсутствие цены не равно нулю.
curl --fail-with-body --max-time 20 \ "https://api.rendergrid.io/ api/ public/ v1/ models?category=image" \ -H "Authorization: Bearer $RENDERGRID_API_KEY"
import os from decimal import Decimal import requests API = "https://api.rendergrid.io/ api/ public/ v1" KEY = os.environ["RENDERGRID_API_KEY"] # Ваш план: (модель, разрешение) -> картинок в месяц. Числа условные. PLAN = { ("nano-banana-2.1", "2K"): 9000, ("nano-banana-pro", "4K"): 1000, } response = requests.get( f"{API}/models", params={"category": "image"}, headers={"Authorization": f"Bearer {KEY}"}, timeout=(5, 20), ) response.raise_for_status() # цену берём из variants, а не из корневого price; variant_key приходит как 1k, 2k, 4k prices = { (model["id"], variant["variant_key"].upper()): Decimal(variant["price"]) for model in response.json()["models"] for variant in model.get("variants", []) } total = Decimal("0") for (model, resolution), count in PLAN.items(): price = prices.get((model, resolution)) if price is None: raise SystemExit(f"в каталоге нет цены для {model} в {resolution}") subtotal = price * count total += subtotal print(f"{model} {resolution}: {count} x {price} = {subtotal}") print(f"Итого: {total} USD в месяц")
// Node.js 22+, файл .mjs const API = "https://api.rendergrid.io/ api/ public/ v1"; const key = process.env.RENDERGRID_API_KEY; // Ваш план: "модель:разрешение" -> картинок в месяц. Числа условные. const plan = { "nano-banana-2.1:2K": 9000, "nano-banana-pro:4K": 1000, }; const url = new URL(`${API}/models`); url.searchParams.set("category", "image"); const response = await fetch(url, { headers: { Authorization: `Bearer ${key}` }, signal: AbortSignal.timeout(20_000), }); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${await response.text()}`); } // Деньги считаем целыми числами в десятитысячных долях доллара, чтобы не терять точность const toUnits = (price) => { const [whole, fraction = ""] = price.split("."); if (fraction.length > 4) throw new Error(`лишние знаки в цене ${price}`); return BigInt(whole + fraction.padEnd(4, "0")); }; const fromUnits = (units) => `${units / 10000n}.${String(units % 10000n).padStart(4, "0")}`; // цену берём из variants, а не из корневого price; variant_key приходит как 1k, 2k, 4k const prices = {}; for (const model of (await response.json()).models) { for (const variant of model.variants ?? []) { const name = `${model.id}:${variant.variant_key.toUpperCase()}`; prices[name] = toUnits(variant.price); } } let total = 0n; for (const [item, count] of Object.entries(plan)) { const price = prices[item]; if (price === undefined) throw new Error(`в каталоге нет цены для ${item}`); const subtotal = price * BigInt(count); total += subtotal; console.log(`${item}: ${count} x ${fromUnits(price)} = ${fromUnits(subtotal)}`); } console.log(`Итого: ${fromUnits(total)} USD в месяц`);
Цена за картинку
Сверьте расчёт с ценами Rendergrid
Цены за картинку по моделям и разрешениям — на странице цен.
Открыть ценыВопросы и ответы
Как посчитать бюджет на генерацию картинок?
variants: шаблон в конце статьи делает это за вас.Попадают ли в счёт неудачные запросы?
Что будет, если не указать разрешение?
resolution в каждом запросе.Как ограничить расходы за месяц?
Входят ли в цену налоги?
Источники
- Цены RendergridЦены за картинку по моделям и разрешениям.
- Документация: модели и параметрыКаталог, поле
variantsи разрешение по умолчанию. - Документация: балансКогда списываются деньги и когда сумма возвращается.
- Документация: лимитыМесячные лимиты трат на аккаунт и на ключ.
- Условия использованияЦены указаны без налогов.





