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)
تُعاد هذه الأزرار عند اكتمال إنشاء الصورة الأولية:
| Button | customId Pattern | Action | Result |
|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | ترقية صورة واحدة | صورة واحدة عالية الدقة |
| V1-V4 | MJ::JOB::variation::1::xxx | إنشاء تنويعات | 4-grid جديدة |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | إعادة إنشاء الكل | 4-grid جديدة |
بعد UPSCALE (صورة واحدة)
بعد الترقية، تحصل على إمكانية الوصول إلى أدوات التحرير:
| Label | Needs 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 المؤكدة
| Operation | Button | What to Submit |
|---|
| Inpaint | Vary (Region) | maskBase64 (قناع PNG) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (مثل: “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" قبل الوصول إلى الأزرار |