GLM-5.2 现已上线了解更多
如何通过 EvoLink 使用 Midjourney V8.1 API:代码示例、轮询与 Callback
guide

如何通过 EvoLink 使用 Midjourney V8.1 API:代码示例、轮询与 Callback

EvoLink Team
EvoLink Team
Product Team
2026年6月21日
22 分钟阅读

如果你想从代码里调用 Midjourney V8.1,真正的问题不只是“调用哪个接口”,而是:

我如何先测试 Midjourney V8.1,再提交图像任务、追踪完成状态、控制成本,并且保留后续切换其他图像模型的能力?

在 EvoLink 上,Midjourney V8.1 是统一图像 API 工作流里的一个模型路由。你可以先在 Midjourney V8.1 Playground 测试 prompt,再通过 POST https://api.evolink.ai/v1/images/generations 提交 model: "mj-v8.1" 的任务,之后用 GET https://api.evolink.ai/v1/tasks/{task_id} 轮询状态,或者在生产环境里配置 callback_url 接收完成通知。
这篇文章聚焦开发者接入路径。精确字段、当前可用参数和最新价格,以 Midjourney V8.1 API 页面 为准。

快速答案

通过 EvoLink 调用 Midjourney V8.1 时,核心请求如下:

curl --request POST \
  --url https://api.evolink.ai/v1/images/generations \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "mj-v8.1",
    "prompt": "a premium product photo of a matte black espresso machine on a marble counter --ar 16:9 --s 250",
    "quality": "standard",
    "model_params": {
      "speed": "fast"
    },
    "callback_url": "https://your-domain.com/webhooks/evolink-image-task"
  }'
创建接口会返回一个异步任务对象。保存返回的 id,再查询:
curl --request GET \
  --url https://api.evolink.ai/v1/tasks/<task_id> \
  --header 'Authorization: Bearer YOUR_API_KEY'
当任务状态变为 completed 后,读取 results 数组并及时保存图片 URL。Midjourney V8.1 在 fast 模式下每次生成最多返回 4 张图;draft 模式会返回最多 24 张轻量级 0.5K 草图。内容审核可能过滤部分输出,EvoLink 这里按请求计费,不按返回图片数量计费。

这篇指南解决什么问题

这不是一篇泛泛的 Midjourney prompt 教程,而是一篇面向 EvoLink 用户的生产接入指南。

用户任务本文回答什么EvoLink 的额外价值
先试用 V8.1如何用 Playground 先验证 prompt写代码前先在浏览器中测试
提交任务用哪个 endpoint、model name 和 payload一把 EvoLink API Key,一个图像生成接口
追踪完成task_id、轮询和状态流怎么处理图像/视频路由统一异步任务模式
上生产怎么使用 callback_url、重试和结果保存callback、状态查询和任务可见性
控制成本speed 与 quality 如何影响计费产品页透明展示按次价格
选择模型V8.1 何时优于 GPT Image 2、Nano Banana Pro 或 V7不重写集成即可做模型路由

开始之前

你需要准备四件事:

  1. 一个 EvoLink 账户。
  2. 一个 EvoLink API Key。
  3. 一个能安全保存 API Key 的后端环境。
  4. 一个结果存储方案,因为生成图片链接可能有时效限制。
不要把 EvoLink API Key 放到前端 JavaScript 里。推荐做法是:前端调用你自己的后端接口,你的后端再调用 EvoLink,保存返回的 task_id,最后只把安全的任务状态返回给前端。
先打开 Midjourney V8.1 API 页面,不要一开始就写代码。Playground 可以帮你先确认三件事:
  • prompt 风格是否能得到你想要的视觉方向;
  • 是否需要图生图、Style Reference 或 Omni Reference;
  • 当前任务更适合 draftfaststandard 还是 hd

这也是 EvoLink 产品价值所在:开发者不是只要一个 endpoint,而是要一条可落地的图像工作流。先在 Playground 中跑通,可以减少后续工程调试成本,也能让你的 API 示例更接近真实业务场景。

EvoLink API 使用 Bearer Token:

Authorization: Bearer YOUR_API_KEY

生产环境中,推荐的调用链是:

用户在你的产品中发起生成
  -> 你的后端 API route
  -> EvoLink 图像生成接口
  -> 保存 task_id
  -> 轮询或接收 callback
  -> 保存结果到你自己的存储
  -> 在产品中展示最终图片

