影象(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流程說明
-
初始任務
- Imagine: 文字生成圖片
- Blend: 多圖混合
- Describe: 圖片描述
- Swap Face: 人臉替換
-
圖片處理
- U1-U4: 放大操作
- V1-V4: 變體生成
- Pan: 圖片平移
- Zoom: 圖片縮放
-
特殊流程
- Action + Modal: 需要彈窗確認的操作
- Action 直接執行: 不需要彈窗的操作
-
任務管理
- 獲取任務詳情
- 獲取圖片 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: 頻道 IDinstanceId: 賬號例項 IDmodes: 賬號模式陣列,可選值:RELAX、FAST、TURBOremark: 備註包含的內容remix: 賬號是否支援 remixremixAutoConsidered: 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: 目標頻道 IDinstanceId: 賬號例項 IDremark: 備註資訊
根據 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 編寫建議
- 使用清晰簡潔的語言描述期望的影象內容
- 可以參考Midjourney支援的各種引數來控制圖片風格
- 適當使用否定描述以排除不需要的元素
- 可以透過圖片URL作為參考來指導生成
圖片生成流程
- 提交Imagine任務,獲得初步圖片
- 必要時透過Blend、Modal等任務進一步最佳化
- 執行Action動作進行圖片微調
- 將滿意的結果圖片上傳儲存
圖片格式要求
-
支援的圖片格式:
- JPEG/JPG
- PNG
- GIF (靜態)
- WEBP
-
圖片大小限制:
- 檔案大小:最大 4MB
- 解析度:建議 1024x1024 或更高
- 寬高比:支援 1:1、2:3、3:2
效能最佳化建議
-
Base64 編碼:
- 使用標準 Base64 編碼格式
- 包含正確的 MIME 型別字首
- 壓縮圖片以減少資料傳輸
-
任務處理:
- 使用 webhook 接收任務完成通知
- 合理設定重試策略
- 建議使用非同步處理方式
錯誤處理
-
實現請求重試機制
-
新增錯誤日誌記錄
-
設定合理的超時時間