补充 其他参数以及回调
通过 API 形式调用 MidJourney 绘图
API接口说明
本通道同时兼容 Midjourney proxy Plus 与 Midjourney proxy 两种接口协议。
默认地址示例:https://{BASE_URL}/mj/submit/imagine;本节补充模式切换、图片地址切换与回调等细节。
快速教学-完整流程一遍过
可按下述步骤快速走通一轮绘图:
一、调用 Imagine 接口提交绘图任务,接口返回任务 ID;
二、用任务 ID 查询任务,得到图片链接与可操作按钮,每个按钮对应一个 custom_id;
三、需要对图片继续处理时调用 Action 接口,传入上一步的 custom_id 与任务 ID,会得到新的任务 ID,再按第二步继续查询。
(若 Action 接口提示需要弹窗确认,需带该任务 ID 再调用 Modal 接口完成提交。)
(如果调用Action接口,提示弹窗,需要使用这个任务ID再次调用Modal接口。)
切换 MJ 模式,两种方式:
- 通过 URL 路径切换
默认
/mj为 fast 模式/mj-fast/mj为 fast 模式/mj-turbo/mj为 turbo 模式/mj-relax/mj为 relax 模式 例如:https://{BASE_URL}/mj-turbo/mj/submit/imagine - 在令牌编辑中选择绘图模式(推荐) 优先级:令牌 > 路径 > 系统默认
切换 MJ 返回的图片地址:
通过 URL 路径切换 默认
/mj为平台配置的默认方式/mj-{mode}-relay/mj使用服务转发地址,国内访问较快/mj-{mode}-origin/mj使用原站地址直连,海外访问较快/mj-{mode}-proxy/mj使用平台配置的代理地址,国内访问较快 例如:https://{BASE_URL}/mj-turbo-proxy/mj/submit/imagine例如:https://{BASE_URL}/mj-proxy/mj/submit/imagine通常应用侧填写
/mj/之前的地址,例如:https://{BASE_URL}、https://{BASE_URL}/mj-turbo-proxy在令牌编辑中选择图片代理(推荐,可设置自定义图片代理) 优先级:令牌 > 路径 > 系统默认
创建新的绘图任务:
- Blend、Describe、Imagine
- 查询任务进度
- 执行动作、绘图变化或提交 Modal
- 查询子任务进度
1. 数据结构
任务
| 字段 | 类型 | 示例 | 描述 |
|---|---|---|---|
| id | string | 1689231405853400 | 任务ID |
| action | string | IMAGINE | 任务类型: IMAGINE(绘图)、UPSCALE(放大)、VARIATION(变化)、ZOOM(图片变焦)、PAN(焦点移动)、DESCRIBE(图生文)、BLEND(图片混合)、SHORTEN(prompt分析)、SWAP_FACE(人脸替换) |
| status | string | SUCCESS | 任务状态: NOT_START(未启动)、SUBMITTED(已提交处理)、MODAL(窗口等待)、IN_PROGRESS(执行中)、FAILURE(失败)、SUCCESS(成功)、CANCEL(已取消) |
| prompt | string | 猫猫 | 提示词 |
| promptEn | string | Cat | 英文提示词 |
| description | string | /imagine 猫猫 | 任务描述 |
| submitTime | number | 1689231405854 | 提交时间 |
| startTime | number | 1689231442755 | 开始执行时间 |
| finishTime | number | 1689231544312 | 结束时间 |
| progress | string | 100% | 任务进度 |
| imageUrl | string | https://cdn.discordapp.com/attachments/xxx/xxx/xxxx.png | 生成图片的url, 成功或执行中时有值,可能为png或webp |
| failReason | string | [Invalid parameter] Invalid value | 失败原因, 失败时有值 |
| properties | object | {"finalPrompt": "Cat"} | 任务的扩展属性,系统内部使用 |
| buttons | Button[] | [] | 任务完成后的可执行按钮 |
Button
| 字段 | 类型 | 示例 | 描述 |
|---|---|---|---|
| customId | string | MJ::JOB::upsample::1::85a4b4c1-8835-46c5-a15c-aea34fad1862 | 动作标识 |
| emoji | string | 🪄 | 图标 |
| label | string | Make Variations | 文本 |
| type | number | 2 | 类型,系统内部使用 |
| style | number | 2 | 样式: 2(Primary)、3(Green) |
properties 常见字段
| 字段 | 类型 | 示例 | 描述 |
|---|---|---|---|
| botType | string | NIJI_JOURNEY | bot类型: MID_JOURNEY,NIJI_JOURNEY,INSIGHT_FACE |
| discordInstanceId | string | 1118138338562560102 | 执行该任务的实例ID(频道ID) |
| finalPrompt | string | Cat | 消息内容提取出的prompt |
| messageId | string | 1174910863984033903 | 消息ID |
| messageContent | string | **Cat** - Image #1 <@590422081204912129> |
消息内容 |
2. 任务提交返回
- 取值
code=1:提交成功,result即本次任务的 IDjson{ "code": 1, "description": "提交成功", "result": "14001929738841620", "properties": { "discordInstanceId": "1118138338562560102" } } - 取值
code=22:提交成功但需排队,等待时间与前方任务数见返回的propertiesjson{ "code": 22, "description": "排队中,前面还有1个任务", "result": "14001929738841620", "properties": { "numberOfQueues": 1, "discordInstanceId": "1118138338562560102" } } - 取值
code=23:队列已满,建议稍后重试json{ "code": 23, "description": "队列已满,请稍后尝试", "result": "14001929738841620", "properties": { "discordInstanceId": "1118138338562560102" } } - 取值
code=24:prompt 命中敏感词,返回体会给出相关词json{ "code": 24, "description": "可能包含敏感词", "properties": { "promptEn": "nude body", "bannedWord": "nude" } } - 其他取值:提交失败,具体原因见
description
3. 执行任务的关联动作
调用 /mj/submit/action 可执行任务的关联动作,平台支持绝大多数按钮,仅以下两类除外:
- 图生文结果中的
🎉Imagine all - 图片放大后出现的
❤️
{
// 关联任务的ID
"taskId": "1689216801333574",
// 动作标识
"customId": "MJ::JOB::reroll::0::1c6dff5e-5632-40c6-9d4c-afb261705313::SOLO"
}
⚠️ 注意:以下动作需要 Modal 弹框确认
- 执行CustomZoom(自定义变焦)
- 执行️Region(局部重绘)
- 执行PicReader(Describe后选择生图)
- 执行PromptAnalyzer(Shorten后选择生图)
开启 Remix 模式时,执行 Reroll、Variation、Pan 也需要弹框确认;若令牌侧已设置 Remix 自动提交,则无需确认。
需要弹窗确认时,接口返回的 code 为 21,示例如下:
{
"code": 21,
"description": "窗口等待",
"result": "14001929738841620"
}
此时任务状态为 MODAL,不占用并发额度;需再调用 /mj/submit/modal 提交最终内容后才会真正执行。
{
// 需确认的任务ID
"taskId": "1689228047868174",
// prompt: 为空时使用原任务的prompt
"prompt": "Cat"
}
- CustomZoom的prompt需要设置
--zoom(1到2之间),例如:Cat --zoom 1.5 - ️Vary (Region) 需要额外传
maskBase64: 局部重绘的蒙版base64(底色纯黑,选中区域纯白)
4. /mj/submit/describe 图生文
{
// 图片的base64字符串
"base64": "data:image/png;base64,xxx"
}
任务完成后,返回的 properties.finalPrompt 就是该图对应的英文提示词,properties.finalZhPrompt 为其中文译文。
{
"id":"14001929738841620",
"action":"DESCRIBE",
"status": "SUCCESS",
"description":"/describe 14001929738841620.png",
"imageUrl":"https://cdn.discordapp.com/attachments/xxx/xxx/14001929738841620.png",
"properties": {
"finalPrompt": "1️⃣ Cat --ar 5:4\n\n2️⃣ Cat2 --ar 5:4\n\n3️⃣ Cat3 --ar 5:4\n\n4️⃣ Cat4 --ar 5:4",
"finalZhPrompt": "1️⃣ 猫 --ar 5:4\n\n2️⃣ 猫2 --ar 5:4\n\n3️⃣ 猫3 --ar 5:4\n\n4️⃣ 猫4 --ar 5:4"
}
// ...
}
5. /mj/submit/shorten prompt分析
{
"prompt": "️appdash appdash, in the style of expert draftsmanship, commission for, ethereal, dreamlike quality, dadaistic, toonami"
}
任务完成后,properties.finalPrompt 为分析得到的英文提示词,properties.finalZhPrompt 为中文译文。
{
"id":"1689252749098647",
"action":"SHORTEN",
"status": "SUCCESS",
"description":"/shorten appdash appdash, in the style of expert draftsmanship, commission for, ethereal, dreamlike quality, dadaistic, toonami",
"properties": {
"finalPrompt": "## Important tokens\n**appdash** **appdash**, in the ~~style~~ of ~~expert~~ **draftsmanship**, commission for, ethereal, dreamlike quality, ~~dadaistic~~, **toonami**\n## Shortened prompts\n1️⃣ appdash appdash, draftsmanship, commission for, ethereal, toonami\n\n2️⃣ appdash appdash, draftsmanship, commission, toonami\n\n3️⃣ appdash appdash, draftsmanship, toonami\n\n4️⃣ appdash appdash, toonami\n\n5️⃣ appdash appdash",
"finalZhPrompt": "## 重要词汇\n**appdash** **appdash**,以专家的绘画风格,委托制作,飘渺的,梦幻般的质感,达达主义的,**toonami**\n## 简化提示\n1️⃣ appdash appdash,绘画风格,委托制作,飘渺的,toonami\n\n2️⃣ appdash appdash,绘画风格,委托制作,toonami\n\n3️⃣ appdash appdash,绘画风格,toonami\n\n4️⃣ appdash appdash,toonami\n\n5️⃣ appdash appdash"
}
// ...
}
对该任务执行 Show Details 动作,可查看更细的分析明细。
{
"id":"1689253263953453",
"action":"SHORTEN",
"status": "SUCCESS",
"description":"/up 168925266642808397 Show Details",
"properties": {
"finalPrompt": "## Important tokens\n**appdash** (1.00) **appdash** (0.79), in the style (0.01) of expert (0.00) **draftsmanship** (0.09), commission (0.08) for, ethereal (0.05), dreamlike (0.02) quality (0.01), dadaistic (0.01), **toonami** (0.19)\n\n██████████ appdash\n████████░░ appdash\n██░░░░░░░░ toonami\n█░░░░░░░░░ draftsmanship\n█░░░░░░░░░ commission\n█░░░░░░░░░ ethereal\n## Shortened prompts\n1️⃣ appdash appdash, draftsmanship, commission for, ethereal, toonami\n\n2️⃣ appdash appdash, draftsmanship, commission, toonami\n\n3️⃣ appdash appdash, draftsmanship, toonami\n\n4️⃣ appdash appdash, toonami\n\n5️⃣ appdash app",
"finalZhPrompt": "## 重要的词语\n**appdash** (1.00) **appdash** (0.79),以专家级(0.01) **绘画技巧** (0.09) 的风格,委托(0.08) 制作,飘渺的(0.05),梦幻般的(0.02) 质感(0.01),达达主义的(0.01),**toonami** (0.19)\n\n██████████ appdash\n████████░░ appdash\n██░░░░░░░░ toonami\n█░░░░░░░░░ draftsmanship\n█░░░░░░░░░ commission\n█░░░░░░░░░ ethereal\n## 简化的提示\n1️⃣ appdash appdash,绘画技巧,委托制作,飘渺,toonami\n\n2️⃣ appdash appdash,绘画技巧,委托制作,toonami\n\n3️⃣ appdash appdash,绘画技巧,toonami\n\n4️⃣ appdash appdash,toonami\n\n5️⃣ appdash appdash"
}
// ...
}
6. 获取任务图片的seed
绘图任务本身不返回 seed;如需获取,调用 /mj/task/{id}/image-seed。
- 取值
code=1:获取成功,result为该图对应的 seedjson{ "code": 1, "description": "成功", "result": "636646138" } - 其他取值:执行失败,原因见
description
7. 任务变更回调
任务状态变化或进度改变时,平台会回调业务系统接口:
- 提交任务时可通过
notifyHook覆盖本任务的回调地址; - 全局与任务级回调地址都为空时不触发回调;
- 回调地址不能是 IP,需要有域名,建议使用 HTTPS。
POST application/json
{
"id": "14001929738841620",
"action": "IMAGINE",
"status": "SUCCESS",
"prompt": "猫猫",
"promptEn": "Cat",
"description": "/imagine 猫猫",
"submitTime": 1689231405854,
"startTime": 1689231442755,
"finishTime": 1689231544312,
"progress": "100%",
"imageUrl": "https://cdn.discordapp.com/attachments/xxx/xxx/xxxx.png",
"failReason": null,
"properties": {
"finalPrompt": "Cat"
},
"buttons": []
}