# KandinskyJS

JavaScript библиотека для генерации изображений с помощью нейросети Kandinsky.

## Установка

```bash
npm install @brojs/kandinsky
```

## Использование

```javascript
const { KandinskyAPI, AspectRatio } = require('@brojs/kandinsky');
const fs = require('fs');

// Создание экземпляра API
const api = new KandinskyAPI();

// Генерация изображения с указанием размеров
async function generateImage(imageName, params) {
  try {
    const images = await api.generate(params);
    
    // Сохраняем изображение в файл
    if (images && images.length > 0) {
      const imageData = images[0].replace(/^data:image\/\w+;base64,/, '');
      const buffer = Buffer.from(imageData, 'base64');
      fs.writeFileSync(`generated_image_${imageName}.jpg`, buffer);
      console.log(`Изображение сохранено в файл generated_image_${imageName}.jpg`);
    }
  } catch (error) {
    console.error('Ошибка при генерации:', error);
  }
}

// Пример 1: Генерация с указанием размеров
generateImage('1', {
  query: 'рыжая лиса в городе',
  width: 512,
  height: 256,
  style: 'ANIME',
  negativePromptDecoder: 'яркие цвета, кислотность',
});

// Пример 2: Генерация с aspect ratio через enum
generateImage('2', {
  query: 'рыжая лиса в городе',
  width: 800,
  aspectRatio: AspectRatio.Horizontal_3_2, // будет 800x533
  style: 'ANIME',
});

// Пример 3: Генерация только с aspect ratio через enum
generateImage('3', {
  query: 'рыжая лиса в городе',
  aspectRatio: AspectRatio.Vertical_2_3, // будет 682x1024
  style: 'KANDINSKY',
});
```

## Параметры генерации

- `query` (обязательный): Текстовое описание желаемого изображения
- `width` (опционально): Ширина изображения в пикселях (по умолчанию 1024)
- `height` (опционально): Высота изображения в пикселях (по умолчанию 1024)
- `aspectRatio` (опционально): Соотношение сторон изображения (ширина/высота). Можно использовать enum `AspectRatio`:
  - `AspectRatio.Square_1_1` — 1:1 (квадрат, `1`)
  - `AspectRatio.Vertical_2_3` — 2:3 (вертикальное, `0.6667`)
  - `AspectRatio.Horizontal_3_2` — 3:2 (горизонтальное, `1.5`)
  - `AspectRatio.Vertical_9_16` — 9:16 (вертикальное, `0.5625`)
  - `AspectRatio.Horizontal_16_9` — 16:9 (широкоформатное, `1.7778`)
- `numImages` (опционально): Количество генерируемых изображений (по умолчанию 1)
- `style` (опционально): Стиль изображения (например, 'ANIME')
- `negativePromptDecoder` (опционально): Отрицательный промпт для исключения нежелательных элементов

## Ограничения размеров

- Минимальный размер: 256x256 пикселей
- Максимальный размер: 1024x1024 пикселей
- При использовании aspectRatio размеры автоматически масштабируются с сохранением пропорций

## Требования

- Node.js 14 или выше
- API ключ и секретный ключ от Kandinsky API

## Лицензия

ISC 