开始
生成视频
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.0 | 4–15 | 480p / 720p / 1080p / 4k | 9 / 3 / 3 | 720p |
seedance-2.0-fast | 5 或 10 | 480p / 720p | 9 / 3 / 3 | 720p |
seedance-2.0-mini | 5 或 10 | 480p / 720p | 9 / 3 / 3 | 720p |
seedance-2.5 | 4–30 | 480p / 720p / 1080p | 30 / 10 / 10 | 720p |
wan-3 | 2–30 | 480p / 720p / 1080p | 10 / 5 / 5 | 720p |
minimax-h3 | 5–15 | 768p / 2k | 9 / 3 / 3 | 768p |
minimax-h3-max | 5–15 | 480p / 768p | 12 / 12 / 12 | 768p |
gemini-omni-1.1 | 3–10 | 360p / 720p / 1080p / 4k | 8 / 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 当文件名,批量下载不会重名
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。脚本遇到失败会打印完整任务状态并退出。
错误码
| HTTP | code | 怎么处理 |
|---|---|---|
| 400 | idempotency_key_required |
补上 Idempotency-Key 头 |
| 400 | 字段校验错误 | 响应会指出是哪个字段 |
| 401 | runtime_auth_required |
Key 缺失、写错或已撤销 |
| 402 | balance_insufficient | 充值后重试 |
| 409 | idempotency_conflict |
同一个 Key 提交了不同内容,换一个 Key |
| 409 | job_video_not_ready |
视频还没生成完,隔几秒再请求同一个地址 |
| 200 | status=failed |
异步任务失败;按同一响应中的 error.code 处理,error.retryable
为 true 时可以直接重新提交 |
| 429 | runtime_rate_limited | 超过 RPM,退避后重试 |
| 429 | runtime_concurrency_limited |
并发已满,等在跑的任务结束 |
错误响应统一是 {"error":{"code":"..."}}。
402 与 429 可恢复,其余需要改请求。