/midjourney-proxy

代理 Midjourney 的 Discord 频道,实现 API 形式调用 AI 绘图,公益项目,提供免费绘图接口。

Primary LanguageC#Apache License 2.0Apache-2.0

Midjourney Proxy

中文 | English

代理 Midjourney 的 Discord 频道,实现 API 形式调用 AI 绘图,公益项目,提供绘图 API 免费使用。

完全开源,不会存在部分开源或部分闭源,欢迎 PR。

功能最全、最安全、占用内存最小(100MB+)的 Midjourney Proxy API ~~

主要功能

  • 支持 Imagine 指令和相关动作 [V1/V2.../U1/U2.../R]
  • Imagine 时支持添加图片 base64,作为垫图
  • 支持 Blend (图片混合)、Describe (图生文) 指令
  • 支持任务实时进度
  • 支持中文 prompt 翻译,需配置百度翻译
  • prompt 敏感词预检测,支持覆盖调整
  • user-token 连接 wss,可以获取错误信息和完整功能
  • 支持 Shorten(prompt分析) 指令
  • 支持焦点移动:Pan ⬅️➡⬆️⬇️
  • 支持局部重绘:Vary (Region) 🖌
  • 支持几乎所有的关联按钮动作
  • 支持图片变焦,自定义变焦 Zoom 🔍
  • 支持获取图片的 seed 值
  • 支持账号指定生成速度模式 RELAX | FAST | TURBO
  • 支持多账号配置,每个账号可设置对应的任务队列,支持账号选择模式 BestWaitIdle | Random | Weight | Polling
  • 账号池持久化,动态维护
  • 支持获取账号 /info、/settings 信息
  • 账号 settings 设置
  • 支持 niji・journey Bot 和 Midjourney Bot
  • zlib-stream 安全压缩传输 https://discord.com/developers/docs/topics/gateway
  • 内嵌MJ管理后台页面,支持多语言 https://github.com/trueai-org/midjourney-proxy-webui
  • 支持MJ账号的增删改查功能
  • 支持MJ账号的详细信息查询和账号同步操作
  • 支持MJ账号的并发队列设置
  • 支持MJ的账号settings设置
  • 支持MJ的任务查询
  • 提供功能齐全的绘图测试页面
  • 兼容支持市面上主流绘图客户端和 API 调用
  • 任务增加父级任务信息等
  • 🎛️ Remix 模式和 Remix 模式自动提交
  • 内置图片保存到本地、内置 CDN 加速
  • 绘图时当未读消息过多时,自动模拟读未读消息

在线预览

公益接口为慢速模式,接口免费调用,账号池由赞助者提供,请大家合理使用。

预览截图

欢迎

账号

任务

测试

日志

接口

客户端推荐

安装与使用

快速启动

Docker 版本

# 阿里云镜像(推荐国内使用)
docker pull registry.cn-guangzhou.aliyuncs.com/trueai-org/midjourney-proxy

# 公益演示站点启动配置示例

# 1.下载并重命名配置文件(示例配置)
wget -O /root/mjopen/appsettings.Production.json https://raw.githubusercontent.com/trueai-org/midjourney-proxy/main/src/Midjourney.API/appsettings.json

# 或使用 curl 下载并重命名配置文件(示例配置)
curl -o /root/mjopen/appsettings.Production.json https://raw.githubusercontent.com/trueai-org/midjourney-proxy/main/src/Midjourney.API/appsettings.json

# 2.停止并移除旧的 Docker 容器
docker stop mjopen && docker rm mjopen

# 3.启动新的 Docker 容器
docker run -m 1g --name mjopen -d --restart=always \
 -e DEMO=true \
 -p 8086:8080 --user root \
 -v /root/mjopen/logs:/app/logs:rw \
 -v /root/mjopen/data:/app/data:rw \
 -v /root/mjopen/attachments:/app/wwwroot/attachments:rw \
 -v /root/mjopen/ephemeral-attachments:/app/wwwroot/ephemeral-attachments:rw \
 -v /root/mjopen/appsettings.Production.json:/app/appsettings.Production.json:ro \
 -e TZ=Asia/Shanghai \
 -v /etc/localtime:/etc/localtime:ro \
 -v /etc/timezone:/etc/timezone:ro \
 registry.cn-guangzhou.aliyuncs.com/trueai-org/midjourney-proxy

# 生产环境启动配置示例
docker run --name mjproxy -d --restart=always \
 -p 8088:8080 --user root \
 -v /root/mjproxy/logs:/app/logs:rw \
 -v /root/mjproxy/data:/app/data:rw \
 -v /root/mjopen/attachments:/app/wwwroot/attachments:rw \
 -v /root/mjopen/ephemeral-attachments:/app/wwwroot/ephemeral-attachments:rw \
 -v /root/mjproxy/appsettings.Production.json:/app/appsettings.Production.json:ro \
 -e TZ=Asia/Shanghai \
 -v /etc/localtime:/etc/localtime:ro \
 -v /etc/timezone:/etc/timezone:ro \
 registry.cn-guangzhou.aliyuncs.com/trueai-org/midjourney-proxy

