88API88API
使用指南AI 應用API 文件幫助支援
影象(Image)

Midjourney 影象格式(Midjourney Proxy/Midjourney Proxy Plus)

請你注意

該介面 非Midjourney官方的介面,而是基於作者 novicezk 的開源專案 midjourney-proxy 實現的midjourney代理介面。

該專案分為兩個版本,88API 都已經適配:

這裡非常感謝作者的貢獻,讓我們可以方便使用midjourney的強大功能,如果有時間,請給作者一個Star,如果有能力,建議支援作者的付費版本,該版本支援更多功能。

功能類別開源版付費版
基礎功能
Imagine指令及相關動作
墊圖支援
Blend(圖片混合)
Describe(圖生文)
任務實時進度
中文prompt翻譯
prompt敏感詞檢測
user-token連線wss
多賬號配置
高階功能
Shorten(prompt分析)
焦點移動(Pan)
圖片變焦(Zoom)
區域性重繪(Vary Region)
關聯按鈕動作和Remix模式
獲取圖片seed值
賬號管理
賬號池持久化
多種儲存支援(Redis/MySQL)
賬號資訊獲取和設定
任務取消功能
內建管理後臺
智慧特性
MJ V6.0支援
賬號狀態自動監控
模式自動切換
niji・journey Bot支援
InsightFace人臉服務
安全效能
動態配置支援
token掉線問題修復
自動驗證功能
違禁詞自動申訴

📝 簡介

Midjourney是一個強大的影象生成和處理模型,可以根據自然語言描述建立、編輯和修改影象。透過提供不同的介面,可以實現各種影象生成和處理任務。

🔄 流程示意圖

graph TD
    A[開始] --> B{選擇任務型別}

    %% Imagine 流程
    B -->|文生圖| C[提交 Imagine 任務]
    C --> D[獲得初始圖片]
    D --> E{選擇操作}

    %% 基礎操作分支
    E -->|U1-U4| F[放大]
    E -->|V1-V4| G[變體]

    %% Blend 流程
    B -->|圖片混合| H[提交 Blend 任務]
    H --> D

    %% Describe 流程
    B -->|圖生文| I[提交 Describe 任務]
    I --> J[獲得圖片描述]

    %% Action & Modal 流程
    F --> K[提交 Action]
    G --> K
    K -->|需要彈窗| L[提交 Modal]
    K -->|直接執行| M[執行完成]
    L --> M

    %% Face Swap 流程
    B -->|人臉替換| N[提交 Swap Face 任務]
    N --> M

    %% 查詢相關
    M --> O{後續操作}
    O -->|查詢進度| P[獲取任務詳情]
    O -->|獲取種子| Q[獲取圖片 Seed]
    O -->|儲存圖片| R[上傳至 Discord]

    %% 樣式定義
    classDef process fill:#f9f,stroke:#333,stroke-width:2px
    classDef decision fill:#bbf,stroke:#333,stroke-width:2px
    classDef endpoint fill:#bfb,stroke:#333,stroke-width:2px

    class A,M,J,R endpoint
    class B,E,O decision
    class C,D,F,G,H,I,K,L,N,P,Q process

流程說明

  1. 初始任務

    • Imagine: 文字生成圖片
    • Blend: 多圖混合
    • Describe: 圖片描述
    • Swap Face: 人臉替換
  2. 圖片處理

    • U1-U4: 放大操作
    • V1-V4: 變體生成
    • Pan: 圖片平移
    • Zoom: 圖片縮放
  3. 特殊流程

    • Action + Modal: 需要彈窗確認的操作
    • Action 直接執行: 不需要彈窗的操作
  4. 任務管理

    • 獲取任務詳情
    • 獲取圖片 Seed
    • 上傳至 Discord

💡 請求示例

提交Imagine任務 ✅

curl --location --request POST 'https://88api.ai/mj/submit/imagine' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "botType": "MID_JOURNEY",
  "prompt": "Cat",
  "base64Array": [],
  "accountFilter": {
    "channelId": "",
    "instanceId": "",
    "modes": [],
    "remark": "",
    "remix": true,
    "remixAutoConsidered": true
  },
  "notifyHook": "",
  "state": ""
}'

響應示例:

{
  "code": 1,
  "description": "提交成功",
  "properties": {},
  "result": 1320098173412546
}

提交Blend任務 ✅

