Для получения чистого Markdown любой страницы добавьте .md к URL страницы.
Для полного индекса документации см. https://api.vega.chat/docs/llms.txt.
Для полного содержания документации см. https://api.vega.chat/docs/llms-full.txt.
Для интеграции AI‑клиентов (Claude Code, Cursor и др.) подключитесь к MCP‑серверу по адресу https://api.vega.chat/docs/_mcp/server.

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

MD версия

VEGA поддерживает генерацию изображений через эндпоинты Chat Completions и Responses. Поддерживаемые модели, их возможности и цены можно посмотреть, отфильтровав наш список моделей по выводу изображений.

Поиск моделей

Модели для генерации изображений можно найти несколькими способами:

Через API

Используйте параметр запроса output_modalities в Models API, чтобы программно обнаружить модели генерации изображений:

bash
# Вывести только модели генерации изображений
curl "https://api.vega.chat/api/v1/models?output_modalities=image"

# Вывести модели, поддерживающие как текст, так и изображения
curl "https://api.vega.chat/api/v1/models?output_modalities=text,image"

Смотрите Models – Query Parameters для полного списка поддерживаемых значений модальностей.

На странице моделей

Перейдите на страницу моделей и отфильтруйте по модальностям вывода, чтобы найти модели, способные генерировать изображения. Ищите модели, у которых в output_modalities указано "image".

В чат‑комнате

При использовании чат‑комнаты нажмите кнопку Image, чтобы автоматически отфильтровать и выбрать модели с возможностью генерации изображений. Если активной модели с поддержкой изображений нет, вам будет предложено добавить её.

Использование API

Для генерации изображений отправьте запрос к эндпоинту /api/v1/chat/completions с параметром modalities. Значение зависит от возможностей модели:

  • Модели, выводящие и текст, и изображения (например, Gemini): modalities: ["image", "text"]
  • Модели, выводящие только изображения (например, Sourceful, Flux): modalities: ["image"]

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

typescript
import { OpenRouter } from '@openrouter/sdk';

const client = new OpenRouter({
  apiKey: '{{API_KEY_REF}}',
});

const result = await client.chat.send({
  model: '{{MODEL}}',
  messages: [
    {
      role: 'user',
      content: 'Generate a beautiful sunset over mountains',
    },
  ],
  modalities: ['image', 'text'],
  stream: false,
});

// Сгенерированное изображение будет в сообщении ассистента
if (result.choices) {
  const message = result.choices[0].message;
  if (message.images) {
    message.images.forEach((image, index) => {
      const imageUrl = image.imageUrl.url; // Base64 data URL
      console.log(`Generated image ${index + 1}: ${imageUrl.substring(0, 50)}...`);
    });
  }
}
python
import requests
import json

url = "https://api.vega.chat/api/v1/chat/completions"
headers = {
    "Authorization": f"Bearer {API_KEY_REF}",
    "Content-Type": "application/json"
}

payload = {
    "model": "{{MODEL}}",
    "messages": [
        {
            "role": "user",
            "content": "Generate a beautiful sunset over mountains"
        }
    ],
    "modalities": ["image", "text"]
}

response = requests.post(url, headers=headers, json=payload)
result = response.json()

# Сгенерированное изображение будет в сообщении ассистента
if result.get("choices"):
    message = result["choices"][0]["message"]
    if message.get("images"):
        for image in message["images"]:
            image_url = image["image_url"]["url"]  # Base64 data URL
            print(f"Generated image: {image_url[:50]}...")
typescript
const response = await fetch('https://api.vega.chat/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${API_KEY_REF}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '{{MODEL}}',
    messages: [
      {
        role: 'user',
        content: 'Generate a beautiful sunset over mountains',
      },
    ],
    modalities: ['image', 'text'],
  }),
});

const result = await response.json();

// Сгенерированное изображение будет в сообщении ассистента
if (result.choices) {
  const message = result.choices[0].message;
  if (message.images) {
    message.images.forEach((image, index) => {
      const imageUrl = image.image_url.url; // Base64 data URL
      console.log(`Generated image ${index + 1}: ${imageUrl.substring(0, 50)}...`);
    });
  }
}

