Skip to content

yokonsan/midjourney-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Aug 27, 2024
a5781c4 · Aug 27, 2024

History

44 Commits
Jun 8, 2023
Aug 21, 2023
Aug 27, 2024
Jan 24, 2024
Jun 5, 2023
Aug 27, 2024
May 21, 2023
May 21, 2023
Aug 27, 2024
Aug 27, 2024
May 22, 2023
May 30, 2023
May 24, 2023
May 23, 2023
May 30, 2023
May 31, 2023
May 21, 2023
May 31, 2023
May 30, 2023

Repository files navigation

midjourney-api

简体中文 / English

基于 Discord 的 Midjourney API。

添加 Midjourney 违禁词入口 issue

项目集成 Demo 参考:issue31


Midjourney API 平台推荐

如果以上流程&代码对你来说操作有困难,或者维护账户池消耗了你们大量的精力与成本。这里有一个高度集成且价格与稳定性具有超高性价比的 Midjouney API 平台推荐 TTAPI

TTAPI 平台对于Midjourney相关功能支持:

  • imagine
  • U V pan zoom
  • describe
  • blend
  • vary_region等等所有Midjourney官方包含的高级功能
  • 除此以外还支持Luma API换脸API、相对价格比较优惠的ChatGPT以及Claude API

TTAPI 接入


UML

Loading
sequenceDiagram
    participant ThirdServer
    participant APIServer
    participant DiscordAPI

    ThirdServer->>APIServer: 请求接口触发任务
    APIServer->>APIServer: 放入任务队列
    APIServer->>DiscordAPI: 调接口触发绘画任务
    APIServer-->>ThirdServer: 返回是否触发成功

    DiscordAPI->>DiscordAPI: 触发Midjourney bot绘画任务
    DiscordAPI->>DiscordAPI: 监听MidJourney bot消息
    DiscordAPI-->>ThirdServer: 返回监听实时消息
    DiscordAPI-->>APIServer: 清除队列任务

使用条件

  1. 确保程序启动环境能访问 Discord
  2. 已有 Midjourney、Discord 账户
  3. 创建 Discord 频道并添加机器人,参考教程 Midjourney|如何集成到自己的平台

安装启动

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请求,用于接收 midjourney 作图进度和结果的服务

直接启动

# 启动监听机器人
python task_bot.py
# 启动http服务
python server.py

更新

git pull

# 启动监听机器人
python task_bot.py
# 启动http服务
python server.py

docker 启动

填写 start.sh-e 后的环境变量,直接启动:

sh start.sh

或者本地构建镜像:

# 构建镜像
sh build.sh
# 启动容器
sh start.sh

更新

docker rmi kunyu/midjourney-api:1.0
sh start.sh

接口swagger文档:http://127.0.0.1:8062/docs

midjourney-api 提供接口:

  • /v1/api/trigger/imagine:触发绘画任务(图生图,Prompt 前加上图片链接即可)
  • /v1/api/trigger/upscale:U
  • /v1/api/trigger/variation:V
  • /v1/api/trigger/solo_variation:Make Variations
  • /v1/api/trigger/solo_low_variation:Vary(Subtle)
  • /v1/api/trigger/solo_high_variation:Vary(Strong)
  • /v1/api/trigger/zoomout:Zoom Out 2x/1.5x
  • /v1/api/trigger/expand:⬅️ ➡️ ⬆️ ⬇️
  • /v1/api/trigger/reset:重绘
  • /v1/api/trigger/upload:上传图片
  • /v1/api/trigger/describe:通过上传图片名,生成 Prompt
  • /v1/api/trigger/message:发送图片消息,返回图片链接,用于图生图功能

使用

imagine

文生图

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/imagine' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "prompt": "a cute cat"
}'

图生图,需带上图片 URL

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/imagine' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "prompt": "a cute cat",
  "picurl": "https://xxxxxx/xxxxxxxxxxxx.jpg"
}'

upscale

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/upscale' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "index": 1,
  "msg_id": "xxxxxxxxxx",
  "msg_hash": "xxxxx-xxx-xxxx-xxxx-xxxxxx",
  "trigger_id": "xxxxxxxxxx"
}'
  • index: 图片索引,取值:1、2、3、4
  • msg_id: imagine 绘画完成后回调报文 id 字段
  • msg_hash: imagine 绘画完成后回调报文 attachments[0].filename.split("_")[-1].split(".").[0]
  • trigger_id: imagine 绘画完成后回调报文 trigger_id 字段

