申请流程
要使用 Midjourney Imagine API,首先到 Ace Data Cloud 控制台 获取您的 API Token,留作备用。
如果你尚未登录或注册,会自动跳转到登录页面邀请你注册和登录,完成后会自动返回当前页面。
一个 API Token 即可调用平台所有服务,无需为每个服务单独申请。 首次申请会赠送免费额度,可免费体验;额度不足时可在 控制台 充值通用余额。
📘 完整文档:Midjourney Imagine API →
基本使用
接下来就可以在界面上填写对应的内容,如图所示:
在第一次使用该接口时,我们至少需要填写两个内容,一个是 authorization,直接在下拉列表里面选择即可。另一个参数是 prompt, prompt 就是我们想生成的图片描述内容,建议用英文描述,画的图会更准确效果更好,这里我们用了示例内容 Lamborghini speeds inside a volcano,代表要画一个兰博基尼在火山飞驰。
同时您可以注意到右侧有对应的调用代码生成,您可以复制代码直接运行,也可以直接点击「Try」按钮进行测试。
主要请求参数:
prompt:图片描述词(支持自动翻译)。mode:生成模式,可选fast/relax/turbo,默认 fast。V8.2 支持三种模式;V8.1 仅支持fast和relax。version:模型版本,推荐最新的 V8.2。V8.2 支持quality和 HD;V8.1 不支持quality,使用 SD/HD 分辨率档。timeout:超时时间(秒),超时会直接返回。translation:是否自动翻译非英文 prompt。split_images:是否将 2x2 结果拆分返回单张。action/image_id:对历史图片继续操作时需指定。callback_url:异步回调地址。async:可选,设为true时接口立即返回task_id,无需提供callback_url,随后通过对应的任务查询接口轮询获取结果。

task_id,生成此图像任务的 ID,用于唯一标识此次图像生成任务。image_id,图片的唯一标识,在下次需要对图片进行变换操作时需要传此参数。image_url,缩略图的 URL,直接打开即可查看生成的效果。image_width:缩略图的像素宽度。image_height:缩略图的像素高度。raw_image_url:原图的 URL,和缩略图内容一样,但相比缩略图更加高清,加载速度会更慢一些。raw_image_width:原图的像素宽度。raw_image_height:原图的像素高度。actions,可以对生成的图片进行的进一步操作列表。这里一共列了 8 个,其中upscale代表放大,variation代表变换。所以upscale1代表的就是对左上角第一张图片进行放大操作,variation3就是代表根据左下角第三张图片进行变换操作。
image_url 或者 raw_image_url 所对应的链接,可以发现如图所示。
可以看到,这里生成了一张 2x2 的预览图。到现在为止,第一次 API 调用就完成了。
图像放大与变换
下面我们尝试针对当前生成的照片进行进一步的操作,比如我们觉得右上角第二张的图片还不错,但我们想进行一些变换微调,那么就可以进一步将action 填写为 variation2,同时将 image_id 传递即可:
这时候得到的结果如下:
image_url,新生成的图片如下所示:
可以看到,针对上一张右上角的图片,我们再次得到了四张类似的照片。
这时候我们可以挑选其中一张进行精细化地放大操作,比如选第四张,那就可以 action 传入 upscale4,通过 image_id 再次传入当前图像的 ID 即可。
注意:返回结果如下:upscale操作相比variation来说,Midjourney 的耗时会更短一些。
image_url 如图所示:
这样我们就成功得到了一张兰博基尼的照片。
同时注意到 actions 里面又包含了几个可进行的操作,介绍如下:
upscale_2x:对画面放大 2 倍,得到 2 倍高清图。upscale_4x:对画面放大 4 倍,得到 4 倍高清图。zoom_out_2x:对画面进行缩小两倍操作(周围区域填充)。zoom_out_1_5x:对画面进行缩小 1.5 倍操作(周围区域填充)。pan_left:对画面进行左偏移操作。pan_right:对画面进行右便宜操作。pan_up:对画面进行上偏移操作。pan_down:对画面进行下偏移操作。
图像改写(垫图)
该 API 也支持图像改写,俗称垫图,我们可以输入一张图片 URL 以及需要改写的描述文字,该 API 就可以返回改写后的图片。注意:输入的图片 URL 需要是一张纯图片,不能是一个网页里面展示一张图片,否则无法进行图像改写。建议使用图床来上传获取图片的 URL。例如,我们这里有一张公路落日的图片,公路旁边有一些树木和楼房,如图所示:
现在我们想在它的基础上改写成海滩旁边,同时放一辆汽车停在路边。我们就可以构造如下的 prompt:
—iw 2 来调整图片的权重。
我们可以将如上内容作为一个整体,传递给 prompt 字段,如图所示:
输出结果如下:
可以看到,在原来的图片整体风格和构图不变的前提下,整个场景变成了海滩旁边,同时公路上还出现了汽车,这就是 Prompt with Image。
图像融合
该 API 也支持图像融合,我们可以传入多张图片,以实现不同的图片融合效果。 比如说这里我们一共有两张图片,一张是一只玩具熊,另一张是一个电锯,分别如图所示:

