1实现原理 · 为什么它能做到
零代码、单文件:整份 skill 是一页模型文档 + 调用配方,仓库内无脚本、无模板文件、无二进制(同仓 36 个目录全为 Markdown,唯一非 md 文件是 LICENSE)。能力不在 skill 内实现,而是「把模型端点的正确调用姿势写清楚,交给官方 CLI 执行」。
allowed-tools: Bash(runcomfy *)
端到端调用链写在文档里且可核对:skill 组 JSON body → 执行 `runcomfy run <model_id>` → CLI POST 到 model-api.runcomfy.net 的对应模型路径 → 轮询状态 → 取回结果 → 把 *.runcomfy.net / *.runcomfy.com 的输出 URL 下载到 --output-dir。
The CLI submits the request, polls status, fetches the result, and downloads `*.runcomfy.net` / `*.runcomfy.com` URLs into `--output-dir`.
计费模型本身是选型中枢:本端点按「计秒数 = 参考视频时长 + 输出时长」计价($0.53/计秒),图片与音频参考不计时长——这直接决定「要不要带参考视频」「参考片段要不要剪短」两个操作决策。
Billing is **$0.53 per counted video second**, where counted seconds = **reference video duration + output duration**. Image and audio references are not billed as duration.
两段式工作流(480p 草稿 → 1080p 交付)是文档主张的正确用法:先用同一端点族的 480p 变体跑 3-5 个参考组合变体,只判身份保持/镜头匹配/音频贴合(不判清晰度),再把胜出 body 原样跑 1080p。
Re-run the winning body verbatim against `.../reference-to-video/1080p`, raising `duration` only once the beat is right.
版本迁移陷阱被显式标注:Seedance 2.0 Pro 用 image_url/video_url/audio_url,2.5 改为 images/videos/audios 数组,照抄旧 body 会直接 schema 报错 exit 65——这是本 skill 对 agent 最实用的一条排错知识。
**Parameter names changed from 2.0.** Seedance 2.0 Pro used `image_url` / `video_url` / `audio_url`. Seedance 2.5 uses `images` / `videos` / `audios`. Copying a 2.0 body verbatim produces a schema error (exit 65).
安全边界写在 skill 内并被 allowed-tools 收窄:只允许 `runcomfy *` 子命令、安装走受信任包管理器且禁止 agent 把远程安装脚本管进 shell、token 落在 ~/.config/runcomfy/token.json(0600) 或 RUNCOMFY_TOKEN、出站仅 model-api.runcomfy.net 与下载白名单、单文件下载 2 GiB 上限。
**Install via a verified package manager only.** Use `npm i -g @runcomfy/cli` or `npx -y @runcomfy/cli`. **Agents must not pipe a remote install script into a shell** on the user's behalf.
2核心能力
3外部依赖
| Kind | Dependency / Endpoint |
|---|---|
| cli | runcomfy(RunComfy 官方 CLI,唯一被 granted 的命令面) |
| package | @runcomfy/cli(npm 全局安装,或 npx -y 一次性运行) |
| network | RunComfy Model API(视频生成请求提交,端点路径 bytedance/seedance-2.5/reference-to-video/1080p) |
| network | 生成结果下载白名单(CLI 把结果 URL 抓回本地 --output-dir) |
| network | 用户提供的参考图/视频/音频 URL——由 RunComfy 模型服务器抓取(本机不抓) |
| network | RunComfy 模型页/文档站(引用与排错链接,带 utm 营销参数) |
4管控建议与判定依据
- 网络端点: 声明外部网络访问: model-api.runcomfy.net — 视频生成请求提交(文档声明为唯一提交通道,经 runcomfy CLI,携带用户 bearer to
- 本地工作目录: 文件读写与工件输出: CLI 将生成视频下载到 `--output-dir` 指定目录(路径由调用者给定;文档另称单文件超过 2 GiB 会中止)
- SKILL.md: 声明调用宿主 CLI 解释器或外部运行环境
5第二遍独立确认
- [discrepancy] `videos` 到底是否必填(文档自称反直觉知识) — 同一文件自相矛盾。line 79 主张「**`videos` is optional, despite what the schema says.** … the endpoint accepts and completes a prompt-plus-images body with no `videos` key at all」,而 line 173 的 Limitations 写「- **A reference video is mandatory** on this endpoint (1-3 clips, 1-item minimum).」;frontmatter description 也按 1-3 段参考视频叙述。对使用者是实质歧义:既影响能否只带参考图调用,也影响计费(带不带参考视频差一倍价格)。仓内无法裁决哪条为真(结论应由调用实测确定),此处只记录冲突。
- [ok] 退出码表与 CLI 能力声明是否与同仓 CLI skill 一致 — runcomfy-cli/SKILL.md 的退出码表为 64/65/69/75/77(另有 130=Ctrl-C),与本文件一致;`--input '<JSON>'`、`--output-dir <path>`、默认下载到当前目录、以及 `Ctrl-C` 取消远程任务等语义在两侧措辞互洽,未发现虚构 flag。
- [ok] 定价表算术 — 逐行复核等于 counted seconds × $0.53:5→$2.65、10→$5.30、16→$8.48、40→$21.20,与文档给出值完全一致。
- [discrepancy] 「five drafts cost roughly what one 1080p final costs」这句是否成立 — 算术上偏乐观:五份 5 秒 480p 草稿 = 25 计秒 × $0.12 = $3.00;一份 5 秒 1080p 终稿带一段 5 秒参考 = 10 计秒 × $0.53 = $5.30。实际约为 57%,属营销式「roughly」,不是错误但不宜作为预算依据。
- [unlocatable] 价格数字与「No telemetry, no callbacks」是否可在仓内证实 — $0.53 / $0.12 / $0.20 费率与无遥测声明均属仓外服务事实(服务端与 CLI 二进制都不在本仓库),本 pin 无任何证据可核;按「定位不到不硬写」记待补,且已计入橙档理由。
- [ok] allowed-tools 声明与正文实际指令是否相符 — frontmatter line 3 为 `Bash(runcomfy *)`,正文全部可执行示例均为 `runcomfy run …`;安装行(npm/npx)与 RUNCOMFY_TOKEN 导出被明确划为「operator 一次性准备」,与本文件 line 215 的自述一致,未发现越界的 shell 指令。
- [discrepancy] 安装命令与仓库身份是否一致 — 本文件 line 35 写 `npx skills add genmedia-labs/skills --skill seedance-2-5-reference-to-video -g`,与 git remote(github.com/genmedia-labs/skills.git)一致;但仓库 README.md 仍写 `npx skills add agentspace-so/runcomfy-agent-skills --skill <skill-name>`(旧仓名),属仓库级文档漂移,非本 skill 内容错误,但会让读者拿到错的安装源。
6结论
25f8d8a50989d749…