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-21KPOST /v1/images/generations
midjourney-v8-2-hd2K同上,通过模型名选择高清档位

两个模型使用相同的请求格式。选择 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×10242048×2048
--ar 16:9横幅、场景、壁纸1456×8162944×1648
--ar 3:4人物竖图、海报928×12321904×2544

不传 --ar 时默认为方图。表格是实测样本,不是固定像素承诺;1K / 2K 表示分辨率档位,请以下载文件的真实像素为准,也不要仅凭文件尺寸判断是否为原生采样。

画幅使用正整数比例。当前 1K 的长短边比例不得超过 14:1,2K 不得超过 4:1;极端画幅不代表本页已逐项验证。

其他可用参数

参数范围 / 格式用途
--s / --stylize0–1000风格化程度
--c / --chaos0–100变化程度
--weird / --w0–3000非常规风格控制
--iw0–3,仅在传入参考图时使用参考图权重
--seed0–4294967295 的整数随机种子;相同种子不保证完全复现
--no后接描述,例如 --no text watermark不希望出现的内容
--tile不带值平铺模式
--exp0–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。不要把内部任务处理或客户端重试当作已具备端到端幂等保障。