Skip to content

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

Эндпоинт POST /v1/images/generations позволяет создавать изображения из текстовых запросов. Совместим с OpenAI Images API.

Поддерживаемые модели

МодельПровайдерОписание
gemini-3.1-flash-image-previewGoogleGemini 3.1 Flash, расширенные форматы
gemini-3-pro-image-previewGoogleGemini 3 Pro
gemini-2.5-flash-imageGoogleGemini 2.5 Flash
flux.2-proBlack Forest LabsПрофессиональная
flux.2-maxBlack Forest LabsМаксимальное качество
flux.2-flexBlack Forest LabsГибкая
flux.2-klein-4bBlack Forest LabsКомпактная
seedream-4.5ByteDanceSeedream от ByteDance

Базовая генерация

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

response = client.images.generate(
    model="gemini-2.5-flash-image",
    prompt="Красивый закат над горами",
)

print(response.data[0].url[:50])
python
import requests

response = requests.post(
    "https://api.aitunnel.ru/v1/images/generations",
    headers={"Authorization": "Bearer sk-aitunnel-xxx"},
    json={
        "model": "gemini-2.5-flash-image",
        "prompt": "Красивый закат над горами",
    }
)

result = response.json()
print(result["data"][0]["url"][:50])
typescript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-aitunnel-xxx",
  baseURL: "https://api.aitunnel.ru/v1/",
});

const response = await client.images.generate({
  model: "gemini-2.5-flash-image",
  prompt: "Красивый закат над горами",
});

console.log(response.data[0].url?.slice(0, 50));
shell
curl https://api.aitunnel.ru/v1/images/generations \
  -H "Authorization: Bearer sk-aitunnel-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-2.5-flash-image",
    "prompt": "Красивый закат над горами"
  }'

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

ПараметрТипОбязательныйОписание
modelstringДаМодель для генерации
promptstringДаТекстовое описание изображения
nintegerНетКоличество изображений (по умолчанию 1)
sizestringНетРазмер в формате 1024x1024 — используется для выбора ближайшего соотношения сторон
image_configobjectНетРасширенные настройки изображения (см. ниже)

Настройка image_config

Параметр image_config позволяет точно управлять форматом и разрешением генерируемых изображений.

Соотношение сторон

Установите image_config.aspect_ratio для выбора нужного формата.

Поддерживаемые соотношения сторон:

СоотношениеРазрешение
1:11024×1024 (по умолчанию)
2:3832×1248
3:21248×832
3:4864×1184
4:31184×864
4:5896×1152
5:41152×896
9:16768×1344
16:91344×768
21:91536×672

Расширенные соотношения (только для gemini-3.1-flash-image-preview):

СоотношениеОписание
1:4Высокий узкий формат для вертикальных UI
4:1Широкий горизонтальный баннер
1:8Экстра-высокий для уведомлений и узких элементов
8:1Экстра-широкий для панорамных баннеров

Разрешение изображения

Установите image_config.image_size для управления качеством (Gemini):

ЗначениеРазрешение
1KСтандартное (по умолчанию)
2KВысокое
4KМаксимальное
0.5KЭффективное (только gemini-3.1-flash-image-preview)

Пример с aspect_ratio и image_size

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

response = client.images.generate(
    model="gemini-3-pro-image-preview",
    prompt="Нано-банановое блюдо в фешенебельном ресторане",
    extra_body={
        "image_config": {
            "aspect_ratio": "16:9",
            "image_size": "4K",
        }
    },
)

print(response.data[0].url[:50])
python
import requests

response = requests.post(
    "https://api.aitunnel.ru/v1/images/generations",
    headers={"Authorization": "Bearer sk-aitunnel-xxx"},
    json={
        "model": "gemini-3-pro-image-preview",
        "prompt": "Нано-банановое блюдо в фешенебельном ресторане",
        "image_config": {
            "aspect_ratio": "16:9",
            "image_size": "4K",
        },
    }
)

result = response.json()
print(result["data"][0]["url"][:50])
typescript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-aitunnel-xxx",
  baseURL: "https://api.aitunnel.ru/v1/",
});

const response = await client.images.generate({
  model: "gemini-3-pro-image-preview",
  prompt: "Нано-банановое блюдо в фешенебельном ресторане",
  // @ts-ignore
  image_config: {
    aspect_ratio: "16:9",
    image_size: "4K",
  },
});

console.log(response.data[0].url?.slice(0, 50));
shell
curl https://api.aitunnel.ru/v1/images/generations \
  -H "Authorization: Bearer sk-aitunnel-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3-pro-image-preview",
    "prompt": "Нано-банановое блюдо в фешенебельном ресторане",
    "image_config": {
      "aspect_ratio": "16:9",
      "image_size": "4K"
    }
  }'

Параметр size vs image_config

Если вы передаёте size (например, 1792x1024), он автоматически конвертируется в ближайшее поддерживаемое соотношение сторон. Для точного контроля используйте image_config.aspect_ratio напрямую.

Формат ответа

json
{
  "created": 1234567890,
  "data": [
    {
      "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
    }
  ]
}

Изображения возвращаются как base64-кодированные data URL в поле data[0].url.

Примеры использования

Художественное изображение

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

response = client.images.generate(
    model="gemini-2.5-flash-image",
    prompt="Абстрактная картина в стиле Кандинского с яркими цветами",
)

print(response.data[0].url[:50])
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-aitunnel-xxx",
  baseURL: "https://api.aitunnel.ru/v1/",
});

const response = await client.images.generate({
  model: "gemini-2.5-flash-image",
  prompt: "Абстрактная картина в стиле Кандинского с яркими цветами",
});

console.log(response.data[0].url.slice(0, 50));

Иллюстрация для статьи

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

response = client.images.generate(
    model="flux.2-pro",
    prompt="Солнечные панели и ветряки на зелёном холме, фотореализм",
)

print(response.data[0].url[:50])
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-aitunnel-xxx",
  baseURL: "https://api.aitunnel.ru/v1/",
});

const response = await client.images.generate({
  model: "flux.2-pro",
  prompt: "Солнечные панели и ветряки на зелёном холме, фотореализм",
});

console.log(response.data[0].url.slice(0, 50));

Портретный формат

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

response = client.images.generate(
    model="gemini-3-pro-image-preview",
    prompt="Портрет девушки в стиле ренессанс",
    extra_body={
        "image_config": {
            "aspect_ratio": "2:3",
            "image_size": "2K",
        }
    },
)

print(response.data[0].url[:50])
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-aitunnel-xxx",
  baseURL: "https://api.aitunnel.ru/v1/",
});

const response = await client.images.generate({
  model: "gemini-3-pro-image-preview",
  prompt: "Портрет девушки в стиле ренессанс",
  image_config: {
    aspect_ratio: "2:3",
    image_size: "2K",
  },
});

console.log(response.data[0].url.slice(0, 50));

Лучшие практики

  • Чёткие промпты: Указывайте стиль, цвета, композицию и настроение
  • Выбор модели: Gemini лучше справляется с художественными запросами, Flux — с фотореализмом
  • Хранение: Декодируйте base64 и сохраняйте файл — не храните сырые data URL в БД
  • Обработка ошибок: Проверяйте наличие поля data перед обращением к результату

AITUNNEL