AI 生图、生视频 API 接入:Qwen 生图和 MiniMax H3 视频接口调用示例

更新于 2026-10-23

想在自己的网站、小程序或者批量脚本里生成图片和视频,不用自己部署模型、也不用买显卡,调接口就行。VGEN 把站上的 Qwen 生图和 MiniMax H3 生视频开放成了 HTTP 接口,和网页上用的是同一套模型、同一个价格,按次扣积分。

这篇讲接入的完整流程:拿 API Key、生图、生视频、轮询和下载结果、怎么计费,以及最容易踩的几个坑。示例都用 curl,任何语言照着发 HTTP 请求都能调。

第一步:注册并生成 API Key

  1. 在电脑浏览器打开 vgen.aijoy.tech 注册账号(新用户送 10 积分,够先试几次)。
  2. 进入「设置 → 账户信息 → API Key」,点生成。可以建多把,分别起名字,不用的可以单独停用或删除。
  3. 完整的 Key 只在创建时显示一次,当场复制保存;服务器只存哈希,之后找不回来。

所有请求都在请求头里带上 Authorization: Bearer 你的Key。接口地址是 https://vgen.aijoy.tech/v1/...。

先调一次 GET /v1/models,看看现在能用哪些模型:返回里的 id 就是提交时填的模型名,kind 是 image 还是 video,还有支持的比例、清晰度、时长和价格。模型名以这个接口返回的为准。

curl https://vgen.aijoy.tech/v1/models \
  -H "Authorization: Bearer $KEY"

先搞清楚:生成是「异步任务」

生图要十几秒,生视频要几分钟,所以接口不会一直挂着等结果,而是分三步:

  1. 提交:POST 一个请求,马上拿到一个任务 ID(比如 evt-XXXX),状态是 queued。
  2. 轮询:每隔几秒 GET 一次这个任务,状态会从 queued(排队)变成 in_progress(生成中),最后是 completed(完成)或 failed(失败)。
  3. 下载:完成后用任务 ID 取回图片或 mp4。

参数错误、积分不够、提示词违规这类问题,在提交那一步就直接返回错误,不会建任务、也不会扣积分。任务建起来以后再失败,积分会自动退回。

不想写轮询的话,可以用下面「生图同步模式」或者「完成回调」。

生图:Qwen 文生图

接口是 POST /v1/images/generations,JSON 请求体。必填 prompt;model 填 qwen-image;size 写「宽x高」,它同时决定比例和清晰度:长边小于 1800 是 1K,1800 以上是 2K。比例会对到最近的 1:1、16:9、9:16、4:3、3:4。

不写 size 默认是 1:1 的 2K。一次请求出一张图,要多张就多发几个请求。

curl -X POST https://vgen.aijoy.tech/v1/images/generations \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-image",
    "prompt": "一杯冰美式放在木桌上,旁边一本翻开的书,窗外自然光,杂志摄影风格",
    "size": "1024x1024"
  }'

# 立刻返回任务对象:
# {"id":"evt-XXXX","object":"image","status":"queued","progress":0, ...}

生图:轮询和下载

用 GET /v1/images/{id} 查状态,建议 2–5 秒查一次。完成时返回里直接带 data[0].url;也可以用 GET /v1/images/{id}/content 直接拿图片文件。

注意:结果地址是私有的,下载时也要带同一把 Key,直接在浏览器里打开会 401。要给用户展示,先在你的服务器上下载下来再分发。

# 查状态
curl https://vgen.aijoy.tech/v1/images/evt-XXXX \
  -H "Authorization: Bearer $KEY"

# 完成后下载
curl -o out.png https://vgen.aijoy.tech/v1/images/evt-XXXX/content \
  -H "Authorization: Bearer $KEY"

生图同步模式:加一个 wait

请求体里加 "wait": 300(秒,最多 3600),服务器会等到出图再返回,结果直接是 {"created":...,"data":[{"url":"..."}]},适合脚本里一把调完。

