Google Flow Media API

开始

1 注册在首页点「控制台」注册
2 充值余额为 0 会被拒绝;目前内部充值,联系我们开通
3 取 Key控制台「API Keys」新建,形如 mrk_...,随时可回来复制

生成视频

POST /v1/videos/generations

字段必填取值
model是 seedance-2.0 / seedance-2.0-fast / seedance-2.0-mini / seedance-2.5 / wan-3 / minimax-h3 / minimax-h3-max / gemini-omni-1.1
prompt条件 纯文生必填;带参考素材时可省略;最长 40000 字节
aspect_ratio否 默认 16:9;常用值为 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16, 以模型能力表为准
duration否 默认 5 秒;按模型能力填写秒数
resolution否 按模型能力填写;省略时使用该 Provider 的默认值,支持 360p / 480p / 720p / 768p / 1080p / 2k / 4k
n否Miku 视频固定为 1
seed否 Miku 视频不接受此字段
start_image否 首帧图;可与 end_image 组成首尾帧,不与参考媒体混用
end_image否 尾帧图;必须同时提供 start_image
reference_images否 HTTPS 参考图 URL 数组,与首尾帧互斥;数量由模型能力决定
reference_videos否HTTPS 参考视频 URL 数组
reference_audios否HTTPS 参考音频 URL 数组
generate_audio否 仅 Seedance 2.0/2.5 接受;映射为 Miku 的 sound_effects,省略时保留上游默认
content否 官方/无限画布形状;与提示词及扁平媒体字段二选一

生成接口只接收 JSON 和 HTTPS 素材 URL,不接收 Base64、multipart 或本地文件字节。 这套接口同时接受扁平字段和官方/无限画布常用的 content[] 形状。

Miku 视频模型能力

模型时长(秒)分辨率 图片 / 视频 / 音频参考数默认分辨率
seedance-2.04–15 480p / 720p / 1080p / 4k9 / 3 / 3720p
seedance-2.0-fast5 或 10 480p / 720p9 / 3 / 3720p
seedance-2.0-mini5 或 10 480p / 720p9 / 3 / 3720p
seedance-2.54–30 480p / 720p / 1080p30 / 10 / 10720p
wan-32–30 480p / 720p / 1080p10 / 5 / 5720p
minimax-h35–15 768p / 2k9 / 3 / 3768p
minimax-h3-max5–15 480p / 768p12 / 12 / 12768p
gemini-omni-1.13–10 360p / 720p / 1080p / 4k8 / 3 / 不支持720p

参考数量是图片 / 视频 / 音频的最大数量;总数也受模型能力限制。 Wan 3、MiniMax H3 以及 Seedance 2.0 系列的音频参考需要视觉参考; Seedance 2.5 可以单独使用音频;Omni 不支持音频,视频参考还需要图片或首帧。 具体文件格式、单文件大小和时长还需满足 Miku 上游文档,上传接口会先按媒体类型执行通用大小校验。

本地文件 · 先直传对象存储

curl -X POST https://media-api.argolink.io/v1/media/uploads \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"seedance-2.5","type":"image","content_type":"image/png","size_bytes":123456}'

把文件按响应中的 upload_method 和 upload_headers PUT 到 upload_url,成功后把 media_url 放进下面的生成 JSON。已有公网 HTTPS URL 可直接使用,无需重复上传。

模式一 · 提示词生成视频

curl -X POST https://media-api.argolink.io/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"model":"seedance-2.5","prompt":"海面日出,镜头缓慢推进","aspect_ratio":"16:9","duration":4,"resolution":"480p","n":1}'

模式二 · 首帧图+提示词生成视频

把 media_url 或已有公网图片 URL 放进 start_image.url:

curl -X POST https://media-api.argolink.io/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"model":"seedance-2.5","prompt":"镜头缓慢推进","aspect_ratio":"16:9","duration":4,"resolution":"480p","start_image":{"url":"https://cdn.example/start.png"}}'

模式三 · 多模态参考素材生成视频

图片、视频、音频都使用 HTTPS URL;可用数量和总时长以模型能力为准:

curl -X POST https://media-api.argolink.io/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"model":"seedance-2.5","prompt":"保持角色一致并延续参考视频节奏","aspect_ratio":"16:9","duration":4,"resolution":"480p","reference_images":[{"url":"https://cdn.example/character.png"}],"reference_videos":[{"url":"https://cdn.example/motion.mp4"}],"reference_audios":[{"url":"https://cdn.example/rhythm.mp3"}]}'

首尾帧与参考素材模式互斥。生成请求本身只携带 URL,所以不会被大文件撑大;本地上传限制由上传初始化接口统一校验。

无限画布兼容 · content[]

需要把文本、首尾帧和参考媒体按顺序传入时,使用官方风格的 content[]。媒体项必须是 HTTPS URL,并使用对应的 role:

{
  "model": "seedance-2.5",
  "content": [
    {"type": "text", "text": "保持角色一致,延续参考视频的动作"},
    {"type": "image_url", "role": "reference_image",
     "image_url": {"url": "https://cdn.example/character.png"}},
    {"type": "video_url", "role": "reference_video",
     "video_url": {"url": "https://cdn.example/motion.mp4"}},
    {"type": "audio_url", "role": "reference_audio",
     "audio_url": {"url": "https://cdn.example/rhythm.mp3"}}
  ],
  "aspect_ratio": "16:9",
  "duration": 5,
  "resolution": "720p"
}

下载视频

