Если вы подключаете API генерации изображений бесплатно для тестов или небольших проектов, основная экономия обычно появляется не из-за поиска самой низкой цены, а из-за уменьшения числа ненужных запусков. В этой статье разберём схему, которую удобно применять в коде: дешёвый черновик, кэширование, повторное использование результата, ограничение числа вариантов, апскейл и пакетная обработка.
У API есть фиксированная цена за запуск операции: например, генерация картинки по описанию стоит 9 ₽, изменение готового изображения — 35 ₽, а увеличение качества — 50 ₽. Поэтому каждый лишний запуск можно посчитать в рублях, а экономию — проверить до внедрения. Ключ для API создаётся в разделе API, при выпуске первого ключа на баланс начисляется 50 ₽.
Ниже расчёты приведены на конкретном сценарии: 100 исходных заданий в месяц. Это не тарифный план и не прогноз, а пример, позволяющий увидеть механику экономии.
1) Черновик дешевле чистовика: двухэтапная схема
Самый простой способ сократить расходы — не делать дорогой финальный запуск, пока описание не проверено. Сначала можно получить несколько дешёвых результатов по 9 ₽ за операцию «Картинка по описанию», выбрать подходящую композицию, а затем выполнять дополнительные действия только для выбранных изображений.
Предположим, у вас есть 100 заданий. Если сразу запускать по одному результату на каждое, базовая стоимость составит 100 × 9 ₽ = 900 ₽. Если для каждого задания сначала делать черновик, а затем только для 30 выбранных изображений запускать изменение по описанию за 35 ₽, общая сумма составит 900 + 30 × 35 = 1950 ₽.
Но двухэтапная схема особенно полезна, когда альтернативой является несколько дорогих попыток. Допустим, без предварительного отбора вы делаете по три операции image-edit для каждого задания: 100 × 3 × 35 = 10 500 ₽. При черновом отборе один запуск image на задание и один image-edit только для 30 выбранных дают 1950 ₽. Экономия относительно исходной схемы — 8550 ₽, или около 81,4%.
Здесь важно разделять две задачи: поиск композиции и финальное редактирование. Черновик не обязан быть отдельным специальным режимом сервиса — экономия возникает за счёт того, что дешёвая операция используется до запуска более дорогой.
curl -X POST "https://genius-bot.ru/wp-json/genius/v1/generate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "image",
"prompt": "Минималистичная предметная фотография белой кружки на столе"
}'
Перед интеграцией имеет смысл запросить GET /services и получить актуальный список операций и цен. Баланс можно проверить через GET /balance, а состояние конкретного задания — через GET /tasks/{id}.

2) Кэш по описанию: одинаковые запросы приходят чаще, чем кажется
Если приложение генерирует картинки из пользовательских карточек, описаний товаров или шаблонных сцен, одинаковые запросы могут повторяться. Запускать одну и ту же операцию повторно в таком случае нет смысла, если результат уже сохранён и подходит по параметрам.
Простейший вариант — сделать ключ кэша из нормализованного описания и параметров операции. Например, строку «Белая кружка на деревянном столе» можно привести к единому регистру, убрать лишние пробелы и посчитать SHA-256. Если такой ключ уже есть в базе, приложение возвращает сохранённую ссылку вместо нового запуска.
Предположим, за месяц происходит 500 запросов на генерацию по 9 ₽. Без кэша расходы составят 4500 ₽. Если 120 запросов полностью совпадают с уже выполненными, кэш предотвращает 120 запусков: 120 × 9 ₽ = 1080 ₽ экономии. Остальные 380 запросов обходятся в 3420 ₽.
В результате экономия на генерации картинок здесь достигается без изменения самой операции. Вы просто перестаёте оплачивать повторное выполнение идентичной работы.
В кэше стоит хранить не только текст запроса, но и идентификатор операции, если приложение использует несколько типов генерации. Для image и image-edit одинаковый текст сам по себе не означает одинаковый результат: это разные операции с разной ценой — 9 ₽ и 35 ₽ соответственно.
Полезно также ограничить срок хранения, если результат зависит от изменяемых данных. Для статичных шаблонов кэш можно держать дольше, а для контента, который регулярно обновляется, использовать версию исходных данных в ключе.
3) Повторное использование вместо новой генерации
Следующий источник расходов — повторная генерация изображения там, где достаточно уже полученного результата. Если одна картинка подходит сразу для карточки товара, баннера и внутреннего превью, нет причины запускать три одинаковые операции только из-за разных мест использования.
Например, 200 изображений по 9 ₽ стоят 1800 ₽. Если каждое из них затем ещё раз генерировать для второго места использования, стоимость вырастает до 3600 ₽. Повторное использование исходных результатов оставляет расходы на уровне 1800 ₽ и сохраняет 1800 ₽ бюджета.
Практически это означает, что результат генерации нужно хранить вместе с идентификатором задачи и URL или другим способом доступа к результату, который возвращает API. Состояние задачи можно получать через GET /tasks/{id}. Если приложение работает асинхронно, необязательно постоянно опрашивать endpoint: у операции есть необязательный параметр callback_url, на который приходит POST после готовности задачи.
Для загрузки собственного исходника предусмотрен POST /uploads. Это удобно для сценария, где один загруженный файл используется в нескольких последующих операциях: вместо повторной загрузки можно сохранить полученную ссылку и передавать её там, где она требуется.
Экономия здесь зависит не от цены отдельной операции, а от количества повторных запусков. При цене image 9 ₽ каждый предотвращённый запуск сохраняет 9 ₽. При image-edit — уже 35 ₽.
| Операция | Цена за запуск | 10 лишних запусков | 100 лишних запусков |
|---|---|---|---|
| Картинка по описанию | 9 ₽ | 90 ₽ | 900 ₽ |
| Изменить фото по описанию | 35 ₽ | 350 ₽ | 3500 ₽ |
| Увеличить качество фото | 50 ₽ | 500 ₽ | 5000 ₽ |

