Генерация изображений gpt-image-2
OpenAI-совместимое API генерации изображений gpt-image-2: переключите base_url и используйте, мульти-регион, единый биллинг через QCode-ключ
Генерация изображений gpt-image-2¶
QCode.cc предоставляет полностью OpenAI-совместимое API gpt-image-2 для генерации изображений из текста. gpt-image-2 — это новейшая модель text-to-image от OpenAI (выпущена в апреле 2026 года) с сильнейшим на сегодня рендерингом текста внутри изображения среди публичных моделей (стабильно отрисовывает английские и китайские символы внутри картинки).
Что добавляет QCode.cc:
- Drop-in для OpenAI SDK — меняется только
base_url; форматы запроса и ответа на 100% идентичны - Мульти-регион: HK / Япония / США / Европа / прямое подключение Шэньчжэня — выбирайте ближайший узел
- Единый API-ключ: используется ваш существующий ключ QCode.cc (
cr_…) — общая квота с Claude Code, Codex и Gemini CLI - Единый просмотр использования: вызовы изображений и чата объединены в дашборде клиента + отдельная страница самообслуживания
Типичные сценарии: постеры, иллюстрации, изображения товаров, UI-моки, материалы для соцсетей.
Быстрый старт¶
Три строки Python для первого изображения:
from openai import OpenAI
import base64
client = OpenAI(
base_url="https://api.qcode.cc/qcode-img/v1",
api_key="cr_YOUR_QCODE_API_KEY",
timeout=180.0, # одно изображение 30-90 с, ставьте минимум 180
)
result = client.images.generate(
model="gpt-image-2",
prompt="A cyberpunk Tokyo street at night, neon reflecting in rain puddles",
size="1024x1024",
quality="low",
n=1,
)
with open("output.png", "wb") as f:
f.write(base64.b64decode(result.data[0].b64_json))
⚠️ Всегда явно указывайте
timeout≥ 180 с: значения по умолчанию в OpenAI SDK слишком короткие.gpt-image-2основан на reasoning и работает заметно дольше традиционных моделей text-to-image (см. Время генерации и timeout).
Точки доступа¶
gpt-image-2 доступен на всех точках доступа QCode.cc — добавьте /qcode-img/v1 к хосту:
| Регион | Рекомендуемый base_url | Протокол | Примечания |
|---|---|---|---|
| Материковый Китай | http://103.236.53.153/qcode-img/v1 |
HTTP | Прямое подключение Шэньчжэня, без 100-секундного лимита CDN; обязателен для quality medium / high |
| Материковый Китай (только HTTPS) | https://api.qcode.cc/qcode-img/v1 |
HTTPS | Через глобальный CDN; medium / high могут давать 524 (см. Жёсткий лимит CDN 100 с) |
| HK / Юго-Восточная Азия | https://asia.qcode.cc/qcode-img/v1 |
HTTPS | Гонконгский узел |
| Европа | https://eu.qcode.cc/qcode-img/v1 |
HTTPS | Узел во Франкфурте |
| Северная Америка | https://us.qcode.cc/qcode-img/v1 |
HTTPS | Узел в Лос-Анджелесе |
Все точки маршрутизируются в одну систему биллинга; использование и квоты унифицированы. Полный справочник доменов — в Эндпоинты и форматы API.
qcode-img— это путь, выделенный для генерации изображений, параллельный путям/api(Anthropic),/openai/v1(OpenAI) и/gemini(Google).
Спецификация API¶
Эндпоинт¶
POST {base_url}/images/generations
Заголовки¶
| Header | Обязателен | Значение |
|---|---|---|
Authorization |
✓ | Bearer cr_xxxxxxxxxxxxxxxx (ваш API-ключ QCode.cc) |
Content-Type |
✓ | application/json |
Тело запроса¶
{
"model": "gpt-image-2",
"prompt": "A small ceramic vase with sunflower, photorealistic",
"size": "1024x1024",
"quality": "low",
"n": 1
}
| Поле | Тип | Обязательно | По умолчанию | Значения |
|---|---|---|---|---|
model |
string | ✓ | — | Фиксированно gpt-image-2 |
prompt |
string | ✓ | — | Описание изображения, многоязычное (английский, русский, китайский и др.) |
size |
string | ✗ | 1024x1024 |
1024x1024 (квадрат) / 1024x1536 (вертикальный) / 1536x1024 (горизонтальный) |
quality |
string | ✗ | medium |
low / medium / high |
n |
integer | ✗ | 1 | Количество за вызов (1 – 4) |
Ответ¶
{
"created": 1777135432,
"data": [
{
"b64_json": "iVBORw0KGgo...(base64 PNG, 1-3 MB)",
"revised_prompt": "A small ceramic vase with sunflower..."
}
]
}
b64_json: PNG в base64. Можно отрендерить напрямую через<img src="data:image/png;base64,...">revised_prompt: версия промпта, улучшенная моделью (опционально для отображения)
Ответ при ошибке¶
Ошибки соответствуют стандартной схеме OpenAI:
{
"error": {
"type": "rate_limit_error",
"code": "image_daily_limit",
"message": "Daily image generation count limit reached..."
}
}
| HTTP | code | Значение |
|---|---|---|
| 401 | invalid_api_key |
API-ключ недействителен или отключён |
| 401 | key_expired |
API-ключ просрочен |
| 422 | unsupported_size |
размер не поддерживается (только три варианта выше) |
| 429 | crs_daily_exhausted |
Достигнут дневной бюджет аккаунта |
| 429 | crs_total_exhausted |
Достигнут общий бюджет аккаунта |
| 429 | image_daily_limit |
Достигнут дневной лимит 100 картинок на ключ (по умолчанию, можно повысить) |
| 429 | concurrency_exhausted |
Достигнут лимит параллельных запросов 2 на ключ (по умолчанию, можно повысить) |
| 503 | service_overloaded |
Глобальная перегрузка сервиса, повторите позже |
| 503 | image_provider_unavailable |
Апстрим временно недоступен, повторите позже |
Примеры кода¶
Python (OpenAI SDK, рекомендуется)¶
from openai import OpenAI
import base64
client = OpenAI(
base_url="https://api.qcode.cc/qcode-img/v1",
api_key="cr_YOUR_QCODE_API_KEY",
timeout=180.0,
)
result = client.images.generate(
model="gpt-image-2",
prompt="A cyberpunk Tokyo street at night, neon reflecting in rain puddles",
size="1024x1024",
quality="low",
n=1,
)
img_bytes = base64.b64decode(result.data[0].b64_json)
with open("output.png", "wb") as f:
f.write(img_bytes)
print("Сохранено в output.png")
curl¶
curl https://api.qcode.cc/qcode-img/v1/images/generations \
-H "Authorization: Bearer cr_YOUR_QCODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A cyberpunk Tokyo street at night",
"size": "1024x1024",
"quality": "low",
"n": 1
}' \
| jq -r ".data[0].b64_json" | base64 -d > output.png
JavaScript / Node.js / браузер¶
const r = await fetch("https://api.qcode.cc/qcode-img/v1/images/generations", {
method: "POST",
headers: {
"Authorization": "Bearer cr_YOUR_QCODE_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "gpt-image-2",
prompt: "A cyberpunk Tokyo street at night",
size: "1024x1024",
quality: "low",
n: 1,
}),
});
const json = await r.json();
const dataUrl = "data:image/png;base64," + json.data[0].b64_json;
document.querySelector("img").src = dataUrl;
Лимиты и квоты¶
Лимиты по умолчанию¶
| Параметр | Значение | Примечание |
|---|---|---|
| Изображений в сутки | 100 / день / ключ | Сброс в 00:00 по Пекину |
| Параллельные запросы | 2 в работе | Превышение даёт 429 concurrency_exhausted |
| Бюджет аккаунта | Общий с dailyCostLimit / totalCostLimit главного QCode-аккаунта |
Превышение даёт 429 crs_daily_exhausted |
Для подавляющего большинства пользователей значений по умолчанию хватает. Для повышения — обратитесь в поддержку.
Просмотр использования¶
- Дашборд клиента: вызовы изображений объединены с чатом (последняя активность, дневная стоимость, накопленная стоимость, разбивка по моделям)
- Страница самообслуживания: https://api.qcode.cc/qcode-img/usage — введите ключ для просмотра статистики за 30 дней, детального журнала вызовов и графика ECharts (ключ хранится только в вашем браузере, на сервер не загружается)
Биллинг¶
Цена за изображение¶
| size | low | medium | high |
|---|---|---|---|
| 1024×1024 | $0.08 (минимум) | $0.08 (минимум) | $0.211 |
| 1024×1536 | $0.08 (минимум) | $0.08 (минимум) | $0.165 |
| 1536×1024 | $0.08 (минимум) | $0.08 (минимум) | $0.165 |
| 2048×2048 | $0.08 (минимум) | $0.08 (минимум) | $0.285 |
Минимум $0.08 за вызов¶
- Если фактическая стоимость < $0.08, выставляется $0.08 (low / medium обычно упираются в этот минимум)
- Если фактическая стоимость ≥ $0.08, выставляется фактическая (без увеличения)
Несколько изображений¶
При n > 1 стоимость линейно увеличивается. Пример: n=2 + 1024×1024 high = 2 × $0.211 = $0.422.
Неудачи не оплачиваются¶
Любой запрос со статусом 4xx / 5xx не тарифицируется. Отключение клиента (закрытие соединения) тоже не тарифицируется.
Валюта¶
Стоимость в USD. Окончательный расчёт по валютной политике главного аккаунта QCode.cc (CNY / USD).
Время генерации и timeout¶
gpt-image-2 — модель на основе reasoning, значительно медленнее традиционных text-to-image (DALL·E 3 / SDXL):
| quality | Типично | Сложный prompt p99 |
|---|---|---|
low |
20 – 35 с | ~50 с |
medium |
50 – 90 с | ~120 с |
high |
70 – 120 с | ~150 с |
Практические рекомендации:
- В OpenAI Python SDK короткий timeout по умолчанию — всегда явно ставьте
timeout=180.0или больше - В браузерном
fetchнет timeout по умолчанию, но если используетеAbortController, давайте минимум 180 с - Пользователи материкового Китая для medium / high должны использовать прямой Шэньчжэньский эндпоинт, иначе столкнутся с проблемой CDN 524 ниже
Жёсткий лимит CDN 100 с (ошибки 524)¶
HTTPS-запросы через api.qcode.cc / asia.qcode.cc / eu.qcode.cc / us.qcode.cc идут через глобальный CDN (CloudFlare). CDN принудительно возвращает 524, если один запрос ждёт ответа источника более 100 секунд.
| quality | Безопасно через CDN 100 с? |
|---|---|
low |
✅ Безопасно (< 35 с) |
medium |
⚠️ Эпизодические попадания в потолок |
high |
❌ Часто 524 |
Решения (рекомендуется для medium / high):
- Используйте Шэньчжэньский HTTP-эндпоинт
http://103.236.53.153/qcode-img/v1напрямую (без CDN, без 100-секундного лимита) - Либо допускайте эпизодические 524 и добавьте автоматический retry на стороне клиента
Советы по prompt¶
- Многоязычность: пишите prompt на английском, русском, китайском или смешанно — всё работает
- Конкретность: окружение, композиция, освещение, стиль, объектив / фокусное расстояние / ракурс и т. п.
- Избегайте брендов и публичных персон: модель может отказаться или вернуть размытый результат (контентная политика OpenAI)
- Рендеринг текста:
gpt-image-2отлично рисует текст внутри изображения — впишите английские / русские / китайские заголовки, короткие фразы, текст постера прямо в prompt; специальный синтаксис не нужен
Пример промпта:
A vintage poster in Bauhaus style, bold black text "MORNING COFFEE" centered,
warm orange and cream color palette, geometric shapes, slightly textured paper background
Отличия от официального API OpenAI¶
| Аспект | OpenAI официально | QCode.cc |
|---|---|---|
| Совместимость SDK | — | ✅ 100% — меняется только base_url |
| Биллинг | По токенам | По таблице выше, минимум $0.08 / изображение |
/v1/images/edits (редактирование) |
Поддерживается | ⏳ Пока нет |
stream + partial_images (инкрементальный поток) |
Поддерживается | ⏳ Пока нет |
/v1/images/generations (главный эндпоинт) |
✅ | ✅ |
Онлайн Playground¶
https://api.qcode.cc/qcode-img/ — попробуйте в браузере:
- Введите API-ключ + prompt — генерация запускается сразу
- Двуязычный UI (EN / ZH)
- По умолчанию
low(без CDN 524) - Встроенный API-справочник (вкладки curl / Python / JavaScript, таблица параметров, коды ошибок)
- Скачивание PNG в один клик
Связанные документы¶
- Эндпоинты и форматы API — все домены, пути протоколов и smoke-тесты
- Биллинг — тарифы, квоты, правила стоимости