Fusion Brain API - это новый раздел платформы, который позволяет пользователям платформы получить доступ к моделям искусственного интеллекта по API. Одной из первых моделей, которая доступна по API, стала модель Kandinsky.
Kandinsky - это модель искусственного интеллекта, которая может создавать реалистичные изображения и произведения искусства на основе описания на естественном языке.
В настоящее время по API доступна версия Kandinsky 3.1 с более реалистичными, точными изображениями.
В настоящий момент данный раздел функционирует в beta.
Давайте рассмотрим подробнее технические характеристики модели и примеры запросов к каждому из параметров. А если хотите поскорее приступить к действиям - двигайтесь ниже.
Режимы работы модели
В настоящее время Kandinsky доступен по API в одном режиме по работе с изображениями:
Данный параметр указывается как:
"type": "GENERATE",
Размеры изображений
Сгенерированные изображения могут иметь размер до 1024 пикселей с каждой из сторон. Также в версии 3.1 поддерживается генерация изображения с разными соотношением сторон (самые оптимальные aspect ratio - 1:1 / 2:3 / 3:2 / 9:16 / 16:9).
Данные параметры указываются как (соотношение вам необходимо подобрать самостоятельно):
"width": 1024,
"height": 1024,
Рекомендуем использовать значения кратные 64 с каждой из сторон для более качественных результатов.
Количество изображений
Вы можете запросить только 1 изображение одновременно по одному и тому же запросу.
"numImages": 1,
Запрос
Вы и ваши пользователи могут составлять запросы на русском, английском или любом другом языке. Допускается также использование emoji в текстовом описании.
Максимальный размер текстового описания - 1000 символов.
Пример запроса:
"query": "Пушистый кот в очках",
Стиль
Вы и ваши пользователи могут также использовать несколько стилей из наших пресетов для генераций.
"style": "ANIME",
Получение актуального списка стилей осуществляется по URL: cdn.fusionbrain.ai/static/styles/key
Негативный промпт
В поле Негативный промпт можно прописать, какие цвета и приёмы модель не должна использовать при генерации изображения.
"negativePromptUnclip": "яркие цвета, кислотность, высокая контрастность",
Пример передачи запроса:
{
"type": "GENERATE",
"style": "string",
"width": 1024,
"height": 1024,
"num_images": 1,
"negativePromptUnclip": "яркие цвета, кислотность, высокая контрастность",
"generateParams": {
"query": "Пушистый кот в очках",
}
}
Результаты генерации
Вне зависимости от выбранного режима результатом работы модели является изображение. Каждое изображение может быть возвращено в виде данных Base64, используя параметр images.
"images": ["string"]
Модерация контента
Запросы на генерацию и изображения проходят соответствующие фильтры цензуры в соответствии с нашей политикой в отношении контента, возвращая ошибку, когда запрос или изображение не соответствует. Пример отработки данного параметра:
"censored": true
Если у вас есть какие-либо примеры ложных срабатываний или связанных с ними проблемах, пожалуйста, свяжитесь с нами через почту обратной связи по адресу hello@fusionbrain.ai.
Аутентификация API ключа
Первым шагом после получения ключа вам необходимо провести его аутентификацию.
API ключ и Secret необходимо передавать при любом обращении в сервис.
Для передачи используются заголовки HTTP запроса: X-Key и X-Secret, префиксы Key, Secret соответственно. Подготовим все необходимые значения:
def __init__(self, url, api_key, secret_key):
self.URL = url
self.AUTH_HEADERS = {
'X-Key': f'Key {api_key}',
'X-Secret': f'Secret {secret_key}',
}
Далее вам необходимо будет обратиться к списку доступных моделей и выбрать Kandinsky 3.1 (в настоящий момент это единственная модель, доступная для подключения по API). Обращение происходит по URL: https://api-key.fusionbrain.ai/.
Для этого совершите следующий запрос:
def get_model(self):
response = requests.get(self.URL + 'key/api/v1/models', headers=self.AUTH_HEADERS)
data = response.json()
return data[0]['id']
Структура ответа:
[
{
"id": 1,
"name": "string",
"version": 1.0,
"type": "TEXT2IMAGE"
}
]
Напомним, что API Kandinsky поддерживает один режим работы модели: generate. Запрос к модели (на примере режима generate)
Метод generate принимает текстовое описание изображения в качестве входных данных и генерирует соответствующее ему изображение. Для вызова этого метода необходимо отправить POST запрос на URL /key/api/v1/text2image/run.
Запрос должен содержать следующие параметры:
Прочие параметры мы рекомендуем оставить в дефолтных состояниях из примера ниже, так как они дают оптимальный результат генерации.
Пример запроса:
def generate(self, prompt, model, images=1, width=1024, height=1024):
params = {
"type": "GENERATE",
"numImages": images,
"width": width,
"height": height,
"generateParams": {
"query": f"{prompt}"
}
}
data = {
'model_id': (None, model),
'params': (None, json.dumps(params), 'application/json')
}
response = requests.post(self.URL + 'key/api/v1/text2image/run', headers=self.AUTH_HEADERS, files=data)
data = response.json()
return data['uuid']
Структура ответа:
{
"uuid": "string",
"status": "INITIAL"
}
Доступность сервиса
При большой нагрузке или технических работах сервис может быть временно недоступен для приема новых задач. Можно заранее проверить текущее состояние с помощью GET запроса на URL /key/api/v1/text2image/availability. Во время недоступности задачи не будут приниматься и в ответе на запрос к модели вместо uuid вашего задания будет возвращен текущий статус работы сервиса.
Пример:
{
"model_status": "DISABLED_BY_QUEUE"
}
Запросы для проверки статуса check_status
Метод check_status позволяет проверить статус генерации изображения. Для вызова этого метода необходимо отправить GET запрос на URL /key/api/v1/text2image/status/{uuid}, где uuid - идентификатор задания, полученный при вызове запроса к модели.
Пример запроса:
def check_generation(self, request_id, attempts=10, delay=10):
while attempts > 0:
response = requests.get(self.URL + 'key/api/v1/text2image/status/' + request_id, headers=self.AUTH_HEADERS)
data = response.json()
if data['status'] == 'DONE':
return data['images']
attempts -= 1
time.sleep(delay)
Ответ содержит текущий статус задания:
{
"uuid": "string",
"status": "string",
"images": ["string"],
"errorDescription": "string",
"censored": "false"
}
Важно отметить, что получение картинки осуществляется только один раз, повторно запросить нельзя.
Возможные значения поля status:
Обработка ошибок
API может вернуть следующие ошибки:
При возникновении 415 ошибки рекомендуем воспользоваться данным скриптом, который необходимо отправить в postman.
curl --location --request POST 'https://api-key.fusionbrain.ai/key/api/v1/text2image/run' \
--header 'X-Key: Key YOUR_KEY' \
--header 'X-Secret: Secret YOUR_SECRET' \
-F 'params="{
\"type\": \"GENERATE\",
\"generateParams\": {
\"query\": \"море\"
}
}";type=application/json' \
--form 'model_id="1"'
#Не забудьте указать именно ваш YOUR_KEY и YOUR_SECRET.
Python
Пример использования API в Python:
import json
import time
import requests
class Text2ImageAPI:
def __init__(self, url, api_key, secret_key):
self.URL = url
self.AUTH_HEADERS = {
'X-Key': f'Key {api_key}',
'X-Secret': f'Secret {secret_key}',
}
def get_model(self):
response = requests.get(self.URL + 'key/api/v1/models', headers=self.AUTH_HEADERS)
data = response.json()
return data[0]['id']
def generate(self, prompt, model, images=1, width=1024, height=1024):
params = {
"type": "GENERATE",
"numImages": images,
"width": width,
"height": height,
"generateParams": {
"query": f"{prompt}"
}
}
data = {
'model_id': (None, model),
'params': (None, json.dumps(params), 'application/json')
}
response = requests.post(self.URL + 'key/api/v1/text2image/run', headers=self.AUTH_HEADERS, files=data)
data = response.json()
return data['uuid']
def check_generation(self, request_id, attempts=10, delay=10):
while attempts > 0:
response = requests.get(self.URL + 'key/api/v1/text2image/status/' + request_id, headers=self.AUTH_HEADERS)
data = response.json()
if data['status'] == 'DONE':
return data['images']
attempts -= 1
time.sleep(delay)
if __name__ == '__main__':
api = Text2ImageAPI('https://api-key.fusionbrain.ai/', 'YOUR_API_KEY', 'YOUR_SECRET_KEY')
model_id = api.get_model()
uuid = api.generate("Sun in sky", model_id)
images = api.check_generation(uuid)
print(images)
#Не забудьте указать именно ваш YOUR_KEY и YOUR_SECRET.
API Kandinsky для создания уникальных изображений предоставляет удобный способ генерации реалистичного контента для ваших продуктов и сервисов. Следуя инструкциям в этой документации, вы можете легко интегрировать API в свой проект. Если у вас есть вопросы или предложения, пожалуйста, свяжитесь с нами по адресу hello@fusionbrain.ai.