4) Сколько вариантов нужно на самом деле
Генерация нескольких вариантов подряд кажется безопасным способом выбора, но стоимость растёт линейно. Если одна картинка стоит 9 ₽, десять вариантов стоят 90 ₽. Для 100 исходных заданий это уже 9000 ₽.
Предположим, в текущем процессе вы создаёте по пять вариантов на каждое из 100 заданий. Стоимость составляет 100 × 5 × 9 = 4500 ₽. Если после анализа процесса выяснилось, что в большинстве случаев достаточно двух вариантов, расходы снижаются до 100 × 2 × 9 = 1800 ₽. Разница — 2700 ₽ за месяц.
При этом не обязательно запрещать дополнительные варианты полностью. Можно задать правило: сначала один результат, второй запуск — только если первый не проходит проверку, третий — только при явной причине. Такой подход лучше масштабируется, чем фиксированное количество попыток для каждой задачи.
Ещё один вариант — использовать собственную проверку результата до следующего запуска. Например, приложение может проверить, заполнены ли обязательные поля задания, соответствует ли результат ожидаемому типу контента и был ли уже получен подходящий вариант. Сам API не обязан знать ваши бизнес-правила, поэтому контроль количества запусков удобно держать на уровне приложения.
Такой контроль напрямую связан с тем, как снизить стоимость генерации. При цене 9 ₽ каждый отменённый повторный вариант экономит 9 ₽, а 1000 отменённых запусков — 9000 ₽.
5) Апскейл вместо генерации в большом размере
Отдельный сценарий — не генерировать заново изображение только потому, что нужен другой уровень качества. В API есть операция «Увеличить качество фото» за 50 ₽. Она не является дешёвой заменой обычной генерации: её выгодность зависит от того, сколько дорогих или повторных генераций она позволяет избежать.
Например, допустим, у вас уже есть подходящее изображение и требуется подготовить его для дальнейшего использования. Если вместо повторной генерации за 9 ₽ вы запускаете upscale за 50 ₽, чистая экономия отсутствует: 50 ₽ больше 9 ₽. Поэтому применять апскейл только ради уменьшения стоимости неправильно.
Смысл приёма появляется в другом сценарии. Если альтернатива — несколько новых генераций по 9 ₽ в поиске результата, то стоимость нужно сравнивать со всей цепочкой. Пять новых генераций стоят 45 ₽, поэтому upscale за 50 ₽ всё ещё не дешевле. Шесть генераций стоят 54 ₽ — и тогда один upscale уже на 4 ₽ дешевле.
Расчёт можно выразить простой формулой: стоимость повторной генерации = 9 ₽ × количество попыток. Upscale стоит 50 ₽. Точка, после которой upscale становится дешевле шести новых запусков, начинается с 6 генераций: 6 × 9 = 54 ₽.
При этом операция увеличения качества имеет смысл только тогда, когда исходный результат уже устраивает по содержанию. Если нужно изменить композицию, объект или само изображение, это уже другая задача, для которой в справке есть image-edit за 35 ₽.
Таким образом, дешёвая генерация изображений — это не обязательно операция с минимальной ценой. Иногда правильнее сохранить удачный результат и выбрать отдельную операцию для следующего этапа, но экономию нужно считать по полной цепочке запусков.