这样可以保护 API Key,也能让你的产品更好地控制任务状态、失败重试和用户权限。

第 3 步:选择 Midjourney V8.1 路由

新建图像生成任务使用:

POST https://api.evolink.ai/v1/images/generations

模型名称使用:

{
  "model": "mj-v8.1"
}
在 EvoLink 上,Midjourney V8.1 的主生成路由同时支持文生图和图生图。图生图时,把图片 URL 放在 prompt 开头,然后跟上文本描述和支持的 prompt 参数。

第 4 步:发送文生图请求

适合商品图、商业视觉、概念图、情绪板、社媒图和通用创意生成。

curl --request POST \
  --url https://api.evolink.ai/v1/images/generations \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "mj-v8.1",
    "prompt": "a cinematic product photo of a titanium travel mug on wet black stone, soft studio reflection, premium outdoor brand style --ar 16:9 --s 250 --chaos 8",
    "quality": "standard",
    "model_params": {
      "speed": "fast"
    }
  }'

任务创建响应示例:

{
  "created": 1757156493,
  "id": "task-unified-1757156493-xkd8mv2r",
  "model": "mj-v8.1",
  "object": "image.generation.task",
  "progress": 0,
  "status": "pending",
  "task_info": {
    "can_cancel": true,
    "estimated_time": 120
  },
  "type": "image",
  "usage": {
    "billing_rule": "per_call",
    "credits_reserved": 6.0,
    "user_group": "default"
  }
}
保存响应里的 id。它就是后续轮询、callback 对账和错误排查时要用的 task_id

第 5 步:添加图生图或参考图

Midjourney V8.1 使用 Midjourney 风格的 prompt 语法处理参考图。图生图时,把图片 URL 放在 prompt 最前面。支持的输入格式包括 PNG、GIF、WebP、JPG 和 JPEG。单张图片 URL 但不带文本描述是无效请求;可以使用一张图片加文本、多张图片,或多张图片加文本。

curl --request POST \
  --url https://api.evolink.ai/v1/images/generations \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "mj-v8.1",
    "prompt": "https://your-cdn.example.com/reference-sofa.jpg a luxury living room campaign image, keep the sofa shape and fabric feel, warm morning light --ar 4:3 --iw 1.2 --s 200",
    "quality": "standard",
    "model_params": {
      "speed": "fast"
    }
  }'

当你希望结果跟随某个已有产品、场景、角色或视觉方向时,就适合使用这个模式。

第 6 步:使用 Style Reference 和 Omni Reference

如果你要保持品牌视觉风格,用 Style Reference;如果你要锚定主体或物体,用 Omni Reference。

{
  "model": "mj-v8.1",
  "prompt": "a premium skincare bottle on a clean studio set, soft shadows, commercial beauty lighting --ar 1:1 --sref https://your-cdn.example.com/brand-style.jpg --sw 180 --oref https://your-cdn.example.com/product-object.jpg --ow 250",
  "quality": "standard",
  "model_params": {
    "speed": "fast"
  }
}
如果不想手写所有参数,可以在 Midjourney V8.1 Prompt Builder 中先组装 prompt。
参考图类型语法适合场景说明
Image PromptURL prompt text --iw N让输入图影响生成方向URL 放在文本 prompt 前面
Style Reference--sref URL --sw N转移视觉风格需要文本 prompt
Omni Reference--oref URL --ow N锚定主体或物体需要文本 prompt;Object Reference 生成可能更久

第 7 步:轮询任务直到完成

如果你在做原型、内部工具或后台 worker,轮询是最直接的方式。

curl --request GET \
  --url https://api.evolink.ai/v1/tasks/task-unified-1757156493-xkd8mv2r \
  --header 'Authorization: Bearer YOUR_API_KEY'
任务响应会包含 idmodelprogressstatustask_infotype 等字段。完成后会出现 results
{
  "created": 1756817821,
  "id": "task-unified-1756817821-4x3rx6ny",
  "model": "mj-v8.1",
  "object": "image.generation.task",
  "progress": 100,
  "results": [
    "https://cdn.evolink.ai/images/generated-image-abc123.jpg"
  ],
  "status": "completed",
  "task_info": {
    "can_cancel": false
  },
  "type": "image"
}