curl --location --request POST 'https://88api.ai/mj/submit/blend' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "botType": "MID_JOURNEY",
  "base64Array": [
    "data:image/png;base64,xxx1",
    "data:image/png;base64,xxx2"
  ],
  "dimensions": "SQUARE",
  "accountFilter": {
    "channelId": "",
    "instanceId": "",
    "modes": [],
    "remark": "",
    "remix": true,
    "remixAutoConsidered": true
  },
  "notifyHook": "",
  "state": ""
}'

響應示例:

{
  "code": 1,
  "description": "提交成功",
  "properties": {},
  "result": 1320098173412546
}

提交Describe任務 ✅

curl --location --request POST 'https://88api.ai/mj/submit/describe' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "botType": "MID_JOURNEY",
  "base64": "data:image/png;base64,xxx",
  "accountFilter": {
    "channelId": "",
    "instanceId": "",
    "modes": [],
    "remark": "",
    "remix": true,
    "remixAutoConsidered": true
  },
  "notifyHook": "",
  "state": ""
}'

響應示例:

{
  "code": 1,
  "description": "提交成功",
  "properties": {},
  "result": 1320098173412546
}

提交Modal ✅

curl --location --request POST 'https://88api.ai/mj/submit/modal' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "maskBase64": "",
  "prompt": "",
  "taskId": "14001934816969359"
}'

響應示例:

{
  "code": 1,
  "description": "提交成功",
  "properties": {},
  "result": 1320098173412546
}

提交swap_face任務 ✅

curl --location --request POST 'https://88api.ai/mj/insight-face/swap' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "sourceBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RDnYdriP1wsS81kwU8OVs/R3xu8s6bX7+zYnOH8coSqpmRSBjqerjcBlr2OB/lbAf/2Q==",
  "targetBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD849k="
}'

響應示例:

{
  "code": 0,
  "description": "string",
  "result": "string"
}

執行Action動作 ✅

curl --location --request POST 'https://88api.ai/mj/submit/action' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "chooseSameChannel": true,
  "customId": "MJ::JOB::upsample::1::82c51c9d-bc33-4c07-a471-36c3dcb1a6f0",
  "taskId": "1728781324658687",
  "accountFilter": {
    "channelId": "",
    "instanceId": "",
    "modes": [],
    "remark": "",
    "remix": true,
    "remixAutoConsidered": true
  },
  "notifyHook": "",
  "state": ""
}'

響應示例:

{
  "code": 1,
  "description": "提交成功",
  "properties": {},
  "result": 1320098173412546
}

上傳檔案到discord ✅

curl --location --request POST 'https://88api.ai/mj/submit/upload-discord-images' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
  "base64Array": [],
  "filter": {
    "channelId": "",
    "instanceId": "",
    "remark": ""
  }
}'

響應示例:

{
  "code": 0,
  "description": "string",
  "result": ["string"]
}

根據ID列表查詢任務 ✅

curl --location --request POST 'https://88api.ai/mj/task/list-by-condition' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
  "ids": []
}'

響應示例:

[
  {
    "action": "IMAGINE",
    "buttons": [
      {
        "customId": "string",
        "emoji": "string",
        "label": "string",
        "style": 0,
        "type": 0
      }
    ],
    "description": "string",
    "failReason": "string",
    "finishTime": 0,
    "id": "string",
    "imageUrl": "string",
    "progress": "string",
    "prompt": "string",
    "promptEn": "string",
    "properties": {},
    "startTime": 0,
    "state": "string",
    "status": "NOT_START",
    "submitTime": 0
  }
]

指定ID獲取任務 ✅

curl --location --request GET 'https://88api.ai/mj/task/{id}/fetch' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Content-Type: application/json'

響應示例:

{
  "action": "IMAGINE",
  "buttons": [
    {
      "customId": "string",
      "emoji": "string",
      "label": "string",
      "style": 0,
      "type": 0
    }
  ],
  "description": "string",
  "failReason": "string",
  "finishTime": 0,
  "id": "string",
  "imageUrl": "string",
  "progress": "string",
  "prompt": "string",
  "promptEn": "string",
  "properties": {},
  "startTime": 0,
  "state": "string",
  "status": "NOT_START",
  "submitTime": 0
}

獲取任務圖片的seed ✅

curl --location --request GET 'https://88api.ai/mj/task/{id}/image-seed' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Content-Type: application/json'

響應示例:

{
  "code": 0,
  "description": "string",
  "result": "string"
}

📮 請求

端點

提交Imagine任務

POST /mj/submit/imagine

