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.
Zrozum podstawową koncepcję
MidJourney API symuluje interakcje z przyciskami Discorda. W przeciwieństwie do typowych REST API działa jak maszyna stanów, w której każda operacja zwraca nowe przyciski dla kolejnego kroku.
4 podstawowe API
| API | Cel | Kiedy używać |
|---|
POST /mj/submit/imagine | Generowanie obrazu z tekstu | Punkt startowy dla wszystkich przepływów pracy |
GET /mj/task/\{id\}/fetch | Sprawdzanie statusu zadania i pobieranie przycisków | Po każdym wysłaniu (odpytywanie aż do zakończenia) |
POST /mj/submit/action | Kliknięcie przycisku (upscale, vary, zoom itp.) | Gdy chcesz wykonać operację na obrazie |
POST /mj/submit/modal | Przesłanie dodatkowych danych wejściowych | Tylko gdy status to MODAL |
Pełny diagram przepływu pracy
┌─────────────────────────────────────────────────────────────────────────────┐
│ MIDJOURNEY API WORKFLOW │
└─────────────────────────────────────────────────────────────────────────────┘
┌──────────────────┐
│ POST /submit/ │ ← Step 1: Submit prompt, get task_id
│ imagine │
└────────┬─────────┘
│ Returns: { "result": "task_id_1" }
▼
┌──────────────────┐
│ GET /task/{id}/ │ ← Step 2: Poll until status = "SUCCESS"
│ fetch │
└────────┬─────────┘
│ Returns: imageUrl + buttons[] (U1,U2,U3,U4,V1,V2,V3,V4,🔄)
▼
┌──────────────────┐
│ POST /submit/ │ ← Step 3: Click a button using customId
│ action │
└────────┬─────────┘
│ Returns: { "result": "task_id_2" }
▼
┌──────────────────┐
│ GET /task/{id}/ │ ← Step 4: Poll the new task
│ fetch │
└────────┬─────────┘
│
├─── status = "SUCCESS" → Done! Get imageUrl
│
└─── status = "MODAL" → Need additional input (see Step 5)
│
▼
┌──────────────────┐
│ POST /submit/ │ ← Step 5: Submit mask/prompt for special operations
│ modal │
└────────┬─────────┘
│ Returns: { "result": "task_id_3" }
▼
┌──────────────────┐
│ GET /task/{id}/ │ ← Step 6: Poll until SUCCESS
│ fetch │
└──────────────────┘
Każde zakończone powodzeniem zadanie zwraca tablicę buttons. Każdy przycisk ma customId, którego używasz do wywołania następnej akcji.
Przykładowa odpowiedź z /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 nie jest stałą wartością. Zmienia się dla każdego zadania. Zawsze pobieraj go z tablicy buttons.
Referencja przycisków według etapu
Po IMAGINE (obraz w siatce 4)
Te przyciski są zwracane, gdy początkowe generowanie obrazu zostanie zakończone:
| Button | customId Pattern | Action | Result |
|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Powiększ pojedynczy obraz | Pojedynczy obraz w wysokiej rozdzielczości |
| V1-V4 | MJ::JOB::variation::1::xxx | Wygeneruj wariacje | Nowa siatka 4 |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Wygeneruj wszystko ponownie | Nowa siatka 4 |
Po UPSCALE (pojedynczy obraz)
Po przeskalowaniu uzyskujesz dostęp do narzędzi edycji:
| Label | Needs Modal? |
|---|
| Upscale (Subtle) / Upscale (2x) | ❌ Nie |
| Upscale (Creative) / Upscale (4x) | ❌ Nie |
| Vary (Subtle) 🪄 | ❌ Nie |
| Vary (Strong) 🪄 | ❌ Nie |
| Vary (Region) 🖌️ | ✅ Tak (maska) |
| Zoom Out 2x / 1.5x 🔍 | ❌ Nie |
| Custom Zoom 🔍 | ✅ Tak (prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ Nie |
| Animate 🎞️ | ❌ Nie |
| 🔄 Reroll | ❌ Nie |
Uwaga: Etykiety przycisków i formaty customId mogą się różnić w zależności od wersji MJ określonej w twoim prompt (np. --v 6.1 vs --v 5.2). Zawsze odczytuj przyciski z odpowiedzi API.
Przycisk Inpaint (Vary Region) pojawia się dopiero po Upscale.
Kompletny przykład: generowanie i upscale
Krok 1: Wyślij żądanie 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"] }
}'
Odpowiedź:
{ "code": 1, "result": "1768464763141701" }
Krok 2: Odpytaj status zadania
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Odpowiedź (po zakończeniu):
{
"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" },
...
]
}
Krok 3: Kliknij U1, aby wykonać 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"
}'
Odpowiedź:
{ "code": 1, "result": "1768464800000000" }
Krok 4: Odpytaj nowe zadanie i pobierz wynik
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Kiedy Modal jest wymagany?
Gdy wywołasz /mj/submit/action, a status zadania zmieni się na MODAL zamiast SUCCESS, musisz wywołać /mj/submit/modal, aby przekazać dodatkowe dane wejściowe.
Potwierdzone operacje Modal
| Operation | Button | What to Submit |
|---|
| Inpaint | Vary (Region) | maskBase64 (maska PNG) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (np. “your prompt —zoom 2”) |
Przykład: przepływ 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,..."
}'
Wybór trybu prędkości
Dodaj prefiks prędkości do ścieżki:
| Tryb | Prefiks ścieżki | Przykład |
|---|
| Fast | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (domyślnie) | /mj/submit/imagine |
Inne punkty wejścia
Te API to niezależne punkty wejścia, które nie podążają za przepływem imagine → action:
| API | Cel |
|---|
POST /mj/submit/blend | Połącz 2-5 obrazów w jeden |
POST /mj/submit/describe | Wygeneruj prompt na podstawie obrazu |
POST /mj/submit/video | Przekonwertuj obraz na wideo |
POST /mj/submit/edits | Edytuj obraz za pomocą maski |
Wskazówki dotyczące rozwiązywania problemów
Na podstawie projektu API i przepływu pracy, oto typowe problemy, które możesz napotkać:
| Problem | Prawdopodobna przyczyna | Rozwiązanie |
|---|
| Nie można znaleźć przycisku Vary (Region) | Oglądasz obraz w siatce 4 | Najpierw wykonaj upscale (kliknij U1-U4), a następnie sprawdź przyciski |
Status zadania utknął na MODAL | Operacja wymaga dodatkowych danych wejściowych | Wywołaj /mj/submit/modal z wymaganymi danymi |
customId nie działa | Używana jest nieaktualna lub zakodowana na stałe wartość | Zawsze pobieraj świeże customId z odpowiedzi /mj/task/\{id\}/fetch |
Pusta tablica buttons | Zadanie jest nadal w toku | Poczekaj na status: "SUCCESS" przed uzyskaniem dostępu do przycisków |