MIDJOURNEY IMAGE
Midjourney 生图
Midjourney 生图 API 接入:1K/2K 模型、四张任务、画幅参数、参考图重绘、URL 下载与按张计费。
最后验证:2026-09-29
使用 RootFlowAI 的 OpenAI Images 兼容接口调用 Midjourney,支持 1K、2K 文生图和单张公网图片参考重绘,成功后返回独立图片的 CDN URL。
创建 API Key 时选择 Midjourney 生图 分组。使用你在 RootFlowAI 创建的 Key,通过 Authorization: Bearer 鉴权。模型权限与当前价格可在模型价格页核对。
可用模型
| 模型名 | 分辨率档位 | 调用方式 |
|---|---|---|
midjourney-v8-2 | 1K | POST /v1/images/generations |
midjourney-v8-2-hd | 2K | 同上,通过模型名选择高清档位 |
两个模型使用相同的请求格式。选择 2K 时直接填写 midjourney-v8-2-hd,不需要额外传 quality、size 或 --hd。
调用前注意
- 必须显式传入 n=4。当前不支持指定生成 1、2、3 张,也不支持一次指定超过 4 张。
- 通过模型名选择 1K / 2K,通过提示词中的
--ar选择画幅;不要照搬其他生图模型的size、quality参数。 - 一次任务以四张为目标,可能只交付 1–3 张。始终遍历实际返回的
data,不要假定数组一定有四项。 - 关闭客户端自动重试。超时或断连不代表任务没有执行,直接重发可能产生新的任务和费用。
快速开始
以下示例使用环境变量 ROOTFLOWAI_API_KEY。请在本地环境设置该变量,不要把真实 Key 写入代码仓库或前端页面。
curl
curl --max-time 1100 https://api.rootflowai.com/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ROOTFLOWAI_API_KEY}" \
-d '{
"model": "midjourney-v8-2",
"prompt": "日本动漫风格的忍者少年,站在村庄屋顶,蓝色能量光球,晴朗天空,清晰线稿,无文字 --ar 1:1",
"n": 4,
"response_format": "url"
}'Python
使用 OpenAI Python SDK,显式关闭自动重试:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ROOTFLOWAI_API_KEY"],
base_url="https://api.rootflowai.com/v1",
timeout=1100.0,
max_retries=0,
)
response = client.images.generate(
model="midjourney-v8-2-hd",
prompt="日本动漫风格的剑士,月光下的石阶,全身竖构图,无文字 --ar 3:4",
n=4,
response_format="url",
)
for index, image in enumerate(response.data or [], start=1):
print(index, image.url)Node.js
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ROOTFLOWAI_API_KEY,
baseURL: "https://api.rootflowai.com/v1",
timeout: 1_100_000,
maxRetries: 0,
});
const response = await client.images.generate({
model: "midjourney-v8-2-hd",
prompt: "动漫风格的森林训练场,银发忍者与蓝色闪电,宽幅电影构图,无文字 --ar 16:9",
n: 4,
response_format: "url",
});
for (const [index, image] of (response.data ?? []).entries()) {
console.log(index + 1, image.url);
}请求参数
请求体为 JSON,文生图和参考图重绘均调用 /v1/images/generations。
| 参数 | 必填 | 说明 |
|---|---|---|
model | 是 | 上表中的完整模型名 |
prompt | 是 | 非空图片描述;画幅和风格参数写在描述之后 |
n | 是 | 整数 4,不能省略,也不能用字符串 "4" |
response_format | 否 | 省略或填 url;不支持 b64_json |
images | 否 | 最多一项,格式为 [{"url":"https://example.com/reference.png"}];文生图省略 |
为什么必须 n=4
本模型以四张为一组提交任务,n 不能改变这一规格。n=1 会返回参数错误,不会转换成“生成四张后只收费一张”。当前接入要求显式填写四张,使请求数量与计费口径一致。
部分任务可能只返回 1–3 张,这是实际产出不足四张,不是主动选择少量图片的能力。如果服务已经返回四张,即使你只下载其中一张,也仍按四张计费。
画幅与提示词参数
将参数写在图片描述之后,用空格分隔。不要在图片描述中嵌入类似 人物--ar 的写法,也不要重复同一个参数或其别名。
雨后的未来都市,霓虹倒影,精细动漫场景,无文字 --ar 16:9 --s 100 --seed 12345常用画幅
| 提示词参数 | 适用场景 | 1K 实测尺寸 | 2K 实测尺寸 |
|---|---|---|---|
--ar 1:1 | 方图、头像、作品展示 | 1024×1024 | 2048×2048 |
--ar 16:9 | 横幅、场景、壁纸 | 1456×816 | 2944×1648 |
--ar 3:4 | 人物竖图、海报 | 928×1232 | 1904×2544 |
不传 --ar 时默认为方图。表格是实测样本,不是固定像素承诺;1K / 2K 表示分辨率档位,请以下载文件的真实像素为准,也不要仅凭文件尺寸判断是否为原生采样。
画幅使用正整数比例。当前 1K 的长短边比例不得超过 14:1,2K 不得超过 4:1;极端画幅不代表本页已逐项验证。
其他可用参数
| 参数 | 范围 / 格式 | 用途 |
|---|---|---|
--s / --stylize | 0–1000 | 风格化程度 |
--c / --chaos | 0–100 | 变化程度 |
--weird / --w | 0–3000 | 非常规风格控制 |
--iw | 0–3,仅在传入参考图时使用 | 参考图权重 |
--seed | 0–4294967295 的整数 | 随机种子;相同种子不保证完全复现 |
--no | 后接描述,例如 --no text watermark | 不希望出现的内容 |
--tile | 不带值 | 平铺模式 |
--exp | 0–100 | 实验性参数 |
这些参数可通过当前接口校验,不代表每种参数组合都经过效果验证,也不保证模型完全遵循。优先从画幅与简单提示词开始。不要使用 --repeat、--niji、--q、--sref 等未支持参数;不要在 1K 模型里加 --hd。
单参考图重绘
在同一个 generations 请求中增加 images 数组,最多提供一张无需登录、可公开访问的 HTTPS 图片。暂不接受本地文件、Data URL 或 file_id,也不要在 URL 中携带账户密码等凭据。
curl --max-time 1100 https://api.rootflowai.com/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ROOTFLOWAI_API_KEY}" \
-d '{
"model": "midjourney-v8-2-hd",
"prompt": "参考图中的人物外观与配色,重新绘制一幅动漫插画,背景为雪地松林 --ar 1:1 --iw 1",
"n": 4,
"images": [{"url": "https://example.com/reference.png"}],
"response_format": "url"
}'将示例 URL 替换成你自己的实际图片地址。Python SDK 可在 images.generate(...) 中使用 extra_body={"images": [{"url": reference_url}]} 传入扩展字段。
参考图不等于精确编辑
参考图会影响人物、风格和构图,但不能保证身份细节、原构图或局部内容完全不变,也可能没有完成要求的换色、换背景。实测中曾出现任务失败,以及成功出图但没有完成雪景替换的情况。
此功能应当用于参考重绘,不适合承诺“只改某处,其他像素保持不变”。当前不支持 /v1/images/edits 或 mask 蒙版编辑。
响应与图片下载
成功响应兼容 OpenAI Images API。下例展示部分返回两张的结构;常规四张结果会有四个数组元素:
{
"created": 1790685482,
"data": [
{"url": "https://cdn.rootflowai.com/images/example-1.png"},
{"url": "https://cdn.rootflowai.com/images/example-2.png"}
]
}每个 URL 对应一张独立图片,不是需要拆开的四宫格,也不需要 U1–U4 选图操作。按数组逐张下载,并建议自行持久化;不要把 CDN 地址视为永久存储承诺。
图片下载失败时,先重试下载已有 URL,不要重新调用生图接口。接口只提供 URL 输出,不支持通过 response_format=b64_json 获取 Base64。
计费说明
按实际返回图片数和所选模型的有效单张价格结算:
本次费用 = 实际返回图片数 × 当前会员档的单张价格例如,若当前档位单张价格为 0.08 额度,返回四张就是 0.32 额度,返回两张就是 0.16 额度。这是计算示例,当前报价请查看模型价格页,按 Midjourney 生图 分组及账户会员档核对。
不要把单张价格当成一组四张的价格,也不要对已经包含会员档倍率的价格重复乘倍率。明确失败、未交付图片的请求不产生正常成功图片扣费;客户端超时或断连则需要先核对服务端结果和消费日志,不能直接当作免费失败。
本站 $ 表示站内额度,并非真实美元。按当前充值规则,1 元人民币获得 1 站内额度;赠送等因素可能影响个人实际成本,详见计费说明。
限制与错误处理
| 情况 | 处理方式 |
|---|---|
| HTTP 400,参数错误 | 检查 n=4、模型名、提示词参数,以及是否误传 size、quality、b64 或多张参考图 |
| HTTP 401 / 403,鉴权或权限错误 | 检查 RootFlowAI Key、分组、权限和账户状态,不要公开完整 Key |
| HTTP 422,内容无法处理或生成失败 | 保存请求 ID;可能是输入问题或生成失败,不能仅凭此状态认定为内容违规 |
| HTTP 429,限流 | 查看错误信息,等待后处理;不要并行重发同一生成请求 |
| HTTP 5xx、超时、连接中断 | 先核对消费记录并联系支持查询已有任务,避免产生重复生成 |
| 图片 URL 下载失败 | 重试已有 URL 的下载,不重新生图 |
本次文生图实测耗时约 98–161 秒,参考图成功样本约 167 秒,排队时可能更久。示例将客户端超时设为 1100 秒,但你的网关、代理或网络仍可能提前断开,这不是完成时间保证。
不支持任意张数、4K 档位、流式响应、Base64 输出、多参考图、本地文件直传、mask、标准 edits 入口或 Idempotency-Key 重放。兼容 OpenAI Images 的请求和响应结构,不代表支持 OpenAI Images 的全部参数,也不是原生 /mj/* 接口。
联系支持时提供调用时间、模型、请求 ID、错误信息和已返回的图片 URL,并遮盖 API Key。不要把内部任务处理或客户端重试当作已具备端到端幂等保障。