根據文字提示建立圖片。

提交Blend任務

POST /mj/submit/blend

根據多個輸入圖片融合生成新圖片。

提交Describe任務

POST /mj/submit/describe

根據輸入圖片生成文字描述。

提交Modal

POST /mj/submit/modal

提交模態資訊,用於調整圖片生成細節。

提交swap_face任務

POST /mj/insight-face/swap

根據源圖片和目標圖片進行人臉交換。

執行Action動作

POST /mj/submit/action

對已生成的圖片進行後續操作,如放大、調整等。

上傳檔案到discord

POST /mj/submit/upload-discord-images

將圖片上傳到discord平臺。

根據ID列表查詢任務

POST /mj/task/list-by-condition

根據指定的任務ID列表查詢任務詳情。

指定ID獲取任務

GET /mj/task/{id}/fetch

根據任務ID獲取任務詳情。

獲取任務圖片的seed

GET /mj/task/{id}/image-seed

獲取指定任務生成圖片的seed值。

鑑權方法

在請求頭中包含以下內容進行 API 金鑰認證:

Authorization: Bearer $API_KEY$OPENAI_API_KEY

其中 $OPENAI_API_KEY 是您的 API 金鑰。

請求體引數

提交 Imagine 任務

botType
  • 型別:列舉字串
  • 必需:否
  • 預設值:MID_JOURNEY
  • 可選值:
    • MID_JOURNEY: Midjourney 模型
    • NIJI_JOURNEY: Niji Journey 模型
  • 說明:選擇使用的 bot 型別
prompt
  • 型別:字串
  • 必需:是
  • 說明:影象生成的文字提示詞
  • 提示:
    • 使用清晰具體的描述
    • 可以包含藝術風格、構圖等細節
    • 支援英文和中文輸入
base64Array
  • 型別:字串陣列
  • 必需:否
  • 說明:墊圖的 base64 編碼陣列
  • 格式:每個元素應為完整的 base64 圖片字串,包含 MIME 型別字首
accountFilter
  • 型別:物件
  • 必需:否
  • 屬性:
    • channelId: 頻道 ID
    • instanceId: 賬號例項 ID
    • modes: 賬號模式陣列,可選值:RELAX、FAST、TURBO
    • remark: 備註包含的內容
    • remix: 賬號是否支援 remix
    • remixAutoConsidered: remix 自動提交設定
notifyHook
  • 型別:字串
  • 必需:否
  • 說明:任務完成後的回撥地址,為空時使用全域性 notifyHook
state
  • 型別:字串
  • 必需:否
  • 說明:自定義狀態引數,可用於跟蹤請求

提交 Blend 任務

base64Array
  • 型別:字串陣列
  • 必需:是
  • 說明:要混合的圖片 base64 編碼陣列
  • 格式:必須包含 2-5 張圖片的 base64 字串
dimensions
  • 型別:列舉字串
  • 必需:否
  • 可選值:
    • PORTRAIT: 2:3 比例
    • SQUARE: 1:1 比例
    • LANDSCAPE: 3:2 比例
  • 說明:輸出圖片的寬高比設定

提交 Describe 任務

base64
  • 型別:字串
  • 必需:是
  • 說明:需要描述的圖片的 base64 編碼
  • 格式:完整的 base64 字串,包含 MIME 型別字首

提交 Modal 任務

maskBase64
  • 型別:字串
  • 必需:否
  • 說明:區域性重繪的蒙版圖片 base64 編碼
prompt
  • 型別:字串
  • 必需:否
  • 說明:重繪區域的文字提示詞
taskId
  • 型別:字串
  • 必需:是
  • 說明:原始任務的 ID

提交 Swap Face 任務

sourceBase64
  • 型別:字串
  • 必需:是
  • 說明:人臉源圖片的 base64 編碼
  • 要求:圖片必須包含清晰的人臉
targetBase64
  • 型別:字串
  • 必需:是
  • 說明:目標圖片的 base64 編碼
  • 要求:圖片必須包含要替換的人臉

執行 Action 動作

chooseSameChannel
  • 型別:布林值
  • 必需:否
  • 預設值:false
  • 說明:是否選擇同一頻道下的賬號
customId
  • 型別:字串
  • 必需:是
  • 說明:動作識別符號
  • 格式:特定格式的字串,如 "MJ::JOB::upsample::1::xxx"
taskId
  • 型別:字串
  • 必需:是
  • 說明:要執行動作的任務 ID