variation

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/variation' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "index": 2,
  "msg_id": "xxxxxxxxxx",
  "msg_hash": "xxxxx-xxx-xxxx-xxxx-xxxxxx",
  "trigger_id": "xxxxxxxxxx"
}'

solo_variation

upscale 的单张图片进行 "Make Variations" 操作

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/solo_variation' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "index": 1,
  "msg_id": "xxxxxxxxxx",
  "msg_hash": "xxxxx-xxx-xxxx-xxxx-xxxxxx",
  "trigger_id": "xxxxxxxxxx"
}'
  • index: 图片索引,此处无用,取值:1
  • msg_id: upscale 绘画完成后回调报文 id 字段
  • msg_hash: upscale 绘画完成后回调报文 attachments[0].filename.split("_")[-1].split(".").[0]
  • trigger_id: upscale 绘画完成后回调报文 trigger_id 字段

solo_low_variation

upscale 的单张图片进行 "Vary(Subtle)" 操作

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/solo_low_variation' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "index": 1,
  "msg_id": "xxxxxxxxxx",
  "msg_hash": "xxxxx-xxx-xxxx-xxxx-xxxxxx",
  "trigger_id": "xxxxxxxxxx"
}'
  • index: 图片索引,此处无用,取值:1
  • msg_id: upscale 绘画完成后回调报文 id 字段
  • msg_hash: upscale 绘画完成后回调报文 attachments[0].filename.split("_")[-1].split(".").[0]
  • trigger_id: upscale 绘画完成后回调报文 trigger_id 字段

solo_high_variation

upscale 的单张图片进行 "Vary(Strong)" 操作

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/solo_high_variation' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "index": 1,
  "msg_id": "xxxxxxxxxx",
  "msg_hash": "xxxxx-xxx-xxxx-xxxx-xxxxxx",
  "trigger_id": "xxxxxxxxxx"
}'
  • index: 图片索引,此处无用,取值:1
  • msg_id: upscale 绘画完成后回调报文 id 字段
  • msg_hash: upscale 绘画完成后回调报文 attachments[0].filename.split("_")[-1].split(".").[0]
  • trigger_id: upscale 绘画完成后回调报文 trigger_id 字段

zoomout

upscale 的单张图片进行 Zoom Out 2x/1.5x 操作

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/zoomout' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "msg_id": "xxxxxxxxxx",
  "msg_hash": "xxxxx-xxx-xxxx-xxxx-xxxxxx",
  "zoomout": 50
  "trigger_id": "xxxxxxxxxx"
}'
  • zoomout: 图片扩大(Outpaint)系数,2x -> 50、1.5x -> 75

expand

upscale 的单张图片进行某方向的扩展操作

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/expand' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "msg_id": "xxxxxxxxxx",
  "msg_hash": "xxxxx-xxx-xxxx-xxxx-xxxxxx",
  "direction": "up"
  "trigger_id": "xxxxxxxxxx"
}'
  • direction: 图片扩大方向,取值:left/right/up/down

reset

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/reset' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "msg_id": "xxxxxxxxxx",
  "msg_hash": "xxxxx-xxx-xxxx-xxxx-xxxxxx",
  "trigger_id": "xxxxxxxxxx"
}'

describe

  1. 先上传图片
curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/upload' \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F '[email protected];type=image/jpeg'
  1. 根据返回的图片文件名,调用 describe
curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/describe' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "upload_filename": "b56ca21a-5fbe-40b4-89ab-6e0aa732f561/9231228408.jpg",
  "trigger_id": "9231228408"
}'
  • trigger_id 先用 upload 返回的 trigger_id
  • upload_filename upload 返回的文件名

message

describe 一样,先 /v1/api/trigger/upload 上传图片,然后根据返回文件名,发送消息:

curl -X 'POST' \
  'http://127.0.0.1:8062/v1/api/trigger/message' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "upload_filename": "560a1e26-36a2-4d5f-a48d-9dd877642b51/7185811546.jpg"
}'

发送图片后,会返回图片链接。 该链接用于以图生图中,拼接 Prompt 形如 图片URL Prompt,调用 /v1/api/trigger/imagine

功能

  • imagine
  • upscale
  • variation
  • solo_variation
  • solo_low_variation
  • solo_high_variation
  • zoomout
  • expand
  • reset
  • describe
  • 图生图(获取到上传图片的链接)
  • 敏感词过滤上报
  • 任务队列(内存存储,不希望引入外建,可加入异常落盘)
  • tests

enjoy it