# MJ 放大、变体与图片编辑

<a id="mj-action"></a>

<a id="action-放大-变体与扩图"></a>

## Action 放大、变体与扩图

 **POST**  `/mj/submit/action`

从父任务 buttons 中选择按钮，原样提交其 customId。成功后继续查询返回的新任务 ID。

 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
 `taskId` | `string` | 是 | 当前 API Key 创建的父任务 ID。使用本站回执 result，不能使用 state 代替。 |
 `customId` | `string` | 是 | 必须与父任务 buttons\[\].customId 完全一致；示例是占位符，不能直接用于真实任务。 |
 `state` | `string` | 否 | 调用方业务标识，随任务返回；不是任务 ID，也不提供幂等去重。 |

 **执行父任务按钮**  `POST /mj/submit/action`

```bash
curl --fail-with-body -X POST 'https://y.junlistudio.com/mj/submit/action' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "taskId": "PARENT_TASK_ID",
  "customId": "COPY_EXACT_CUSTOM_ID_FROM_BUTTONS",
  "state": "upscale-123"
}'
```

 **返回：** 返回通用提交回执；保存 result，轮询新任务。

 常见按钮 | 用途 | 对应计费动作 |
| --- | --- | --- |
 U1–U4 | 放大四宫格中的第 1–4 张 | mj\_upscale |
 V1–V4 | 生成对应宫格的变体 | mj\_variation |
 Reroll / 🔄 | 重新生成 | mj\_reroll |
 Vary (Strong) / Vary (Subtle) | 强变体 / 弱变体 | mj\_high\_variation / mj\_low\_variation |
 Upscale (Subtle) / Upscale (Creative) | 精细放大 / 创意放大 | mj\_upscale\_subtle / mj\_upscale\_creative |
 Zoom Out 1.5x / Zoom Out 2x | 向外扩图 | mj\_zoom |
 Custom Zoom | 自定义扩图，通常需要 Modal | mj\_custom\_zoom |
 Vary (Region) | 局部重绘，通常需要 Modal | mj\_inpaint |
 ⬅️ / ➡️ / ⬆️ / ⬇️ | 向对应方向扩展 | mj\_pan |

下表仅说明常见按钮，不保证每个任务都返回这些按钮。以本次查询结果为准。

未知按钮、没有配置动作价格或没有相应模型权限时，提交会被拒绝。

需要 Modal 的按钮不能只提交 Action 后一直轮询；请按 Modal 流程补充参数。

计费：按实际按钮动作收费，见按钮表。动作是否开放及价格，以本站模型目录和当前 Key 权限为准。

<a id="mj-change"></a>

<a id="change-结构化变化"></a>

## Change 结构化变化

 **POST**  `/mj/submit/change`

用动作名称与宫格序号执行放大、变体或重绘。

 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
 `taskId` | `string` | 是 | 当前 API Key 创建的父任务 ID。使用本站回执 result，不能使用 state 代替。 |
 `action` | `string` | 是 | 仅 UPSCALE、VARIATION、REROLL，使用大写。 |
 `index` | `integer` | 条件 | UPSCALE / VARIATION 必填，范围 1–4；REROLL 省略。 |
 `state` | `string` | 否 | 调用方业务标识，随任务返回；不是任务 ID，也不提供幂等去重。 |

 **放大第 1 张**  `POST /mj/submit/change`

```bash
curl --fail-with-body -X POST 'https://y.junlistudio.com/mj/submit/change' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "taskId": "PARENT_TASK_ID",
  "action": "UPSCALE",
  "index": 1,
  "state": "upscale-1"
}'
```

 **第 2 张变体**  `POST /mj/submit/change`

```bash
curl --fail-with-body -X POST 'https://y.junlistudio.com/mj/submit/change' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "taskId": "PARENT_TASK_ID",
  "action": "VARIATION",
  "index": 2
}'
```

 **重新生成**  `POST /mj/submit/change`

```bash
curl --fail-with-body -X POST 'https://y.junlistudio.com/mj/submit/change' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "taskId": "PARENT_TASK_ID",
  "action": "REROLL"
}'
```

 **返回：** 返回通用提交回执；保存 result，轮询新任务。

需要更丰富按钮时使用 Action；不能把 Zoom、Pan 等动作塞入 action 枚举。

计费：mj\_upscale / mj\_variation / mj\_reroll。动作是否开放及价格，以本站模型目录和当前 Key 权限为准。

<a id="mj-simple-change"></a>

<a id="simple-change-文本变化"></a>

## Simple Change 文本变化

 **POST**  `/mj/submit/simple-change`

