最近想着把 Midjourney 接入到自己的平台,但由于 Midjourney 没有开放接口,所以退而求其次。利用 Discord 的 Bot API,通过下发/imagine
命令,创建 Midjourney bot 的绘画任务。并实时监听 Midjourney bot 的消息,回传给平台。这样就基本上满足我的需求了。
本篇文章我会介绍下我实现的 Midjourney API 项目,并且附上使用教程。
大致的流程如图:
midjourney-api#
開源地址:https://github.com/yokonsan/midjourney-api
該倉庫是我在將 Midjourney 接入到平台,開發的一套接口。個人使用下來基本滿足大部分需求,現在開源出來,僅供大家參考。大家覺得有用可以點個 star,發現有 bug 可以提 issue 或 pr。
具體的開發細節就不展開了,本篇文章說下如何使用該倉庫。
準備工作#
注意:本倉庫依賴於 Discord 開發的 API,對於如何訪問 Discord,大家自行尋找方法。這裡默認大家已經在 Discord 創建了自己的伺服器,並且將 Midjourney 添加到伺服器內。
使用該倉庫我們需要 4 個參數:
- 用戶 Token(調用 API 需要身份驗證)
- 創建的 Discord 機器人 Token(實時監聽 Midjourney 會話)
- Discord 自建伺服器 ID
- Midjourney bot 所在頻道 ID
如果大家知道如何獲取這幾個參數,可以跳到下一節。
用戶 Token#
登錄網頁端 discord 按F12
打開開發者工具,然後刷新頁面。參考下圖點擊Network
,在 filter 欄輸入/api/library
找到這條請求記錄,然後在請求體中找到authorization
字段,它的值就是我們需要的 Token。
注意:該 Token 屬於隱私信息,不要直接暴露在代碼中發布到 Github。
機器人 Token#
這裡需要先創建 discord 機器人,地址:https://discord.com/developers/applications
創建過程很簡單,不做贅述。
我們點擊Reset Token
,然後copy
這串 Token 即可。
但是我們需要我們的機器人能夠幹活,還需要給他添加些 Scopes。
勾選上 Scope 後,頁面下方會生成一個 Oauth2 授權鏈接。我們複製該鏈接然後在瀏覽器打開。
打開後會出現 OAuth2 授權頁面,我們將機器人添加到我們的伺服器即可。
伺服器 ID、頻道 ID#
這裡比較簡單,我們先打開開發者模式:
然後鼠標右擊伺服器頭像,複製伺服器 ID。頻道也一樣,右擊頻道,複製頻道 ID。
安裝啟動#
git clone
pip install -r requirements.txt
將.env.template
重命名為.env
,並填入參數值:
USER_TOKEN=用戶token
BOT_TOKEN=機器人token
GUILD_ID=伺服器ID
CHANNEL_ID=頻道ID
CALLBACK_URL=回調地址,默認http post請求
直接啟動#
# 啟動監聽機器人
python task_bot.py
# 啟動http服務
python server.py
docker 啟動#
# 構建鏡像
sh build.sh
# 啟動容器
sh start.sh
啟動後訪問接口swagger
文檔:http://127.0.0.1:8061/docs
midjourney-api
提供接口:
/v1/api/trigger/bot
:觸發繪畫任務,已完成/v1/api/upload
:上傳圖片,觸發任務,待開發
使用#
目前只完成了觸發繪畫任務的接口,我們以此為示例。該接口調用需要參數:
class TriggerType(str, Enum):
generate = "generate" # /imagine 根據提示詞,生成圖片
upscale = "upscale" # U 選擇索引高清放大
variation = "variation" # V 基於索引風格變化
reset = "reset" # 重繪
class TriggerBotIn(BaseModel):
type: TriggerType # 觸發類型
prompt: str = "" # 提示詞
msg_id: str = "" # 消息ID,
msg_hash: str = "" # 消息hash
index: int = 0 # 圖片索引,1-4
generate#
直接調用接口 /v1/api/trigger/bot
生成,提示詞:half fish half dragon hybrid, retro screencap --ar 2:3 --niji 5
curl -X 'POST' \
'http://127.0.0.1:8062/v1/api/trigger/bot' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"type": "generate",
"prompt": "half fish half dragon hybrid, retro screencap --ar 2:3 --niji 5",
"msg_id": "",
"msg_hash": "",
"index": 0
}'
可以看到我們啟動的task_bot.py
監聽服務,已經監聽到消息日誌:
upscale#
這裡我覺得第二張比較符合預期,我們接續調接口放大圖片增加細節。這裡需要取到 msg_id 和 msg_hash 字段的值。msg_id 就是 CallbackData 的 id 字段,msg_hash 是 Attachment 的 url 去掉後綴,根據_
分割的最後一段。
class Attachment(TypedDict):
id: int
url: str
proxy_url: str
filename: str
content_type: str
width: int
height: int
size: int
ephemeral: bool
class CallbackData(TypedDict):
type: str
id: int
content: str
attachments: List[Attachment]
curl -X 'POST' \
'http://127.0.0.1:8062/v1/api/trigger/bot' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"type": "upscale",
"prompt": "",
"msg_id": "1109686524045443093",
"msg_hash": "c937b5aa-3f58-4ae5-8dd6-932952243034",
"index": 2
}'
注意:這裡索引是圖片的 1-4,不是 0-3
variation#
curl -X 'POST' \
'http://127.0.0.1:8062/v1/api/trigger/bot' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"type": "variation",
"prompt": "",
"msg_id": "1109686524045443093",
"msg_hash": "c937b5aa-3f58-4ae5-8dd6-932952243034",
"index": 2
}'
這裡我們基於第 2 張圖的風格,再生成 4 張。
reset#
基於提示詞重繪:
curl -X 'POST' \
'http://127.0.0.1:8062/v1/api/trigger/bot' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"type": "reset",
"prompt": "",
"msg_id": "1109686524045443093",
"msg_hash": "c937b5aa-3f58-4ae5-8dd6-932952243034",
"index": 0
}'
總結#
本篇文章主要介紹了如何接入 Midjourney,然後介紹了我的開源項目 midjourney-api,並介紹了如何使用該項目。
依據改倉庫,大家可以很方便的將 Midjourney 對接到 QQ、微信、釘釘等平台。如果大家感興趣,我將會帶大家製作一個微信機器人或者將它接入到我的個人公眾號。
當然,改倉庫還有很多未完善的地方,比如圖生圖。這些功能我後續會繼續補充,也歡迎大家參與進來。開源地址:https://github.com/yokonsan/midjourney-api
相比於 Stable-Diffusion,Midjourney 對新手更加友好。大家自行體驗。