如果到时间还没出图,不会报错也不会丢任务,返回的还是任务对象(有 id、状态是 queued 或 in_progress),拿 id 接着轮询就行。所以代码里要区分两种返回:有 data 没有 id 是已经出图,否则继续轮询。

生图:Qwen 图生图(改图)

接口是 POST /v1/images/edits,只接受 multipart 表单上传文件。模型还是填 qwen-image,带了参考图就自动走图生图,价格和文生图一样。

Qwen 生图一次只能放 1 张参考图,单张不超过 20MB。提示词写成修改指令,比如「把背景换成白色,商品保持不变」。指令怎么写看 AI 生图教程。

curl -X POST https://vgen.aijoy.tech/v1/images/edits \
  -H "Authorization: Bearer $KEY" \
  -F model="qwen-image" \
  -F prompt="把背景换成纯白色,商品和包装上的文字保持不变" \
  -F size="2048x2048" \
  -F image=@product.png

生视频:MiniMax H3

接口是 POST /v1/videos。model 填 /v1/models 里 kind 为 video 的那个 id(写这篇时是 Minimax H3 Comfy,中间有空格,照原样填);duration 是秒数,3–15 秒,默认 5;清晰度和比例写在 metadata 里:resolution 可选 480p、720p、1080p,ratio 可选 16:9、9:16、4:3、3:4。

只写 prompt 就是文生视频,画面和声音一起生成。提示词怎么写看 AI 文生视频带声音。

curl -X POST https://vgen.aijoy.tech/v1/videos \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Minimax H3 Comfy",
    "prompt": "清晨的海边,一只柯基沿着浪花奔跑,镜头低角度跟拍,海浪声和狗叫声",
    "duration": 5,
    "metadata": { "resolution": "720p", "ratio": "16:9" }
  }'

生视频:首帧、首尾帧

传 image(一张图片网址)就是用这张图当第一帧;传 images 数组放两张,第一张是首帧、第二张是尾帧,视频会从第一张过渡到第二张。最多 2 张,多了直接报错。

图片网址要能从公网访问,PNG 或 JPEG,单张不超过 20MB。没有公网地址的话,也可以用 base64 传 first_frame / last_frame。首尾帧的玩法看 AI 首尾帧生成视频。

curl -X POST https://vgen.aijoy.tech/v1/videos \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Minimax H3 Comfy",
    "prompt": "从日出平滑过渡到正午,云慢慢飘过",
    "images": [
      "https://example.com/first.jpg",
      "https://example.com/last.jpg"
    ],
    "duration": 5,
    "metadata": { "resolution": "720p" }
  }'

生视频:轮询和下载 mp4

用 GET /v1/videos/{id} 查状态,视频一般要几分钟,建议 10–20 秒查一次。progress 只有 0、50、100 三档,不是真实进度,判断 status 就行。

状态是 completed 后,GET /v1/videos/{id}/content 直接返回 mp4 文件,同样要带 Key;没生成完会返回 409。

# 查状态
curl https://vgen.aijoy.tech/v1/videos/evt-XXXX \
  -H "Authorization: Bearer $KEY"

# 完成后下载
curl -o out.mp4 https://vgen.aijoy.tech/v1/videos/evt-XXXX/content \
  -H "Authorization: Bearer $KEY"

不想轮询:用完成回调

提交时加一个 callback_url(必须是公网 http/https 地址),任务完成或失败后,服务器会把查询结果 POST 到这个地址。没收到 2xx 会按 30 秒、2 分钟、5 分钟、15 分钟、1 小时重试,一共 6 次。

两点要注意:同一个任务可能收到不止一次,按任务 id 去重;回调没有签名,要据此发货或计费的话,先用任务 id 调查询接口确认一遍,别直接信回调内容。

怎么收费

和网页上同一个价格,按次扣积分,1 元 = 100 积分:

积分在提交时预扣,积分不够直接返回 402,响应里会写本次需要多少、余额多少。任务失败自动退回。网页和 API 用的是同一个账户余额和同一份并发额度。

常见错误码

每个响应都带 X-Request-Id 响应头,遇到问题反馈时附上它和任务 ID,方便查。

常见问题

开始创作 →