Langsung ke konten utama

đŸŽ¯ Pahami Konsep Inti

MidJourney API mensimulasikan interaksi tombol Discord. Berbeda dengan REST API pada umumnya, API ini bekerja sebagai state machine di mana setiap operasi mengembalikan tombol baru untuk langkah berikutnya.

4 API Inti

APITujuanKapan Digunakan
POST /mj/submit/imaginePembuatan gambar dari teksTitik awal untuk semua workflow
GET /mj/task/\{id\}/fetchPeriksa status task & dapatkan tombolSetelah setiap submit (poll sampai selesai)
POST /mj/submit/actionKlik tombol (upscale, vary, zoom, dll.)Saat Anda ingin melakukan operasi pada gambar
POST /mj/submit/modalKirim input tambahanHanya saat status adalah MODAL

📊 Diagram Workflow Lengkap

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

🔑 Konsep Utama: Tombol & customId

Setiap task yang berhasil mengembalikan array buttons. Setiap tombol memiliki customId yang Anda gunakan untuk memicu aksi berikutnya. Contoh response dari /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": "🔄" }
  ]
}
âš ī¸ Penting: customId BUKAN nilai tetap. Nilainya berubah untuk setiap task. Selalu ambil nilainya dari array buttons.

📋 Referensi Tombol berdasarkan Tahap

Setelah IMAGINE (gambar grid 4)

Tombol-tombol ini dikembalikan saat pembuatan gambar awal Anda selesai:
ButtoncustomId PatternActionResult
U1-U4MJ::JOB::upsample::1::xxxUpscale gambar tunggalGambar tunggal resolusi tinggi
V1-V4MJ::JOB::variation::1::xxxHasilkan variasiGrid 4 baru
🔄MJ::JOB::reroll::0::xxx::SOLOBuat ulang semuaGrid 4 baru

Setelah UPSCALE (gambar tunggal)

Setelah upscale, Anda mendapatkan akses ke alat pengeditan:
LabelNeeds Modal?
Upscale (Subtle) / Upscale (2x)❌ Tidak
Upscale (Creative) / Upscale (4x)❌ Tidak
Vary (Subtle) đŸĒ„❌ Tidak
Vary (Strong) đŸĒ„❌ Tidak
Vary (Region) đŸ–Œī¸âœ… Ya (mask)
Zoom Out 2x / 1.5x 🔍❌ Tidak
Custom Zoom 🔍✅ Ya (prompt)
âŦ…ī¸âžĄī¸âŦ†ī¸âŦ‡ī¸ Pan❌ Tidak
Animate đŸŽžī¸âŒ Tidak
🔄 Reroll❌ Tidak
Catatan: Label tombol dan format customId dapat berbeda tergantung versi MJ yang ditentukan dalam prompt Anda (misalnya, --v 6.1 vs --v 5.2). Selalu baca tombol dari respons API.
âš ī¸ Tombol Inpaint (Vary Region) hanya muncul setelah Upscale!

⚡ Contoh Lengkap: Generate & Upscale

Langkah 1: Kirim Request 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"] }
  }'
Respons:
{ "code": 1, "result": "1768464763141701" }

Langkah 2: Poll Status Task

curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
  -H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Respons (saat selesai):
{
  "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" },
    ...
  ]
}

Langkah 3: Klik U1 untuk 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"
  }'
Respons:
{ "code": 1, "result": "1768464800000000" }

Langkah 4: Poll Task Baru & Dapatkan Hasil

curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
  -H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'

âš ī¸ Kapan Modal Diperlukan?

Saat Anda memanggil /mj/submit/action dan status task menjadi MODAL alih-alih SUCCESS, Anda harus memanggil /mj/submit/modal untuk memberikan input tambahan.

Operasi Modal yang Dikonfirmasi

OperationButtonWhat to Submit
InpaintVary (Region)maskBase64 (mask PNG) + prompt
Custom Zoom🔍 Custom Zoomprompt (misalnya, “your prompt —zoom 2”)
Contoh: Alur 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,..."
  }'

🚀 Pemilihan Speed Mode

Tambahkan prefix ke path:
ModePrefix PathContoh
Fast/mj-fast/mj-fast/mj/submit/imagine
Turbo/mj-turbo/mj-turbo/mj/submit/imagine
Relax(default)/mj/submit/imagine

🔗 Entry Point Lainnya

API ini adalah entry point independen yang tidak mengikuti alur imagine → action:
APITujuan
POST /mj/submit/blendMenggabungkan 2-5 gambar menjadi satu
POST /mj/submit/describeMenghasilkan prompt dari gambar
POST /mj/submit/videoMengonversi gambar menjadi video
POST /mj/submit/editsMengedit gambar dengan mask

❓ Tips Troubleshooting

Berdasarkan desain API dan alur kerjanya, berikut beberapa masalah umum yang mungkin Anda temui:
MasalahKemungkinan PenyebabSolusi
Tidak dapat menemukan tombol Vary (Region)Sedang melihat gambar 4-gridLakukan upscale terlebih dahulu (klik U1-U4), lalu periksa tombolnya
Status task macet di MODALOperasi memerlukan input tambahanPanggil /mj/submit/modal dengan data yang diperlukan
customId tidak berfungsiMenggunakan nilai yang usang atau di-hardcodeSelalu ambil customId terbaru dari respons /mj/task/\{id\}/fetch
Array buttons kosongTask masih sedang diprosesTunggu hingga status: "SUCCESS" sebelum mengakses tombol