众所周知 Midjourney 没有提供 API,不能想 OpenAI 一样集成在本地服务里面。但是方法总比困难多,Midjourney 的载体
Discord是有 API 的,曲线救国就可以 在本地搭建一个 Midjourney 的服务。
方案
我们的方案就是使用本地服务连接 Discord 服务,然后发送消息,拿到返回的数据,进行给 UI。
开源项目
在我准备动手写代码的时候,想起了 Github,于是乎去搜了下 Midjourney,很多个封装好的项目映入眼帘。

这不就省下了大把的时间。
midjourney-proxy
我们选择 midjourney-proxy 项目做后端,
项目功能
• 支持 Imagine 指令和相关U、V操作
• Imagine 时支持添加图片base64,作为垫图
• 支持 Blend(图片混合) 指令和相关U、V操作
• 支持 Describe 指令,根据图片生成 prompt
• 支持 Imagine、V、Blend 图片生成进度
• 支持中文 prompt 翻译,需配置百度翻译或 gpt
• prompt 敏感词判断,支持覆盖调整
• 任务队列,默认队列10,并发3。可参考 MidJourney订阅级别 调整mj.queue
• user-token 连接 wss,可以获取错误信息和完整功能
• 支持 discord域名(server、cdn、wss)反代,配置 mj.ng-discord
使用前提
• 注册 MidJourney,创建自己的频道,参考 https://docs.midjourney.com/docs/quick-start
• 获取用户Token、服务器ID、频道ID
1. 获取用户Token
进入频道,打开network,刷新页面,找到 messages 的请求,这里的 authorization 即用户Token,后续设置到 mj.discord.user-token
2. 获取用户sessionId
进入频道,打开network,发送/imagine作图指令,找到 interactions 的请求,这里的 session_id 即用户sessionId,后续设置到 mj.discord.session-id
3. 获取服务器ID、频道ID
频道的url里取出 服务器ID、频道ID,后续设置到配置项
分享须知
• 作图频繁等行为,可能会触发midjourney账号警告,请谨慎使用
• 为减少风险,请设置mj.discord.user-agent 和 mj.discord.session-id
• 默认使用user-wss方式,可以获取midjourney的错误信息、图片变换进度等,但可能会增加账号风险
• 支持设置mj.discord.user-wss为false,使用bot-token连接wss,需添加自定义机器人:流程说明
部署
这是一个Java 项目,你可以使用 jre 本地运行或者 Docker 运行,也可以使用 Railway 等网络平台运行。
Railway
这里使用 Railway 部署, 设置变量如下,克隆项目运行即可:

本地 Docker
这里给出大家 compose 配置:
version: "3"
services:
midjourney-proxy:
container_name: midjourney-proxy
image: novicezk/midjourney-proxy:2.3.5
ports:
- 18080:8080
volumes:
- ./config:/home/spring/config
Discord 配置在 ./config/application.yml 文件里:

运行如下:

ChatGPT-Midjourney
Midjourney-proxy 项目只是后端对接了 discord 和 midjourney 服务, 关于前端 UI,Github 上也有,比如 ChatGPT-Midjourney。
直接看效果把:

ps: 项目还继承了 ChatGPT,不需要可以不配置。
运行
仍然使用 Compose 运行,:我们把两个配置文件放在一起:
version: "3"
services:
midjourney-proxy:
container_name: midjourney-proxy
image: novicezk/midjourney-proxy:2.3.5
ports:
- 18080:8080
volumes:
- ./config:/home/spring/config
chatgpt-midjourney:
container_name: chatgpt-midjourney
image: licoy/chatgpt-midjourney:v1.3.9
ports:
- 13000:3000
environment:
OPENAI_API_KEY: "sk-xx"
#CODE: "789789"
BASE_URL: "https://api.openai.com"
MIDJOURNEY_PROXY_URL: "http://midjourney-proxy:8080"
执行:
docker-compose up
然后访问 http://localhost:3000就可以看到 UI:

如果要使用 V1 - V4 的图像变换,要在 Midjourney 设置快速变化,

如下(取消勾选 Remix mode):

不然执行变换会提示任务超时:

最后看下放大的图片:

--- END ---