提交返回的 id 形如 33344f64-4e95-4342-bfa8-e4a5b4e516ed。把它替换掉下面第一行的 换成你的id,其余一个字都不用动:

ID=换成你的id
URL="https://media-api.argolink.io/v1/jobs/$ID/video"
KEY="Authorization: Bearer YOUR_API_KEY"

# 1. 等生成好(只探 1 字节,不写文件)
while [ "$(curl -s -o /dev/null -w '%{http_code}' -r 0-0 "$URL" -H "$KEY")" = 409 ]; do
  echo "生成中…"; sleep 10
done

# 2. 下载:断了自动续传重试,没下全会报错而不是假装成功
curl -f -o 视频.mp4 -C - --retry 5 --retry-delay 3 --retry-all-errors "$URL" -H "$KEY" \
  && echo "已保存 视频.mp4" || echo "下载没完成,重跑这一条会接着下"

网址里的 /v1/jobs/ 是固定不变的接口路径,不要改; 要替换的只有第一行 ID= 后面那一段。

200 存盘退出,409 还在生成继续等,其它情况打印原因后停下—— 任务失败时不会一直空转。

存到哪

-o 后面写什么,就存到哪:

-o 视频.mp4                      # 存到你运行命令的那个目录
-o ~/Downloads/视频.mp4          # 存到「下载」文件夹
-o /Users/你的用户名/Desktop/片.mp4   # 存到桌面(写完整路径)
-o "$ID.mp4"                     # 用任务 id 当文件名,批量下载不会重名
要等多久文生视频约 1.5–2 分钟,首帧图/参考图约 3 分钟
不过期带 Key 随时可以再下,同一个地址永远有效
断了接着下curl -C - -o 视频.mp4 "$URL" -H "Authorization: Bearer YOUR_API_KEY"

Nano Banana 生成图片

POST /v1/images/generations

字段必填取值
model是 nano-banana-2-lite / nano-banana-2 / nano-banana-pro
prompt是非空提示词
aspect_ratio否 1:1 / 16:9 / 4:3 / 3:4 / 9:16,默认 1:1
n否1–4,默认 1;按实际成功张数计费
seed否0–2147483647;设置后 n 必须为 1
output_format否 jpeg(也接受 jpg),默认 JPEG

提示词生成图片

curl -X POST https://media-api.argolink.io/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"model":"nano-banana-2-lite","prompt":"一只橘猫坐在窗边,晨光,写实摄影","aspect_ratio":"4:3","n":1,"output_format":"jpeg"}'

三个模型由 MediaRelay 按模型能力、账号 Priority、固定出口、RPM 和并发 自动选择执行账号;只需替换 model,不需要另一把 Key。

参考图生成图片

POST /v1/images/edits

当前经过验证的 Flow 契约是每个请求最多 10 张参考图。支持 PNG 和 JPEG, 单张 ≤5MB、≤2500 万像素;图片会上传到该账号当前的同一个 Flow 工作项目。

curl -X POST https://media-api.argolink.io/v1/images/edits \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F model=nano-banana-2 \
  -F prompt=保留主体外观,把背景改成雨夜霓虹街道 \
  -F aspect_ratio=4:3 \
  -F n=1 \
  -F output_format=jpeg \
  -F "image[]=@参考图1.png;type=image/png" \
  -F "image[]=@参考图2.png;type=image/png"

JSON 请求可使用 {"image":[{"url":"https://..."}]} 或 {"image":[{"data_url":"data:image/png;base64,..."}]}; multipart/form-data 可重复提交 image 或 image[]。每个请求最多 10 张参考图。设置 n 为 2–4 时会基于同一组参考图独立生成对应张数。

保存图片结果

提交接口返回任务 id。查询 /v1/jobs/{id},直到 status 为 succeeded 或 partial;图片位于 result.data[].b64_json,内容是原始 JPEG。

ID=换成你的id
BODY=""

while true; do
  BODY="$(curl -fsS "https://media-api.argolink.io/v1/jobs/$ID" \
    -H "Authorization: Bearer YOUR_API_KEY")" || exit 1
  STATUS="$(printf '%s' "$BODY" | jq -r '.status')"
  case "$STATUS" in
    succeeded|partial) break ;;
    failed|cancelled) printf '%s\n' "$BODY"; exit 1 ;;
    *) echo "生成中…"; sleep 3 ;;
  esac
done

printf '%s' "$BODY" | jq -r '.result.data[0].b64_json' \
  | openssl base64 -d -A > banana.jpg
echo "已保存 banana.jpg"

请求失败不会静默:任务会进入 failed,查询结果会带 error 对象,其中 code 是稳定的失败码,message 说明原因,retryable 为 true 表示这次失败没有产生生成费用,可以直接重新提交,参数问题还会带 field。脚本遇到失败会打印完整任务状态并退出。

错误码

HTTPcode怎么处理
400idempotency_key_required 补上 Idempotency-Key 头
400字段校验错误响应会指出是哪个字段
401runtime_auth_required Key 缺失、写错或已撤销
402balance_insufficient充值后重试
409idempotency_conflict 同一个 Key 提交了不同内容,换一个 Key
409job_video_not_ready 视频还没生成完,隔几秒再请求同一个地址
200status=failed 异步任务失败;按同一响应中的 error.code 处理,error.retryable 为 true 时可以直接重新提交
429runtime_rate_limited超过 RPM,退避后重试
429runtime_concurrency_limited 并发已满,等在跑的任务结束

错误响应统一是 {"error":{"code":"..."}}。 402 与 429 可恢复,其余需要改请求。