MetaChat 近期发布了集成 Midjourney API 的更新版本,这标志着其在人工智能内容生成领域迈出了重要一步。通过这一集成,用户可以直接在 MetaChat 平台上利用 Midjourney 的强大 AI 图像生成能力,包括生成图像、放大图像以及进行精细调整。值得一提的是,经过笔者的初步测试,国内用户可以顺利接入并使用这些功能,无需额外的网络配置。
接入过程相对简单直观。首先,用户需要在 MetaChat 官方网站(https://metachat.fun)注册账号并成为会员。注册完成后,进入账户设置页面,找到充值入口并完成充值。充值成功后,系统会自动生成一个 APPID 和一个 API Key,这两个密钥是调用 Midjourney API 的关键凭证。用户可以参考 MetaChat 提供的详细接口文档,快速上手并开始使用 Midjourney 的各项功能。
MetaChat 开放平台 API 旨在为合作伙伴提供全面的 AIGC(人工智能生成内容)模型能力,包括 Midjourney 的核心功能以及一系列扩展特性。这些 API 允许合作伙伴将 MetaChat 的 AI 能力集成到他们自己的产品和服务中,进行二次开发,从而实现更灵活和定制化的应用场景。本白皮书将详细介绍 MetaChat 开放平台的接入方法、各类 API 的调用方式以及使用注意事项,以供合作伙伴的服务端开发人员参考。
接入鉴权机制
MetaChat 开放平台采用服务端 HTTPS RESTful API 接口,其基础 URL 和 API 前缀如下:
https://api.mmchat.xyz/open/v1
为了确保 API 调用的安全性,所有请求都需要进行鉴权。MetaChat 会为每个合作伙伴分配一个唯一的应用 ID(App ID)和鉴权密钥(API Key)。调用 API 时,需要在 HTTP Header 中包含以下字段:
X-App-ID
:用于标识合作伙伴的应用 ID。Authorization
:采用标准的 Bearer 认证方式,用于标识合作伙伴的鉴权密钥。
以下是一个使用 curl 命令行工具调用 API 的示例:
curl https://api.mmchat.xyz/open/v1/models \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-H "X-App-ID: $APP_ID"
请注意,API 参数的格式为 JSON,因此需要在 HTTP Header 中设置 Content-Type
为 application/json
。同时,务必仔细检查请求参数的填写和响应参数的解析,以确保 API 调用的正确性。
异常处理机制
MetaChat 开放平台 API 采用分层异常处理机制,以便开发者能够快速定位和解决问题。异常主要分为以下两类:
服务级或应用级异常:这类异常使用 HTTP 标准的 400/500 系列状态码返回,表示请求存在问题或服务器发生错误。常见的状态码包括:
401 - authentication_error
:鉴权失败,通常是由于 App ID 或 API Key 未填写或填写错误导致的。403 - permission_error
:授权失败,通常是由于 App ID 或 API Key 已过期或已停用导致的。404 - not_found_error
:请求资源不存在,通常是由于 API 路径填写错误导致的。429 - rate_limit_error
:API 调用频率超过限制,触发了限流机制。500 - internal_error
:MetaChat 开放平台内部发生错误。
对于这类异常,无需解析返回参数,直接根据 HTTP 状态码进行处理即可。
API 级异常:这类异常的 HTTP 状态码为 200,表示请求已成功接收,但 API 调用本身失败。具体的错误信息会在返回参数中描述。返回参数包含以下字段:
status
:API 调用结果,string 类型。Success
表示成功,Fail
表示失败。message
:描述信息,string 类型,通常用于提供Fail
时的错误信息。data
:API 返回数据,object 结构。具体定义参见后文 API 描述。当status
为Fail
时,data
为空。
以下是一个 API 级异常的示例:
{ "status": "Fail", "message": "Midjourney 绘图描述中存在错误的参数,请修改后重新提交。", "data": null }
由于图片生成需要较长的 AI 服务时间,因此,图片生成和变换类 API 只负责创建和提交各类绘图任务。任务的执行进度和最终生成的图片结果,需要调用后文描述的「查询结果」API 获取。
Midjourney API 详解
MetaChat 提供的 Midjourney API 涵盖了 Midjourney 官方支持的各类图片生成、变换、描述和融合能力。这些 API 主要用于灵活多变的单一图片生成场景。
重要提示:由于图片生成需要较长的 AI 服务时间,各图片生成和变换类 API 只负责创建和提交各类绘图任务。任务执行进度和最终生成的图片结果,需要调用后文描述的「查询结果」API 获取。
1. 图片生成 (imagine)
POST /midjourney/imagine
该 API 用于根据提示词、参数和参考图生成一张四宫格图片。其核心优势在于能够将用户的创意转化为具体的视觉图像,并提供多种参数进行精细调整。
请求参数:
prompt
(string, 必填):提示词,支持中英文。提示词末尾可携带自定义参数(例如--style raw --ar 1:1 --v 6
等),自定义参数会覆盖params
中对应的参数。未提供自定义参数时,以params
参数为准。Prompt 的质量直接影响到生成图像的质量,因此建议用户在编写 Prompt 时尽可能详细和具体,可以使用一些修饰词来增强图像的效果,例如“超 реалистичный”、“电影感”等。model
(string):模型版本,取值mj-v6
(Midjourney V6,默认值)、mj-niji-v6
(Niji 6)。不同的模型版本在风格和细节上有所差异,用户可以根据自己的需求选择合适的模型。params
(object):绘图参数,用于调整图像的各种属性。aspect
(string):图片比例,取值1:1
(默认),2:3
,3:2
,3:4
,4:3
,16:9
,9:16
等。选择合适的图片比例可以更好地适应不同的显示设备和应用场景。stylize
(number):风格化程度,取值 1 - 1000(默认 100)。较高的风格化程度会使图像更具艺术感,但可能会牺牲一些细节。quality
(number):画质,取值 0.25(普通),0.5(标清),1(高清,默认)。更高的画质会带来更清晰的图像,但也会增加生成时间和资源消耗。chaos
(number):混乱程度,取值 0 - 1000(默认 0)。较高的混乱程度会使图像更具随机性和实验性。style
(string):绘图风格,取值raw
。raw
风格更注重原始的细节和纹理,适合生成 более реалистичные 的图像。seed
(number):随机种子,取值 0 - 4294967295 间的整数。使用相同的随机种子可以生成相似的图像,这在需要保持图像一致性的场景中非常有用。no
(string 列表):排除关键词列表,支持中英文。通过排除关键词,可以避免生成不希望出现的元素。iw
(number):参考图权重,当参考图用于 Image Prompt 时有效,取值 0 - 3(默认 1)。较高的权重会使生成图像更接近参考图。
images
(array):参考图参数,可包含 1 - 3 张参考图(JPG/PNG/WebP 格式),每张参考图定义为 object 类型。url
(string, 必填):图片完整 URL,需确保访问该 URL 能正常下载图片文件。type
(string, 必填):图片 MIME 类型,取值image/png
,image/jpg
,image/jpeg
,image/webp
。size
(number):图片文件大小(bytes)。w
(number):图片宽度。h
(number):图片高度。image_prompt
(boolean):参考图是否用于 Image Prompt。sref
(boolean):参考图是否用于风格一致性 sref。cref
(boolean):参考图是否用于角色一致性 cref。sw
(number):参考图用于风格一致性 sref 时的权重,取值 0 - 1000(默认 100)。cw
(number):参考图用于角色一致性 cref 时的权重,取值 0 - 100(默认 100)。
color
(string):彩通 TPG 色号,选填,如11-0105TPG
。色号定义详见 https://www.qtccolor.com/secaiku/dir/6 ,TPG 色号共计 2625 种。
返回数据:
id
(string):成功创建的绘图任务 ID,可用于后续各类图片变换和绘图结果查询。prompt
(string):最终生效的绘图提示词,包括绘图描述、完整参数和参考图片等信息。model
(string):最终生效的模型版本,同请求字段定义。
2. 图片拆分 (separate)
POST /midjourney/separate
该 API 用于从生成的四宫格图片中拆分放大出指定的一张。这允许用户专注于他们最喜欢的图像,并对其进行进一步的编辑和优化。
请求参数:
id
(string, 必填):绘图任务 ID,该任务由「图片生成」API 创建并生成完毕。index
(number, 必填):需拆分的图片索引,取值 1(左上 U1)、2(右上 U2)、3(左下 U3)、4(右下 U4)。
返回数据:
id
(string):成功创建的绘图任务 ID,可用于后续各类图片变换和绘图结果查询。
3. 图片微调(四宫格)(variation)
POST /midjourney/variation
该 API 用于以四宫格图片中的一张图片为参考,微调变换后生成新的四宫格图片。这为用户提供了一种快速迭代和探索不同创意方向的方式。
请求参数:
id
(string, 必填):绘图任务 ID,该任务由「图片生成」API 创建并生成完毕。index
(number):微调变化需参考的图片索引,取值 1(左上 V1)、2(右上 V2)、3(左下 V3)、4(右下 V4)。
返回数据:
id
(string):成功创建的绘图任务 ID,可用于后续各类图片变换和绘图结果查询。
4. 图片重绘 (reroll)
POST /midjourney/reroll
该 API 用于针对已生成的四宫格图片进行整体重绘(保留原提示词和参数不变),生成新的四宫格图片。这可以在保留原始创意的基础上,探索不同的视觉风格和细节。
请求参数:
id
(string, 必填):绘图任务 ID,该任务由「图片生成」API 创建并生成完毕。
返回数据:
id
(string):成功创建的绘图任务 ID,可用于后续各类图片变换和绘图结果查询。
5. 图片高清 (upscale)
POST /midjourney/upscale
该 API 用于针对拆分后的单张图片进行高清放大。这可以提高图像的清晰度和细节,使其更适合用于印刷和高分辨率显示。
请求参数:
id
(string, 必填):绘图任务 ID,该任务由「图片拆分」API 创建并生成完毕。type
(string):图片放大类型,取值subtle
(2 倍原图高清,保留原图细节,默认值,mj-v6 和 niji-6 适用)、creative
(2 倍增强高清,添加新细节,mj-v6 和 niji-6 适用)、2x
(2 倍原图高清,mj-v5.2 和 niji-v5 适用)、4x
(4 倍原图高清,mj-v5.2 和 niji-v5 适用)。
返回数据:
id
(string):成功创建的绘图任务 ID,可用于后续各类图片变换和绘图结果查询。
6. 图片微调(单图)(vary)
POST /midjourney/vary
该 API 用于针对拆分或高清放大后的单张图片进行微调变化。这允许用户对图像进行更精细的调整,以满足特定的需求。
请求参数:
id
(string, 必填):绘图任务 ID,该任务由「图片拆分」或「图片高清」API 创建并生成完毕。type
(string):图片变化类型,取值subtle
(轻微变化)、strong
(强烈变化)。
返回数据:
id
(string):成功创建的绘图任务 ID,可用于后续各类图片变换和绘图结果查询。
7. 图片变焦 (zoomout)
POST /midjourney/zoomout
该 API 用于针对拆分后的单张图片进行画面变焦(1.5 倍和 2 倍)。这可以改变图像的视角,并创造出不同的视觉效果。
请求参数:
id
(string, 必填):绘图任务 ID,该任务由「图片拆分」API 创建并生成完毕。type
(string):画面变焦倍数,取值1.5x
(1.5 倍)、2x
(2倍)。
返回数据:
id
(string):成功创建的绘图任务 ID,可用于后续各类图片变换和绘图结果查询。
8. 图片平移 (pan)
POST /midjourney/pan
该 API 用于针对拆分后的单张图片进行画面平移扩展。这可以扩展图像的视野,并展示更多的场景细节。
请求参数:
id
(string, 必填):绘图任务 ID,该任务由「图片拆分」API 创建并生成完毕。type
(string):画面平移方向,取值left
(向左)、right
(向右)、up
(向上)、down
(向下)。
返回数据:
id
(string):成功创建的绘图任务 ID,可用于后续各类图片变换和绘图结果查询。
9. 图片描述 (describe)
POST /midjourney/describe
该 API 提供一张图片 (JPG/PNG/WebP),模型生成 4 个可能的提示词。生成的提示词有启发性和暗示性,通常用于探索新词汇和美学效果,不能用于精确重现已上传的图片。
请求参数:
image
(object, 必填):url
(string, 必填):图片完整 URL,需确保访问该 URL 能正常下载图片文件。type
(string, 必填):图片 MIME 类型,取值image/png
,image/jpg
,image/jpeg
,image/webp
。size
(number):图片文件大小(bytes)。w
(number):图片宽度。h
(number):图片高度。
返回数据:
id
(string):成功创建的图片描绘任务 ID,可用于后续结果查询。
10. 图片融合 (blend)
POST /midjourney/blend
该 API 提供 2 - 5 张图片 (JPG/PNG/WebP),模型根据每张图片的概念和美学,合并生成 1 张新的四宫格图片。这允许用户将不同的图像元素融合在一起,创造出独特的视觉效果。
请求参数:
images
(array, 必填):参考图参数,可包含 2 - 5 张原图,每张原图定义为 object 类型。url
(string, 必填):图片完整 URL,需确保访问该 URL 能正常下载图片文件。type
(string, 必填):图片 MIME 类型,取值image/png
,image/jpg
,image/jpeg
,image/webp
。size
(number):图片文件大小(bytes)。w
(number):图片宽度。h
(number):图片高度。
dimension
(string):融合生成的图片比例,取值square
(1:1 正方形宽高比,默认值),landscape
(3:2 横向宽高比),portrait
(2:3 纵向宽高比)。
返回数据:
id
(string):成功创建的绘图任务 ID,可用于后续各类图片变换和绘图结果查询。
11. 查询结果
GET /midjourney/result/{id}
该 API 用于查询绘图任务的执行进度和结果。调用方可定时轮询(考虑绘图速度,建议周期不低于 5 秒)。通过该 API,用户可以实时了解任务的状态,并在任务完成后获取生成的图片。
请求参数:
id
(string):各类图片生成或变换 API 中成功创建的绘图任务 ID。
返回数据:
id
(string):绘图任务 ID。status
(string):任务状态,取值submitted
(排队中)、in_progress
(执行中,具体进度参见progress
)、failure
(执行失败,具体原因参见fail_reason
)、success
(执行成功)。progress
(number):任务进度(百分比),0 - 100。fail_reason
(string):任务失败原因,任务执行失败后返回。image_url
(string):最终生成的图片 URL,任务执行成功后返回。image_url_mirror
(string):最终生成的图片 URL(七牛镜像地址),任务执行成功后返回。image_description
(string):图片描绘任务最终生成的提示词,任务执行成功后返回。total_points
(number):任务消耗的元点,任务执行成功后返回。prompt
(string):原始提示词。revised_prompt
(string):最终生效的绘图提示词,包括绘图描述、绘图参数、参考图和模型版本等信息。model
(string):最终生效的模型版本,详见「图片生成」API 描述。params
(object):最终生效的绘图参数,详见「图片生成」API 描述。images
(array):原始参考图列表,详见「图片生成」API 描述。submitted_at
(number):任务提交时间,UNIX 时间戳(秒)。started_at
(number):任务启动时间,UNIX 时间戳(秒)。finished_at
(number):任务结束时间,UNIX 时间戳(秒)。