最近想着把 Midjourney 接入到自己的渠道,但由于 Midjourney 没有开放接口,所以退而求其次。运用 Discord 的 Bot API,经过下发/imagine
指令,创建 Midjourney bot 的绘画使命。并实时监听 Midjourney bot 的音讯,回传给渠道。这样就根本上满意我的需求了。
本篇文章我会介绍下我实现的 Midjourney API 项目,而且附上运用教程。
大致的流程如图:
midjourney-api
开源地址:github.com/yokonsan/mi…
该库房是我在将 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 机器人,地址:discord.com/developers/…
创建进程很简单,不做赘述。
咱们点击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、微信、钉钉等渠道。假如咱们感兴趣,我将会带咱们制作一个微信机器人或许将它接入到我的个人大众号。
当然,改库房还有许多未完善的地方,比如图生图。这些功用我后续会持续补充,也欢迎咱们参与进来。开源地址:github.com/yokonsan/mi…
相比于 Stable-Diffusion,Midjourney 对新手更加友爱。咱们自行体验。
本文转载自个人大众号:Midjourney|怎么集成到自己的渠道