把 Vibbit OpenAPI 的五类能力封装成一个 Node.js CLI,Claude 不用每次都手写 HTTP 调用。其中两项是同步接口(提交即返回结果),另外三项是异步接口(脚本自动轮询直到 COMPLETED / FAILED)。
当用户的请求能对应到下面任意一项时,触发本 skill:
| 用户意图(示例) | 任务类型 | 同步? |
|---|---|---|
| --- | --- | --- |
| "生成一张图"、"AI 画一只猫"、"出图" | AIGC_IMAGE_GENERATION | 异步 |
| "解析这个抖音链接"、"这条小红书链接讲了什么" | PARSE_CONTENT_URL | 异步 |
| "拆解一下这条爆款"、"视频拆解"、"分析这条带货视频" | VIDEO_BREAKDOWN | 异步 |
| "我有哪些数字人"、"列一下可用数字人" | QUERY_DIGITAL_HUMAN_LIST | 同步 |
| "用 xx 数字人做条口播"、"初始化数字人视频"、"数字人口播" | DIGITAL_HUMAN_ORAL_BROADCAST | 同步 |
五项之外的任何场景都不要用这个 skill。
用户的 shell 必须已导出以下两个环境变量:
VIBBIT_API_KEY —— 集思平台签发的 bearer token,必填,缺失时脚本报错退出VIBBIT_BASE_URL —— 可选,不设置时默认走 prd https://openapi.vibbit.cn;需要切别的环境(测试/灰度等)时 export 这个变量覆盖VIBBIT_API_KEY 缺失时,告诉用户去 https://app.vibbit.cn/api-keys 获取,获取后告诉我,我来帮你配置;不要猜或跳过。
Node.js 要求 18+(用到内置 fetch)。脚本通过远程接口 https://tools.vibbit.ai/api/file-info 获取素材元信息,无需 WASM 或 npm 依赖。系统若装有 ffprobe(ffmpeg 附带)会自动作为备用探测方式,没有也完全能正常运行。
脚本目录:$VIBBIT_SKILL_DIR = ~/.claude/skills/vibbit-skills/scripts,主入口是 $VIBBIT_SKILL_DIR/vibbit.js。下面示例里的 $VIBBIT_SKILL_DIR 仅用于可读性,实际调用时请用真实的绝对路径。
> 独立使用:scripts/vibbit.js 是自包含的单文件,没有 npm 依赖。拷到任何 Node 18+ 的机器上直接跑,不限定必须放在 ~/.claude/skills/ 下。系统若装有 ffprobe 可选自动启用,没有也完全可以运行。
始终通过 bundled CLI,不要直接调 HTTP 接口。这很重要,因为线格式有几个坑:
input_info.input 是一个已经字符串化的 JSON(双层编码),不是嵌套对象task_type、input_info、digital_human_id 等)oral_broadcast 的 material_list 每个元素需要完整 file_info 结构(含 file_size / mime_type / width / height / duration 等),脚本会自动探测生成node $VIBBIT_SKILL_DIR/vibbit.js <子命令> [--参数]
脚本成功时把 JSON 写到 stdout:同步任务是 {"result": ...},异步任务是 {"task_id": "...", "result": ...};失败时输出 {"error": "..."} 并以非零退出码结束。拿到 stdout 后先解析出有用字段,再用自然语言呈现给用户,不要把原始 JSON 一股脑 dump 给用户看。
gen_imagenode $VIBBIT_SKILL_DIR/vibbit.js gen_image \
--prompt "a cute orange cat sitting on a window sill, studio ghibli style" \
[--ref-url https://cdn.example.com/ref.jpg]
--prompt 必填。按用户原话翻译/搬运即可,除非用户明确要求润色,否则不要随便加戏--ref-url 可选,参考图脚本会提交并自动轮询;最终 result 里一般包含生成图的 URL,把 URL 直接给用户。
parse_urlnode $VIBBIT_SKILL_DIR/vibbit.js parse_url \
--url "https://v.douyin.com/xxxxxxx"
支持抖音 / 小红书 / B 站的分享链接。result 通常包含原始视频 URL、标题、描述、ASR 字幕。只展示用户关心的字段,不要全量 dump。
breakdownnode $VIBBIT_SKILL_DIR/vibbit.js breakdown \
--video-url "https://cdn.example.com/video.mp4" \
--sub-tasks asr,hot,bgm
--video-url 必填。直接传分享链接(抖音 / 小红书 / B站)或裸 MP4 URL 都可以,breakdown 内部已包含解析能力,不需要先调 parse_url--sub-tasks 必填,逗号分隔,可选值:asr —— 语音转文字transition —— 转场分析hot —— 爆点 / 钩子分析bgm —— 背景音乐asr,hot,并告诉用户你选了什么方便纠正拆解任务偏慢,一两分钟很正常。等待过程中主动告诉用户"正在分析视频,稍等一下",让用户知道在跑,不是卡住了。
list_digital_humansnode $VIBBIT_SKILL_DIR/vibbit.js list_digital_humans
同步接口。返回当前用户可用的数字人配置(租户级 + 共享 + 个人)。呈现给用户时至少展示名称,按分组列出,让用户直接说"用 XX",不要让用户手动填写 ID。
oral_broadcastnode $VIBBIT_SKILL_DIR/vibbit.js oral_broadcast \
--message "大家好,今天给大家介绍一款新品..." \
--digital-human-id 10001 \
[--title "新品上架首秀"] \
[--material-url https://cdn.example.com/a.mp4 \
--material-name "新品A镜头.mp4" \
--material-url https://cdn.example.com/b.jpg \
--material-name "包装特写.jpg"]
--message 必填。既是聊天消息,又是预设文案——后端会自动把 has_script 置为 true,用户传什么文字就会被当作视频口播的脚本原文使用,LLM 不会再改写--digital-human-id 必填。如果用户没指定用哪一个,先调 list_digital_humans 让用户挑,再继续--title 可选。传了就作为预设标题,跳过 LLM 自动生标题那一步;不传时后端照常调模型生成--material-url 可选、可重复。每项只传 URL,file_name 默认由 URL 末段自动推断。--material-name 可选、可重复。传了就必须和 --material-url 数量相等,按出现顺序一一对应。用户给出友好名称(比如 OSS key 是乱码、展示名另有规定)时用这个;不需要可以整个不传。任何情况下调用 oral_broadcast 之前,必须先完成 B-roll 生图。不管文案是用户提供的、还是对话中生成确认的,都要先跑 gen_image,拿到图片 URL 后再提交口播。除非用户明确说"不需要 B-roll"或"不要配图",否则不允许跳过这一步。
同步接口。返回的 result 是一个字符串 URL,指向前端聊天页(prd 和 demo 域名不同)。返回给用户时,用以下格式呈现,不要用其他措辞:
已经帮你备好了
主题:{口播标题或文案前10字}
数字人:{数字人名称}
B-roll 素材:共 {N} 张图片(没有素材时省略这行)
点进去确认一下,没问题就直接出片 👉 {URL}
list_digital_humans,把选项呈现给用户,等用户挑完再继续gen_image 生成(不需要用户额外描述画面)--material-url 附入 oral_broadcast,一并提交parse_url 解析链接,拿到标题 + ASR 字幕gen_imageoral_broadcast> 我能帮你做这几件事:
>
> - 做口播视频 — 有文案直接做,没有告诉我主题我来写
> - 复刻爆款 — 丢个抖音 / 小红书 / B站链接,照着做一条你自己的
> - 拆解视频 — 分析一条视频为什么火、钩子在哪、节奏怎么走
> - 生 B-roll — 根据口播内容自动配图
> - 看数字人 — 查看你能用哪些数字人形象
>
> 想做哪个?
breakdown,传入分享链接即可,不需要先调 parse_urlparse_url 就可以了parse_url,从结果里提取原视频 URL 给用户gen_image --ref-url,不要误触 parse_url 或 breakdowncurl / fetch —— 永远走 vibbit.js。snake_case + 双层字符串化 JSON + file_info 结构这些坑,手写一次就容易出 bug共 7 个版本