当前位置:资讯 > 综合 > 正文
Midjourney|如何集成到自己的平台
2023-05-21 21:03:11 来源: 哔哩哔哩

最近想着把 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 clonepip 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: boolclass 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 对新手更加友好。大家自行体验。

关键词:
责任编辑:zN_2119