推荐轮询策略:

阶段建议间隔处理方式
前 20 秒每 3-5 秒一次展示 queued 或 processing 状态
长任务每 5-10 秒一次避免过于频繁请求
completed停止轮询保存结果 URL 到自己的存储
failed停止轮询记录 payload、task ID 和错误状态
前端超时停止用户等待后台 worker 可继续查询

第 8 步:生产环境使用 callback_url

轮询适合原型。正式产品建议在创建任务时传 callback_url
{
  "model": "mj-v8.1",
  "prompt": "a clean hero image for a travel booking app, modern airport lounge, premium editorial photo style --ar 16:9",
  "quality": "standard",
  "model_params": {
    "speed": "fast"
  },
  "callback_url": "https://your-domain.com/webhooks/evolink-image-task"
}
Midjourney V8.1 API Reference 中记录的 callback_url 是任务完成后的 HTTPS 回调地址,覆盖完成、失败或取消事件;超时时间为 10 秒,最多重试 3 次。URL 必须使用 HTTPS,长度不能超过 2048 个字符,且不能指向 127.0.0.110.x.x.x172.16-31.x.x192.168.x.x 等私有 IP 段。

你的 webhook handler 应该做到:

  • 快速返回 2xx;
  • 验证 task_id 确实存在于你的数据库;
  • 标记终态前,再调用一次 GET /v1/tasks/{task_id} 做确认;
  • 按 task ID 和终态去重,避免重复 callback 造成重复写入;
  • 在 30 天图片链接有效期内,把最终图片 URL 保存到自己的存储。

用户可见的应用、批量生成和高流量任务更适合 callback;内部工具和本地测试可以继续使用轮询。

精确字段以 API Reference 为准。下表用于理解常见接入字段:

字段是否必填示例控制什么
modelmj-v8.1选择 Midjourney V8.1
prompta product photo... --ar 16:9 --s 250图像描述和支持的 MJ 风格参数
qualitystandard, hd输出质量档和价格倍率
model_params.speeddraft, fast队列优先级和价格倍率
callback_urlhttps://your-domain.com/webhooks/evolink-image-task生产环境完成回调
当前路由暴露的 prompt 控制包括 --ar--s--chaos--exp--raw--seed--iw--sref--sw--oref--ow
speed 和 quality 不写进 prompt。请使用 model_params.speed 控制速度,用顶层 quality 字段控制输出质量。

不要直接假设这些参数可用

不要从旧 Midjourney 版本或第三方示例里复制参数表,必须以 EvoLink 当前 API Reference 为准。

不要假设原因
--v 8.1路由已经锁定 V8.1
prompt 里的 --fast--turbo--draftspeed 由 model_params.speed 控制
--hdquality 由顶层 quality 字段控制
--q后端支持未确认前,本 V8.1 路由不暴露
--no后端支持未确认前,本 V8.1 路由不暴露
--cref主体/物体参考使用 Omni Reference,即 --oref

这也是 EvoLink 产品页的价值:开发者看到的是当前路由行为,而不是过时的社区参数列表。

价格与成本规划

实时价格请看 Midjourney V8.1 价格区块。从集成角度,你至少要理解这些成本驱动因素:
选择成本影响产品建议
fast基础速度档大多数生产请求默认选择
draft当前路由同基础价格适合探索,不要当成半价档
standard基础质量档预览图和多数产品内结果默认选择
hd1.5x 质量倍率用于最终营销图、hero 图和高价值场景
Fast 4 张,Draft 24 张草图按请求计费评估有效成本时看实际通过审核的结果数
在你自己的产品里,不要把 hd 隐藏在一个模糊的“最佳质量”开关后面,除非你的计费模型能承担对应成本。同时注意,quality: "hd"model_params.speed: "draft" 互斥。

按场景的 Payload 示例

商品摄影

{
  "model": "mj-v8.1",
  "prompt": "a premium product photo of a ceramic desk lamp on a walnut table, soft window light, editorial interior design style --ar 4:3 --s 180",
  "quality": "standard",
  "model_params": {
    "speed": "fast"
  }
}

最终营销 Hero 图