6) Итог: сколько сберегают все шесть приёмов вместе
Теперь соберём расчёт в одну модель. Возьмём 100 заданий и условный процесс, в котором без оптимизации выполняются три image-edit на каждое задание: 100 × 3 × 35 ₽ = 10 500 ₽.
После изменения процесса сначала создаём по одному дешёвому черновику image за 9 ₽ для каждого задания: 100 × 9 = 900 ₽. Затем только для 30 прошедших отбор задач выполняем image-edit: 30 × 35 = 1050 ₽. Итого — 1950 ₽.
Добавим к этому кэширование. Если из 100 новых запросов 20 совпали с уже существующими результатами, предотвращены 20 запусков image по 9 ₽: ещё 180 ₽ экономии. Если повторное использование позволяет избежать 10 дополнительных генераций, это ещё 90 ₽.
Сокращение количества вариантов с трёх до двух при цене 9 ₽ экономит на 100 заданиях 100 × 9 = 900 ₽. Наконец, если в отдельных случаях вместо шести повторных генераций используется один upscale, разница составляет 54 − 50 = 4 ₽ на каждый такой случай. Это небольшой эффект на одной задаче, но он становится измеримым при большом количестве повторяющихся процессов.
Важно не складывать эти числа механически с любым реальным счётом. Приёмы могут пересекаться: кэш может одновременно убрать повторный вариант, а повторное использование — устранить необходимость в новой генерации. Поэтому перед внедрением лучше считать каждое правило на фактическом журнале запусков.
Для этого достаточно сохранять четыре поля: тип операции, стоимость, входной идентификатор или хэш задания и результат. После месяца работы можно посчитать количество повторов, среднее число вариантов и долю задач, которым действительно требовался следующий этап.
API позволяет проверять баланс через GET /balance и получать список операций и цен через GET /services. Частота запросов ограничена 60 запросами в минуту на ключ, поэтому пакетную обработку нельзя строить как бесконтрольный поток запросов.
Если обработка не требует мгновенного результата, пакетирование можно использовать как организационный приём. Например, очередь из 100 заданий можно обрабатывать с контролем скорости, а готовность получать через callback_url вместо постоянного опроса. При этом само ограничение остаётся прежним: не более 60 запросов в минуту на ключ.
В итоге шесть приёмов дают разные виды экономии: черновик сокращает дорогие последующие операции, кэш устраняет идентичные запросы, повторное использование убирает дублирование, контроль вариантов ограничивает число попыток, апскейл помогает в определённых сценариях подготовки результата, а пакетная обработка упрощает управление очередью. Для каждого из них стоимость можно выразить обычным умножением количества предотвращённых запусков на цену операции.
Частые вопросы
Можно ли использовать API для тестов без оплаты подписки?
Оплата производится за запуск, без абонентской платы и минимального платежа. При выпуске первого ключа на баланс начисляется 50 ₽ для пробы. Ключ выдаётся в личном разделе API после входа и показывается один раз.
Сколько стоит одна генерация изображения?
Операция «Картинка по описанию» стоит 9 ₽ за запуск. «Изменить фото по описанию» стоит 35 ₽, а «Увеличить качество фото» — 50 ₽ за запуск.
Как проверить стоимость операций перед запуском?
Для этого предусмотрен GET /services. Он возвращает список операций и цен. Такой запрос удобно выполнять при запуске приложения или использовать для внутренней проверки конфигурации.
Как узнать, закончилась ли генерация?
После запуска операции можно проверять состояние через GET /tasks/{id}. Для асинхронного сценария также доступен необязательный параметр callback_url: после готовности задачи API отправляет POST на указанный адрес.
Есть ли ограничение на количество запросов?
Да. Для одного ключа установлено ограничение не более 60 запросов в минуту.
Подходит ли кэширование для всех генераций?
Кэш имеет смысл, когда одинаковый вход действительно должен давать тот же сохранённый результат с точки зрения вашего приложения. Для разных операций один и тот же текст запроса нельзя считать одним и тем же заданием: например, image и image-edit имеют разные назначения и разные цены.
Перед расчётом бюджета проверьте текущий список операций и цены через API, а ключ создайте в разделе подключения API. Для небольшого проекта обычно достаточно начать с журнала запусков и добавить кэш, ограничение вариантов и повторное использование результатов, а затем оценить фактическую экономию по данным.
