MetaChat集成Midjourney API:国内AI生图新体验

105

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-Typeapplication/json。同时,务必仔细检查请求参数的填写和响应参数的解析,以确保 API 调用的正确性。

异常处理机制

MetaChat 开放平台 API 采用分层异常处理机制,以便开发者能够快速定位和解决问题。异常主要分为以下两类:

  1. 服务级或应用级异常:这类异常使用 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 状态码进行处理即可。

  2. API 级异常:这类异常的 HTTP 状态码为 200,表示请求已成功接收,但 API 调用本身失败。具体的错误信息会在返回参数中描述。返回参数包含以下字段:

    • status:API 调用结果,string 类型。Success 表示成功,Fail 表示失败。
    • message:描述信息,string 类型,通常用于提供 Fail 时的错误信息。
    • data:API 返回数据,object 结构。具体定义参见后文 API 描述。当 statusFail 时,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:33:23:44:316:99:16 等。选择合适的图片比例可以更好地适应不同的显示设备和应用场景。

      • stylize (number):风格化程度,取值 1 - 1000(默认 100)。较高的风格化程度会使图像更具艺术感,但可能会牺牲一些细节。

      • quality (number):画质,取值 0.25(普通),0.5(标清),1(高清,默认)。更高的画质会带来更清晰的图像,但也会增加生成时间和资源消耗。

      • chaos (number):混乱程度,取值 0 - 1000(默认 0)。较高的混乱程度会使图像更具随机性和实验性。

      • style (string):绘图风格,取值 rawraw 风格更注重原始的细节和纹理,适合生成 более реалистичные 的图像。

      • 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/pngimage/jpgimage/jpegimage/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/pngimage/jpgimage/jpegimage/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/pngimage/jpgimage/jpegimage/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 时间戳(秒)。