Skip to content

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

Некоторые модели могут создавать изображения из текстовых запросов, когда вы указываете соответствующие модальности в вашем запросе.

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

Для генерации изображений отправьте запрос к эндпоинту /v1/chat/completions с параметром modalities, установленным для включения как "image", так и "text".

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

python
import requests
import json

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

payload = {
    "model": "gemini-2.5-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"]  # Base64 data URL
            print(f"Сгенерированное изображение: {image_url[:50]}...")
typescript
const url = "https://api.aitunnel.ru/v1/chat/completions";
const headers = {
  "Authorization": "Bearer sk-aitunnel-xxx",
  "Content-Type": "application/json"
};

const payload = {
  model: "gemini-2.5-flash-image-preview",
  messages: [
    {
      role: "user",
      content: "Создай красивый закат над горами"
    }
  ],
  modalities: ["image", "text"]
};

const response = await fetch(url, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(payload)
});

const result = await response.json();

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

Стриминговая генерация изображений

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

python
import requests
import json

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

payload = {
    "model": "gemini-2.5-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(f"Сгенерированное изображение: {image['image_url']['url'][:50]}...")
                except json.JSONDecodeError:
                    continue
typescript
const url = "https://api.aitunnel.ru/v1/chat/completions";
const headers = {
  "Authorization": "Bearer sk-aitunnel-xxx",
  "Content-Type": "application/json"
};

const payload = {
  model: "gemini-2.5-flash-image-preview",
  messages: [
    {
      role: "user",
      content: "Создай изображение футуристического города"
    }
  ],
  modalities: ["image", "text"],
  stream: true
};

const response = await fetch(url, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(payload)
});

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: any) => {
                console.log(`Сгенерированное изображение: ${image.image_url.url.slice(0, 50)}...`);
              });
            }
          }
        } catch (e) {
          // Игнорируем ошибки парсинга
        }
      }
    }
  }
}

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

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

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

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

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

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

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

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

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

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

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

Создание художественных изображений

python
payload = {
    "model": "gemini-2.5-flash-image-preview",
    "messages": [
        {
            "role": "user",
            "content": "Создай абстрактную картину в стиле Кандинского с яркими цветами"
        }
    ],
    "modalities": ["image", "text"]
}

Генерация иллюстраций для контента

python
payload = {
    "model": "gemini-2.5-flash-image-preview",
    "messages": [
        {
            "role": "user",
            "content": "Создай простую иллюстрацию для статьи о возобновляемой энергии: солнечные панели и ветряки на зеленом холме"
        }
    ],
    "modalities": ["image", "text"]
}

Совет

Для получения лучших результатов используйте детальные описания, включая стиль, цвета, композицию и настроение изображения.

AITUNNEL