代理 MidJourney 的discord频道,实现api形式调用AI绘图
前端大佬感兴趣的快速提pr, 本人不是专业后端,代码不保证无bug
- 支持 Imagine、U、V 指令,绘图完成后回调
- 支持队列执行
- 支持中文 prompt 翻译,需配置百度翻译
- 队列任务存储在本地小型数据库
- docker&docker-compose安装
- 定时清空所有任务
- 账号池子(暂定)
- 看情况优化
- 对接阿里OSS
- 科学上网
- node环境 node 18版本以上
- 注册 MidJourney,创建自己的频道,参考 https://docs.midjourney.com/docs/quick-start
1.运行docker容器
- Docker一键命令:
docker run -dit \ -v $PWD/Midjourney/basedata:/Midjourney/basedata \ -p 5400:3000 \ --restart=always \ --name midjourney \ grbhq/midjourney:latest - docker-compose一键部署[需安装docker-compose工具]:
wget -O docker-compose.yaml https://raw.githubusercontent.com/souying/Midjourney-node-api/main/docker-compose.yaml && docker-compose up -d 2.进入当前Midjourney/basedata目录下修改.env文件 参考.env.example
3.重启docker容器(生效.env变量)
docker restart midjourney
4.启动后访问服务器ip:5400
1.确保服务器已经有node环境18以上
2.拉取代码
git clone https://github.com/souying/Midjourney-node-api.git cd Midjourney-node-api 3.下载依赖
yarn # or npm npm install 4.项目跟目录下新建 .env 文件 参考.env.example
5.启动项目 启动后访问127.0.0.1:3000
npm start 7.端口修改/bin/www 3000改成其他
已完成
GET
urlencoded
| 参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
|---|---|---|---|---|
| action | IMAGINE | String | 是 | 动作: 必传,IMAGINE(绘图)、UPSCALE(选中放大)、VARIATION(选中变换) |
| prompt | 一只狗 | String | 是 | 绘图参数: IMAGINE时必传 |
| taskId | 123456789 | String | 是 | 任务ID: UPSCALE、VARIATION时必传 |
| index | 1 | String | 是 | 图序号: 1~4,UPSCALE、VARIATION时必传,表示第几张图 |
| state | main | String | 是 | 自定义字符串: 非必传,供回调到业务系统里使用 |
| notifyHook | http://www.baidu.com | String | 是 | 支持每个任务配置不同回调地址,非必传 |
| 参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
|---|---|---|---|---|
| action | IMAGINE | - | 是 | 动作: 必传,IMAGINE(绘图)、UPSCALE(选中放大)、VARIATION(选中变换) |
| prompt | 一只狗 | - | 是 | 绘图参数: IMAGINE时必传 |
| taskId | 123456789 | - | 是 | 任务ID: UPSCALE、VARIATION时必传 |
| index | 1 | - | 是 | 图序号: 1~4,UPSCALE、VARIATION时必传,表示第几张图 |
| state | main | - | 是 | 自定义字符串: 非必传,供回调到业务系统里使用 |
| notifyHook | http://www.baidu.com | - | 是 | 支持每个任务配置不同回调地址,非必传 |
{ "code": 1, "description": "成功", "result": "1234679" }{ "code": 0, "description": "失败" }提交任务,后台持续执行任务,成功或者失败后更改任务状态 已完成
POST
urlencoded
| 参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
|---|---|---|---|---|
| action | IMAGINE | String | 是 | 动作: 必传,IMAGINE(绘图)、UPSCALE(选中放大)、VARIATION(选中变换) |
| prompt | 一只狗 | String | 是 | 绘图参数: IMAGINE时必传 |
| taskId | 123456789 | String | 是 | 任务ID: UPSCALE、VARIATION时必传 |
| index | 1 | String | 是 | 图序号: 1~4,UPSCALE、VARIATION时必传,表示第几张图 |
| state | main | String | 是 | 自定义字符串: 非必传,供回调到业务系统里使用 |
| notifyHook | http://www.baidu.com | String | 是 | 支持每个任务配置不同回调地址,非必传 |
| 参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
|---|---|---|---|---|
| action | IMAGINE | - | 是 | 动作: 必传,IMAGINE(绘图)、UPSCALE(选中放大)、VARIATION(选中变换) |
| prompt | 一只狗 | - | 是 | 绘图参数: IMAGINE时必传 |
| taskId | 123456789 | - | 是 | 任务ID: UPSCALE、VARIATION时必传 |
| index | 1 | - | 是 | 图序号: 1~4,UPSCALE、VARIATION时必传,表示第几张图 |
| state | main | - | 是 | 自定义字符串: 非必传,供回调到业务系统里使用 |
| notifyHook | http://www.baidu.com | - | 是 | 支持每个任务配置不同回调地址,非必传 |
{ "code": 1, "description": "成功", "result": "1234679" }{ "code": 0, "description": "失败" }查询任务完成情况 已完成
http://127.0.0.1:3000/api/v1//task/fetch?_id=8a2c5959-143b-46c5-adb6-242652ac8141
GET
form-data
| 参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
|---|---|---|---|---|
| _id | 8a2c5959-143b-46c5-adb6-242652ac8141 | String | 是 | 任务id |
| 参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
|---|---|---|---|---|
| _id | 8a2c5959-143b-46c5-adb6-242652ac8141 | - | 是 | 任务id |
{ "_id": "8a2c5959-143b-46c5-adb6-242652ac8141", "index": "1", "action": "VARIATION", "prompt": "一只狗", "promptEn": "A dog", "taskId": "1108302168013938689", "uri": "f61e-4eac-9991-475799668483.png", "hash": "adbd1ba4-f61e-4eac-9991-475799668483", "content": "A dog--niji --seed 5587", "progress": "done", "description": "/imagine A dog", "submitTime": 1684310738264, "finishTime": 1684310741027, "state": "main", "notifyHook": "http://www.baidu.com", "imageUrl": "adbd1ba4-f61e-4eac-9991-475799668483.png", "status": "SUCCESS" }{ code:0 }查询全部任务 已完成
http://127.0.0.1:3000/api/v1//task/fetch?_id=8a2c5959-143b-46c5-adb6-242652ac8141
POST
form-data
| 参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
|---|---|---|---|---|
| _id | 8a2c5959-143b-46c5-adb6-242652ac8141 | String | 是 | 任务id |
| 参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
|---|---|---|---|---|
| _id | 8a2c5959-143b-46c5-adb6-242652ac8141 | - | 是 | 任务id |
{ "_id": "8a2c5959-143b-46c5-adb6-242652ac8141", "index": "1", "action": "VARIATION", "prompt": "一只狗", "promptEn": "A dog", "taskId": "1108302168013938689", "uri": "f61e-4eac-9991-475799668483.png", "hash": "adbd1ba4-f61e-4eac-9991-475799668483", "content": "A dog--niji --seed 5587", "progress": "done", "description": "/imagine A dog", "submitTime": 1684310738264, "finishTime": 1684310741027, "state": "main", "notifyHook": "http://www.baidu.com", "imageUrl": "adbd1ba4-f61e-4eac-9991-475799668483.png", "status": "SUCCESS" }{ code:0 }暂无描述 已完成
POST
form-data
[ { "_id": "8a2c5959-143b-46c5-adb6-242652ac8141", "index": "1", "action": "VARIATION", "prompt": "一只狗", "promptEn": "A dog", "taskId": "1108302168013938689", "uri": "f61e-4eac-9991-475799668483.png", "hash": "adbd1ba4-f61e-4eac-9991-475799668483", "content": "A dog--niji --seed 5587", "progress": "done", "description": "/imagine A dog", "submitTime": 1684310738264, "finishTime": 1684310741027, "state": "main", "notifyHook": "http://www.baidu.com", "imageUrl": "adbd1ba4-f61e-4eac-9991-475799668483.png", "status": "SUCCESS" } ]{ code:0 }暂无描述 已完成
[{ "_id": "8a2c5959-143b-46c5-adb6-242652ac8141", "index": "1", "action": "VARIATION", "prompt": "一只狗", "promptEn": "A dog", "taskId": "1108302168013938689", "uri": "f61e-4eac-9991-475799668483.png", "hash": "adbd1ba4-f61e-4eac-9991-475799668483", "content": "A dog--niji --seed 5587", "progress": "done", "description": "/imagine A dog", "submitTime": 1684310738264, "finishTime": 1684310741027, "state": "main", "notifyHook": "http://www.baidu.com", "imageUrl": "adbd1ba4-f61e-4eac-9991-475799668483.png", "status": "SUCCESS" }]{ code:0 }