Генерация изображений
Эндпоинт POST /v1/images/generations позволяет создавать изображения из текстовых запросов. Совместим с OpenAI Images API.
Поддерживаемые модели
| Модель | Провайдер | Описание |
|---|---|---|
gemini-3.1-flash-image-preview | Gemini 3.1 Flash, расширенные форматы | |
gemini-3-pro-image-preview | Gemini 3 Pro | |
gemini-2.5-flash-image | Gemini 2.5 Flash | |
flux.2-pro | Black Forest Labs | Профессиональная |
flux.2-max | Black Forest Labs | Максимальное качество |
flux.2-flex | Black Forest Labs | Гибкая |
flux.2-klein-4b | Black Forest Labs | Компактная |
seedream-4.5 | ByteDance | Seedream от ByteDance |
Базовая генерация
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])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])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));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": "Красивый закат над горами"
}'Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | string | Да | Модель для генерации |
prompt | string | Да | Текстовое описание изображения |
n | integer | Нет | Количество изображений (по умолчанию 1) |
size | string | Нет | Размер в формате 1024x1024 — используется для выбора ближайшего соотношения сторон |
image_config | object | Нет | Расширенные настройки изображения (см. ниже) |
Настройка image_config
Параметр image_config позволяет точно управлять форматом и разрешением генерируемых изображений.
Соотношение сторон
Установите image_config.aspect_ratio для выбора нужного формата.
Поддерживаемые соотношения сторон:
| Соотношение | Разрешение |
|---|---|
1:1 | 1024×1024 (по умолчанию) |
2:3 | 832×1248 |
3:2 | 1248×832 |
3:4 | 864×1184 |
4:3 | 1184×864 |
4:5 | 896×1152 |
5:4 | 1152×896 |
9:16 | 768×1344 |
16:9 | 1344×768 |
21:9 | 1536×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
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])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])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));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 напрямую.
Формат ответа
{
"created": 1234567890,
"data": [
{
"url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}
]
}Изображения возвращаются как base64-кодированные data URL в поле data[0].url.
Примеры использования
Художественное изображение
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])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));Иллюстрация для статьи
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])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));Портретный формат
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])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перед обращением к результату