众扬汇 AI 开放平台 API 文档

补充 其他参数以及回调

通过 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 模式,两种方式:

  1. 通过 URL 路径切换 默认 /mj 为 fast 模式 /mj-fast/mj 为 fast 模式 /mj-turbo/mj 为 turbo 模式 /mj-relax/mj 为 relax 模式 例如:https://{BASE_URL}/mj-turbo/mj/submit/imagine
  2. 在令牌编辑中选择绘图模式(推荐) 优先级:令牌 > 路径 > 系统默认

切换 MJ 返回的图片地址:

  1. 通过 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

  2. 在令牌编辑中选择图片代理(推荐,可设置自定义图片代理) 优先级:令牌 > 路径 > 系统默认

创建新的绘图任务:

  1. Blend、Describe、Imagine
  2. 查询任务进度
  3. 执行动作、绘图变化或提交 Modal
  4. 查询子任务进度

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 即本次任务的 ID
    json
    {
      "code": 1,
      "description": "提交成功",
      "result": "14001929738841620",
      "properties": {
          "discordInstanceId": "1118138338562560102"
      }
    }
    
  • 取值 code=22:提交成功但需排队,等待时间与前方任务数见返回的 properties
    json
    {
        "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
  • 图片放大后出现的 ❤️
json
{
  // 关联任务的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,示例如下:

json
{
  "code": 21,
  "description": "窗口等待",
  "result": "14001929738841620"
}

此时任务状态为 MODAL,不占用并发额度;需再调用 /mj/submit/modal 提交最终内容后才会真正执行。

json
{
  // 需确认的任务ID
  "taskId": "1689228047868174",
  // prompt: 为空时使用原任务的prompt
  "prompt": "Cat"
}
  • CustomZoom的prompt需要设置--zoom(1到2之间),例如: Cat --zoom 1.5
  • ️Vary (Region) 需要额外传maskBase64: 局部重绘的蒙版base64(底色纯黑,选中区域纯白)

4. /mj/submit/describe 图生文

json
{
  // 图片的base64字符串
  "base64": "data:image/png;base64,xxx"
}

任务完成后,返回的 properties.finalPrompt 就是该图对应的英文提示词,properties.finalZhPrompt 为其中文译文。

json
{
  "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分析

json
{
  "prompt": "️appdash appdash, in the style of expert draftsmanship, commission for, ethereal, dreamlike quality, dadaistic, toonami"
}

任务完成后,properties.finalPrompt 为分析得到的英文提示词,properties.finalZhPrompt 为中文译文。

json
{
  "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 动作,可查看更细的分析明细。

json
{
  "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 为该图对应的 seed
    json
    {
      "code": 1,
      "description": "成功",
      "result": "636646138"
    }
    
  • 其他取值:执行失败,原因见 description

7. 任务变更回调

任务状态变化或进度改变时,平台会回调业务系统接口:

  • 提交任务时可通过 notifyHook 覆盖本任务的回调地址;
  • 全局与任务级回调地址都为空时不触发回调;
  • 回调地址不能是 IP,需要有域名,建议使用 HTTPS。

POST application/json

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": []
}