将任务 ID 和动作简写放在 content 中。

 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
 `content` | `string` | 是 | 格式为 TASK\_ID U1…U4、TASK\_ID V1…V4 或 TASK\_ID R，以空格分隔。 |
 `state` | `string` | 否 | 调用方业务标识，随任务返回；不是任务 ID，也不提供幂等去重。 |

 **放大第 2 张**  `POST /mj/submit/simple-change`

```bash
curl --fail-with-body -X POST 'https://y.junlistudio.com/mj/submit/simple-change' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "content": "PARENT_TASK_ID U2",
  "state": "upscale-2"
}'
```

 **返回：** 返回通用提交回执；保存 result，轮询新任务。

这里没有单独的 taskId、action 或 index 字段；新接入也可直接使用 Action。

计费：mj\_upscale / mj\_variation / mj\_reroll。动作是否开放及价格，以本站模型目录和当前 Key 权限为准。

<a id="mj-modal"></a>

<a id="modal-局部重绘与自定义-zoom"></a>

## Modal 局部重绘与自定义 Zoom

 **POST**  `/mj/submit/modal`

先提交父任务的 Vary (Region) / Custom Zoom 按钮，再使用该 Action 回执 result 指向的 Modal 任务补充参数。

 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
 `taskId` | `string` | 是 | 需要补充参数的 Modal 任务 ID，通常来自上一条 Action 的 result；不要用 state 代替。 |
 `prompt` | `string` | 否 | 按所选动作补充提示词，例如自定义扩图追加 --zoom 1.5。 |
 `maskBase64` | `string` | 否 | 局部重绘蒙版，单个图片 Data URL 字符串；黑色为保留区、白色为编辑区，尺寸与目标图一致。 |
 `state` | `string` | 否 | 调用方业务标识，随任务返回；不是任务 ID，也不提供幂等去重。 |

 **自定义 Zoom**  `POST /mj/submit/modal`

```bash
curl --fail-with-body -X POST 'https://y.junlistudio.com/mj/submit/modal' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "taskId": "MODAL_TASK_ID",
  "prompt": "a cat in sunlight --zoom 1.5"
}'
```

 **局部重绘**  `POST /mj/submit/modal`

```bash
curl --fail-with-body -X POST 'https://y.junlistudio.com/mj/submit/modal' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "taskId": "MODAL_TASK_ID",
  "prompt": "replace the selected area with flowers",
  "maskBase64": "data:image/png;base64,REPLACE_WITH_MASK_BASE64"
}'
```

 **返回：** 返回通用提交回执；保存 result，轮询新任务。

Action 回执 code: 21 可能表示需要 Modal，也可能表示任务已存在；结合 description 和任务状态判断。

Modal 回执后继续查询本次 result。本站将 Action 和 Modal 视为各自配置价格的提交动作，调用前确认对应价格。

本接口的 maskBase64 是字符串；Edits 接口的同名字段是数组，不能混用。

计费：mj\_modal。动作是否开放及价格，以本站模型目录和当前 Key 权限为准。

<a id="mj-edits"></a>

<a id="edits-图片编辑"></a>

## Edits 图片编辑

 **POST**  `/mj/submit/edits`

使用图片 URL 和编辑提示词创建新任务，可附带蒙版。

 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
 `prompt` | `string` | 是 | 非空编辑要求。 |
 `image` | `string` | 是 | 可公开访问的图片 URL；与 Imagine 的 base64Array 不同。 |
 `maskBase64` | `string[]` | 否 | 蒙版 Data URL 数组，传入时本站要求 1–10 项；不是 Modal 的单个字符串。 |
 `noStorage` | `boolean` | 是 | 须显式传 true / false，控制是否跳过图片转存。查询结果提供签名下载 URL，请使用返回的完整地址。 |
 `state` | `string` | 否 | 调用方业务标识，随任务返回；不是任务 ID，也不提供幂等去重。 |
 `notifyHook` | `string` | 否 | 本站暂未开放回调，请省略。传非空值会被拒绝。 |

 **编辑背景**  `POST /mj/submit/edits`

```bash
curl --fail-with-body -X POST 'https://y.junlistudio.com/mj/submit/edits' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "prompt": "change the background to a sunset",
  "image": "https://images.example.com/input.png",
  "maskBase64": [
    "data:image/png;base64,REPLACE_WITH_MASK_BASE64"
  ],
  "noStorage": false,
  "state": "edit-123"
}'
```

 **返回：** 返回通用提交回执；保存 result，轮询新任务。

图片及蒙版占位符需替换为真实内容；不要直接复制示例 URL 提交。

计费：mj\_edits。动作是否开放及价格，以本站模型目录和当前 Key 权限为准。
