Генерация изображения

Генерация изображения

В API генерацию изображения можно запустить двумя способами:

  • Модели изображений — POST /api/v1/images. Запрос сразу отвечает 202, результат забирается поллингом. В SDK OpenAI: client.post("/images", ...), не через client.images.generate().
  • Мультимодальные модели (текст + картинка) — POST /api/v1/responses с tools type=image_generation. HTTP ждёт полный объект Response. В SDK OpenAI: client.responses.create().

Подробно о модальностях каждой модели можно узнать на странице моделей.

Параметры запроса

POST /api/v1/images принимает модели изображений. Мультимодальные модели на этот путь отправлять нельзя.

ПараметрТипОбязательныйОписание
modelstringДаНазвание модели изображения из списка
promptstringДаЗапрос к нейросети
sizestringНетРазмер изображения (например: "1k", "1024x1024"). Поддерживаемые значения зависят от модели.
qualitystringНетКачество изображения (например: "low", "medium", "high"). Поддерживаемые значения зависят от модели.
aspect_ratiostringНетСоотношение сторон (например: "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"
    }
}

Удалить задачу любого типа можно на странице Удаление задачи.

Чат-боты

Выберите чат-бота на интересующую вас тематику и начните с ним работу

Сайт использует cookies

Продолжая работу, вы принимаете оферту, пользовательское соглашение и политику конфиденциальности.