# Midjourney API 变体与放大

Midjourney 的变体、放大和扩图是基于原任务的新操作。不要复制图片界面的按钮名称或上游 `customId`；以本站任务响应的 `actions` 为准。

## 从结果选择操作

1. 查询已完成的图片任务，遍历 `outputs` 展示所有图片。
2. 找到对应图片可用的 `actions`，保留其中的 `operation` 和 `output_index`。
3. 将它们与本站 `parent_task_id`、原图片 `model` 一起估价，再提交到 `/v1/image/generations`。
4. 保存新的任务 ID，查询新结果。原任务不会被替换。

```json title="midjourney-image-variation.json"
{
  "model": "midjourney-v7",
  "operation": "variation",
  "parent_task_id": "task_example",
  "output_index": 0
}
```

`output_index` 从 0 开始；它不是筛选、排序后的界面下标。`output_1` 对应原始下标 0。父任务必须属于当前用户且已经完成，不能填写上游任务 ID 或其他用户的任务。

## 变体、放大与提取的区别

| 操作 | 意义 |
| --- | --- |
| `variation` / `vary_subtle` / `vary_strong` | 创建变体或不同程度的重绘 |
| `upscale_subtle` / `upscale_creative` | 提交保守或创意放大任务 |
| `zoom_1_5` / `zoom_2` / `pan_*` | 向外或向指定方向扩展画面 |
| `select` | 获取已有单图，不是重新生成或高清放大 |
| `reroll` | 使用原设置重新生成 |

不是每个模型、阶段或图片都提供上述操作。有单张结果 URL 时不必再次调用 `select`。需要放大时，先确认实际返回了对应放大动作。

```json title="midjourney-image-upscale.json"
{
  "model": "midjourney-v7",
  "operation": "upscale_subtle",
  "parent_task_id": "task_selected_image",
  "output_index": 0,
  "speed": "fast"
}
```

普通后续操作继承原提示词、种子及参考设置，不应重新发送 `images`、`seed`、`stylize` 等生成参数。`custom_zoom` 和 `region` 的例外字段与限制见[完整操作契约](https://api.hamubox.com/docs/models/midjourney/#多结果与后续操作)；列出契约不代表完整编辑器已经开放。

## 图片转提示词

`operation: "describe"` 接收一张图片，成功后读取 `descriptions[]`。它输出多个候选文字描述，不是生成四张图片，也不保证候选数永远为四。

从中选择一个描述生成图片，需要另外发起 `generate` 并独立计费。客户端应支持 `completed` 且没有 `outputs` 的图转提示词任务。

## 费用与重试

变体、放大和扩图分别估价、提交，不应视作原任务的免费重试。对每个操作发送相同参数到 `/v1/image/generations/estimate`，不要用普通生图基础价代替操作报价。

提交超时后先核对已有任务；拿到任务 ID 后只查询该任务，不通过再次 POST 修复超时或下载失败。具体错误处理见[常见问题](https://api.hamubox.com/docs/midjourney/faq/)。