prompt 参数,运行效果如下:
可以看到,我们就成功实现了图片融合。
注意:图片融合最多可以支持 5 个图片 URL 作为输入,也就是最多支持 5 张图片融合,输入格式同上。
局部变换
该 API 也支持图像的局部绘图功能,但只支持在上文内容下生成的图片,我们可以传入一张生成图片的的唯一ID,局部重绘的行为参数action 以及需要重绘区域的掩码mask,以实现在改掩码区域进行重绘。
比如说这里我们有一张生成关于猫的图片:



注意:上述 Python 代码描述了 mask 的生成过程,如果您要将其对接到您的产品中,请根据其原理编写对应语言的代码。通过以上代码,我们获得了需要重绘的掩码
mask ,下面我们还需要需要将参数 action 设置为 variation_region ,生成图片的ID image_id (获取该参数参考上文的内容),以及传入对应的掩码 mask ,其它参数信息如下:
action:对图片进行操作的行为,此处为variation_region,表示对图片进行局部重绘。prompt:对图像进行局部重绘的描述词(可选参数)。image_id:图片的唯一标识,方便对图像进行局部重绘。mask:图片对应的掩码区域的base64编码(图片是上面image_id指定的)。
prompt 是一个非必填参数,这里为了方便对比将掩码区域的 prompt 设置为 A cute cat ,具体的参数设置如下图所示:

代码示例
可以发现,在页面右侧已经自动生成了各种语言的代码,如图所示:
CURL
Python
响应示例
请求成功后,API 将返回换脸后端图片结果信息。例如:
可以看到,我们就成功实现了对生成的图片的自定义区域进行局部重绘。
异步回调
由于 Midjourney 生成图片需要等待一段时间,所以本 API 也默认设计为了长等待模式。但在部分场景下,长等待可能会带来一些额外的资源开销,因此本 API 也提供了异步 Webhook 回调的方式,当图片生成成功或失败时,其结果都会通过 HTTP 请求的方式发送到指定的 Webhook 回调 URL。回调 URL 接收到结果之后可以进行进一步的处理。 下面演示具体的调用流程。 首先,Webhook 回调是一个可以接收 HTTP 请求的服务,开发者应该替换为自己搭建的 HTTP 服务器的 URL。此处为了方便演示,使用一个公开的 Webhook 样例网站 https://webhook.site/,打开该网站即可得到一个 Webhook URL,如图所示:
将此 URL 复制下来,就可以作为 Webhook 来使用,此处的样例为 https://webhook.site/995d0a91-d737-40a7-a3b9-5baf68ed924c。
接下来,我们可以设置字段 callback_url 为上述 Webhook URL,同时填入 prompt,如图所示:
点击测试之后会立即得到一个 task_id 的响应,用于标识当前生成任务的 ID,如图所示:

其结果就是当前任务的结果,内容如下:
success 字段标识了该任务是否执行成功,如果执行成功,还会有同样的 actions, image_id, image_url 字段,和上文介绍的返回结果是一样的,另外还有 task_id 用于标识任务,以实现 Webhook 结果和最初 API 请求的关联。
如果图片生成失败,Webhook URL 则会收到类似如下内容:
success 字段会是 false,同时还会有 error.code 和 error.message 字段描述了任务错误的详情信息,Webhook 服务器根据对应的结果进行处理即可。
流式输出
Midjourney 官方在生成图片的时候是有进度的,在最开始是一张模糊的照片,然后经过几次迭代之后,图片逐渐变得清晰,最后得到完整的图片。 所以,一张图片的生成过程大约可以分为「发送命令」->「开始生图(多次迭代逐渐清晰)」->「生图完毕」的阶段。 在没开启流式输出的情况下,本 API 从发起请求到返回结果,实际上是从上述「发送命令」->「生图完毕」的全过程,中间生图的过程也全被包含在里面,由于 Midjourney 本身生成图片速度较慢,整个过程大约需要等待一分钟或更久。 所以为了更好的用户体验,本 API 支持流式输出,即当「开始生图」的时候就开始返回结果,每当绘制进度有变化,就会流式将结果输出,直至生图结束。 如果想流式返回响应,可以更改请求头里面的accept 参数,修改为 application/x-ndjson,不过调用代码需要有对应的更改才能支持流式响应。
Python 样例代码:
注意:当生成未完全完成时,actions 字段为空,表示无法对中间图像执行进一步处理操作。生成完成后,在生成过程中生成的 image_url 将被销毁。
此外,您可以通过指定 accept=application/x-ndjson 的请求头和 callback_url 的请求体,将流式结果与异步回调结合起来,然后 callback_url 可以接收到多个流式结果的 POST 请求。