Параметры конфигурации изображения

Некоторые модели генерации изображений поддерживают дополнительную настройку через параметр 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

Соотношения сторон Azure MAI Image (поддерживает microsoft/mai-image-2.5):

  • 1:1 → 1024×1024 (по умолчанию)
  • 4:3 → 1024×768
  • 3:4 → 768×1024
  • 16:9 → 1365×768
  • 9:16 → 768×1365
  • 3:2 → 1152×768
  • 2:3 → 768×1152

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

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

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

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

Поддерживаемые размеры:

  • 1K → Стандартное разрешение (по умолчанию)
  • 2K → Более высокое разрешение
  • 4K → Наивысшее разрешение
  • 0.5K → Низкое разрешение, оптимизировано для эффективности (поддерживается только google/gemini-3.1-flash-image-preview)

Вы можете комбинировать aspect_ratio и image_size в одном запросе:

python
import requests
import json

url = "https://api.vega.chat/api/v1/chat/completions"
headers = {
    "Authorization": f"Bearer {API_KEY_REF}",
    "Content-Type": "application/json"
}

payload = {
    "model": "{{MODEL}}",
    "messages": [
        {
            "role": "user",
            "content": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"
        }
    ],
    "modalities": ["image", "text"],
    "image_config": {
        "aspect_ratio": "16:9",
        "image_size": "4K"
    }
}

response = requests.post(url, headers=headers, json=payload)
result = response.json()

if result.get("choices"):
    message = result["choices"][0]["message"]
    if message.get("images"):
        for image in message["images"]:
            image_url = image["image_url"]["url"]
            print(f"Generated image: {image_url[:50]}...")
typescript
const response = await fetch('https://api.vega.chat/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${API_KEY_REF}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '{{MODEL}}',
    messages: [
      {
        role: 'user',
        content: 'Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme',
      },
    ],
    modalities: ['image', 'text'],
    image_config: {
      aspect_ratio: '16:9',
      image_size: '4K',
    },
  }),
});

const result = await response.json();

if (result.choices) {
  const message = result.choices[0].message;
  if (message.images) {
    message.images.forEach((image, index) => {
      const imageUrl = image.image_url.url;
      console.log(`Generated image ${index + 1}: ${imageUrl.substring(0, 50)}...`);
    });
  }
}

Strength (только Recraft)

Установите image_config.strength, чтобы контролировать степень отклонения выходного изображения от входного при генерации «image‑to‑image». Параметр применяется только при передаче входных изображений в messages и поддерживается только моделями Recraft.

  • Диапазон: 0.0 – 1.0
  • По умолчанию: 0.2
  • Меньшие значения дают результат, ближе к входному изображению; большие — более креативное отклонение.

Пример:

json
{
  "image_config": {
    "strength": 0.7
  }
}

Text Layout (только Recraft V3)

Используйте image_config.text_layout, чтобы разместить текст в определённых позициях на генерируемом изображении. Каждый элемент описывает текст и ограничивающий прямоугольник, заданный четырьмя угловыми точками в нормализованных координатах (0 – 1). Параметр поддерживается только Recraft V3 (recraft/recraft-v3) для запросов как text‑to‑image, так и image‑to‑image. Recraft V4 и V4 Pro не поддерживают text_layout.

Каждый элемент имеет:

  • text (обязательно): строка текста
  • bbox (обязательно): массив из 4 пар координат [x, y], определяющих углы (верх‑лево, верх‑право, низ‑право, низ‑лево) в диапазоне 0‑1

Пример:

json
{
  "image_config": {
    "text_layout": [
      {
        "text": "Hello",
        "bbox": [[0.3, 0.45], [0.6, 0.45], [0.6, 0.55], [0.3, 0.55]]
      },
      {
        "text": "World",
        "bbox": [[0.35, 0.6], [0.65, 0.6], [0.65, 0.7], [0.35, 0.7]]
      }
    ]
  }
}

Style (только Recraft V3)

Используйте image_config.style, чтобы применить к изображению определённый художественный стиль. Параметр поддерживается только Recraft V3 (recraft/recraft-v3). Recraft V4 и V4 Pro стили не поддерживают.