# GitHub 镜像
docker pull ghcr.io/trueai-org/midjourney-proxy
docker run --name mjproxy -d --restart=always \
 -p 8088:8080 --user root \
 -v /root/mjproxy/logs:/app/logs:rw \
 -v /root/mjproxy/data:/app/data:rw \
 -v /root/mjopen/attachments:/app/wwwroot/attachments:rw \
 -v /root/mjopen/ephemeral-attachments:/app/wwwroot/ephemeral-attachments:rw \
 -v /root/mjproxy/appsettings.Production.json:/app/appsettings.Production.json:ro \
 -e TZ=Asia/Shanghai \
 -v /etc/localtime:/etc/localtime:ro \
 -v /etc/timezone:/etc/timezone:ro \
 ghcr.io/trueai-org/midjourney-proxy

# DockerHub 镜像
docker pull trueaiorg/midjourney-proxy
docker run --name mjproxy -d --restart=always \
 -p 8088:8080 --user root \
 -v /root/mjproxy/logs:/app/logs:rw \
 -v /root/mjproxy/data:/app/data:rw \
 -v /root/mjopen/attachments:/app/wwwroot/attachments:rw \
 -v /root/mjopen/ephemeral-attachments:/app/wwwroot/ephemeral-attachments:rw \
 -v /root/mjproxy/appsettings.Production.json:/app/appsettings.Production.json:ro \
 -e TZ=Asia/Shanghai \
 -v /etc/localtime:/etc/localtime:ro \
 -v /etc/timezone:/etc/timezone:ro \
 trueaiorg/midjourney-proxy

Windows 版本

a. 通过 https://github.com/trueai-org/midjourney-proxy/releases 下载 windows 最新免安装版,例如:midjourney-proxy-win-x64.zip
b. 解压并执行 Midjourney.API.exe
c. 打开网站 http://localhost:8080
d. 部署到 IIS(可选),在 IIS 添加网站,将文件夹部署到 IIS,配置应用程序池为`无托管代码`,启动网站。
e. 使用系统自带的 `任务计划程序`(可选),创建基本任务,选择 `.exe` 程序即可,请选择`请勿启动多个实例`,保证只有一个任务执行即可。

Linux 版本

a. 通过 https://github.com/trueai-org/midjourney-proxy/releases 下载 linux 最新免安装版,例如:midjourney-proxy-linux-x64.zip
b. 解压到当前目录: tar -xzf midjourney-proxy-linux-x64-<VERSION>.tar.gz
c. 执行: run_app.sh
c. 启动方式1: sh run_app.sh
d. 启动方式2: chmod +x run_app.sh && ./run_app.sh

macOS 版本

a. 通过 https://github.com/trueai-org/midjourney-proxy/releases 下载 macOS 最新免安装版,例如:midjourney-proxy-osx-x64.zip
b. 解压到当前目录: tar -xzf midjourney-proxy-osx-x64-<VERSION>.tar.gz
c. 执行: run_app_osx.sh
c. 启动方式1: sh run_app_osx.sh
d. 启动方式2: chmod +x run_app_osx.sh && ./run_app_osx.sh

