Обзор Yes Ai API Qwen Images. Как генерировать изображения - часть 3
Сервис Yes Ai предоставляет доступ к API Qwen Images — это универсальный инструмент для работы с изображениями на основе нейросетей. Ниже расскажем как генерировать и модифицировать изображения через API.
Qwen поддерживает два ключевых сценария:
- Генерация новых картинок по вашему текстовому описанию с применением моделей LoRA.
- Редактирование загруженных вами фотографий по промту, опять же с поддержкой LoRA.
В первом варианте достаточно отправить на соответствующий эндпойнт API промт, указать модель нейросети (чекпойнт), выбрать нужный сэмплер и задать параметры вроде размера и количества изображений.
Для редактирования уже готовых картинок понадобится дополнительно прикрепить прямые ссылки на файлы, которые вы хотите изменить. Дальше – дело фантазии. Сервис позволяет менять прически, перекрашивать волосы, редактировать одежду, заменять фон, удалять водяные знаки, даже восстанавливать сильно потрёпанные временем снимки. Какой результат вы получите — зависит от того, насколько чётко опишете задачу в поле “prompt”.
В этой статье есть советы и примеры, как максимально эффективно использовать Qwen Image Edit.
Рекомендую, прежде чем интегрировать функцию на свой сайт или сервис, протестировать её в Телеграм-боте.
Вот несколько инструментов, где Qwen Image Edit показывает себя особенно круто:
- Легко убирает водяные знаки (попробовать в боте).
- Позволяет стилизовать любые фото и изображения (попробовать в боте).
- Быстро генерирует уникальные аватары (попробовать в боте).
- Восстанавливает старые, потрескавшиеся или пожелтевшие фотографии (попробовать в боте).
- Оживляет чёрно-белые снимки, превращая их в цветные (попробовать в боте).
На самом деле, спектр применения редактирования через Qwen Image Edit почти не ограничен — вам достаточно по‑человечески сформулировать, что вы хотите изменить, а всё остальное сделает нейросеть. Вы можете сами собирать базу своих рабочих промтов для разных задач или использовать готовые шаблоны — они тоже доступны через наш API Qwen.
Как отправить запрос на генерацию изображения с помощью Qwen Images по текстовому промту
Разберёмся, как работает Qwen Images. Начнём с самого простого — задания генерировать картинку только на основе текста, без дополнительных примеров и сторонних моделей. Ни Lora, ни другие сложные настройки сейчас не трогаем — обо всём этом расскажу отдельно.
POST https://api.yesai.su/v2/qwen/generations
headers: { Content-Type: application/json, Authorization: Bearer }
Пример запроса для генерации картинки по промпту без референса в Qwen Images API:
Параметры генерации:
- prompt = '' — обязательное поле. Сюда вписываем основной запрос (промт), например: описание желаемого изображения.
- checkpoint_id = 1 — опционально. Указываем ID нужного чекпоинта (по умолчанию: 1). Если нужно другой, список доступен в документации.
- sampler_id = 1 — по желанию. Определяем ID выбранного сэмплера (по умолчанию: 1), список всех сэмплеров также есть в справке.
- width = 1024 — ширина картинки, стандартно 1024 пикселя. Можно увеличить или уменьшить в пределах от 600 до 1600, меняем шагом по 2.
- height = 1024 — высота картинки. Значения такие же, как для ширины — от 600 до 1600 пикселей, по умолчанию стоит 1024.
- steps = 20 — количество итераций. Диапазон от 10 до 30, по стандарту — 20.
- cfg = 2.5 — насколько строго система держится текста промта. По упрощённому опыту: 2 — минимальная строгость, 3 — максимальная, стандартная настройка — 2.5. Изменяем с шагом 0.5.
- denoise = 1 — уровень шумоподавления. Обычное значение — 1, можно варьировать от 0.9 до 1.1 по шагу 0.1.
- copies = 1 — сколько изображений получаем за один запрос. Обычно делают одно (1), максимум — два.
- style = '', '0', '1' или '2,3,4' — задаём стиль результата. Если оставить пустым или поставить 0 — стиль не применяется. Тут же можно выбрать, например: 0 - без стиля, 1 - случайный стиль, 2 - Midjourney, 3 - Steampunk, 4 - Cyberpunk, 5 - Anime, 6 - Logo, 7 - Photo, 8 - Image, 9 - Cinema, 10 - Illustration, 11 - Horror, 12 - Detailed, 13 - Space, 14 - Gothic, 15 - Surrealism, 16 - Realism, 17 - Fantasy, 18 - Sci-Fi, 19 - FantasyArt, 20 - ComicBook, 21 - PixelArt, 22 - 3D, 23 - LineArt, 24 - Origami, 25 - Isometric, 26 - NeonPunk, 27 - PrimeAnime, 28 - Watercolor, 29 - Pop art, 30 - Kawaii, 31 - Minimalism, 32 - RetroFutur, 33 - Dystopian, 34 - Advertising, 35 - Renaissance, 36 - Biomechanical, 37 - Futuristic, 38 - Art deco, 39 - Cubism, 40 - Fashion, 41 - RPG, 42 - Disco, 43 - Architecture, 44 - Luxury, 45 - Cybernetic, 46 - RetroCyber, 47 - BioCyber, 48 - FairyTale, 49 - Pin-up. Если хочется несколько стилей — пишем через запятую (например: 2,4,7).
Обратите внимание: в переменную 'checkpoint_id' нужно передавать индекс того чекпойнта (модели), который вы получили из списка для генерации картинок по простому промпту, без указания референса. Модели, подходящие для работы с референсами, здесь использовать нельзя — они не справятся с задачей генерации по обычному промпту.
В параметре "style" можно указать от одного до трех индексов стилей. Так вы сможете сгенерировать изображения с выбранным вами набором цветовых сочетаний и художественных решений. На практике советую заранее собрать галерею доступных стилей — так вашим пользователям будет проще подбирать нужный вариант перед созданием изображения. Если при запуске задания стиль не указан (например, пользователь его не выбрал), этой переменной передавайте просто '0'. Если значение "style" — это 0, дописывать другие индексы нельзя: допускается только один вариант — без дополнительной стилизации.
Возможные Ошибки:
['success' => false, 'message' => 'MODEL_ID_IS_EMPTY'], 400
['success' => false, 'message' => 'MODEL_ID_NOT_VALID'], 400
['success' => false, 'message' => 'ID_IS_EMPTY'], 400
['success' => false, 'message' => 'ID_NOT_VALID'], 400
['success' => false, 'message' => 'STYLE_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_LORA_ID_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_LORA_ID_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_LORA_WEIGHT_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_LORA_WEIGHT_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_LORA_FORMAT_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_LORA_FORMAT_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_LORA_FORMATS_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_LORA_FORMATS_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_SETTINGS_IS_EMPTY'], 400
['success' => false, 'message' => 'CHECKPOINT_ID_IS_EMPTY'], 400
['success' => false, 'message' => 'CHECKPOINT_ID_NOT_VALID'], 400
['success' => false, 'message' => 'SAMPLER_ID_IS_EMPTY'], 400
['success' => false, 'message' => 'SAMPLER_ID_NOT_VALID'], 400
['success' => false, 'message' => 'WIDTH_IS_EMPTY'], 400
['success' => false, 'message' => 'WIDTH_NOT_VALID'], 400
['success' => false, 'message' => 'HEIGHT_IS_EMPTY'], 400
['success' => false, 'message' => 'HEIGHT_NOT_VALID'], 400
['success' => false, 'message' => 'STEPS_IS_EMPTY'], 400
['success' => false, 'message' => 'STEPS_NOT_VALID'], 400
['success' => false, 'message' => 'CFG_IS_EMPTY'], 400
['success' => false, 'message' => 'CFG_NOT_VALID'], 400
['success' => false, 'message' => 'DENOISE_IS_EMPTY'], 400
['success' => false, 'message' => 'DENOISE_NOT_VALID'], 400
['success' => false, 'message' => 'COPIES_IS_EMPTY'], 400
['success' => false, 'message' => 'COPIES_NOT_VALID'], 400
['success' => false, 'message' => 'RESULT_URL_IS_EMPTY'], 400
['success' => false, 'message' => 'RESULT_URL_NOT_VALID'], 400
['success' => false, 'message' => 'UNAUTHORIZED'], 401
['success' => false, 'message' => 'MODEL_ID_NOT_FOUND'], 404
['success' => false, 'message' => 'ID_NOT_FOUND'], 404
['success' => false, 'message' => 'PROMPT_LORA_ID_NOT_FOUND'], 404
['success' => false, 'message' => 'CHECKPOINT_ID_NOT_FOUND'], 404
['success' => false, 'message' => 'SAMPLER_ID_NOT_FOUND'], 404
['success' => false, 'message' => 'RESULT_URL_NOT_FOUND'], 404
['success' => false, 'message' => 'RESULT_WIDTH_NOT_FOUND'], 404
['success' => false, 'message' => 'RESULT_HEIGHT_NOT_FOUND'], 404
['success' => false, 'message' => 'USER_HAS_BEEN_BANNED'], 409
['success' => false, 'message' => 'USER_HAS_BEEN_DELETED'], 409
['success' => false, 'message' => 'NOT_ENOUGH_RPOINTS'], 409
['success' => false, 'message' => 'PROMPT_NSFW_WORDS'], 409
['success' => false, 'message' => 'PROMPT_EN_NSFW_WORDS'], 409
['success' => false, 'message' => 'STYLE_LIMIT_EXCEEDED'], 409
['success' => false, 'message' => 'TASK_LIMIT_EXCEEDED'], 409
['success' => false, 'message' => 'TASK_IS_NOT_COMPLETED'], 409
['success' => false, 'message' => 'TOO_MANY_REQUESTS'], 429
['success' => false, 'message' => 'INTERNAL_SERVER_ERROR'], 500
Пример ответа при успехе:
Запомните: при удачной отправке задания сервис возвращает уникальный "id". Этот идентификатор понадобится, чтобы следить за статусом обработки и потом получить ссылки на готовые изображения. Сохраняйте свой "id" после каждого успешного запроса – иначе найти результат будет затруднительно.
Как отправить запрос на модификацию изображения через Qwen Image Edit по референсу и промту
В этом блоке подробно расскажу, как отправлять запрос на модификацию картинки, которую загрузил пользователь. Обязательное условие — нужен промт или код нужного типа обработки (например, удаление фона, стилистика и прочее). Второй необходимый пункт — ссылка на саму картинку в формате JPG, JPEG или PNG. То есть нужно дать системе прямой линк, не архив и не скриншот.
POST https://api.yesai.su/v2/qwen/generations
headers: { Content-Type: application/json, Authorization: Bearer }
Пример запроса для генерации изображения по промпту с референсом в Qwen Images API:
Параметры задания:
- type = 81 - основной параметр. Нужно указать, что именно требуется — например: 81 - референс картинки по промту, 100 - удаление фона, 101 - удаление watermark, 102 - сделать цветным #1, 103 - сделать цветным #2, 104 - реставрация изображения, 105 - получение контура, 106 - карта глубины, 107 - извлечение одежды, 108 - сделать старым, 109 - сделать молодым, 110 - стилизация изображения, 112 - 3D Design
- style = '', '0', '1' или '2,3,4' - задаёт художественный стиль обработки. По умолчанию — 0 (без обработки). Для стилизации (type=110) нужен обязательный выбор: 0 - без стиля, 1 - случайный стиль, 2 - Midjourney, 3 - Steampunk, 4 - Cyberpunk, 5 - Anime, 6 - Logo, 7 - Photo, 8 - Image, 9 - Cinema, 10 - Illustration, 11 - Horror, 12 - Detailed, 13 - Space, 14 - Gothic, 15 - Surrealism, 16 - Realism, 17 - Fantasy, 18 - Sci-Fi, 19 - FantasyArt, 20 - ComicBook, 21 - PixelArt, 22 - 3D, 23 - LineArt, 24 - Origami, 25 - Isometric, 26 - NeonPunk, 27 - PrimeAnime, 28 - Watercolor, 29 - Pop art, 30 - Kawaii, 31 - Minimalism, 32 - RetroFutur, 33 - Dystopian, 34 - Advertising, 35 - Renaissance, 36 - Biomechanical, 37 - Futuristic, 38 - Art deco, 39 - Cubism, 40 - Fashion, 41 - RPG, 42 - Disco, 43 - Architecture, 44 - Luxury, 45 - Cybernetic, 46 - RetroCyber, 47 - BioCyber, 48 - FairyTale, 49 - Pin-up
- prompt = '' - основной запрос. Для генерации по референсу (type=81) нужен обязательно, для других задач — по желанию.
- checkpoint_id = 2 - этим переключается используемая нейросеть, если нужны особые стили. Без указания берётся стандартное значение: 2.
- sampler_id = 1 - влияет на способ генерации изображения. Опционально, по умолчанию — 1.
- steps = 20 - задаёт, сколько итераций делает нейросеть при создании картинки. Больше шагов — интереснее результат, но медленнее. По умолчанию 20, диапазон от 10 до 30, меняется единичкой.
- cfg = 2.5 - жёсткость следования промту. Обычно 2.5; максимум — 3. Чем выше, тем точнее нейросеть берёт ваш текст за основу.
- denoise = 1 - степень подавления шума. Можно чуть уменьшать (до 0.9) или увеличивать (до 1.1), шаг — 0.1.
- copies = 1 - сколько изображений создавать за раз. Обычно достаточно одного, максимум — два.
- references_urls = [] - сюда кладём ссылку на ваш референс. Пока поддерживается только одна ссылка за раз. В будущем появится возможность указывать несколько сразу.
Возможные ошибки:
['success' => false, 'message' => 'MODEL_ID_IS_EMPTY'], 400
['success' => false, 'message' => 'MODEL_ID_NOT_VALID'], 400
['success' => false, 'message' => 'ID_IS_EMPTY'], 400
['success' => false, 'message' => 'ID_NOT_VALID'], 400
['success' => false, 'message' => 'TYPE_IS_EMPTY'], 400
['success' => false, 'message' => 'TYPE_NOT_VALID'], 400
['success' => false, 'message' => 'STYLE_IS_EMPTY'], 400
['success' => false, 'message' => 'STYLE_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_LORA_ID_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_LORA_ID_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_LORA_WEIGHT_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_LORA_WEIGHT_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_LORA_FORMAT_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_LORA_FORMAT_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_LORA_FORMATS_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_LORA_FORMATS_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_SETTINGS_IS_EMPTY'], 400
['success' => false, 'message' => 'CHECKPOINT_ID_IS_EMPTY'], 400
['success' => false, 'message' => 'CHECKPOINT_ID_NOT_VALID'], 400
['success' => false, 'message' => 'SAMPLER_ID_IS_EMPTY'], 400
['success' => false, 'message' => 'SAMPLER_ID_NOT_VALID'], 400
['success' => false, 'message' => 'WIDTH_IS_EMPTY'], 400
['success' => false, 'message' => 'WIDTH_NOT_VALID'], 400
['success' => false, 'message' => 'HEIGHT_IS_EMPTY'], 400
['success' => false, 'message' => 'HEIGHT_NOT_VALID'], 400
['success' => false, 'message' => 'STEPS_IS_EMPTY'], 400
['success' => false, 'message' => 'STEPS_NOT_VALID'], 400
['success' => false, 'message' => 'CFG_IS_EMPTY'], 400
['success' => false, 'message' => 'CFG_NOT_VALID'], 400
['success' => false, 'message' => 'DENOISE_IS_EMPTY'], 400
['success' => false, 'message' => 'DENOISE_NOT_VALID'], 400
['success' => false, 'message' => 'COPIES_IS_EMPTY'], 400
['success' => false, 'message' => 'COPIES_NOT_VALID'], 400
['success' => false, 'message' => 'REFERENCES_URLS_IS_EMPTY'], 400
['success' => false, 'message' => 'REFERENCES_URLS_NOT_VALID'], 400
['success' => false, 'message' => 'RESULT_URL_IS_EMPTY'], 400
['success' => false, 'message' => 'RESULT_URL_NOT_VALID'], 400
['success' => false, 'message' => 'UNAUTHORIZED'], 401
['success' => false, 'message' => 'MODEL_ID_NOT_FOUND'], 404
['success' => false, 'message' => 'ID_NOT_FOUND'], 404
['success' => false, 'message' => 'PROMPT_LORA_ID_NOT_FOUND'], 404
['success' => false, 'message' => 'CHECKPOINT_ID_NOT_FOUND'], 404
['success' => false, 'message' => 'SAMPLER_ID_NOT_FOUND'], 404
['success' => false, 'message' => 'RESULT_URL_NOT_FOUND'], 404
['success' => false, 'message' => 'RESULT_WIDTH_NOT_FOUND'], 404
['success' => false, 'message' => 'RESULT_HEIGHT_NOT_FOUND'], 404
['success' => false, 'message' => 'USER_HAS_BEEN_BANNED'], 409
['success' => false, 'message' => 'USER_HAS_BEEN_DELETED'], 409
['success' => false, 'message' => 'NOT_ENOUGH_RPOINTS'], 409
['success' => false, 'message' => 'PROMPT_NSFW_WORDS'], 409
['success' => false, 'message' => 'PROMPT_EN_NSFW_WORDS'], 409
['success' => false, 'message' => 'STYLE_LIMIT_EXCEEDED'], 409
['success' => false, 'message' => 'TASK_LIMIT_EXCEEDED'], 409
['success' => false, 'message' => 'TASK_IS_NOT_COMPLETED'], 409
['success' => false, 'message' => 'MODIFICATION_FORBIDDEN'], 409
['success' => false, 'message' => 'TOO_MANY_REQUESTS'], 429
['success' => false, 'message' => 'INTERNAL_SERVER_ERROR'], 500
Формат успешного ответа выглядит так:
Давайте разберём параметры на понятных кейсах.
Пример с модификацией по промту и референсу
Когда пользователь вашего сервиса хочет изменить изображение по описанию, передавайте сам промт в переменной `prompt`. Язык запроса роли не играет — переводать самому ничего не требуется, система Yes Ai разберётся сама. В массиве `references_urls` передайте ссылку на исходную картинку. Для обозначения этого типа задачи указывайте `'type' => '81' — это специальный индекс для обработки по промтам+референсам. Пока что API принимает только одну картинку в этом массиве. В будущем добавят поддержку нескольких референсов, анонс будет через Telegram-канал разработчиков.
Задача с использованием готовой функции (например, удаление фона)
Если клиенту нужно применить встроенную функцию — к примеру, убрать фон, можете оставить `prompt` пустым или вовсе не передавать. Главное — выставьте нужный индекс в `type`. Для удаления фона он равен `100`.
Стилизация изображения
Пользователь захотел стилизацию через готовую библиотеку стилей? В этом случае указывайте `'type' => '110'` и заполните параметр `style`. Можно выбрать от одного до трёх стилей из доступного списка, для каждого предусмотрен свой индекс.
О размере изображения
Не передавайте `width` и `height` в этих сценариях — нейросеть сама определит пропорции, отталкиваясь от исходника.
Про выбор checkpoint'а (модели)
Очень важно корректно указывать индекс модели (чекпойнта) в переменной `checkpoint_id`. Данный индекс вы получаете из списка, который система возвращает для генерации по промту и референсу. Использовать модели без поддержки референсов для задач с референсом нельзя — они не дадут результата. Об этом и об индексах моделей, необходимых для таких задач, написано в описании метода получения чекпойнтов и сэмплеров.
Как использовать LoRA модели при генерации в Qwen Images через API
Если вы собираетесь добавить LoRA-модели для генерации картинок в Qwen Images и Qwen Image Edit, обязательно ознакомьтесь с подробной инструкцией по этой функции — там всё расписано по шагам.
Проверку статуса заданий стоит проводить через специальный API-эндпойнт. Информацию о нём ищите в этом гайде.
Что потребуется от изображений при создании нового задания:
- Размер файла исходника для LoRA — не более 5 МБ, разрешение ограничено 2000 пикселями по любой стороне.
- Принимаются форматы: jpeg, jpg, png.
Когда отправляете запрос на создание задачи через POST-метод API, не забывайте о лимите — не чаще одного раза в секунду. Иначе система вас притормозит.
С 25 июня 2025 года Yes Ai вводит новые лимиты на количество заданий, которые можно отправить в нейросеть одновременно. Теперь все зависит от выбранного тарифа.
Какие лимиты установлены для Qwen Images:
- Без подключения тарифа (Demo): не более 20 заданий
- Тариф Micro: максимум 20 заданий
- Тариф Start: те же 20 заданий
- Тариф Standard: также 20 заданий
- Тариф VIP: до 40 заданий в очереди
Обратите внимание: эти лимиты действуют для каждой нейросети отдельно. Например, с тарифом VIP пользователь сможет одновременно загрузить до 40 задач в Qwen Images, еще 40 — в Midjourney и столько же — в Dalle 3.
Чтобы не столкнуться с зависшими задачами, лучше сразу организовать отдельный внутренний список ожидания — проверено на практике. Если понимаете, что базовых лимитов не хватает для вашего потока, просто напишите в саппорт @yes_ai_support. Обычно менеджеры быстро реагируют и идут навстречу, особенно если аргументировать рост нагрузки.