上傳檔案到 Discord

base64Array
  • 型別:字串陣列
  • 必需:是
  • 說明:要上傳的圖片 base64 編碼陣列
filter
  • 型別:物件
  • 必需:否
  • 屬性:
    • channelId: 目標頻道 ID
    • instanceId: 賬號例項 ID
    • remark: 備註資訊

根據 ID 列表查詢任務

ids
  • 型別:字串陣列
  • 必需:是
  • 說明:要查詢的任務 ID 列表

通用響應格式

所有介面都返回相似的響應結構:

code
  • 型別:整數
  • 說明:狀態碼
狀態碼說明
1提交成功
22任務排隊中
21引數錯誤
23系統錯誤
24賬號不可用
25餘額不足
description
  • 型別:字串
  • 說明:響應描述資訊
properties
  • 型別:物件
  • 說明:擴充套件屬性
result
  • 型別:字串或陣列
  • 說明:返回結果,可能是任務 ID 或其他資料

📥 響應

成功響應

action

  • 型別:列舉字串
  • 說明:任務型別
字串值說明
IMAGINE建立圖片
UPSCALE放大圖片
VARIATION變體生成
ZOOM縮放圖片
PAN平移圖片
DESCRIBE圖片描述
BLEND圖片混合
SHORTEN縮短提示詞
SWAP_FACE人臉替換

buttons

  • 型別:物件陣列
  • 說明:可執行的操作按鈕
陣列包含屬性說明
customId動作標識
emoji按鈕圖示
label按鈕文字
style樣式(2=Primary, 3=Green)
type系統內部使用的型別

description

  • 型別:字串
  • 說明:任務描述資訊

failReason

  • 型別:字串
  • 說明:任務失敗原因

finishTime

  • 型別:整數
  • 說明:任務完成時間戳

id

  • 型別:字串
  • 說明:任務唯一識別符號

imageUrl

  • 型別:字串
  • 說明:生成圖片的URL

progress

  • 型別:字串
  • 說明:任務進度資訊

prompt

  • 型別:字串
  • 說明:原始提示詞

promptEn

  • 型別:字串
  • 說明:英文提示詞

status

  • 型別:列舉字串
  • 說明:任務狀態
字串值說明
NOT_START未開始
SUBMITTED已提交
MODAL模態操作中
IN_PROGRESS進行中
FAILURE失敗
SUCCESS成功
CANCEL已取消

submitTime

  • 型別:整數
  • 說明:任務提交時間戳

startTime

  • 型別:整數
  • 說明:任務開始執行時間戳

錯誤響應

當請求出現問題時,API 將返回錯誤響應:

HTTP 狀態碼

  • 400 Bad Request: 請求引數無效
  • 401 Unauthorized: API 金鑰無效或未提供
  • 403 Forbidden: 許可權不足
  • 404 Not Found: 資源不存在
  • 429 Too Many Requests: 請求頻率超限
  • 500 Internal Server Error: 伺服器內部錯誤

錯誤響應格式

{
  "code": `<錯誤碼>`,
  "description": "錯誤描述資訊",
  "result": null
}

💡 最佳實踐

Prompt 編寫建議

  1. 使用清晰簡潔的語言描述期望的影象內容
  2. 可以參考Midjourney支援的各種引數來控制圖片風格
  3. 適當使用否定描述以排除不需要的元素
  4. 可以透過圖片URL作為參考來指導生成

圖片生成流程

  1. 提交Imagine任務,獲得初步圖片
  2. 必要時透過Blend、Modal等任務進一步最佳化
  3. 執行Action動作進行圖片微調
  4. 將滿意的結果圖片上傳儲存

圖片格式要求

  1. 支援的圖片格式:

    • JPEG/JPG
    • PNG
    • GIF (靜態)
    • WEBP
  2. 圖片大小限制:

    • 檔案大小:最大 4MB
    • 解析度:建議 1024x1024 或更高
    • 寬高比:支援 1:1、2:3、3:2

效能最佳化建議

  1. Base64 編碼:

    • 使用標準 Base64 編碼格式
    • 包含正確的 MIME 型別字首
    • 壓縮圖片以減少資料傳輸
  2. 任務處理:

    • 使用 webhook 接收任務完成通知
    • 合理設定重試策略
    • 建議使用非同步處理方式

錯誤處理

  • 實現請求重試機制

  • 新增錯誤日誌記錄

  • 設定合理的超時時間