Linux 一键安装脚本(❤感谢 @dbccccccc

# 方式1
wget -N --no-check-certificate https://raw.githubusercontent.com/trueai-org/midjourney-proxy/main/scripts/linux_install.sh && chmod +x linux_install.sh && bash linux_install.sh

# 方式2
curl -o linux_install.sh https://raw.githubusercontent.com/trueai-org/midjourney-proxy/main/scripts/linux_install.sh && chmod +x linux_install.sh && bash linux_install.sh

参数配置

  • appsettings.json 默认配置
  • appsettings.Production.json 生产环境配置
  • /app/data 数据目录,存放账号、任务等数据
    • /app/wwwroot 静态文件目录
    • /app/wwwroot/attachments 绘图文件目录
    • /app/wwwroot/ephemeral-attachments describe 生成图片目录
    • /app/data/mj.db 数据库文件
  • /app/logs 日志目录
{
  "Demo": null, // 网站配置为演示模式
  "UserToken": "", // 用户绘画令牌 token,可以用来访问绘画接口,可以不用设定
  "AdminToken": "", // 管理后台令牌 token,可以用来访问绘画接口和管理员账号等功能
  "mj": {
    "AccountChooseRule": "BestWaitIdle", // BestWaitIdle | Random | Weight | Polling = 最佳空闲规则 | 随机 | 权重 | 轮询
    "Discord": { // Discord 配置,默认可以为 null
      "GuildId": "125652671***", // 服务器 ID
      "ChannelId": "12565267***", // 频道 ID
      "PrivateChannelId": "1256495659***", // MJ 私信频道 ID,用来接受 seed 值
      "NijiBotChannelId": "1261608644***", // NIJI 私信频道 ID,用来接受 seed 值
      "UserToken": "MTI1NjQ5N***", // 用户 token
      "BotToken": "MTI1NjUyODEy***", // 机器人 token
      "UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
      "Enable": true, // 是否默认启动
      "CoreSize": 3, // 并发数
      "QueueSize": 10, // 队列数
      "MaxQueueSize": 100, // 最大队列数
      "TimeoutMinutes": 5, // 任务超时分钟数
      "Mode": null, // RELAX | FAST | TURBO 指定生成速度模式 --fast, --relax, or --turbo parameter at the end.
      "Weight": 1 // 权重
    },
    "NgDiscord": { // NG Discord 配置,默认可以为 null
      "Server": "",
      "Cdn": "",
      "Wss": "",
      "ResumeWss": "",
      "UploadServer": "",
      "SaveToLocal": false, // 是否开启图片保存到本地,如果开启则使用本地部署的地址,也可以同时配置 CDN 地址
      "CustomCdn": "" // 如果不填写,并且开启了保存到本地,则默认为根目录,建议填写自己的域名地址
    },
    "Proxy": { // 代理配置,默认可以为 null
      "Host": "",
      "Port": 10809
    },
    "Accounts": [], // 账号池配置
    "BaiduTranslate": { // 百度翻译配置,默认可以为 null
      "Appid": "", // your_appid
      "AppSecret": "" // your_app_secret
    },
    "TranslateWay": "NULL", // NULL | GTP | BAIDU, 翻译配置, 默认: NULL
    "ApiSecret": "", // your_api_secret
    "NotifyHook": "", // your_notify_hook, 回调配置
    "NotifyPoolSize": 10
  },
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Default": "Warning",
        "System": "Warning",
        "Microsoft": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "logs/log.txt",
          "rollingInterval": "Day",
          "fileSizeLimitBytes": null,
          "rollOnFileSizeLimit": false,
          "retainedFileCountLimit": 31
        }
      },
      {
        "Name": "Console"
      }
    ]
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "urls": "http://*:8080" // 默认端口
}

机器人 Token(必须配置)

本项目利用 Discord 机器人 Token 连接 wss,可以获取错误信息和完整功能,确保消息的高可用性等问题。

1. 创建应用
https://discord.com/developers/applications

2. 设置应用权限(确保拥有读取内容权限,参考截图)
[Bot] 设置 -> 全部开启

3. 添加应用到频道服务器(参考截图)

client_id 可以在应用详情页找到,为 APPLICATION ID

https://discord.com/oauth2/authorize?client_id=xxx&permissions=8&scope=bot

4. 复制或重置 Bot Token 到配置文件

设置应用权限(确保拥有读取内容权限,参考截图)

设置应用权限

添加应用到频道服务器(参考截图)

添加应用到频道服务器

相关文档

  1. API接口说明

路线图

  • 逆向根据 job 或 图片生成任务信息
  • 其他指令 PicReader、 BOOKMARK、Picread 等
  • 优化指令和状态进度显示
  • 优化任务和队列满时的提醒
  • 优化共享账号的并发队列可能出现的问题
  • 内置词库管理,批量修改
  • API 支持指定实例绘图
  • API 支持过滤指定速度的账号绘图
  • 接入官网绘图 API 支持
  • 增加统计面板、绘图统计、访客统计
  • 内置用户体系、可注册可管理、限流、最大次数等
  • 内置 IP 限流、全局限流、账号限流、黑名单、白名单、账号限速
  • GPT 翻译接入
  • 最终提示词增加翻译中文显示支持
  • 账号支持单独的代理
  • 开启注册、开启访客
  • 多数据库支持 MySQL、Sqlite、SqlServer、MongoDB、PostgeSQL、Redis 等
  • 支付接入支持、支持微信、支付宝,支持绘图定价策略等
  • 增加公告功能
  • 账号增加咸鱼模式/放松模式,避免高频作业(此模式下不可创建新的绘图,仍可以执行其他命令,可以配置为多个时间段或定时等策略)
  • 增加强制休眠模式,或定时休眠模式
  • 关于触发 mj cf 真人验证问题处理
  • 图生文 seed 值处理
  • 自动读私信消息

支持与赞助

  • 如果觉得这个项目对您有所帮助,请帮忙点个 Star⭐
  • 您也可以提供暂时空闲的绘画公益账号(赞助 1 个慢速队列),支持此项目的发展😀