الانتقال إلى المحتوى الرئيسي

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 APIs التقليدية، فهي تعمل كـ آلة حالات حيث تُرجع كل عملية أزرارًا جديدة للخطوة التالية.

واجهات API الأساسية الأربع

APIالغرضمتى تُستخدم
POST /mj/submit/imagineإنشاء الصور من النصنقطة البداية لجميع مسارات العمل
GET /mj/task/\{id\}/fetchالاستعلام عن حالة المهمة والحصول على الأزراربعد كل عملية submit (استعلم بشكل متكرر حتى تكتمل)
POST /mj/submit/actionالنقر على زر (upscale و vary و zoom وغيرها)عندما تريد تنفيذ إجراء على صورة
POST /mj/submit/modalإرسال إدخال إضافيفقط عندما تكون الحالة MODAL

مخطط مسار العمل الكامل

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

المفهوم الأساسي: الأزرار و customId

تعيد كل مهمة ناجحة مصفوفة 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)

تُعاد هذه الأزرار عند اكتمال إنشاء الصورة الأولية:
ButtoncustomId PatternActionResult
U1-U4MJ::JOB::upsample::1::xxxترقية صورة واحدةصورة واحدة عالية الدقة
V1-V4MJ::JOB::variation::1::xxxإنشاء تنويعات4-grid جديدة
🔄MJ::JOB::reroll::0::xxx::SOLOإعادة إنشاء الكل4-grid جديدة

بعد UPSCALE (صورة واحدة)

بعد الترقية، تحصل على إمكانية الوصول إلى أدوات التحرير:
LabelNeeds Modal?
Upscale (Subtle) / Upscale (2x)❌ لا
Upscale (Creative) / Upscale (4x)❌ لا
Vary (Subtle) 🪄❌ لا
Vary (Strong) 🪄❌ لا
Vary (Region) 🖌️✅ نعم (قناع)
Zoom Out 2x / 1.5x 🔍❌ لا
Custom Zoom 🔍✅ نعم (prompt)
⬅️➡️⬆️⬇️ Pan❌ لا
Animate 🎞️❌ لا
🔄 Reroll❌ لا
ملاحظة: قد تختلف تسميات الأزرار وتنسيقات customId بحسب إصدار MJ المحدد في prompt الخاص بك (على سبيل المثال، --v 6.1 مقابل --v 5.2). اقرأ الأزرار دائمًا من استجابة API.
زر Inpaint (Vary Region) يظهر فقط بعد Upscale.

مثال كامل: إنشاء الصورة وترقيتها

الخطوة 1: إرسال طلب imagine

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"] }
  }'
الاستجابة:
{ "code": 1, "result": "1768464763141701" }

الخطوة 2: الاستعلام عن حالة المهمة

curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
  -H "Authorization: Bearer $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 لإجراء الترقية

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"
  }'
الاستجابة:
{ "code": 1, "result": "1768464800000000" }

الخطوة 4: الاستعلام عن المهمة الجديدة والحصول على النتيجة

curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
  -H "Authorization: Bearer $COMETAPI_KEY"

متى يكون Modal مطلوبًا؟

عند استدعاء /mj/submit/action وتصبح حالة المهمة MODAL بدلًا من SUCCESS، يجب عليك استدعاء /mj/submit/modal لتوفير إدخال إضافي.

عمليات Modal المؤكدة

OperationButtonWhat to Submit
InpaintVary (Region)maskBase64 (قناع PNG) + prompt
Custom Zoom🔍 Custom Zoomprompt (مثل: “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 $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,..."
  }'

اختيار وضع السرعة

أضف بادئة السرعة إلى المسار:
الوضعبادئة المسارمثال
Fast/mj-fast/mj-fast/mj/submit/imagine
Turbo/mj-turbo/mj-turbo/mj/submit/imagine
Relax(افتراضي)/mj/submit/imagine

نقاط دخول أخرى

واجهات API هذه هي نقاط دخول مستقلة لا تتبع تدفق imagine → action:
APIالغرض
POST /mj/submit/blendدمج 2-5 صور في صورة واحدة
POST /mj/submit/describeإنشاء prompt من صورة
POST /mj/submit/videoتحويل صورة إلى فيديو
POST /mj/submit/editsتعديل صورة باستخدام mask

نصائح لاستكشاف الأخطاء وإصلاحها

استنادًا إلى تصميم API وسير العمل، إليك المشكلات الشائعة التي قد تواجهها:
المشكلةالسبب المحتملالحل
يتعذر العثور على زر Vary (Region)النظر إلى صورة شبكة 4 صورقم بإجراء Upscale أولًا (اضغط على U1-U4)، ثم تحقق من الأزرار
حالة المهمة عالقة عند MODALتتطلب العملية إدخالًا إضافيًااستدعِ /mj/submit/modal مع البيانات المطلوبة
customId لا يعملاستخدام قيمة قديمة أو مضمّنة بشكل ثابتاحصل دائمًا على customId جديد من استجابة /mj/task/\{id\}/fetch
مصفوفة buttons فارغةالمهمة لا تزال قيد التنفيذانتظر حتى status: "SUCCESS" قبل الوصول إلى الأزرار