Изображения
Генерация и редактирование изображений
Основной Images API принимает текстовый prompt и возвращает массив data. В зависимости от модели результат содержит временный url либо b64_json.
Qwen Image, Wan Image и Z-Image в едином OpenAI Images контракте →
OpenAI Images
Стабильный
| Задача | Путь | Формат |
|---|---|---|
| Генерация | POST /v1/images/generations | JSON |
| Редактирование | POST /v1/images/edits | multipart/form-data |
Генерация
cURL
curl https://neuroapi.host/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Минималистичный постер космической станции, тёмный фон",
"size": "1024x1024",
"quality": "auto"
}'Python · OpenAI SDK
import base64
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://neuroapi.host/v1",
)
result = client.images.generate(
model="gpt-image-2",
prompt="Минималистичный постер космической станции, тёмный фон",
size="1024x1024",
)
image = result.data[0]
if image.b64_json:
with open("result.png", "wb") as file:
file.write(base64.b64decode(image.b64_json))
else:
print(image.url)Node.js · TypeScript
import OpenAI from "openai";
import { writeFile } from "node:fs/promises";
const client = new OpenAI({
apiKey: process.env.NEUROAPI_KEY,
baseURL: "https://neuroapi.host/v1",
});
const result = await client.images.generate({
model: "gpt-image-2",
prompt: "Минималистичный постер космической станции, тёмный фон",
size: "1024x1024",
});
const image = result.data?.[0];
if (image?.b64_json) {
await writeFile("result.png", Buffer.from(image.b64_json, "base64"));
} else {
console.log(image?.url);
}Редактирование
cURL · multipart
curl https://neuroapi.host/v1/images/edits \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "model=gpt-image-2" \
-F "prompt=Замени фон на вечерний город" \
-F "image=@source.png"Важно: Не рассчитывайте на бессрочную доступность URL. Сохраните готовое изображение в своё хранилище или используйте
b64_json, если выбранная модель его возвращает.
Асинхронная генерация
Стабильный
Асинхронная генерация гарантирует, что оплаченная генерация не потеряется: если клиент отключился или сработал клиентский таймаут, сервер доводит задачу до конца, а клиент забирает результат опросом. Тело запроса, авторизация (Bearer-токен), поддержка моделей и цены полностью совпадают с синхронным POST /v1/images/generations.
Создание задачи
Принимает тот же JSON, что и синхронная генерация (model, prompt, n, size, quality и т. д.). При успехе сервер сразу отвечает HTTP 202 и возвращает task_id — сохраните его у себя.
cURL
curl https://neuroapi.host/v1/images/generations/async \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Минималистичный постер космической станции, тёмный фон",
"size": "1024x1024",
"quality": "auto"
}'Ответ · HTTP 202
{
"code": "success",
"data": {
"task_id": "image_0f3d2c1a9b4e4f8a2c7d5e6b1a3f90"
}
}Проверка статуса
Опрос доступен только владельцу задачи (тому же API-токену); для чужих токенов задача возвращает 404.
cURL
curl https://neuroapi.host/v1/images/generations/async/image_0f3d2c1a9b4e4f8a2c7d5e6b1a3f90 \
-H "Authorization: Bearer YOUR_API_KEY"Ответ
{
"code": "success",
"message": "",
"data": {
"task_id": "image_0f3d2c1a9b4e4f8a2c7d5e6b1a3f90",
"status": "SUCCESS",
"progress": "100%",
"outputs": ["https://<cdn-signed-url>"],
"fail_reason": "",
"submit_time": 0,
"start_time": 0,
"finish_time": 0,
"expired": false
}
}outputs содержит свежие подписанные CDN-ссылки, которые генерируются при каждом опросе и действуют 60 минут. Ссылки доступны только при статусе SUCCESS и только в пределах окна хранения; там никогда не бывает ссылок на сторонних провайдеров. После окна хранения статус остаётся SUCCESS, но outputs пуст, а expired равен true.
| Статус | Значение |
|---|---|
QUEUED | задача принята и ждёт выполнения |
IN_PROGRESS | генерация выполняется |
SUCCESS | готово, результат доступен в outputs |
FAILURE | ошибка, причина в fail_reason |
fail_reason содержит безопасное сообщение для пользователя на русском языке — в нём никогда не передаётся сырой текст провайдера.
Опрос результата
Опрашивайте статус раз в 3–5 секунд; более частый polling не ускоряет генерацию.
Python
import time
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://neuroapi.host"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
create = requests.post(
f"{BASE}/v1/images/generations/async",
headers=HEADERS,
json={
"model": "gpt-image-2",
"prompt": "Минималистичный постер космической станции, тёмный фон",
"size": "1024x1024",
},
)
task_id = create.json()["data"]["task_id"]
while True:
data = requests.get(
f"{BASE}/v1/images/generations/async/{task_id}",
headers=HEADERS,
).json()["data"]
if data["status"] == "SUCCESS":
print(data["outputs"])
break
if data["status"] == "FAILURE":
raise RuntimeError(data["fail_reason"])
time.sleep(4) # опрашивайте раз в 3–5 секундВажно: Результат хранится 1 час после готовности, затем удаляется безвозвратно.
Информация: Изображения сохраняются как есть, без сжатия и перекодирования.
Gemini image generation
Бета
Используйте Gemini-совместимый формат, когда нужны interleaved text/image parts или разговорное редактирование. Изображение возвращается как inlineData.data внутри candidates[].content.parts.
cURL
curl "https://neuroapi.host/v1beta/models/gemini-3.1-flash-lite-image:generateContent" \
-H "x-goog-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{
"role": "user",
"parts": [{"text": "Создай акварельную иллюстрацию маяка во время шторма"}]
}],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"]
}
}'Входные изображения
- Для небольших файлов Base64/data URL обычно надёжнее внешней ссылки.
- Внешняя ссылка должна быть публичной HTTPS-ссылкой без авторизации.
- Ссылки на локальные, приватные и внутренние адреса не принимаются.
- Если внешний ресурс медленный или ограничен сетевой фильтрацией, скачайте файл и передайте Base64.
Информация: Параметры
size,quality, число изображений и поддержка edits зависят от модели. Сверяйтесь с её карточкой в каталоге.