Почему GPT-Image-2 падает по таймауту: 5 настоящих причин и рабочие фиксы
TL;DR — GPT-Image-2 медленный по конструкции: high quality 1024px — это 145–280 секунд. Большинство “падений” на самом деле не падения, а ситуация, когда какая-то прослойка в цепочке (CDN, обратный прокси, SDK) рвёт соединение раньше, чем OpenAI отдаёт результат. Остальные четыре причины — двухуровневая модерация, несовместимость параметров в сторонних клиентах, лимиты скорости от трёх параллельных запросов и стена верификации организации. Под каждую — фикс в одну-две строки.
Триаж за 30 секунд
| Что вы видите | Вероятная причина | Раздел |
|---|---|---|
504, обрыв соединения на 60s / 180s | Цепочка таймаутов | 1 |
moderation_blocked, Your request was rejected | Двухуровневая модерация | 2 |
Unknown parameter из стороннего клиента | Несовместимость параметров | 3 |
429, всё нормально на 2 параллельных, рушится на 3+ | Лимит скорости | 4 |
Your organization must be verified | Верификация организации | 5 |
| Я не разработчик, мне просто нужна картинка | Готовая обёртка без кода | Без кода |
1. Таймауты (главный виновник)
Две трети всех сообщений “GPT-Image-2 сломан” на форуме разработчиков OpenAI — про это. Это не баг. Модель медленная, а ваш шлюз сдаётся раньше, чем OpenAI заканчивает работу.
Реальные замеры на gpt-image-2:
- Минимальный запрос, 1024×1024 medium, без референсов: около 80 секунд
- 1024×1024 high, без референсов: медиана 195 секунд, p95 около 280 секунд
- 1536×1024 high +
input_fidelity="high"+ маленький референс: около 130 секунд (быстрее, потому что модель раньше фиксирует композицию) - 1024×1024 medium + два JPG-референса: около 44 секунд
Теперь типичная цепочка таймаутов между вашим кодом и OpenAI:
ваш код ── OpenAI Python SDK по умолчанию 600s
↓
прокси / шлюз ── NGINX по умолчанию 60s, Azure SDK 180s, Express 120s
↓
CDN эдж ── Cloudflare Free 100s, Vercel Hobby 60s
↓
апстрим OpenAI ── отвечает через 195s
Решает тот слой, у которого самый короткий лимит. На Vercel Hobby high quality генерация — гарантированный 504 на 61-й секунде, при этом OpenAI продолжает считать изображение, которое никто не получит.
Фиксы по убыванию эффективности
(а) Включить streaming с partial_images. Самое крупное улучшение в одну строку — и большинство кода это до сих пор не использует:
stream = client.images.generate(
model="openai/gpt-image-2",
prompt="рамэн-бар в два часа ночи, неоновые отражения на мокром асфальте",
size="1024x1024",
stream=True,
partial_images=2,
)
for event in stream:
if event.type == "image_generation.partial_image":
push_to_client(event.b64_json, index=event.partial_image_index)
elif event.type == "image_generation.completed":
final = event.b64_json
Первый байт приходит за 5–15 секунд вместо 195. Пользователь видит прогресс, шлюз видит живой ответ, и 60-секундная отсечка не срабатывает. Цена — около 100 дополнительных image output токенов на каждый partial; обычно достаточно двух.
(б) Если стриминг невозможен — переходите на асинхронный режим. Сразу возвращаете task ID, генерация идёт в воркере, результат отдаётся через вебхук или поллинг. Это единственный рабочий паттерн, когда фронт стоит за CDN с жёстким лимитом 100 секунд. Бонус: если клиент отвалился, генерация не пропадает — воркер досчитает и сохранит результат.
(в) Опустить quality. Большинство промптов не требуют quality="high". Переход на medium экономит 60–120 секунд на вызов. При жёстких требованиях к латенси выходной формат JPEG быстрее PNG на этапах кодирования и сериализации.
Чего категорически нельзя делать: ретраить тот же промпт сразу после таймаута. OpenAI всё ещё считает. Вы получите двойной счёт и тут же поймаете 429.
2. moderation_blocked
Вторая по объёму причина. OpenAI прогоняет безопасность дважды — на входе (промпт и референсы) и на выходе (готовое изображение). Сообщения отличаются:
Your request was rejected by the safety system→ отловлено входным фильтром. Меняйте формулировку промпта.Generated image was filtered→ отловлено выходным фильтром. Промпт выглядит безобидно, но сгенерированное изображение фильтр не пропустил. Менять нужно сцену целиком, а не отдельные слова.
Ретраить тот же промпт бесполезно. Фильтр детерминирован: одинаковый вход блокируется одинаково. Повторные попытки сжигают квоту.
Категории, к которым выходной фильтр особенно строг (даже если промпт мягкий):
- Любой, кто может быть прочитан как несовершеннолетний, в том числе стилизованный
- Узнаваемые публичные персоны (политики, артисты, спортсмены)
- Защищённые товарным знаком персонажи (Disney, Nintendo, Marvel)
- Реалистичная медицинская, хирургическая и травматическая сцена
- Всё, что похоже на удостоверение личности, реальную валюту или зарегистрированный логотип
Практичный способ — добавить собственную предпроверку промпта: простой regex на имена знаменитостей, бренды и опасные слова отсекает большинство случаев, не дожидаясь 200 секунд тщетной генерации.
3. Несовместимость параметров в сторонних клиентах
Если вы вызываете GPT-Image-2 через Cherry Studio или похожий десктопный клиент — почти наверняка вы здесь. Формы параметров chat-completions и images-generations отличаются, и клиент, написанный под первое, шлёт лишние поля во второе.
Подтверждённые несовместимости на момент написания:
response_format—gpt-image-2не принимает. Удалить.- Массив
messages: [...]отправляется на/v1/images/generations— неправильный эндпоинт целиком. n>1— работает, но каждое изображение считается отдельно в лимитах скорости.
Минимально корректный запрос:
curl https://api.ofox.ai/v1/images/generations \
-H "Authorization: Bearer $OFOX_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-image-2",
"prompt": "рамэн-бар в два часа ночи, неоновые отражения на мокром асфальте",
"size": "1024x1024"
}'
Если клиент-обёртка падает, а curl с тем же ключом проходит — клиент посылает что-то лишнее. У большинства клиентов есть панель расширенных параметров, в которой response_format можно отключить.
4. Ограничение скорости
Лимиты для image-моделей и текстовых моделей — разные. Ключ, спокойно держащий 50 RPM на gpt-5-4, поймает 429 на десяти параллельных вызовах GPT-Image-2.
Практический бюджет параллельности:
- 3 параллельно + пауза 2 секунды между батчами: стабильно
- 5 параллельно: иногда 429 под нагрузкой
- 10 параллельно: гарантированный троттлинг
Самое дешёвое решение — семафор в точке вызова:
import asyncio
sem = asyncio.Semaphore(3)
async def generate(prompt: str):
async with sem:
result = await client.images.generate(
model="openai/gpt-image-2",
prompt=prompt,
size="1024x1024",
)
await asyncio.sleep(2)
return result
Дополнить экспоненциальным откатом, который читает заголовок Retry-After из 429-ответа. Важно: на таймаут не ретраить. См. раздел 1.
5. Верификация организации
OpenAI закрывает GPT-Image-2 за процедурой верификации организации через Persona (проверка документа). Где это обычно затыкается:
- Страна не в белом списке (а сам список не опубликован)
- 90-дневная блокировка повторной верификации после предыдущей удачной
- Сессия Persona истекла — повторно нужно начинать из панели OpenAI, не из письма Persona
- Верификация прошла, но права на модель приходят в течение 6–24 часов
Если вы стоите перед “Your organization must be verified” и не хотите ждать — обращение к GPT-Image-2 через уже верифицированный агрегатор полностью обходит этот шаг. В следующем разделе — одна строка переключения SDK.
Выбираете маршрут по тому, что вы делаете
Большая часть способов “сломать” GPT-Image-2 — это отправлять запрос в самой невыгодной конфигурации: напрямую с ноутбука, с дефолтными таймаутами, по нестабильному сетевому пути до US-East эджа OpenAI. Есть два более чистых маршрута; выбирайте по тому, что вы строите.
Пишете код, встраиваете в продукт → через OpenAI-совместимый эндпоинт Ofox
from openai import OpenAI
client = OpenAI(
api_key="ofox-...",
base_url="https://api.ofox.ai/v1",
)
stream = client.images.generate(
model="openai/gpt-image-2",
prompt="...",
size="1024x1024",
stream=True,
partial_images=2,
)
Основная часть времени запроса — это серверная генерация на стороне OpenAI, и она не сократится, как бы вы ни роутили. Меняется сетевой путь между клиентом и эджем OpenAI. Прямой маршрут из России / Азиатско-Тихоокеанского региона до US-East эджа OpenAI — это сотни миллисекунд задержки плюс периодические потери пакетов и повторы TLS-рукопожатий. Для быстрых текстовых вызовов это незаметно, для 100–200-секундного streaming-соединения любая такая помеха убивает всю генерацию (это та самая механика таймаут-отказов из раздела 1). Ofox удерживает стабильный оптимизированный маршрут для трафика из Азиатско-Тихоокеанского региона, чтобы байты streaming-ответа реально доходили до клиента всё время генерации. Бонус: стена верификации организации из раздела 5 уже пройдена на стороне Ofox — тот же ID модели работает без Persona.
OpenAI SDK не меняется. ID модели openai/gpt-image-2 не меняется. Streaming, partial_images, референсные картинки, input_fidelity — всё поддерживается. Меняется одна строка в настройке клиента.
Нужна пара картинок, без интеграции → gptimage2.plus
gptimage2.plus — обёртка GPT-Image-2 с обычным веб-интерфейсом. Таймауты и ретраи берёт на себя сервис, вы вводите промпт и получаете 2K изображение. При регистрации даётся 5 кредитов бесплатно, без логина — одна генерация в день, и сейчас работает код LAUNCH50 — −50% на первый месяц.
Подходит, если:
- Вы не пишете код, нужно несколько картинок
- Веб-интерфейс ChatGPT снова отказывается рисовать
- Хотите готовые сценарии (товарные снимки, аватары, реставрация фото) вместо самостоятельных промптов
Не подходит, если встраиваете генерацию в собственный продукт или нужна пакетная генерация в пайплайне — для этого API.
Кратчайший путь к “перестало падать” на API
- Включить streaming с
partial_images=2. Лучшая отдача на одну строку кода. - Семафор на 3 параллельных. Уважать
Retry-Afterв экспоненциальном откате. - Предпроверка промпта на риски модерации.
- На таймаут не ретраить — дать оригинальному запросу закончиться или перевести вызов в асинхронную задачу.
- Если вы в России / Азиатско-Тихоокеанском регионе или застряли на верификации — переключить base_url на агрегатор со стабильным маршрутом до OpenAI.
Сама модель сейчас занимает первое место в Arena по генерации изображений из текста. Все способы её “сломать” ограничены и предсказуемы — у каждого есть фикс в одну-две строки.


