|
发表于 2023-10-12 16:56:16
|
显示全部楼层
最近想着把 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]
<hr/>curl -X &#39;POST&#39; \
&#39;http://127.0.0.1:8062/v1/api/trigger/bot&#39; \
-H &#39;accept: application/json&#39; \
-H &#39;Content-Type: application/json&#39; \
-d &#39;{
&#34;type&#34;: &#34;upscale&#34;,
&#34;prompt&#34;: &#34;&#34;,
&#34;msg_id&#34;: &#34;1109686524045443093&#34;,
&#34;msg_hash&#34;: &#34;c937b5aa-3f58-4ae5-8dd6-932952243034&#34;,
&#34;index&#34;: 2
}&#39;注意:这里索引是图片的 1-4,不是 0-3
variation
curl -X &#39;POST&#39; \
&#39;http://127.0.0.1:8062/v1/api/trigger/bot&#39; \
-H &#39;accept: application/json&#39; \
-H &#39;Content-Type: application/json&#39; \
-d &#39;{
&#34;type&#34;: &#34;variation&#34;,
&#34;prompt&#34;: &#34;&#34;,
&#34;msg_id&#34;: &#34;1109686524045443093&#34;,
&#34;msg_hash&#34;: &#34;c937b5aa-3f58-4ae5-8dd6-932952243034&#34;,
&#34;index&#34;: 2
}&#39;
这里我们基于第 2 张图的风格,再生成 4 张。
reset
基于提示词重绘:
curl -X &#39;POST&#39; \
&#39;http://127.0.0.1:8062/v1/api/trigger/bot&#39; \
-H &#39;accept: application/json&#39; \
-H &#39;Content-Type: application/json&#39; \
-d &#39;{
&#34;type&#34;: &#34;reset&#34;,
&#34;prompt&#34;: &#34;&#34;,
&#34;msg_id&#34;: &#34;1109686524045443093&#34;,
&#34;msg_hash&#34;: &#34;c937b5aa-3f58-4ae5-8dd6-932952243034&#34;,
&#34;index&#34;: 0
}&#39;
总结
本篇文章主要介绍了如何接入 Midjourney,然后介绍了我的开源项目 midjourney-api,并介绍了如何使用该项目。
依据改仓库,大家可以很方便的将 Midjourney 对接到 QQ、微信、钉钉等平台。如果大家感兴趣,我将会带大家制作一个微信机器人或者将它接入到我的个人公众号。
当然,改仓库还有很多未完善的地方,比如图生图。这些功能我后续会继续补充,也欢迎大家参与进来。开源地址:https://github.com/yokonsan/midjourney-api
相比于 Stable-Diffusion,Midjourney 对新手更加友好。大家自行体验。
转载于个人公众号文章:
Midjourney|如何集成到自己的平台 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|