Смотрите полный список доступных стилей в документации Recraft. Векторные стили не поддерживаются.

Пример:

json
{
  "image_config": {
    "style": "Photorealism"
  }
}

RGB‑цвета (только Recraft)

Используйте image_config.rgb_colors, чтобы задать палитру цветов, влияющую на генерируемое изображение. Каждый цвет задаётся массивом [r, g, b] из трёх целых (0‑255). Параметр поддерживается моделями Recraft для запросов как text‑to‑image, так и image‑to‑image.

Пример:

json
{
  "image_config": {
    "rgb_colors": [
      [255, 0, 0],
      [0, 128, 0]
    ]
  }
}

Фоновый RGB‑цвет (только Recraft)

Используйте image_config.background_rgb_color, чтобы задать конкретный цвет фона генерируемого изображения. Значение — массив [r, g, b] из трёх целых (0‑255). Параметр поддерживается моделями Recraft для запросов как text‑to‑image, так и image‑to‑image.

Пример:

json
{
  "image_config": {
    "background_rgb_color": [0, 0, 255]
  }
}

Можно комбинировать rgb_colors и background_rgb_color в одном запросе:

json
{
  "image_config": {
    "rgb_colors": [[255, 0, 0]],
    "background_rgb_color": [255, 255, 255]
  }
}

Font Inputs (только Sourceful)

Используйте image_config.font_inputs, чтобы отрисовать пользовательский текст определёнными шрифтами в генерируемых изображениях. Текст, который вы хотите отобразить, также должен присутствовать в вашем запросе для лучшего результата. Параметр поддерживается только моделями Sourceful (sourceful/riverflow-v2-fast и sourceful/riverflow-v2-pro).

Каждый ввод шрифта — объект с:

  • font_url (обязательно): URL к файлу шрифта
  • text (обязательно): Текст, который нужно отрисовать этим шрифтом

Ограничения:

  • Максимум 2 шрифта в запросе
  • Дополнительная стоимость: $0.03 за каждый шрифт

Пример:

json
{
  "image_config": {
    "font_inputs": [
      {
        "font_url": "https://example.com/fonts/custom-font.ttf",
        "text": "Hello World"
      }
    ]
  }
}

Советы для лучшего результата:

  • Включайте текст в запрос вместе с деталями о названии шрифта, цвете, размере и позиции
  • Параметр text должен точно соответствовать тому, что указано в запросе — избегайте лишних слов или кавычек
  • Используйте разрывы строк или двойные пробелы для разделения заголовков и подзаголовков при одинаковом шрифте
  • Наилучший результат достигается с короткими, чёткими заголовками и подзаголовками

Super Resolution References (только Sourceful)

Используйте image_config.super_resolution_references, чтобы улучшить низкокачественные элементы входного изображения с помощью высококачественных референсных изображений. Выходное изображение будет того же размера, что и входное, поэтому используйте более крупные входные изображения для лучшего результата. Параметр поддерживается только моделями Sourceful (sourceful/riverflow-v2-fast и sourceful/riverflow-v2-pro) при генерации image‑to‑image (т.е. когда в messages передаются изображения).

Ограничения:

  • Максимум 4 URL‑референса в запросе
  • Работает только с запросами image‑to‑image (игнорируется, если в messages нет изображений)
  • Дополнительная стоимость: 20 ₽ за каждый референс

Пример:

json
{
  "image_config": {
    "super_resolution_references": [
      "https://example.com/reference1.jpg",
      "https://example.com/reference2.jpg"
    ]
  }
}

Советы для лучшего результата:

  • Предоставьте входное изображение, где нужные элементы присутствуют, но имеют низкое качество
  • Используйте более крупные входные изображения для лучшего качества вывода (вывод совпадает с размером входа)
  • Выбирайте высококачественные референсные изображения, демонстрирующие желаемый вид улучшенных элементов

Потоковая генерация изображений

Генерация изображений также работает с потоковыми ответами:

python
import requests
import json

url = "https://api.vega.chat/api/v1/chat/completions"
headers = {
    "Authorization": f"Bearer {API_KEY_REF}",
    "Content-Type": "application/json"
}

