跳到主要内容
Midjourney Imagine API 申请与使用指南 | 极客日志
编程语言 Node.js AI
Midjourney Imagine API 申请与使用指南 综述由AI生成 Midjourney Imagine API 提供了文本生成高质量图像的能力,涵盖从凭证申请到基础调用、图像变换、垫图融合及局部重绘的全流程。了异步回调与流式输出配置,并提供 Python、Node.js 及 Curl 代码示例,帮助开发者快速集成 AI 绘图能力至业务系统中。
霸天 发布于 2026/4/9 更新于 2026/5/21 27 浏览Midjourney Imagine API 申请与使用指南
Midjourney 是业界知名的 AI 绘图工具,只需输入关键词即可在几分钟内生成精美图像。其强大的生成能力已广泛应用于多个行业场景。本文档将详细介绍 Midjourney Imagine API 的使用流程,帮助你通过文本轻松生成所需图像。
申请流程
要使用 Midjourney Imagine API,首先访问 API 文档页面 点击「Acquire」按钮获取请求凭证:
若未登录或注册,系统会自动跳转至登录页,完成登录后将返回当前页面。首次申请通常包含免费额度,可先试用该 API。
基本使用
在界面填写对应内容即可开始调用:
初次使用时至少需要填写两个参数:
authorization:在下拉列表中选择对应的授权方式。
prompt:图片描述词。建议使用英文描述,效果更准确。示例:Lamborghini speeds inside a volcano(兰博基尼在火山飞驰)。
右侧会提供对应的调用代码生成,你可以直接复制运行或点击「Try」测试。
主要请求参数说明:
prompt:图片描述词(支持自动翻译)。
mode:生成模式,可选 fast/relax/turbo,默认为 fast。
timeout:超时时间(秒),超时直接返回。
translation:是否自动翻译非英文 prompt。
split_images:是否将 2x2 结果拆分返回单张。
action/image_id:对历史图片继续操作时需指定。
callback_url:异步回调地址。
调用后返回的 JSON 结果如下:
{
"image_url" : "https://midjourney.cdn.acedata.cloud/attachments/..."
,
"image_width"
:
1024
,
"image_height"
:
1024
,
"image_id"
:
"1234197197067915365"
,
"raw_image_url"
:
"https://midjourney.cdn.acedata.cloud/attachments/..."
,
"raw_image_width"
:
2048
,
"raw_image_height"
:
2048
,
"progress"
:
100
,
"actions"
:
[
"upscale1"
,
"upscale2"
,
"upscale3"
,
"upscale4"
,
"reroll"
,
"variation1"
,
"variation2"
,
"variation3"
,
"variation4"
]
,
"task_id"
:
"1bae3bec-3ac4-4180-a148-74ee6cb68b98"
,
"success"
:
true
}
task_id:任务唯一标识。
image_id:图片唯一标识,后续变换操作需传入此参数。
image_url:缩略图 URL,可直接查看效果。
raw_image_url:原图 URL,更高清但加载稍慢。
actions:可执行的操作列表。upscale 代表放大,variation 代表变换。例如 upscale1 放大左上角第一张,variation3 基于左下角第三张变换。
打开 image_url 可查看生成的 2x2 预览图:
图像放大与变换 针对生成的照片进行进一步操作,比如觉得右上角第二张不错想微调,可将 action 设为 variation2,同时传入 image_id:
{
"image_url" : "https://midjourney.cdn.acedata.cloud/attachments/..." ,
"image_id" : "1234201336543969401" ,
"actions" : [ "upscale1" , ...] ,
"task_id" : "f4961620-1104-409f-9dc1-ba3ed15c2f4d" ,
"success" : true
}
此时可挑选其中一张精细化放大,比如选第四张,传入 action: upscale4 和当前 image_id:
注意:upscale 操作相比 variation 耗时通常更短。
返回结果中 actions 会更新为新的可用操作:
upscale_2x / upscale_4x:放大 2 倍或 4 倍高清图。
zoom_out_2x / zoom_out_1_5x:缩小画面(周围区域填充)。
pan_left / pan_right / pan_up / pan_down:画面偏移操作。
图像改写(垫图) API 支持图像改写(Image Prompt),输入图片 URL 及描述文字即可返回改写后的图片。
注意:输入的图片 URL 必须是纯图片链接,不能是网页展示图。建议使用图床获取 URL。
例如有一张公路落日的图片,想在基础上改写成海滩旁停一辆汽车:
构造 prompt 时,在开头加上 HTTPS 图片链接,空格后跟文字描述,可使用高级参数如 --iw 2 调整权重:
{
"image_url" : "https://midjourney.cdn.acedata.cloud/attachments/..." ,
"image_id" : "1234539663515975690" ,
"actions" : [ ...] ,
"task_id" : "24a79e8b-a79d-471a-aef7-089dc0627ee8" ,
"success" : true
}
场景变为海滩,且保留了原有风格构图,这就是 Prompt with Image 的效果。
图像融合 API 支持多张图片融合。例如将玩具熊和电锯融合成熊拿电锯的画面:
构造 prompt,将多张图片 URL 放在开头,空格分隔,最后加文字描述:
https://i-blog.ZEEKLOGimg.cn/img_convert/c97448ef51e6b36bd026d72092abe548.png https://i-blog.ZEEKLOGimg.cn/img_convert/1d81aa82612a1f16e8f3ad41354af74f.png The bear is holding the chainsaw --iw2
注意:此处链接已失效,实际使用时请替换为有效的公开图片 URL。
{
"image_url" : "https://midjourney.cdn.acedata.cloud/attachments/..." ,
"image_id" : "1234547236830973972" ,
"actions" : [ ...] ,
"task_id" : "891f2645-ee15-4c7b-ac24-d98163c8e57e" ,
"success" : true
}
注意:图片融合最多支持 5 个图片 URL 作为输入。
局部变换 API 支持局部重绘(Inpainting)。需传入生成图片的 image_id、行为参数 action 以及掩码 mask(Base64 编码)。
首先需要获取区域的掩码 mask。以下是 Python 获取掩码的工具代码示例:
import sys
import os
from PySide6.QtWidgets import *
from PySide6.QtGui import QPainter, QMouseEvent, QPen, QColor, QImage
from PySide6.QtCore import Qt, QPoint
class DrawingWidget (QWidget ):
def __init__ (self, imagePath ):
super ().__init__()
self .setAttribute(Qt.WA_StaticContents)
self .background_image = QImage(imagePath)
imageSize = self .background_image.size() * 0.8
self .setFixedSize(imageSize)
self .foreground_image = QImage(self .size(), QImage.Format_ARGB32)
self .foreground_image.fill(Qt.transparent)
self .drawing = False
self .lastPoint = QPoint()
self .pen_color = QColor(255 , 255 , 255 , 255 )
self .pen_size = 50
def set_pen_size (self, size ):
self .pen_size = size
def mousePressEvent (self, event: QMouseEvent ):
if event.button() == Qt.LeftButton:
self .drawing = True
self .lastPoint = event.pos()
def mouseMoveEvent (self, event: QMouseEvent ):
if event.buttons() & Qt.LeftButton and self .drawing:
painter = QPainter(self .foreground_image)
painter.setRenderHint(QPainter.Antialiasing, True )
pen = QPen(self .pen_color, self .pen_size, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)
painter.setPen(pen)
painter.drawLine(self .lastPoint, event.pos())
self .lastPoint = event.pos()
self .update()
def mouseReleaseEvent (self, event: QMouseEvent ):
if event.button() == Qt.LeftButton and self .drawing:
self .drawing = False
def paintEvent (self, event ):
canvasPainter = QPainter(self )
canvasPainter.drawImage(self .rect(), self .background_image, self .background_image.rect())
canvasPainter.drawImage(self .rect(), self .foreground_image, self .foreground_image.rect())
def save_image (self, path ):
self .foreground_image.save(path)
class MainWindow (QDialog ):
def __init__ (self, imagePath ):
super ().__init__()
self .setWindowTitle("mask tool" )
self .drawing_widget = DrawingWidget(imagePath)
self .currentPath = os.getcwd().replace("\\" , "/" )
self .tempPath = self .currentPath + "/temp.jpg"
self .projectPath = ""
self .setDone = False
def init_ui (self ):
layout = QVBoxLayout()
layout.addWidget(self .drawing_widget)
controls_layout = QHBoxLayout()
size_label = QLabel("pen size:" )
controls_layout.addWidget(size_label)
self .size_slider = QSlider(Qt.Horizontal)
self .size_slider.setMinimum(100 )
self .size_slider.setMaximum(400 )
self .size_slider.setValue(400 )
self .size_slider.valueChanged.connect(self .update_pen_size)
controls_layout.addWidget(self .size_slider)
self .lineEdit_addPromp = QLineEdit()
layout.addWidget(self .lineEdit_addPromp)
save_button = QPushButton("Start partial redrawing" )
save_button.clicked.connect(self .save_image)
controls_layout.addWidget(save_button)
dont_button = QPushButton("Cancel partial redraw" )
dont_button.clicked.connect(self .dont_image)
controls_layout.addWidget(dont_button)
layout.addLayout(controls_layout)
self .setLayout(layout)
def update_pen_size (self ):
size = self .size_slider.value()
self .drawing_widget.set_pen_size(size)
def save_image (self ):
tempImage = self .currentPath + "/temp.jpg"
self .drawing_widget.save_image(self .tempPath)
self .prompt = self .lineEdit_addPromp.text()
self .setDone = True
self .close()
def dont_image (self ):
self .setDone = False
self .close()
def closeEvent (self, event ):
if self .setDone:
pass
else :
self .setDone = False
event.accept()
if __name__ == '__main__' :
imagePath = "test.png"
app = QApplication(sys.argv)
mainWindow = MainWindow(imagePath)
mainWindow.init_ui()
mainWindow.exec ()
import cv2
import base64
image_path = 'temp.jpg'
gray_image = cv2.imread(image_path)
_, buffer = cv2.imencode('.jpg' , gray_image)
base64_encoded = base64.b64encode(buffer).decode('utf-8' )
with open ('grayscale_image_base64.txt' , 'w' ) as f:
f.write(base64_encoded)
print ("success!" )
获得掩码后,设置 action 为 variation_region,传入 image_id 和 mask:
action:variation_region(局部重绘)。
prompt:重绘描述词(可选)。
image_id:图片唯一标识。
mask:掩码区域的 Base64 编码。
代码示例
CURL curl -X POST 'https://api.acedata.cloud/midjourney/imagine' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{ "prompt": "A cute cat ", "action": "variation_region", "image_id": "1265875488702726144", "mask": "base64_encoded_mask_data" }'
Python import requests
url = "https://api.acedata.cloud/midjourney/imagine"
headers = {
"accept" : "application/json" ,
"authorization" : "Bearer {token}" ,
"content-type" : "application/json"
}
payload = {
"prompt" : "A cute cat " ,
"action" : "variation_region" ,
"image_id" : "1265875488702726144" ,
"mask" : "base64_encoded_mask_data"
}
response = requests.post(url, json=payload, headers=headers)
print (response.text)
响应示例 {
"image_url" : "https://platform.cdn.acedata.cloud/midjourney/6c9450d8-1c22-4f85-a527-e7a7bfb4a61b.png?imageMogr2/thumbnail/!50p" ,
"image_width" : 1024 ,
"image_height" : 1024 ,
"actions" : [ "upscale1" , "upscale2" , "upscale3" , "upscale4" , "reroll" , "variation1" , "variation2" , "variation3" , "variation4" ] ,
"raw_image_url" : "https://platform.cdn.acedata.cloud/midjourney/6c9450d8-1c22-4f85-a527-e7a7bfb4a61b.png" ,
"raw_image_width" : 2048 ,
"raw_image_height" : 2048 ,
"progress" : 100 ,
"image_id" : "1265876571323891712" ,
"task_id" : "6c9450d8-1c22-4f85-a527-e7a7bfb4a61b" ,
"success" : true
}
异步回调 由于生成图片需要等待,API 默认设计为长等待模式。部分场景下可使用异步 Webhook 回调,当图片生成成功或失败时,HTTP 请求会发送到指定的回调 URL。
准备一个接收 HTTP 请求的服务。演示中使用 webhook.site 获取临时 URL。
将 callback_url 设置为该 URL,填入 prompt。
点击测试,立即收到 task_id 响应。
等待生成结束,Webhook URL 会收到包含结果的 HTTP 请求。
{
"success" : true ,
"task_id" : "f6e39eaf-652a-4bf5-a15c-79d8b143b80a" ,
"image_url" : "https://midjourney.cdn.acedata.cloud/attachments/..." ,
"image_id" : "1234551030549839932" ,
"actions" : [ ...] ,
"progress" : 100
}
若失败,success 为 false,并包含 error.code 和 error.message 描述错误详情。
流式输出 Midjourney 生成过程包含从模糊到清晰的迭代。默认模式下,API 等待全过程结束后返回结果,耗时约一分钟。
为提升体验,API 支持流式输出。开启后,一旦开始生图即返回结果,进度变化时持续输出,直至结束。
启用方法:修改请求头 accept 为 application/x-ndjson,并确保客户端支持流式响应。
import requests
url = 'https://api.acedata.cloud/midjourney/imagine'
headers = {
'content-type' : 'application/json' ,
'accept' : 'application/x-ndjson' ,
'authorization' : 'Bearer {token}'
}
body = {"prompt" : "a beautiful cat --v 6" }
r = requests.post(url, headers=headers, json=body, stream=True )
for line in r.iter_lines():
print (line.decode())
const axios = require ("axios" );
const url = "https://api.acedata.cloud/midjourney/imagine" ;
const headers = {
"content-type" : "application/json" ,
"accept" : "application/x-ndjson" ,
"authorization" : "Bearer {token}"
};
const body = {
prompt : "a beautiful cat --v 6" ,
action : "generate"
};
axios.post (url, body, { headers : headers, responseType : "stream" })
.then ((response ) => {
console .log (response.status );
response.data .on ("data" , (chunk ) => {
console .log (chunk.toString ());
});
})
.catch ((error ) => {
console .error (error);
});
流式结果中包含 progress 字段(0-100),可用于前端显示进度。
注意:生成未完成时 actions 为空,无法处理中间图像。完成后生成的中间 image_url 将被销毁。可通过指定 accept=application/x-ndjson 和 callback_url 结合流式结果与异步回调。
相关免费在线工具 RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online