关于 openrouter-video
openrouter-video 是通过 OpenRouter 异步视频 API 生成视频的 skill。它说明如何检查模型能力,以及如何提交任务、轮询状态并下载结果,适用于基于提示词或图像参考创作视频。
主要功能
- 01提交异步视频生成任务
- 02轮询状态或接收 Webhook 事件
- 03检查模型专属参数能力
- 04根据提示词和图像参考生成
- 05下载已完成的 MP4 内容
适用场景
- 01根据文本提示词创建视频
- 02使用首帧或末帧图像生成视频
- 03提交前核对支持的设置
- 04轮询后获取已完成的视频
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ openrouterteam/ skills --skill openrouter-video安装后在 Claude Code 中输入/openrouter-video确认已加载。
附带文件README.md
详细介绍
OpenRouter Video
通过 OpenRouter 的异步 POST /api/v1/videos 使用 curl + jq 生成视频。需要 OPENROUTER_API_KEY(在 https://openrouter.ai/keys 获取)。如果未设置,请停止并询问用户。
三个步骤
视频生成是异步的:提交 → 轮询 → 下载。单个请求无法直接返回视频,因为生成需要 30 秒到几分钟。请告知用户任务已提交,让他们知道需要等待是正常的。
POST /api/v1/videos→{ id, polling_url, status: "pending" }- 每隔约 30 秒
GET <polling_url>,直到status为completed(终止失败状态:failed、cancelled、expired——原样显示error字段) GET /api/v1/videos/{id}/content?index=0并携带认证标头 → MP4 字节数据
从模型端点选择参数,不要猜测
resolution、aspect_ratio、duration 和 frame_images[].frame_type 因模型而异。在首次提交新模型之前(或用户有具体要求时),获取模型的能力信息,并且只发送返回集合中的值:
curl -sS https://openrouter.ai/api/v1/videos/models \
| jq '.data[] | select(.id == "MODEL_ID")'
每个模型中值得了解的字段:supported_resolutions、supported_aspect_ratios、supported_sizes、supported_durations(通常是离散值,如 [4,6,8],而非范围)、supported_frame_images(接受哪些 frame_type 值)、generate_audio 和 seed(能力布尔值)、pricing_skus 以及 allowed_passthrough_parameters。超出集合的值会返回 400,因此请在客户端进行验证。
完整工作流(可直接使用)
#!/usr/bin/env bash
set -euo pipefail
PROMPT="a golden retriever playing fetch on a sunny beach"
MODEL="google/veo-3.1"
OUTPUT="video-$(date +%Y%m%d-%H%M%S).mp4"
# Build payload — extend with resolution/aspect_ratio/duration/etc. as needed.
payload=$(jq -n --arg model "$MODEL" --arg prompt "$PROMPT" \
'{model: $model, prompt: $prompt}')
submit=$(curl -sS -X POST https://openrouter.ai/api/v1/videos \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d "$payload")
poll_url=$(echo "$submit" | jq -r '.polling_url')
echo "Submitted $(echo "$submit" | jq -r '.id')" >&2
while :; do
sleep 30
resp=$(curl -sS "$poll_url" -H "Authorization: Bearer $OPENROUTER_API_KEY")
# Avoid the name `status` — zsh treats it as read-only.
st=$(echo "$resp" | jq -r '.status')
echo "Status: $st" >&2
case "$st" in
completed) break ;;
failed|cancelled|expired)
echo "Generation $st: $(echo "$resp" | jq -r '.error // "unknown"')" >&2
exit 1 ;;
esac
done
curl -sS -L "$(echo "$resp" | jq -r '.unsigned_urls[0]')" \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
--output "$OUTPUT"
echo "$resp" | jq --arg out "$(realpath "$OUTPUT")" \
'{job_id: .id, generation_id, video_saved: $out, usage}'
参数
必填:model、prompt。常见可选字段:
duration(int)——必须是模型的supported_durations中的值。resolution(string)/aspect_ratio(string)/size(string,"WxH")——size可替代resolution+aspect_ratio。generate_audio(bool)——仅当模型的generate_audio能力为 true 时才有意义。seed(int)——仅当模型的seed能力为 true 时才会生效。callback_url(HTTPS)——使用 webhook 代替轮询。frame_images[]——图像转视频;每个条目的格式为{ type: "image_url", image_url: { url }, frame_type: "first_frame" | "last_frame" }。input_references[]——参考图转视频(用于风格指导);条目格式相同,但不含frame_type。如果两个数组都存在,则以frame_images为准。provider.options.<slug>.parameters.<key>——提供商透传参数,见下文。
图像 url 可以是公开的 https:// URL,也可以是本地文件的数据 URL:MIME=image/png; B64=$(base64 < file.png | tr -d '\n'); url="data:${MIME};base64,${B64}"。
提供商透传参数
提供商专属参数放在 provider.options.<slug>.parameters 下。特定模型允许使用的键以扁平列表形式列在模型端点的 allowed_passthrough_parameters 中,但参数的含义、取值范围和必需的组合由上游提供商的 API 文档决定(Google Vertex、Alibaba Dashscope、Kwai、ByteDance Volc Engine、MiniMax、OpenAI 等)。使用不熟悉的键之前,请先阅读上游文档;不同提供商的大小写约定各不相同(Google/OpenAI 使用 camelCase,大多数其他提供商使用 snake_case)。
示例:
{
"model": "google/veo-3.1",
"prompt": "a time-lapse of a flower blooming",
"provider": {
"options": {
"google-vertex": {
"parameters": {
"personGeneration": "allow",
"negativePrompt": "blurry, low quality"
}
}
}
}
}
Webhook(可选)
在提交请求体中传入 callback_url(HTTPS)。进入终止状态时,OpenRouter 会 POST 一个 video.generation.{completed,failed,cancelled,expired} 事件。每次投递都会携带 X-OpenRouter-Idempotency-Key: <job_id>-<status>。如果工作区配置了签名密钥,请验证 X-OpenRouter-Signature: t=<ts>,v1=<hmac>——使用该密钥对 <ts>,<raw_body> 计算 HMAC-SHA256,并拒绝时间戳早于约 5 分钟的请求。
参考资料
由于提供商必须暂时保留输出,以便异步下载,因此视频生成不符合 ZDR 条件。