Documentation Index
Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
Use this file to discover all available pages before exploring further.
Понимание основной концепции
MidJourney API имитирует взаимодействия с кнопками Discord. В отличие от типичных REST API, он работает как машина состояний, где каждая операция возвращает новые кнопки для следующего шага.
4 основных API
| API | Назначение | Когда использовать |
|---|
POST /mj/submit/imagine | Генерация изображения по тексту | Отправная точка для всех сценариев |
GET /mj/task/\{id\}/fetch | Запросить статус задачи и получить кнопки | После каждого submit (опрашивайте до завершения) |
POST /mj/submit/action | Нажать кнопку (upscale, vary, zoom и т. д.) | Когда нужно выполнить действие над изображением |
POST /mj/submit/modal | Отправить дополнительный ввод | Только когда статус — MODAL |
Полная схема workflow
┌─────────────────────────────────────────────────────────────────────────────┐
│ MIDJOURNEY API WORKFLOW │
└─────────────────────────────────────────────────────────────────────────────┘
┌──────────────────┐
│ POST /submit/ │ ← Шаг 1: Отправьте prompt, получите task_id
│ imagine │
└────────┬─────────┘
│ Returns: { "result": "task_id_1" }
▼
┌──────────────────┐
│ GET /task/{id}/ │ ← Шаг 2: Опрашивайте, пока status = "SUCCESS"
│ fetch │
└────────┬─────────┘
│ Returns: imageUrl + buttons[] (U1,U2,U3,U4,V1,V2,V3,V4,🔄)
▼
┌──────────────────┐
│ POST /submit/ │ ← Шаг 3: Нажмите кнопку, используя customId
│ action │
└────────┬─────────┘
│ Returns: { "result": "task_id_2" }
▼
┌──────────────────┐
│ GET /task/{id}/ │ ← Шаг 4: Опрашивайте новую задачу
│ fetch │
└────────┬─────────┘
│
├─── status = "SUCCESS" → Готово! Получите imageUrl
│
└─── status = "MODAL" → Нужен дополнительный ввод (см. Шаг 5)
│
▼
┌──────────────────┐
│ POST /submit/ │ ← Шаг 5: Отправьте mask/prompt для специальных операций
│ modal │
└────────┬─────────┘
│ Returns: { "result": "task_id_3" }
▼
┌──────────────────┐
│ GET /task/{id}/ │ ← Шаг 6: Опрашивайте до SUCCESS
│ fetch │
└──────────────────┘
Каждая успешно завершённая задача возвращает массив buttons. У каждой кнопки есть customId, который используется для запуска следующего действия.
Пример ответа от /mj/task/\{id\}/fetch:
{
"status": "SUCCESS",
"imageUrl": "https://api.cometapi.com/mj/image/xxx",
"buttons": [
{ "customId": "MJ::JOB::upsample::1::abc123", "label": "U1" },
{ "customId": "MJ::JOB::upsample::2::abc123", "label": "U2" },
{ "customId": "MJ::JOB::variation::1::abc123", "label": "V1" },
{ "customId": "MJ::JOB::reroll::0::abc123", "emoji": "🔄" }
]
}
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 (одно изображение)
После upscaling становятся доступны инструменты редактирования:
| Label | Needs Modal? |
|---|
| Upscale (Subtle) / Upscale (2x) | ❌ Нет |
| Upscale (Creative) / Upscale (4x) | ❌ Нет |
| Vary (Subtle) 🪄 | ❌ Нет |
| Vary (Strong) 🪄 | ❌ Нет |
| Vary (Region) 🖌️ | ✅ Да (mask) |
| Zoom Out 2x / 1.5x 🔍 | ❌ Нет |
| Custom Zoom 🔍 | ✅ Да (prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ Нет |
| Animate 🎞️ | ❌ Нет |
| 🔄 Reroll | ❌ Нет |
Примечание: Метки кнопок и форматы customId могут различаться в зависимости от версии MJ, указанной в вашем prompt (например, --v 6.1 или --v 5.2). Всегда считывайте buttons из ответа API.
Кнопка Inpaint (Vary Region) появляется только после Upscale.
Полный пример: генерация и upscale
Шаг 1: Отправьте запрос imagine
curl -X POST 'https://api.cometapi.com/mj/submit/imagine' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"botType": "MID_JOURNEY",
"prompt": "a cute cat --v 6.1",
"accountFilter": { "modes": ["FAST"] }
}'
Ответ:
{ "code": 1, "result": "1768464763141701" }
Шаг 2: Опрашивайте статус задачи
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Ответ (после завершения):
{
"status": "SUCCESS",
"imageUrl": "https://api.cometapi.com/mj/image/1768464763141701",
"buttons": [
{ "customId": "MJ::JOB::upsample::1::5f20922e-xxx", "label": "U1" },
{ "customId": "MJ::JOB::upsample::2::5f20922e-xxx", "label": "U2" },
...
]
}
Шаг 3: Нажмите U1 для upscale
curl -X POST 'https://api.cometapi.com/mj/submit/action' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"taskId": "1768464763141701",
"customId": "MJ::JOB::upsample::1::5f20922e-xxx"
}'
Ответ:
{ "code": 1, "result": "1768464800000000" }
Шаг 4: Опрашивайте новую задачу и получите результат
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Когда требуется Modal?
Когда вы вызываете /mj/submit/action и статус задачи становится MODAL вместо SUCCESS, необходимо вызвать /mj/submit/modal, чтобы передать дополнительный ввод.
Подтверждённые операции Modal
| Operation | Button | What to Submit |
|---|
| Inpaint | Vary (Region) | maskBase64 (PNG mask) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (например, “your prompt —zoom 2”) |
Пример: поток Inpaint
# 1. Click Vary (Region) button via Action API
curl -X POST 'https://api.cometapi.com/mj/submit/action' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>' \
-H 'Content-Type: application/json' \
-d '{"taskId": "xxx", "customId": "MJ::Inpaint::xxx", "enableRemix": true}'
# 2. Poll and see status = "MODAL"
curl -X GET 'https://api.cometapi.com/mj/task/new_task_id/fetch'
# Response: { "status": "MODAL" }
# 3. Submit mask and prompt via Modal API
curl -X POST 'https://api.cometapi.com/mj/submit/modal' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"taskId": "new_task_id",
"prompt": "replace with golden crown",
"maskBase64": "data:image/png;base64,..."
}'
Выбор скоростного режима
Добавьте префикс режима скорости в путь:
| Mode | Path Prefix | Example |
|---|
| Fast | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (по умолчанию) | /mj/submit/imagine |
Другие точки входа
Эти API — независимые точки входа, которые не следуют потоку imagine → action:
| API | Purpose |
|---|
POST /mj/submit/blend | Объединить 2–5 изображений в одно |
POST /mj/submit/describe | Сгенерировать prompt по изображению |
POST /mj/submit/video | Преобразовать изображение в видео |
POST /mj/submit/edits | Редактировать изображение с помощью mask |
Советы по устранению неполадок
С учётом дизайна API и workflow, вот распространённые проблемы, с которыми вы можете столкнуться:
| Problem | Likely Cause | Solution |
|---|
| Не удаётся найти кнопку Vary (Region) | Вы смотрите на изображение 4-grid | Сначала выполните Upscale (нажмите U1-U4), затем проверьте кнопки |
Статус задачи завис на MODAL | Операция требует дополнительного ввода | Вызовите /mj/submit/modal с необходимыми данными |
customId не работает | Используется устаревшее или захардкоженное значение | Всегда получайте актуальный customId из ответа /mj/task/\{id\}/fetch |
Массив buttons пуст | Задача всё ещё выполняется | Дождитесь status: "SUCCESS" перед обращением к buttons |