内容
# 开放路由器媒体
[](https://www.npmjs.com/package/openrouter-media)
[](https://github.com/HLLMR/openrouter-media/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/openrouter-media)
[](https://www.npmjs.com/package/openrouter-media)
[](LICENSE)
一个 **MCP 服务器**,暴露 [OpenRouter](https://openrouter.ai) 的 **图像** 和 **异步视频** 生成作为工具 — 捆绑了配套的 **`SKILL.md` 技能**,教导代理创意工作流程(电影短片、功能演示、英雄图像、图像转视频)。
它通过stdio使用 [模型上下文协议](https://modelcontextprotocol.io),因此任何MCP-capable代理(Claude Code、Claude Desktop等)都可以浏览实时媒体模型目录、生成图像、提交和轮询视频作业、预算支出 — 无需编写任何OpenRouter胶水代码。
## 为什么使用此服务器
- **一站式图像和视频。** 通过OpenRouter的 `chat/completions`(`modalities: ["image","text"]`)和异步视频API(`/videos`)在同一个MCP表面下提供图像输出。
- **设计时考虑成本意识。** 每个工具都返回与成本相关的字段:图像工具报告实际的 `usage.cost`;视频工具提前返回每秒的估算成本和完成后的实际成本 — 这样,支出管理者可以看到并限制支出。(视频按输出秒数计费;一些提供商会添加每个剪辑的最低费用,因此估算是诚实的较低界限,而不是保证。)
- **强大的异步生命周期。** `generate_video_sync` 提交并轮询,指数退避直到超时,然后返回 `job_id` 以便继续 — 它诚实地显示失败/部分/超时状态,而不是假装。
- **协议中不传输媒体字节。** 工具返回URL / 紧凑引用(mime + size)以及元数据,而不是内联多兆字节的二进制数据。
- **提供真实技能。** `skills/` 目录包含实用、成本诚实的 `SKILL.md` 程序,代理可以遵循这些程序进行实际的营销/创意工作。
## 工具
| 工具 | 功能 |
|---|---|
| `list_media_models` | 图像 + 视频目录,包含每个模型的分辨率、宽高比、时长、帧图像(图像转视频)支持、音频能力和定价SKU。用于选择模型和预算。 |
| `generate_image` | 根据提示生成图像。返回数据URL + 紧凑引用(mime/size)和实际成本(美元)。 |
| `generate_video` | 提交异步视频作业。返回 `{ job_id, status, est_cost_usd, est_pricing_sku }`。 |
| `get_video` | 轮询 `job_id` → 状态;完成后返回 `result_url` + 实际成本。 |
| `generate_video_sync` | 在 `timeout_sec` 内提交 + 轮询完成;返回 `result_url` + 实际成本,或超时时的 `job_id` 以继续。 |
## 技能
捆绑在 `skills/` 中(并在npm包中提供):
| 技能 | 教导 |
|---|---|
| [`cinematic-short`](skills/cinematic-short/SKILL.md) | 制作短产品电影 — 模型选择(Veo用于英雄/音频,Kling/Grok用于快速/廉价),提示结构,分辨率/时长预算,提交→轮询纪律。 |
| [`feature-demo-short`](skills/feature-demo-short/SKILL.md) | 通过图像转视频从截图创建功能解说短片。 |
| [`hero-image`](skills/hero-image/SKILL.md) | 高质量营销图像(gpt-5-image / Gemini 3 Pro Image),具有宽高比 + 品牌一致性指导。 |
| [`image-to-video`](skills/image-to-video/SKILL.md) | 将静态图像动画化为短片段。 |
## 安装
```sh
npm install -g openrouter-media # 或通过 npx 运行
```
在服务器环境中设置您的OpenRouter密钥:
```sh
export OPENROUTER_API_KEY="sk-or-v1-..."
```
### 与Claude Code / Claude Desktop一起使用
将其添加到您的MCP服务器配置(stdio)中:
```json
{
"mcpServers": {
"openrouter-media": {
"command": "npx",
"args": ["-y", "openrouter-media"],
"env": { "OPENROUTER_API_KEY": "sk-or-v1-..." }
}
}
}
```
或对于全局安装:`"command": "openrouter-media"`。
## 配置(环境)
| 变量 | 默认值 | 备注 |
|---|---|---|
| `OPENROUTER_API_KEY` | — | **必需** |
| `OPENROUTER_BASE_URL` | `https://openrouter.ai/api/v1` | 代理/网关的覆盖 |
| `OPENROUTER_SITE_URL` | 此仓库 | 发送为 `HTTP-Referer` 以进行OpenRouter归因 |
| `OPENROUTER_SITE_TITLE` | `openrouter-media` | 发送为 `X-Title` 以进行OpenRouter归因 |
## 成本和诚实说明
- **图像** 按token计费;图像输出主导完成token成本。实际成本在每个 `generate_image` 结果中返回(`cost_usd`)。
- **视频** 按输出秒数计费。`est_cost_usd` 根据模型的定价SKU × 时长计算,但一些提供商(观察:Kling)收取每个剪辑的最低费用,因此**权威**成本是完成作业返回的 `cost_usd`。始终从 `get_video` / `generate_video_sync` 读取实际成本。
- 一些视频模型可能因您的OpenRouter帐户的数据/隐私政策而被阻止,并返回404;工具会以提示调用此问题。在 <https://openrouter.ai/settings/privacy> 调整或选择不同的模型。
## 开发
```sh
npm install
npm run typecheck # tsc --noEmit
npm test # 编译 + 运行 node:test 单元测试(无网络)
npm run build # 生成 dist/
npm start # 在本地运行stdio服务器
```
参见 [CONTRIBUTING.md](CONTRIBUTING.md)。安全策略: [SECURITY.md](SECURITY.md)。
## 许可证
[MIT](LICENSE) — 免费供所有人使用,始终。