{
  "model": "mj-v8.1",
  "prompt": "a luxury resort terrace overlooking a futuristic skyline at golden hour, cinematic commercial photography, elegant travel campaign mood --ar 16:9 --s 300 --chaos 6",
  "quality": "hd",
  "model_params": {
    "speed": "fast"
  },
  "callback_url": "https://your-domain.com/webhooks/evolink-image-task"
}

图生图商品变体

{
  "model": "mj-v8.1",
  "prompt": "https://your-cdn.example.com/reference-chair.jpg a modern ecommerce lifestyle photo, keep the chair silhouette, add a bright Scandinavian apartment setting --ar 3:2 --iw 1.4 --s 150",
  "quality": "standard",
  "model_params": {
    "speed": "fast"
  }
}

品牌风格参考

{
  "model": "mj-v8.1",
  "prompt": "a set of premium coffee packaging on a clean studio background --ar 1:1 --sref https://your-cdn.example.com/brand-moodboard.jpg --sw 220 --s 200",
  "quality": "standard",
  "model_params": {
    "speed": "fast"
  }
}

JavaScript 示例:提交并轮询

这段代码应该运行在你的后端,而不是浏览器里。

const API_KEY = process.env.EVOLINK_API_KEY;
const BASE_URL = "https://api.evolink.ai/v1";

async function createMidjourneyTask() {
  const response = await fetch(`${BASE_URL}/images/generations`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${API_KEY}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "mj-v8.1",
      prompt: "a premium product photo of a smart speaker on a stone plinth --ar 16:9 --s 250",
      quality: "standard",
      model_params: {
        speed: "fast"
      }
    })
  });

  if (!response.ok) {
    throw new Error(`EvoLink task create failed: ${response.status}`);
  }

  return response.json();
}

async function getTask(taskId) {
  const response = await fetch(`${BASE_URL}/tasks/${taskId}`, {
    headers: {
      Authorization: `Bearer ${API_KEY}`
    }
  });

  if (!response.ok) {
    throw new Error(`EvoLink task query failed: ${response.status}`);
  }

  return response.json();
}

async function waitForTask(taskId) {
  for (let attempt = 0; attempt < 60; attempt += 1) {
    const task = await getTask(taskId);

    if (task.status === "completed") return task;
    if (task.status === "failed") throw new Error(`Task failed: ${task.id}`);

    await new Promise((resolve) => setTimeout(resolve, 5000));
  }

  throw new Error(`Task timeout: ${taskId}`);
}

Python 示例:提交并轮询

import os
import time
import requests

API_KEY = os.environ["EVOLINK_API_KEY"]
BASE_URL = "https://api.evolink.ai/v1"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}

payload = {
    "model": "mj-v8.1",
    "prompt": "a premium product photo of a minimalist wristwatch on dark slate --ar 16:9 --s 220",
    "quality": "standard",
    "model_params": {
        "speed": "fast",
    },
}

create_response = requests.post(
    f"{BASE_URL}/images/generations",
    headers=headers,
    json=payload,
    timeout=30,
)
create_response.raise_for_status()
task = create_response.json()
task_id = task["id"]

for _ in range(60):
    status_response = requests.get(
        f"{BASE_URL}/tasks/{task_id}",
        headers={"Authorization": f"Bearer {API_KEY}"},
        timeout=30,
    )
    status_response.raise_for_status()
    current = status_response.json()

    if current["status"] == "completed":
        print(current.get("results", []))
        break

    if current["status"] == "failed":
        raise RuntimeError(f"Task failed: {task_id}")

    time.sleep(5)
else:
    raise TimeoutError(f"Task timeout: {task_id}")

生产上线 Checklist

模块生产环境要求
API Key只在服务端保存 EVOLINK_API_KEY
请求日志记录 model、prompt hash、model_params.speedquality、user ID 和 task_id
用户体验展示 pending、processing、completed、failed 状态
轮询前几次可以快一点,后续退避,避免高频轮询
Callback快速返回 2xx,异步处理回调事件
结果存储在链接过期前复制图片到自己的存储
成本控制hd 做产品权限或计费控制
Fallback保留第二个图像模型路由作为替代
风控限流、清洗 prompt、监控失败任务
文档让开发者回到 API Reference 查看精确字段

EvoLink 的价值不只是“有一个模型”。更重要的是,你可以在同一个鉴权、计费和异步任务模式下比较和切换多个图像模型。

