# MidJourney 服务配置
注意: 阅读本章前请确保您已经知道如何访问 Discord,以及如何创建服务器了。
# 1. 添加 MidJourney 机器人
首先,你需要邀请 MidJourney 机器人到你所创建的服务器。点击 MidJourney 机器人图标 -> 选择添加 App
在弹出的对话框中选择你刚刚创建的服务器
添加完成之后会自动跳转到你创建的服务器,这时你可以顺便拿到频道 ID(ChanelId
) 和 服务器 ID(GuildId
) 配置参数。
# 2. 获取用户登录 Token
登录网页端 discord 按 F12 打开开发者工具,然后刷新页面。参考下图点击 Network,然后在请求头信息中找到 Authorization
字段,这就是 UserToken 参数。
# 3. 获取机器人 Token
接下来就剩下最后一项配置:机器人 Token(BotToken
)了。首先我们需要创建一个机器人,创建地址:https://discord.com/developers/applications
点击右上角的 【New Application】 按钮,输出机器人名称即可创建成功。
机器人创建成功之后默认是没有 Token 的,点击左边的 Bot 菜单,选择右边的 Reset Token 按钮,进行重置 Token。
这样我们就得到了 BotToken
参数。
# 4. 为机器人分配权限
请注意,此时机器人应该是不能用的,应为你没有为机器人配置权限。 首先点开 Bot 菜单,设置机器人的Privileged Gateway Intents。开通消息持久化和读取消息内容的权限。
继续点击左边的 OAuth2 -> URL Generator 菜单,选择 Bot,然后在下面的选项中为机器人添加权限。
我们机器人只需要下面三项权限即可:
- Send Message: 发送消息
- Read Message History: 读取历史消息
- Use Slash Commands:使用斜杆发送命令,比如 MidJourney 的
/image
当然,你也可以添加更多权限,根据你的需求。 然后复制下面的授权链接,在浏览器打开
选择你刚刚创建服务器,加入机器人。
至此,MidJourney 机器人的配置就全部获取完毕,将上面获取的配置信息依次填入 conf/mj-proxy/application.yml
的配置文档中即可。
mj:
task-store:
type: in_memory
timeout: 30d
translate-way: null
api-secret: "sk-geekmaster" # API 密钥,要跟 geekai 应用 config.toml 配置对应上,否则 API 调用会失败
ng-discord: # 这里必须配置反代,否则无法访问 Discord API
server: "" # Discord API 反代
cdn: "" # Discord 图片 CDN 反代
wss: "" # Discord 网关反代
accounts: # MJ 账号,配置配置多个
- guild-id: "" # 服务器 ID
channel-id: "" # 频道 ID
user-token: "" # UserToken 参数
user-agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
# MidJourney-Proxy 服务配置
本着不重复造轮子的原则,从 4.0.1 版本开始,GeekAI 移除内置的 MidJourney 机器人实现,改用第三方开源组件 midjourney-proxy (opens new window) 来实现。 本文将给大家演示如何部署并接入 midjourney-proxy 服务。
# 1. 功能
- 支持 Imagine 指令和相关动作
- Imagine 时支持添加图片 base64,作为垫图
- 支持 Blend(图片混合)、Describe(图生文) 指令
- 支持任务实时进度
- 支持中文 prompt 翻译,需配置百度翻译或 gpt
- prompt 敏感词预检测,支持覆盖调整
- user-token 连接 wss,可以获取错误信息和完整功能
- 支持多账号配置,每个账号可设置对应的任务队列
# 2. 部署
推荐使用 docker 来部署,首先新建一个 docker-compose.yaml
文件,将下面的内容复制到文件中:
version: '3' services:
midjourney-proxy:
image: novicezk/midjourney-proxy:2.6.0
container_name: midjourney-proxy
restart: always
ports:
- "8080:8080"
volumes :
- ./conf:/home/spring/config
然后新建一个 conf 配置目录:
mkdir conf
新建配置文档 conf/application.yml
输入下面的配置信息:
mj:
task-store:
type: in_memory
timeout: 30d
translate-way: null
api-secret: 'sk-geekmaster' # API 密钥,要跟 geekai 应用 config.toml 配置对应上,否则 API 调用会失败
ng-discord: # 这里必须配置反代,否则无法访问 Discord API
server: '' # Discord API 反代
cdn: '' # Discord 图片 CDN 反代
wss: '' # Discord 网关反代
accounts: # MJ 账号,配置配置多个
- guild-id: ''
channel-id: ''
user-token: ''
user-agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
按照上面提示信息修改配置,如果你不知道如何获取 MidJourney 相关配置的话,请参考 MidJourney 服务配置,配置好了之后启动服务:
docker-compose up -d
# 看下日志,确认启动成功
docker logs midjourney-proxy
看到类似的日志信息,可用账号数要大于 0,说明启动成功。
midjourney-proxy | 2024-03-28 17:56:27.004 INFO 1 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Documentation plugins bootstrapped
midjourney-proxy | 2024-03-28 17:56:27.009 INFO 1 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
midjourney-proxy | 2024-03-28 17:56:27.046 INFO 1 --- [ main] s.d.s.w.s.ApiListingReferenceScanner : Scanning for api listing references
midjourney-proxy | 2024-03-28 17:56:27.215 INFO 1 --- [ main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: fetchUsingGET_1
midjourney-proxy | 2024-03-28 17:56:27.219 INFO 1 --- [ main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: listUsingGET_1
midjourney-proxy | 2024-03-28 17:56:27.242 INFO 1 --- [ main] c.g.n.midjourney.ProxyApplication : Started ProxyApplication in 2.386 seconds (JVM running for 2.81)
midjourney-proxy | 2024-03-28 17:56:29.671 INFO 1 --- [ main] c.g.n.m.s.DiscordAccountInitializer : 当前可用账号数 [1] - 1159363161234567
# 3. 配置
从 v4.1.2 以后的版本,配置方式有比较大的变化,新版配置要简单很多。
v4.1.2 之前版本
midjourney-proxy 容器启动成功之后,你需要修改 conf/config.toml
配置文档,加入 midjourney-proxy 的相关配置
[[MjProxyConfigs]]
Enabled = true
ApiURL = "http://midjourney-proxy:8082"
ApiKey = "sk-geekmaster"
或者登录管理后台,进入系统配置 -> AI 绘图配置页面进行配置
配置好之后重启应用即可生效:
docker-compose down
docker-compose up -d
v4.1.2 之后版本
新版的 MJ 配置非常简单,你只需要在管理后台新增一个 MidJourney 类型 的 API KEY 即可:
你可以添加多个,做为负载均衡使用。添加完成之后无需重启或者任何吉他动作,立即可以使用。
# MidJourney-Plus 服务配置
MidJourney-Plus 是中转 API 站点提供的服务,他们部署了上百个 MidJourney 高速账号,然后对外提供简单可靠的 API 服务,无需魔法,开箱即用,高速稳定,价格美丽。
# 1. 创建令牌
首先你需要到 https://api.geekai.pro 注册账号。新注册账号赠送 0.5 美元额度。点击左边菜单 令牌
=> 添加令牌
# 2. 配置令牌
从 v4.1.2 以后的版本,配置方式有比较大的变化,新版配置要简单很多。
v4.1.2 之前版本
复制上面创建好的令牌,打开 GeekAI 项目的配置文档,通常在 conf/config.toml
,修改 MidJourney-Plus 的配置。
[[MjPlusConfigs]]
Enabled = true
ApiURL = "https://api.geekai.pro"
Mode = "fast"
ApiKey = "sk-xxxx"
或者登录管理后台,进入系统配置 -> AI 绘图配置页面进行配置
配置好之后重启应用即可生效:
docker-compose down
docker-compose up -d
v4.1.2 之后版本
新版的 MJ 配置非常简单,你只需要在管理后台新增一个 MidJourney 类型 的 API KEY 即可:
你可以添加多个,做为负载均衡使用。添加完成之后无需重启或者任何吉他动作,立即可以使用。
# Stable-Diffusion 参数获取
视频教程:
如果您比较喜欢通过视频来学习的话,请直接观看 B 站视频 GeekAI SD 配置和升级二次开发教程 (opens new window)。
# 1. 部署 Stable-Diffusion 服务
这个没什么好说的,网上有很多教程。推荐使用 https://github.com/AUTOMATIC1111/stable-diffusion-webui (opens new window)。当然如果你是 windows 系统,那么你使用秋叶他们的懒人包也行。
唯一需要注意的是,要启动 API 服务,官方版的启动 API 很方便,直接在启动脚本后面加上 --api
选项就行了。
./webui.sh --api
注意上面的 SD 启动之后 API 服务只能在本地访问,如果想要 SD 的 API 服务能在内网或者外网访问,那么你需要加上 --listen
参数。
./webui.sh --api --listen
# 2. 配置 SD-API
从 v4.1.2 以后的版本,配置方式有比较大的变化,新版配置要简单很多。
v4.1.2 之前版本
[[SdConfigs]]
Enabled = true
ApiURL = "http://xxx.com" # 配置你 SD API 服务地址
ApiKey = "" #如果 SD 没有配置授权,这里留空即可
或者登录管理后台,进入系统配置 -> AI 绘图配置页面进行配置
提示:
如果你有多台 SD 服务器,只需将上述配置复制多份,更改 ApiURL 和 ApiKey,系统会自动加入负载均衡,提升并发量。
配置好之后重启应用即可。
docker-compose down
docker-compose up -d
v4.1.2 之后版本
新版的 SD 配置非常简单,你只需要在管理后台新增一个 Stable-Diffusion 类型 的 API KEY 即可:
你可以添加多个,做为负载均衡使用。添加完成之后无需重启或者任何吉他动作,立即可以使用。
# 常见错误
一、MJ 任务添加成功了,但是进度一直没有变。
首先看下 GeekAI API 后端的日志,确保任务确实推送成功了。
# 查看容器日志
docker-compose logs geekai-api|tail -n 100
# 或者直接查看日志文件
cat logs/app/app.log
如果成功,可以看到类似下面的日志:
2024-07-05T15:08:21.464+0800 INFO mj/plus_client.go:70 API URL: https://api.geekai.pro/mj-fast/mj/submit/imagine
2024-07-05T15:08:25.185+0800 INFO mj/service.go:127 任务提交成功:{Code:1 Description:Submit success Properties:{} Result:1720163302334111}
其次,去中转站看下绘图日志,看看上游任务是否有执行成功。如果是上游任务执行成功了,但是 GeekAI 应用这边没有同步任务进度。那么尝试修改 MJ-Plus 的配置,只保留一个,其他的未启用的配置全部删除,然后重启容器。
这是一个 Bug,v4.1.0 版本之后已经修复。
二、MJ 绘图任务执行成功,但是图片一直在下载。
长时间处于下载状态的图片很大概率是你的中转返回的图片地址不是代理地址,而是 Discord 的原生图片地址,如果你的服务器在国内的话,那么通常图片是会一直下载失败的。你需要在你的中转平台编辑你的令牌,设置图片返回地址为 Relay
模式。
如果你有代理服务器的话,也可以设置为代理模式,然后把你的代理服务器地址填上去。