GPT Image API — официальный эндпоинт OpenAI для генерации изображений из текста. Чтобы отправить первый запрос, нужны API Key с доступом к модели, Python или curl и модель gpt-image-2. Ответ приходит в формате base64 — его декодируют и записывают в файл. Ниже минимальный рабочий путь от ключа до проверки результата.
Что понадобится для первого запроса
Перед стартом нужно три вещи:
- API Key — создаётся на platform.openai.com. На странице модели бесплатный уровень отмечен как неподдерживаемый; доступный tier и лимиты проверяйте в своём API dashboard.
- Python или curl с утилитами
jqиbase64. - Пакет
openaiдля Python:python -m pip install --upgrade openai.
Модель gpt-image-2 работает через Image API: POST https://api.openai.com/v1/images/generations. Все актуальные параметры — в Image generation guide и на странице модели gpt-image-2.
Как безопасно передать API Key
API Key нельзя вставлять прямо в код. Если файл уйдёт в репозиторий или на чужую машину, ключ придётся сразу отозвать.
Правильный вариант — переменная окружения:
export OPENAI_API_KEY="ваш_ключ_здесь"
Python SDK читает переменную при инициализации клиента. В curl она подставляется как $OPENAI_API_KEY. Если приложение загружает .env-файл, добавьте его в .gitignore; сам SDK не превращает .env в переменную текущего shell.
Для разработчиков, которым нужен альтернативный API-доступ, BetterToken.ai можно рассматривать как пример сервиса с OpenAI-compatible API Key и Base URL и моделью pay-as-you-go без фиксированной месячной подписки. Совместимость интерфейса сама по себе не подтверждает поддержку
gpt-image-2: в этой инструкции запрос идёт на официальный endpoint OpenAI, а доступные у BetterToken модели нужно сверять на странице цен.
Минимальный запрос к GPT Image API
Python
import base64
from pathlib import Path
from openai import OpenAI
client = OpenAI() # читает OPENAI_API_KEY из переменной окружения
result = client.images.generate(
model="gpt-image-2",
prompt="A red apple on a white background, photorealistic",
size="1024x1024",
)
image_bytes = base64.b64decode(result.data[0].b64_json)
Path("output.png").write_bytes(image_bytes)
print("Saved: output.png")
curl
curl https://api.openai.com/v1/images/generations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A red apple on a white background, photorealistic",
"size": "1024x1024"
}' \
| jq -r '.data[0].b64_json' \
| base64 --decode > output.png
На macOS встроенная утилита base64 может требовать флаг -D вместо --decode. Если jq не установлен, используйте подходящий пакетный менеджер вашей системы.
Доступные значения и ограничения size зависят от модели — сверяйте их с текущей документацией.
Как сохранить и проверить изображение
После выполнения команды в текущей директории должен появиться файл output.png.
Шаг 1. Откройте файл в любом просмотрщике. Если он открывается — запрос дошёл и декодирование прошло без ошибок.
Шаг 2. Проверьте размеры через Python (понадобится python -m pip install Pillow):
from PIL import Image
img = Image.open("output.png")
print(img.size) # ожидаем (1024, 1024)
Или через CLI, если установлен ImageMagick:
identify output.png
# output.png PNG 1024x1024 ...
Или стандартным file:
file output.png
# output.png: PNG image data, 1024 x 1024, 8-bit/color RGB...
Шаг 3. Если размеры совпадают с запрошенными — запрос завершился успешно.
Если файл пустой или не открывается: скорее всего, API вернул JSON с ошибкой, который записался вместо изображения. Уберите пайп декодирования (| base64 --decode > output.png) и посмотрите сырой ответ, чтобы найти поле error.
Как исправить ошибку авторизации, модели или параметров
401 Unauthorized
Запрос отклонён на уровне аутентификации. Распространённые причины:
- Переменная
OPENAI_API_KEYне установлена или задана в другой сессии. Проверяйте только наличие, не выводя сам ключ:
if test -n "${OPENAI_API_KEY:-}"; then
printf 'set\n'
else
printf 'not set\n'
fi
Если выводится not set, задайте переменную в текущей сессии и перезапустите приложение, которое отправляет запрос.
- В ключе попал пробел или перевод строки при копировании.
- Ключ удалён или деактивирован на platform.openai.com/api-keys.
Неверное имя модели
Поле model чувствительно к точному строковому значению. Для этого примера используется gpt-image-2; актуальное имя и доступность проверяйте на странице модели.
400 Bad Request (параметры)
- Значение
sizeне отвечает ограничениям выбранной модели. Допустимые размеры и ограничения — в Image generation guide. gpt-image-2сейчас не поддерживаетbackground: "transparent". Уберите этот параметр или используйте поддерживаемое значение.
Файл содержит JSON вместо изображения
Это происходит, когда curl-команда записала в файл ответ API до декодирования. Сначала выведите ответ без перенаправления, убедитесь, что ключ .data[0].b64_json есть в ответе, и только затем добавляйте пайп.
Актуальные параметры запроса, форматы ответа и поддерживаемые размеры — в официальных источниках: Image generation guide, GPT Image 2 model page.