СТАТТЯ

OpenAI Images API: до 10 за виклик — sync burst проти Batch API для bulk-каталогів у Bubble з BIAIG

Параметр n≤10 дає кілька варіантів одного промпта, а не десять SKU в одному HTTP-запиті. Матриця: коли sync burst у Bubble, коли Batch через JSONL (~−50%, до 24 год), і як не з’їсти WU на base64, upload і polling.

З чого почалось

Я тягнув bulk-каталог у Bubble через OpenAI Images API і спочатку плутав n до 10 з «десятьма SKU одним запитом». Ні. Синхронні POST /v1/images/generations і POST /v1/images/edits на GPT Image приймають n від 1 до 10 — це кілька зображень з одного промпта в одному виклику. DALL·E 3 — лише n=1. Каталог-scale — це багато окремих запитів: багато sync-викликів або Batch JSONL, де один рядок = один underlying request. Поруч із цим: OpenArt Bulk Create (500 CSV.

GPT Image за замовчуванням віддає base64, не ephemeral URL. У no-code я часто бачив, що дорожче за сам inference — збереження, upload у storage, мій Image Flow (generate → store).

З docs зараз: gpt-image-2.5-flare (швидкі щоденні генерації), gpt-image-2.5-sunburst (точніше editing), gpt-image-2 лишається задокументованим. Batch підтримує /v1/images/generations і /v1/images/edits. Міграція: gpt-image-1 — shutdown 2026-10-23; gpt-image-1-mini, gpt-image-1.5, chatgpt-image-latest — 2026-12-01; заміни — Flare або Sunburst. Якщо в Bubble-плагіні або workflow прошиті старі model ID — це технічний борг з датою. Про це окремо: Flare, Sunburst і WaveSpeedAI: маршрутизація.

NB2→NB2.1 у брифі я не зіставив з офіційними model ID у цьому пакеті — перевіряйте рядки моделі в action, не внутрішні скорочення.

BIAIG у тексті — редакційна/внутрішня мітка для Bubble-інtegrації з batch + image (публічний listing Chakor «OpenAI ChatGPT & GPT-4» згадує batch і images; окремого авторитетного doc під акронімом BIAIG Scout не знайшов). Поруч із цим: OpenAI Batch API для images.


Матриця рішень (рядок / SKU)

Сценарій Режим Чому
Прев’ю в UI, «ще 3 варіанти того ж промпта», A/B одного copy Sync, n 2–10 Latency секунди; один prompt → кілька output
≤10 SKU, кожен з своїм промптом, терміново Sync, n=1 × N викликів Batch не встигне; рахуйте rate limits sync-пулу
Сотні–тисячі рядків spreadsheet-каталогу, distinct prompts Batch JSONL ~50% дешевше vs sync, окремий rate-limit pool; SLA до 24 год (часто швидше)
Редагування з reference photo per SKU Batch /v1/images/edits або sync Слідкуйте за 200 MB на файл; для великих edit-batch краще URL, не base64 у JSONL
Flare vs Sunburst Окремий вибір моделі Це quality/speed/editing, не «Batch vs sync»; one model per batch file

Правило великого пальця: n≤10 — variant burst одного intent; bulk-каталог — JSONL + custom_id = ваш row/SKU id, зазвичай n=1 на рядок, якщо не робите свідомо multi-variant на SKU.


Batch у цифрах (з docs)

  • Формат: JSONL, до 50 000 requests і 200 MB на batch, без streaming.
  • Вихідний порядок не гарантований — зшивка лише через custom_id.
  • Прострочений batch: оплачується виконане, решта відпадає — ризик partial catalog.
  • Chunking операційно: ~500 рядків на job — зручні rerun, менший blast radius, легше дебажити один зламаний промпт.

Bubble: unit economics beyond tokens

OpenAI Batch економить ~50% на inference; у Bubble я рахую повну ціну як WU + час:

  1. Submit batch — один backend/API action (BIAIG або plugin batch action).
  2. Polling — scheduled backend workflows до terminal status (completed / failed / expired). Кожен poll = WU; без cap/backoff/максимуму ітерацій я вже бачив, як роздувається scheduled volume (forum patterns).
  3. Download output file + parse JSONL — ще WU і runtime.
  4. Base64 → binary → upload у storage / оновлення Thing — часто дорожче за tokens, особливо на sync burst з n>1.

Як я роблю: sync burst — для інтерактиву; каталог — Batch + рідкий poll (наприклад, кожні N хвилин, не кожні 10 с) + idempotent «already processed batch_id». По грошах: batch-знижка може не бути очевидною у token-oriented usage views — я звіряю billed spend, не лише tokens (community anecdote, не official policy).


Checklist перед запуском каталогу

  • Model string → Flare / Sunburst / gpt-image-2, не sunset gpt-image-1*.
  • Кожен JSONL line: endpoint, model, custom_id = spreadsheet row id, n=1 unless multi-variant задум.
  • Розбиття на chunks (~500) + окремий batch file per model.
  • Reconciliation job: map output → SKU; алерт на missing custom_id.
  • Оцінка WU: poll interval × expected hours + upload per image.
  • Plan B: sync n=1 lane для термінових рядків поза batch.

Джерела (Scout packet)

OpenAI API reference (generate), Image generation guide, Batch guide & FAQ, Pricing, Flare/Sunburst model pages, Deprecations; Bubble plugin listing (Chakor); Forum — scheduled backend polling.

Стаття для внутрішнього digest; не публікувати зовні.

← Усі статті