最近想着把 Midjourney 接入到自己的渠道,但由于 Midjourney 没有开放接口,所以退而求其次。运用 Discord 的 Bot API,经过下发/imagine指令,创建 Midjourney bot 的绘画使命。并实时监听 Midjourney bot 的音讯,回传给渠道。这样就根本上满意我的需求了。

本篇文章我会介绍下我实现的 Midjourney API 项目,而且附上运用教程

大致的流程如图:

Midjourney|如何集成到自己的平台

midjourney-api

开源地址:github.com/yokonsan/mi…

该库房是我在将 Midjourney 接入到渠道,开发的一套接口。个人运用下来根本满意大部分需求,现在开源出来,仅供咱们参考。咱们觉得有用可以点个 star,发现有 bug 可以提 issue 或 pr。

具体的开发细节就不展开了,本篇文章说下怎么运用该库房。

准备工作

注意:本库房依赖于 Discord 开发的 API,对于怎么拜访 Discord,咱们自行寻找办法。这儿默认咱们现已在 Discord 创建了自己的服务器,而且将 Midjourney 添加到服务器内。

运用该库房咱们需求 4 个参数:

  1. 用户 Token(调用 API 需求身份验证)
  2. 创建的 Discord 机器人 Token(实时监听 Midjourney 会话)
  3. Discord 自建服务器 ID
  4. Midjourney bot 地点频道 ID

假如咱们知道怎么获取这几个参数,可以跳到下一节。

用户 Token

登录网页端 discord 按F12翻开开发者东西,然后改写页面。参考下图点击Network,在 filter 栏输入/api/library找到这条恳求记载,然后在恳求体中找到authorization字段,他的值就是咱们需求的 Token。

注意:该 Token 属于隐私信息,不要直接暴露在代码中发布到 Github。

Midjourney|如何集成到自己的平台

机器人 Token

这儿需求先创建 discord 机器人,地址:discord.com/developers/…

创建进程很简单,不做赘述。

Midjourney|如何集成到自己的平台

咱们点击Reset Token,然后copy这串 Token 即可。

但是咱们需求咱们的机器人可以干活,还需求给他添加些 Scopes。

Midjourney|如何集成到自己的平台

勾选上 Scope 后,页面下方会生成一个 Oauth2 授权链接。咱们仿制该链接然后在浏览器翻开。

翻开后会出现 OAuth2 授权页面,咱们将机器人添加到咱们的服务器即可。

服务器 ID、频道 ID

这儿比较简单,咱们先翻开开发者模式:

Midjourney|如何集成到自己的平台

然后鼠标右击服务器头像,仿制服务器 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 供给接口:

  1. /v1/api/trigger/bot:触发绘画使命,已完结
  2. /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
}'

Midjourney|如何集成到自己的平台

可以看到咱们发动的task_bot.py监听服务,现已监听到音讯日志:

Midjourney|如何集成到自己的平台

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

Midjourney|如何集成到自己的平台

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 张。

Midjourney|如何集成到自己的平台

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,然后介绍了我的开源项目 midjourney-api,并介绍了怎么运用该项目。

依据改库房,咱们可以很方便的将 Midjourney 对接到 QQ、微信、钉钉等渠道。假如咱们感兴趣,我将会带咱们制作一个微信机器人或许将它接入到我的个人大众号。

当然,改库房还有许多未完善的地方,比如图生图。这些功用我后续会持续补充,也欢迎咱们参与进来。开源地址:github.com/yokonsan/mi…

相比于 Stable-Diffusion,Midjourney 对新手更加友爱。咱们自行体验。

本文转载自个人大众号:Midjourney|怎么集成到自己的渠道