EOL grok-imagine-image-quality (2 Nov) і 1-год signed URLs: міграція xAI bulk-маршруту в Bubble через BIAIG до deadline
До 2 листопада 2026 xAI виводить grok-imagine-image-quality; у Batch API signed URL живе ~1 год, а job може йти до ~24 год. Таблиця cutover для BIAIG: явний model id, quality, ingest у Bubble File/Image до expiry — без «мертвих» scheduled runs.
Навіщо це зараз
У мене в Bubble каталог тягне асети через внутрішній pipeline BIAIG (назва з редакційного плану; у публічних xAI/Bubble docs не з’являється). Поки я розбирався з bulk image, наклалися дві речі з однією датою. Про це окремо: 29.10.2026: вимкнення Nano Banana 2.
Публічна документація xAI фіксує retirement grok-imagine-image-quality з 2 листопada 2026 (60-денне попередження від 2 вересня 2026). Окремо від загальної економіки batch — у Batch API для bulk image/video у відповідях є signed URL з TTL близько 1 години; сам batch має інше expires_at і може оброблятися до ~24 годин (best effort). Deprecated model id і протерміновані URL у полях каталогу — один deadline, два ризики.
Ця стаття — не про OpenAI/xAI batch pricing; лише про конкретну модель + дату EOL і ingest до expiry у Bubble.
Що змінює xAI після 2 Nov
| Було (slug) | Після EOL | Поведінка API | Рекомендація |
|---|---|---|---|
grok-imagine-image-quality на /v1/images/generations, /v1/images/edits |
Redirect на grok-imagine-image-2.0 з quality: "low" |
Форма request/response та сама; slug ще резолвиться | Явно виставити model: grok-imagine-image-2.0 і quality (low, medium, auto) — інакше redirect задасть low і ви втратите контроль над якістю/білінгом |
grok-imagine-image-pro (вже redirect на quality з May 15 guide) |
Той сам Nov 2 шлях → 2.0 @ low |
Ланцюг legacy slug | Перевірити JSONL/SDK на будь-які pro/quality alias |
grok-imagine-image (1.0) |
Не зачіпається цим EOL | — | Не плутати з quality retirement |
Batch API (важливо для bulk): на model page grok-imagine-image-quality — Batch API: Not supported; grok-imagine-image-2.0 — Batch API supported. Приклади image batch у docs xAI використовують grok-imagine-image-2.0. Якщо BIAIG досі сабмітить batch з quality slug — міграція це не лише «календар», а зміна model id на підтримуваний batch-маршрут. Поруч із цим: gpt-image-1 вимикається 23.10.2026: міграція bulk-каталогів.
Джерела: Imagine Image Quality Retirement (Nov 2), May 15 retirement (pro → quality), model pages quality / 2.0.
Два різні «expiry» — не змішувати
Тут я сам собі плутав терміни, поки не розклав у таблицю.
| Поняття | Що означає | Наслідок для Bubble ingest |
|---|---|---|
| Signed URL на медіа в batch result (~1 год) | xAI просить швидко скачати image/video з .url |
Scheduled workflow «після завершення всього batch» може отримати мертвий link, якщо між появою result і ingest пройшло >1 год |
expires_at batch job |
Retention вікна batch (окремо від URL TTL) | Job ще «живий», але URL у старому result уже ні |
| Час обробки batch | До ~24 год best effort | Довга черга + рідкий poll = типовий сценарій ризику для 1-год URL |
У відповідях batch також є image_response.base64 / video аналог поруч з .url — альтернатива, якщо pipeline вміє ingest без залежності від signed URL (перевірити в BIAIG, не припускати).
Джерело: Batch API (release notes — batch image/video і 1-год URL; деталі в Batch API doc).
Bubble: ingest у File/Image, не «текст з URL»
Я тримався публічного патерну (forum + backend workflows):
- У API workflow URL з xAI має бути типу file/image, не plain text.
- Для збереження в каталозі —
:saved to Bubble storageна кроці, що тягне remote asset. - Scheduled API workflows фіксують версію workflow на момент schedule — після зміни model id або ingest кроків уже заплановані runs не підхоплять нову логіку, поки їх не скасують/перепланують.
Джерела: Scheduling API workflows, forum: upload public image in backend workflow.
Cutover-таблиця BIAIG (редакційний checklist)
Ось що я проходжу до 2 Nov 2026 — один checklist, не три окремі «потім».
| # | Шар | Дія до 2 Nov 2026 | Перевірка «готово» |
|---|---|---|---|
| 1 | Batch submit (JSONL/SDK) | Замінити model на grok-imagine-image-2.0; прибрати grok-imagine-image-quality, -latest, grok-imagine-image-pro |
Diff конфігів/staging job; у payload немає quality slug |
| 2 | quality |
Явно задати low / medium / auto (не покладатися на post-EOL redirect @ low) |
Документований default для catalog assets — відкрите рішення (cost vs fidelity) |
| 3 | Result handling | Ingest на кожен completed result (incremental retrieval з docs), не один bulk download «в кінці доби» | Метрика lag: час від url у result до :saved — внутрішня, не з публічних docs |
| 4 | Fallback | Якщо URL expired — гілка на base64 (якщо підтримується) або re-fetch policy; не писати raw signed URL у data type text field | Поля каталогу = Bubble file/image URLs |
| 5 | Scheduler hygiene | Скасувати/перепланувати queued scheduled workflows на старому маршруті | Немає runs зі snapshot старого API connector + старим model |
| 6 | Post-cutover smoke | Sync + один малий batch на 2.0 з обраним quality |
Asset у Bubble storage відкривається без xAI host |

Чого docs не кажуть (чесно)
- Точний час і timezone cutover 2 Nov (на відміну від May 15 retirement з 12:00 PM PT) — у migration guide лише календарна дата.
- Чи BIAIG уже на 2.0 — перевірити в private repo, не вигадувати.
- Типовий lag poll → schedule → ingest у вашому prod — локальна observability.
Не змішувати: Imagine storage_options / Files public URL TTL (1h–30d) — інша поверхня API, не batch signed URL (outputs doc — поза scope, якщо batch-only).
Підсумок
До 2 листопада 2026 я явно переводжу bulk image-маршрут на grok-imagine-image-2.0, фіксую quality, і змушую pipeline зберігати медіа в Bubble до годинного TTL signed URL. Без цього redirect після EOL сяде на low, а довгі batch jobs залишать каталог з битими посиланнями. Cutover для BIAIG — model + ingest timing + scheduler reset в одній таблиці. Поруч із цим: xAI Batch API: image, edit,.