payload = {
    "model": "{{MODEL}}",
    "messages": [
        {
            "role": "user",
            "content": "Create an image of a futuristic city"
        }
    ],
    "modalities": ["image", "text"],
    "stream": True
}

response = requests.post(url, headers=headers, json=payload, stream=True)

for line in response.iter_lines():
    if line:
        line = line.decode('utf-8')
        if line.startswith('data: '):
            data = line[6:]
            if data != '[DONE]':
                try:
                    chunk = json.loads(data)
                    if chunk.get("choices"):
                        delta = chunk["choices"][0].get("delta", {})
                        if delta.get("images"):
                            for image in delta["images"]:
                                print(f"Generated image: {image['image_url']['url'][:50]}...")
                except json.JSONDecodeError:
                    continue
typescript
const response = await fetch('https://api.vega.chat/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${API_KEY_REF}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '{{MODEL}}',
    messages: [
      {
        role: 'user',
        content: 'Create an image of a futuristic city',
      },
    ],
    modalities: ['image', 'text'],
    stream: true,
  }),
});

const reader = response.body?.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;

  const chunk = decoder.decode(value);
  const lines = chunk.split('\n');

  for (const line of lines) {
    if (line.startsWith('data: ')) {
      const data = line.slice(6);
      if (data !== '[DONE]') {
        try {
          const parsed = JSON.parse(data);
          if (parsed.choices) {
            const delta = parsed.choices[0].delta;
            if (delta?.images) {
              delta.images.forEach((image, index) => {
                console.log(`Generated image ${index + 1}: ${image.image_url.url.substring(0, 50)}...`);
              });
            }
          }
        } catch (e) {
          // Пропустить некорректный JSON
        }
      }
    }
  }
}

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

При генерации изображений сообщение ассистента содержит поле images с сгенерированными изображениями:

json
{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "I've generated a beautiful sunset image for you.",
        "images": [
          {
            "type": "image_url",
            "image_url": {
              "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
            }
          }
        ]
      }
    }
  ]
}

Формат изображения

  • Формат: изображения возвращаются в виде base64‑закодированных data‑URL
  • Типы: обычно PNG (data:image/png;base64,)
  • Несколько изображений: некоторые модели могут генерировать несколько изображений в одном ответе
  • Размер: размеры зависят от возможностей модели

Совместимость моделей

Не все модели поддерживают генерацию изображений. Чтобы воспользоваться этой функцией:

  1. Проверьте модальности вывода: убедитесь, что у модели в output_modalities присутствует "image"
  2. Установите параметр modalities: используйте ["image", "text"] для моделей, выводящих и то, и другое, или ["image"] для моделей, выводящих только изображения
  3. Выберите совместимые модели. Примеры:
    • google/gemini-3.1-flash-image-preview (поддерживает расширенные соотношения сторон и разрешение 0.5K)
    • google/gemini-2.5-flash-image
    • black-forest-labs/flux.2-pro
    • black-forest-labs/flux.2-flex
    • sourceful/riverflow-v2-standard-preview
    • Другие модели с возможностью генерации изображений

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

  • Чёткие запросы: предоставляйте детальные описания для лучшего качества изображений
  • Выбор модели: используйте модели, специально предназначенные для генерации изображений
  • Обработка ошибок: проверяйте наличие поля images в ответе перед дальнейшей обработкой
  • Ограничения по скорости: генерация изображений может иметь другие лимиты, чем генерация текста
  • Хранение: продумайте, как будете сохранять и обрабатывать base64‑данные изображений

Устранение неполадок

Нет изображений в ответе?

  • Убедитесь, что модель поддерживает генерацию изображений (output_modalities включает "image")
  • Проверьте, что параметр modalities установлен правильно: ["image", "text"] для моделей, выводящих и то, и другое, или ["image"] для моделей, выводящих только изображения
  • Убедитесь, что ваш запрос действительно запрашивает генерацию изображения

Модель не найдена?

  • Используйте страницу моделей, чтобы найти доступные модели генерации изображений
  • Отфильтруйте по модальностям вывода, чтобы увидеть совместимые модели