Генерация изображения
В API генерацию изображения можно запустить двумя способами:
- Модели изображений —
POST /api/v1/images. Запрос сразу отвечает 202, результат забирается поллингом. В SDK OpenAI:client.post("/images", ...), не черезclient.images.generate(). - Мультимодальные модели (текст + картинка) —
POST /api/v1/responsesсtoolstype=image_generation. HTTP ждёт полный объект Response. В SDK OpenAI:client.responses.create().
Подробно о модальностях каждой модели можно узнать на странице моделей.
Параметры запроса
POST /api/v1/images принимает модели изображений. Мультимодальные модели на этот путь отправлять нельзя.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| model | string | Да | Название модели изображения из списка |
| prompt | string | Да | Запрос к нейросети |
| size | string | Нет | Размер изображения (например: "1k", "1024x1024"). Поддерживаемые значения зависят от модели. |
| quality | string | Нет | Качество изображения (например: "low", "medium", "high"). Поддерживаемые значения зависят от модели. |
| aspect_ratio | string | Нет | Соотношение сторон (например: "1:1", "4:3", "9:16"). Поддерживаемые значения зависят от модели. |
Пример запроса
import time
import base64
import httpx
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://ai.mitup.ru/api/v1",
)
response = client.post("/images",
body={
"model": "gpt-image-2",
"prompt": "Нарисуй 3 варианта логотипа платформы Mitup AI.",
},
cast_to=httpx.Response,
)
data = response.json()
task_id = data["id"]
while True:
status_response = client.get(f"/images/{task_id}", cast_to=httpx.Response)
data = status_response.json()
status = data.get("status")
if status == "completed":
for index, item in enumerate(data.get("data") or []):
filename = f"output_{index}.png"
with open(filename, "wb") as f:
f.write(base64.b64decode(item["b64_json"]))
print("Изображение сохранено:", filename)
break
if status == "failed":
print("Ошибка:", data.get("error"))
break
time.sleep(2)import time
import base64
import requests
url = "https://ai.mitup.ru/api/v1/images"
api_key = "YOUR_API_KEY"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
params = {
"model": "gpt-image-2",
"prompt": "Нарисуй 3 варианта логотипа платформы Mitup AI."
}
response = requests.post(url, json=params, headers=headers)
data = response.json()
task_id = data["id"]
while True:
status_response = requests.get(f"https://ai.mitup.ru/api/v1/images/{task_id}", headers=headers)
data = status_response.json()
status = data.get("status")
if status == "completed":
for index, item in enumerate(data.get("data") or []):
filename = f"output_{index}.png"
with open(filename, "wb") as f:
f.write(base64.b64decode(item["b64_json"]))
print("Изображение сохранено:", filename)
break
if status == "failed":
print("Ошибка:", data.get("error"))
break
time.sleep(2)curl -X POST "https://ai.mitup.ru/api/v1/images" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "gpt-image-2",
"prompt": "Нарисуй 3 варианта логотипа платформы Mitup AI."
}'
curl -X GET "https://ai.mitup.ru/api/v1/images/YOUR_TASK_ID" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY"<?php
$url = "https://ai.mitup.ru/api/v1/images";
$api_key = "YOUR_API_KEY";
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . $api_key,
];
$params = [
"model" => "gpt-image-2",
"prompt" => "Нарисуй 3 варианта логотипа платформы Mitup AI.",
];
$data = json_encode($params, JSON_UNESCAPED_UNICODE);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'mitupai-API-client');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response, true);
$task_id = $response['id'] ?? '';
do {
sleep(2);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'mitupai-API-client');
curl_setopt($ch, CURLOPT_URL, "https://ai.mitup.ru/api/v1/images/" . $task_id);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
$poll = json_decode(curl_exec($ch), true);
curl_close($ch);
$status = $poll['status'] ?? '';
} while (in_array($status, ['pending', 'processing'], true));
if ($status === 'completed') {
foreach ($poll['data'] ?? [] as $index => $item) {
$filename = "output_{$index}.png";
file_put_contents($filename, base64_decode($item['b64_json'] ?? ''));
echo "Изображение сохранено: {$filename}\n";
}
} else {
echo "Ошибка: " . json_encode($poll['error'] ?? $poll, JSON_UNESCAPED_UNICODE) . "\n";
}
?>Пример запроса с референсным изображением
import httpx
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://ai.mitup.ru/api/v1",
)
response = client.post("/images",
body={
"model": "gpt-image-2",
"prompt": "На основе этого изображения нарисуй 3 варианта логотипа сервиса Mitup AI.",
"image": [
{"type": "input_image", "image_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="}
],
},
cast_to=httpx.Response,
)
data = response.json()
print(data)import requests
url = "https://ai.mitup.ru/api/v1/images"
api_key = "YOUR_API_KEY"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
params = {
"model": "gpt-image-2",
"prompt": "На основе этого изображения нарисуй 3 варианта логотипа сервиса Mitup AI.",
"image": [
{"type": "input_image", "image_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="}
]
}
response = requests.post(url, json=params, headers=headers)
print(response.json())curl -X POST "https://ai.mitup.ru/api/v1/images" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "gpt-image-2",
"prompt": "На основе этого изображения нарисуй 3 варианта логотипа сервиса Mitup AI.",
"image": [
{"type": "input_image", "image_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="}
]
}'<?php
$url = "https://ai.mitup.ru/api/v1/images";
$api_key = "YOUR_API_KEY";
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . $api_key,
];
$params = [
"model" => "gpt-image-2",
"prompt" => "На основе этого изображения нарисуй 3 варианта логотипа сервиса Mitup AI.",
"image" => [
["type" => "input_image", "image_url" => "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="]
]
];
$data = json_encode($params, JSON_UNESCAPED_UNICODE);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'mitupai-API-client');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response, true);
print_r($response);
?>Пример ответа статуса задачи при поллинге:
{
"id": "YOUR_TASK_ID",
"status": "pending"
}{
"id": "YOUR_TASK_ID",
"status": "completed",
"created": 1710000000,
"data": [{"b64_json": "..."}],
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"total_tokens": 0
}
}{
"id": "YOUR_TASK_ID",
"created": 1710000000,
"status": "failed",
"error": {
"message": "...",
"type": "server_error",
"code": "500"
}
}Мультимодальная генерация через /responses
Вы можете отправить запрос к текстовой модели и подключить инструмент генерации изображений через Responses API. Модель сама решает, когда вызвать инструмент, исходя из контекста запроса.
Укажите текстовую модель и добавьте инструмент image_generation в массив tools. Параметры размера передаются внутри элемента tools: size, quality, aspect_ratio.
from openai import OpenAI
import base64
import json
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://ai.mitup.ru/api/v1",
)
response = client.responses.create(
model="gpt-5.6",
input="Нарисуй 3 варианта логотипа платформы Mitup AI.",
tools=[
{
"type": "image_generation",
"size": "1K",
"aspect_ratio": "1:1",
},
],
)
print("Текст ответа:")
print(response.output_text)
print("\n" + "=" * 50 + "\n")
for item in response.output:
if item.type == "image_generation_call" and item.result:
image_data = base64.b64decode(item.result)
with open("output.png", "wb") as f:
f.write(image_data)
print("Изображение сохранено: output.png")
print("Полный ответ (JSON):")
print(json.dumps(response.model_dump(), indent=2, ensure_ascii=False))import base64
import json
import requests
url = "https://ai.mitup.ru/api/v1/responses"
api_key = "YOUR_API_KEY"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
params = {
"model": "gpt-5.6",
"input": "Нарисуй 3 варианта логотипа платформы Mitup AI.",
"tools": [
{
"type": "image_generation",
"size": "1K",
"aspect_ratio": "1:1"
}
]
}
response = requests.post(url, json=params, headers=headers)
data = response.json()
print("Текст ответа:")
for item in data.get("output") or []:
if item.get("type") != "message":
continue
for part in item.get("content") or []:
if part.get("type") in ("output_text", "text"):
print(part.get("text") or "")
print("\n" + "=" * 50 + "\n")
for item in data.get("output") or []:
if item.get("type") == "image_generation_call" and item.get("result"):
image_data = base64.b64decode(item["result"])
with open("output.png", "wb") as f:
f.write(image_data)
print("Изображение сохранено: output.png")
print("Полный ответ (JSON):")
print(json.dumps(data, indent=2, ensure_ascii=False))curl -X POST "https://ai.mitup.ru/api/v1/responses" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "gpt-5.6",
"input": "Нарисуй 3 варианта логотипа платформы Mitup AI.",
"tools": [
{
"type": "image_generation",
"size": "1K",
"aspect_ratio": "1:1"
}
]
}'<?php
$url = "https://ai.mitup.ru/api/v1/responses";
$api_key = "YOUR_API_KEY";
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . $api_key,
];
$params = [
"model" => "gpt-5.6",
"input" => "Нарисуй 3 варианта логотипа платформы Mitup AI.",
"tools" => [
[
"type" => "image_generation",
"size" => "1K",
"aspect_ratio" => "1:1"
]
]
];
$data = json_encode($params, JSON_UNESCAPED_UNICODE);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'mitupai-API-client');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response, true);
echo "Текст ответа:\n";
foreach ($response['output'] ?? [] as $item) {
if (($item['type'] ?? '') !== 'message') {
continue;
}
foreach ($item['content'] ?? [] as $part) {
if (in_array($part['type'] ?? '', ['output_text', 'text'], true)) {
echo ($part['text'] ?? '') . "\n";
}
}
}
echo "\n" . str_repeat("=", 50) . "\n\n";
foreach ($response['output'] ?? [] as $item) {
if (($item['type'] ?? '') === 'image_generation_call' && !empty($item['result'])) {
file_put_contents('output.png', base64_decode($item['result']));
echo "Изображение сохранено: output.png\n";
}
}
echo "Полный ответ (JSON):\n";
echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>Пример ответа:
{
"id": "YOUR_TASK_ID",
"object": "response",
"status": "in_progress"
}{
"id": "YOUR_TASK_ID",
"object": "response",
"created_at": 1710000000,
"status": "completed",
"model": "gpt-5.6",
"output": [
{
"id": "ig_YOUR_TASK_ID_0",
"type": "image_generation_call",
"status": "completed",
"result": "..."
},
{
"id": "msg_YOUR_TASK_ID",
"type": "message",
"status": "completed",
"role": "assistant",
"content": [{
"type": "output_text",
"text": "Готово: три варианта логотипа платформы Mitup AI. Первый — минималистичный знак из буквы M, второй — знак с волной генерации, третий — комбинация монограммы и названия.",
"annotations": []
}]
}
],
"parallel_tool_calls": true,
"text": {"format": {"type": "text"}},
"tool_choice": "auto",
"tools": [
{
"type": "image_generation",
"size": "1K",
"aspect_ratio": "1:1"
}
],
"usage": {
"input_tokens": 12,
"input_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0},
"output_tokens": 40,
"output_tokens_details": {"reasoning_tokens": 0},
"total_tokens": 52
}
}{
"error": {
"message": "The model failed to generate a response.",
"type": "api_error",
"param": null,
"code": "api_error"
}
}Удалить задачу любого типа можно на странице Удаление задачи.