🎯 Поймите основную концепцию
MidJourney API имитирует взаимодействия с кнопками Discord. В отличие от типичных REST API, он работает как машина состояний, где каждая операция возвращает новые кнопки для следующего шага.4 основных API
| API | Назначение | Когда использовать |
|---|---|---|
POST /mj/submit/imagine | Генерация изображения по тексту | Начальная точка для всех сценариев |
GET /mj/task/\{id\}/fetch | Запросить статус задачи и получить кнопки | После каждой отправки (опрашивайте до завершения) |
POST /mj/submit/action | Нажать кнопку (upscale, vary, zoom и т. д.) | Когда вы хотите выполнить действие с изображением |
POST /mj/submit/modal | Отправить дополнительный ввод | Только если status равен MODAL |
📊 Полная схема workflow
🔑 Ключевая концепция: кнопки и customId
Каждая успешно завершённая задача возвращает массивbuttons. У каждой кнопки есть customId, который вы используете для запуска следующего действия.
Пример ответа от /mj/task/\{id\}/fetch:
customId — НЕ фиксированное значение. Он меняется для каждой задачи. Всегда получайте его из массива buttons.
📋 Справочник кнопок по этапам
После IMAGINE (изображение 4-grid)
Эти кнопки возвращаются, когда завершается начальная генерация изображения:| Button | customId Pattern | Action | Result |
|---|---|---|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Апскейл одного изображения | Одиночное изображение в высоком разрешении |
| V1-V4 | MJ::JOB::variation::1::xxx | Создать вариации | Новый 4-grid |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Сгенерировать заново все | Новый 4-grid |
После UPSCALE (одно изображение)
После апскейла вам становятся доступны инструменты редактирования:| Label | Needs Modal? |
|---|---|
| Upscale (Subtle) / Upscale (2x) | ❌ Нет |
| Upscale (Creative) / Upscale (4x) | ❌ Нет |
| Vary (Subtle) 🪄 | ❌ Нет |
| Vary (Strong) 🪄 | ❌ Нет |
| Vary (Region) 🖌️ | ✅ Да (маска) |
| Zoom Out 2x / 1.5x 🔍 | ❌ Нет |
| Custom Zoom 🔍 | ✅ Да (prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ Нет |
| Animate 🎞️ | ❌ Нет |
| 🔄 Reroll | ❌ Нет |
Примечание: Названия кнопок и форматы⚠️ Кнопка Inpaint (Vary Region) появляется только после Upscale!customIdмогут различаться в зависимости от версии MJ, указанной в вашем prompt (например,--v 6.1или--v 5.2). Всегда считывайте кнопки из ответа API.
⚡ Полный пример: генерация и апскейл
Шаг 1: Отправьте запрос Imagine
Шаг 2: Опрашивайте статус задачи
Шаг 3: Нажмите U1 для апскейла
Шаг 4: Опрашивайте новую задачу и получите результат
⚠️ Когда требуется Modal?
Когда вы вызываете/mj/submit/action и статус задачи становится MODAL вместо SUCCESS, вы должны вызвать /mj/submit/modal, чтобы передать дополнительный ввод.
Подтвержденные операции с Modal
| Operation | Button | What to Submit |
|---|---|---|
| Inpaint | Vary (Region) | maskBase64 (PNG-маска) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (например, “your prompt —zoom 2”) |
🚀 Выбор скоростного режима
Добавьте префикс скорости к пути:| Режим | Префикс пути | Пример |
|---|---|---|
| Fast | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (по умолчанию) | /mj/submit/imagine |
🔗 Другие точки входа
Эти API — независимые точки входа, которые не следуют потоку imagine → action:| API | Назначение |
|---|---|
POST /mj/submit/blend | Объединить 2–5 изображений в одно |
POST /mj/submit/describe | Сгенерировать prompt по изображению |
POST /mj/submit/video | Преобразовать изображение в видео |
POST /mj/submit/edits | Редактировать изображение с помощью маски |
❓ Советы по устранению неполадок
На основе дизайна API и рабочего процесса, вот распространённые проблемы, с которыми вы можете столкнуться:| Проблема | Вероятная причина | Решение |
|---|---|---|
| Не удаётся найти кнопку Vary (Region) | Вы смотрите на изображение в виде сетки 4x | Сначала выполните Upscale (нажмите U1-U4), затем проверьте кнопки |
Статус задачи завис на MODAL | Операция требует дополнительного ввода | Вызовите /mj/submit/modal с необходимыми данными |
customId не работает | Используется устаревшее или захардкоженное значение | Всегда получайте актуальный customId из ответа /mj/task/\{id\}/fetch |
Пустой массив buttons | Задача всё ещё выполняется | Дождитесь status: "SUCCESS" перед обращением к кнопкам |