Мультимодальность

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

Как создавать изображения через AllTokens и какие параметры для этого использовать.

Генерация изображений доступна у моделей, которые умеют возвращать image в output_modalities. Такие модели создают изображения по текстовому описанию и, в зависимости от модели, могут одновременно возвращать и текстовый ответ.

Как найти подходящую модель

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

Через каталог моделей

В Каталоге моделей можно отфильтровать модели по output_modalities и оставить только те, которые умеют возвращать изображения.

# Только модели для генерации изображений
curl "https://api.alltokens.ru/api/v1/models?output_modalities=image"

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

По полям модели

Если вы уже получили список моделей, смотрите в первую очередь на:

  • architecture.output_modalities — умеет ли модель возвращать изображения
  • supported_parameters — поддерживает ли модель нужные параметры
  • default_parameters — есть ли значения по умолчанию, которые влияют на результат

Как отправить запрос

Для генерации изображений используйте POST /api/v1/chat/completions. В запросе передаётся обычный messages, а тип результата задаётся через modalities.

  • если модель умеет возвращать и текст, и изображение: ["image", "text"]
  • если модель возвращает только изображение: ["image"]

Базовый пример

В примерах ниже используется модель google/gemini-3.1-flash-image-preview.

import requests

url = "https://api.alltokens.ru/api/v1/chat/completions"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

payload = {
    "model": "google/gemini-3.1-flash-image-preview",
    "messages": [
        {
            "role": "user",
            "content": "Нарисуй красивый закат над горами"
        }
    ],
    "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"]
            print(image_url[:80])

Настройки изображения

Некоторые модели поддерживают дополнительные параметры через image_config.

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

Параметр image_config.aspect_ratio задаёт формат изображения.

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

  • 1:1
  • 2:3
  • 3:2
  • 3:4
  • 4:3
  • 4:5
  • 5:4
  • 9:16
  • 16:9
  • 21:9

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

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

Параметр image_config.image_size задаёт разрешение результата.

Часто встречающиеся значения:

  • 1K
  • 2K
  • 4K

Конкретные размеры и доступные варианты тоже зависят от модели.

Пример с настройками

import requests

url = "https://api.alltokens.ru/api/v1/chat/completions"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

payload = {
    "model": "google/gemini-3.1-flash-image-preview",
    "messages": [
        {
            "role": "user",
            "content": "Создай кинематографичный постер футуристического города"
        }
    ],
    "modalities": ["image", "text"],
    "image_config": {
        "aspect_ratio": "16:9",
        "image_size": "2K"
    }
}

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

Потоковая выдача

Генерация изображений может работать и со stream: true, если это поддерживает выбранная модель.

import json
import requests

url = "https://api.alltokens.ru/api/v1/chat/completions"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

payload = {
    "model": "google/gemini-3.1-flash-image-preview",
    "messages": [
        {
            "role": "user",
            "content": "Создай изображение футуристического города"
        }
    ],
    "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(image["image_url"]["url"][:80])
                except json.JSONDecodeError:
                    continue

Как выглядит ответ

Сгенерированные изображения приходят в поле images внутри сообщения ассистента.

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "Готово, изображение создано.",
        "images": [
          {
            "type": "image_url",
            "image_url": {
              "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
            }
          }
        ]
      }
    }
  ]
}

Что важно:

  • изображения обычно возвращаются как base64 data URL
  • некоторые модели могут вернуть сразу несколько изображений
  • итоговый размер и формат зависят от модели

Практические рекомендации

  • формулируйте запрос максимально конкретно: стиль, композиция, освещение, формат кадра
  • заранее проверяйте output_modalities, чтобы не отправлять запрос в неподходящую модель
  • перед обработкой результата всегда проверяйте наличие поля images
  • если нужен низкоуровневый совместимый метод OpenAI, используйте справку по /api/v1/images/generations

Частые вопросы

Проверьте три вещи: модель действительно умеет возвращать image, в запросе указан правильный modalities, и сам запрос явно просит создать изображение, а не только описать его.

Да, если модель это поддерживает. Для этого обычно используется modalities: ["image", "text"].

Для многих сценариев достаточно chat/completions, особенно если вы хотите единый интерфейс для текста и изображений. Если нужен отдельный совместимый метод генерации изображений, используйте POST /api/v1/images/generations.