模型什么时候选什么时候不适合作默认
Midjourney V8.1需要 Midjourney 风格视觉方向、商品图、Style Reference、Omni Reference,以及 Fast 四图生成主要需求是文字渲染或严格版式复现
Midjourney V7已有 V7 prompt,或需要保留旧版 Midjourney 系列路由新项目想使用 V8.1 的生成默认能力
Nano Banana Pro想在 EvoLink 上为商品 mockup 或偏编辑的工作流测试图像替代路线明确需要 MJ prompt 语法和四图创意批量
GPT Image 2想在 EvoLink 上为偏指令跟随的图像工作流测试替代路线明确需要 Midjourney 风格视觉输出和 MJ 参数控制

对生产团队来说,这才是关键:先用 Midjourney V8.1 起步,同时保留 GPT Image 2 或 Nano Banana Pro 作为替代,根据真实用户结果做路由,而不是被单一供应商绑定。

常见错误

错误 1:把博客当成 API Reference

本文解释工作流。精确字段、参数范围和当前路由行为,以模型页 API Reference 为准。

错误 2:把 speed 写进 prompt

使用 model_params.speed。不要依赖 prompt 里的 --fast--turbo--draft

错误 3:假设每次请求一定返回 4 张可用图

Fast 生成请求最多可产生 4 张图,Draft 模式最多可产生 24 张轻量草图;内容审核可能过滤输出。最终展示和计费分析都要基于实际收到的 results

错误 4:等待一个超长 HTTP 请求

使用异步任务模式。先提交、保存 task_id,再轮询或接收 callback。

错误 5:不保存生成结果

生成图片链接有效期为 30 天。任务完成后应复制到你自己的存储。

FAQ

先创建 EvoLink API Key,在 Midjourney V8.1 Playground 测试 prompt,然后发送图像生成请求并使用 mj-v8.1 模型名。保存返回的 task ID,再轮询任务状态或使用 callback URL。
主生成路由使用 mj-v8.1。Variation、Remix、Canvas Edit、Retexture、Remove Background、Advanced Edit 等操作在 Midjourney V8.1 API 页面 中有各自的模型名。

Midjourney V8.1 图像生成调用哪个接口?

创建任务使用 EvoLink 图像生成接口,查询状态使用 EvoLink 任务状态接口。具体路径和代码示例见本文前面的 curl、JavaScript 和 Python 示例。

Midjourney V8.1 支持图生图吗?

支持。主生成路由可以把图片 URL 放在 prompt 开头,再接文本描述和支持的 prompt 参数。

Midjourney V8.1 支持轮询吗?

支持。创建任务后会返回包含 id 的异步任务对象。使用 task ID 查询任务状态,直到 completedfailed

Midjourney V8.1 支持 callback URL 吗?

支持。V8.1 API Reference 记录了 HTTPS callback 地址,用于完成、失败或取消事件。生产环境建议用 callback,并保留轮询作为最终校验。

一次 Midjourney V8.1 请求返回几张图?

Fast 生成请求最多可返回 4 张图,Draft 模式最多可返回 24 张轻量草图。内容审核可能过滤部分输出,所以最终展示时要以实际收到的 results 为准。计费按请求,不按返回图片数。

应该用 standard 还是 hd?

默认预览和多数产品内结果建议用 standard。最终营销图、hero 图或高价值付费工作流,可以用 hd,但要考虑 1.5x 质量倍率。不要把 quality: "hd"model_params.speed: "draft" 组合使用。

应该用 fast 还是 draft?

默认使用 fastdraft 适合快速探索构图并返回轻量草图,但不要把它当成半价档。

什么时候应该改用 GPT Image 2 或 Nano Banana Pro?

如果你的工作流更依赖精确指令跟随、OpenAI 体系或更强上下文理解,可以选 GPT Image 2。如果更看重图像编辑、商品 mockup 或 Gemini 图像工作流,可以选 Nano Banana Pro。

参考资料

先打开 Midjourney V8.1 Playground,确认 prompt 和参数设置,再把同样的工作流接入你的后端服务。
打开 EvoLink Midjourney V8.1

准备好把 AI 成本降低 89% 吗?

现在就开始使用 EvoLink,体验智能 API 路由的强大能力。