> ## 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.

# Zacznij korzystać z Midjourney API

> Szybki start z Midjourney API w CometAPI: wyślij /mj/submit/imagine, odpytywaj /mj/task/{id}/fetch, a następnie użyj /mj/submit/action i przycisków modalnych.

## 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 do następnego kroku.

### 4 podstawowe API

| API                                                                                      | Cel                                                 | Kiedy używać                                       |
| ---------------------------------------------------------------------------------------- | --------------------------------------------------- | -------------------------------------------------- |
| [`POST /mj/submit/imagine`](/api/image/midjourney/imagine)                               | Generowanie obrazu na podstawie tekstu              | Punkt wyjścia dla wszystkich przepływów            |
| [`GET /mj/task/\{id\}/fetch`](/api/image/midjourney/task-fetching-api/fetch-single-task) | Sprawdzanie statusu zadania i pobieranie przycisków | Po każdym wysłaniu (odpytywanie aż do zakończenia) |
| [`POST /mj/submit/action`](/api/image/midjourney/action)                                 | Kliknięcie przycisku (upscale, vary, zoom itp.)     | Gdy chcesz wykonać operację na obrazie             |
| [`POST /mj/submit/modal`](/api/image/midjourney/modal)                                   | Przesłanie dodatkowych danych wejściowych           | Tylko gdy status to `MODAL`                        |

***

## Pełny diagram przepływu

```
┌─────────────────────────────────────────────────────────────────────────────┐
│                         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       │
           └──────────────────┘
```

***

## Kluczowa koncepcja: przyciski i customId

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`:**

```json theme={null}
{
  "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": "🔄" }
  ]
}
```

<Warning>
  `customId` nie jest stałą wartością. Zmienia się dla każdego zadania. Zawsze pobieraj je z tablicy `buttons`.
</Warning>

***

## Referencja przycisków według etapu

### Po IMAGINE (obraz 4-grid)

Te przyciski są zwracane po zakończeniu początkowego generowania obrazu:

| 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`    | Generuj wariacje            | Nowy 4-grid                                |
| 🔄     | `MJ::JOB::reroll::0::xxx::SOLO` | Wygeneruj wszystko ponownie | Nowy 4-grid                                |

### Po UPSCALE (pojedynczy obraz)

Po powiększeniu 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.

<Warning>
  Przycisk Inpaint (Vary Region) pojawia się dopiero po Upscale.
</Warning>

***

## Kompletny przykład: generowanie i powiększanie

### Krok 1: Wyślij żądanie imagine

```bash theme={null}
curl -X POST 'https://api.cometapi.com/mj/submit/imagine' \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "botType": "MID_JOURNEY",
    "prompt": "a cute cat --v 6.1",
    "accountFilter": { "modes": ["FAST"] }
  }'
```

**Odpowiedź:**

```json theme={null}
{ "code": 1, "result": "1768464763141701" }
```

### Krok 2: Odpytuj status zadania

```bash theme={null}
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
  -H "Authorization: Bearer $COMETAPI_KEY"
```

**Odpowiedź (po ukończeniu):**

```json theme={null}
{
  "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 powiększyć

```bash theme={null}
curl -X POST 'https://api.cometapi.com/mj/submit/action' \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "taskId": "1768464763141701",
    "customId": "MJ::JOB::upsample::1::5f20922e-xxx"
  }'
```

**Odpowiedź:**

```json theme={null}
{ "code": 1, "result": "1768464800000000" }
```

### Krok 4: Odpytuj nowe zadanie i pobierz wynik

```bash theme={null}
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
  -H "Authorization: Bearer $COMETAPI_KEY"
```

***

## Kiedy Modal jest wymagany?

Gdy wywołasz [`/mj/submit/action`](/api/image/midjourney/action), a status zadania zmieni się na `MODAL` zamiast `SUCCESS`, musisz wywołać [`/mj/submit/modal`](/api/image/midjourney/modal), aby podać 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**

```bash theme={null}
# 1. Click Vary (Region) button via Action API
curl -X POST 'https://api.cometapi.com/mj/submit/action' \
  -H "Authorization: Bearer $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 $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 szybkości

Dodaj prefiks szybkoś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ślny)      | `/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`](/api/image/midjourney/blend)         | Połącz 2-5 obrazów w jeden   |
| [`POST /mj/submit/describe`](/api/image/midjourney/describe)   | Wygeneruj prompt z obrazu    |
| [`POST /mj/submit/video`](/api/image/midjourney/submit-video)  | Przekształć obraz w wideo    |
| [`POST /mj/submit/edits`](/api/image/midjourney/submit-editor) | 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 potem sprawdź przyciski                                                                 |
| Status zadania utknął na `MODAL`          | Operacja wymaga dodatkowych danych wejściowych         | Wywołaj [`/mj/submit/modal`](/api/image/midjourney/modal) z wymaganymi danymi                                                       |
| `customId` nie działa                     | Używasz nieaktualnej lub zakodowanej na stałe wartości | Zawsze pobieraj świeże `customId` z odpowiedzi [`/mj/task/\{id\}/fetch`](/api/image/midjourney/task-fetching-api/fetch-single-task) |
| Pusta tablica `buttons`                   | Zadanie nadal jest w toku                              | Poczekaj na `status: "SUCCESS"` przed uzyskaniem dostępu do przycisków                                                              |
