Ana içeriğe atla

🎯 Temel Kavramı Anlayın

MidJourney API, Discord düğme etkileşimlerini simüle eder. Tipik REST API’lerinden farklı olarak, her işlemin bir sonraki adım için yeni düğmeler döndürdüğü bir durum makinesi gibi çalışır.

4 Temel API

APIAmaçNe Zaman Kullanılır
POST /mj/submit/imagineMetinden görsel oluşturmaTüm iş akışları için başlangıç noktası
GET /mj/task/\{id\}/fetchGörev durumunu sorgulama ve düğmeleri almaHer submit işleminden sonra (tamamlanana kadar sorgulayın)
POST /mj/submit/actionBir düğmeye tıklama (upscale, vary, zoom vb.)Bir görsel üzerinde işlem yapmak istediğinizde
POST /mj/submit/modalEk girdi göndermeYalnızca durum MODAL olduğunda

📊 Tam İş Akışı Diyagramı

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

🔑 Temel Kavram: Düğmeler ve customId

Başarılı olan her görev bir buttons dizisi döndürür. Her düğmenin, bir sonraki işlemi tetiklemek için kullandığınız bir customId değeri vardır. /mj/task/\{id\}/fetch yanıt örneği:
{
  "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": "🔄" }
  ]
}
⚠️ Önemli: customId sabit bir değer DEĞİLDİR. Her görev için değişir. Onu her zaman buttons dizisinden alın.

📋 Aşamaya Göre Button Referansı

IMAGINE sonrası (4’lü görsel ızgarası)

İlk görsel oluşturma işleminiz tamamlandığında şu button’lar döner:
ButtoncustomId PatternActionResult
U1-U4MJ::JOB::upsample::1::xxxTek bir görseli upscale etYüksek çözünürlüklü tek görsel
V1-V4MJ::JOB::variation::1::xxxVaryasyonlar oluşturYeni 4’lü ızgara
🔄MJ::JOB::reroll::0::xxx::SOLOTümünü yeniden oluşturYeni 4’lü ızgara

UPSCALE sonrası (tek görsel)

Upscale işleminden sonra düzenleme araçlarına erişebilirsiniz:
LabelNeeds Modal?
Upscale (Subtle) / Upscale (2x)❌ Hayır
Upscale (Creative) / Upscale (4x)❌ Hayır
Vary (Subtle) 🪄❌ Hayır
Vary (Strong) 🪄❌ Hayır
Vary (Region) 🖌️✅ Evet (mask)
Zoom Out 2x / 1.5x 🔍❌ Hayır
Custom Zoom 🔍✅ Evet (prompt)
⬅️➡️⬆️⬇️ Pan❌ Hayır
Animate 🎞️❌ Hayır
🔄 Reroll❌ Hayır
Not: Button etiketleri ve customId formatları, prompt içinde belirtilen MJ sürümüne göre değişebilir (ör. --v 6.1 ve --v 5.2). Button’ları her zaman API yanıtından okuyun.
⚠️ Inpaint (Vary Region) button’ı yalnızca Upscale işleminden sonra görünür!

⚡ Tam Örnek: Oluşturma ve Upscale

Adım 1: Imagine İsteğini Gönderin

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"] }
  }'
Yanıt:
{ "code": 1, "result": "1768464763141701" }

Adım 2: Görev Durumunu Sorgulayın

curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
  -H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Yanıt (tamamlandığında):
{
  "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" },
    ...
  ]
}

Adım 3: Upscale için U1’e Tıklayın

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"
  }'
Yanıt:
{ "code": 1, "result": "1768464800000000" }

Adım 4: Yeni Görevi Sorgulayın ve Sonucu Alın

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

⚠️ Modal Ne Zaman Gereklidir?

/mj/submit/action çağrısını yaptığınızda görev durumu SUCCESS yerine MODAL olursa, ek girdi sağlamak için /mj/submit/modal çağrısını yapmalısınız.

Doğrulanmış Modal İşlemleri

OperationButtonWhat to Submit
InpaintVary (Region)maskBase64 (PNG mask) + prompt
Custom Zoom🔍 Custom Zoomprompt (örn. “your prompt —zoom 2”)
Örnek: Inpaint Akışı
# 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,..."
  }'

🚀 Hız Modu Seçimi

Yola hız öneki ekleyin:
ModYol ÖnekiÖrnek
Fast/mj-fast/mj-fast/mj/submit/imagine
Turbo/mj-turbo/mj-turbo/mj/submit/imagine
Relax(varsayılan)/mj/submit/imagine

🔗 Diğer Giriş Noktaları

Bu API’ler, imagine → action akışını takip etmeyen bağımsız giriş noktalarıdır:
APIAmaç
POST /mj/submit/blend2-5 görseli tek bir görselde birleştirir
POST /mj/submit/describeGörselden prompt oluşturur
POST /mj/submit/videoGörseli videoya dönüştürür
POST /mj/submit/editsGörseli maskeyle düzenler

❓ Sorun Giderme İpuçları

API tasarımına ve iş akışına göre, karşılaşabileceğiniz yaygın sorunlar şunlardır:
SorunOlası NedenÇözüm
Vary (Region) düğmesi bulunamıyor4’lü grid görsele bakılıyorÖnce Upscale yapın (U1-U4’e tıklayın), ardından düğmeleri kontrol edin
Görev durumu MODAL durumunda takılı kalıyorİşlem ek girdi gerektiriyorGerekli verilerle /mj/submit/modal çağrısını yapın
customId çalışmıyorEski veya sabit kodlanmış bir değer kullanılıyorHer zaman /mj/task/\{id\}/fetch yanıtından güncel customId alın
buttons dizisi boşGörev hâlâ işleniyorDüğmelere erişmeden önce status: "SUCCESS" olmasını bekleyin