VanillaSky — 从配置生成社交视频
视频是一个 VideoConfig JSON:一个有序的场景列表,每个场景引用一个
按驼峰式 ID 组织的精选模板。编写并检查配置,然后将其交给
用户在 VanillaSky Studio 中进行操作。用户在那里预览、编辑和导出 MP4;
不要在初始流程中渲染完整的 MP4。
三条不可逾越的原则
- 阅读目录;绝不猜测。 解析 CLI 后,运行
vanillasky templates获取捆绑的模板映射,然后vanillasky templates <id> --json获取精确的 schema。在线备用地址是https://vanillasky.ai/llms-components.txt;仓库和独立安装版本 携带registry/llms-components.txt和registry/r/<name>.json。如果 无法访问精确的目录,则停止,而不是凭空编造 ID 或变量。 - 绝不编造证据。 名称、引用、数字、统计数据、截图和 产品声明必须来自简要说明或提供的素材。如果模板 需要用户未提供的证据,请选择另一个模板。
- 绝不交未检查的配置。 验证检查结构; 只有查看渲染帧才能发现溢出、弱构图和 意外默认值。
启动会话
首先解析 CLI。官方的 VanillaSky CLI 并非作为 npm 包发布。
永远不要搜索 npm、运行 npm install vanillasky,或使用一个
仅拥有该名称的包。如果 command -v vanillasky 失败,
则根据此 SKILL.md 的路径解析此技能的安装目录,然后运行它的
官方引导程序:
node <installed-skill-directory>/scripts/install-cli.mjs
引导程序仅将 https://github.com/VanillaSkyAi/skills.git 克隆到
~/.vanillasky/release,安装该检出所声明的依赖项,
并在 PATH 上暴露其本地 CLI。如果检出来源不同或脚本失败,则停止;
不要替换为注册表包。
然后在创建第一个视频之前运行以下命令:
vanillasky update --check
vanillasky setup --check
vanillasky templates
update --check 报告较新的版本而不做任何更改。如果此处文档中的标志
不存在,请运行 vanillasky update。setup --check 报告
默认方向、浏览器、Pexels 密钥、音乐情绪和 DESIGN.md 状态。
缺少 Pexels 密钥不是阻塞问题:提及一次,股票搜索需要从 pexels.com/api 获取免费密钥,然后使用提供的媒体或不依赖股票的模板。 缺少 DESIGN.md 意味着没有自动品牌化;不要阻塞。
推导简要说明
首先使用提示词、仓库、DESIGN.md、URL 和提供的素材。最多提出三个问题, 并且只针对真正的空缺:
- 目标和格式 — 观众应该做什么或感受到什么:发布、评论、 里程碑,还是更新?
- 受众和证据 — 目标观众是谁,什么真实的数字、引用、 截图或产品细节支撑了声明?
- 素材 — 必须出现哪些截图、标志、剪辑或 URL?
根据目标平台推导方向:TikTok/Reels/Shorts → 纵向; YouTube 视频或明确宽幅的 X/LinkedIn 帖子 → 横向。否则使用配置的默认值,或者 把三个问题中的一个用于此。
将结果保存为 video.json 旁边的 video-brief.md。在后续轮次中重新读取
并更新它,而不是再次询问相同的问题。
默认工作流:在 Studio 中交接
-
编写
video.json,根据简要说明和捆绑的目录。 在编写变量之前,使用vanillasky templates <id> --json检查 入围模板的精确 schema。 -
解析股票媒体:当配置包含
mediaKeyword时:vanillasky resolve video.json这会选择一个 Pexels 结果并将确切的
mediaUrl写入配置, 使验证和重新渲染具有确定性。如果没有可用的 Pexels 密钥, 则改用提供的媒体、直接 URL 或mediaType: "gradient"。不要依赖 渲染时的搜索,因为这是交接状态。 -
验证 并修复每个错误和警告:
vanillasky validate video.json配置的
format选择正确的插槽契约;不要为每个视频硬编码--format launch。将警告视为需要解决的工作,而非装饰, 并且永远不要在存在警告的情况下描述验证为干净。 -
检查联系图:
vanillasky render video.json --sheet --out ./sheet打开
sheet/sheet.png并在需要时检查各个帧。必须 真正打开sheet/sheet.png;文件的存在不等于检查。 检查文本溢出、不可读的类型、未设置/看起来像默认值的值、未使用的素材、 视觉重复以及帧中间 75% 之外的关键内容。在每次视觉编辑后, 重复解析(如果需要)、验证和联系图。 -
在 Studio 中交接:
vanillasky studio video.jsonStudio 实时跟踪文件。在用户审查时继续编辑配置; 他们未保存的编辑会作为冲突出现,而不是被覆盖。当用户 满意时,他们从 Studio 导出 MP4。
如果打开了错误的浏览器,请传递
--browser "Google Chrome"或将浏览器 持久化到~/.vanillasky/config.json。在远程 shell 中使用--no-open。
默认情况下不要渲染完整的 MP4。 仅当用户明确要求文件或 Studio 无法使用时(CI/无头模式),才自行渲染:
vanillasky render video.json --open
对于该分支,观看结果并阅读完成横幅:确认总长度、音频覆盖、
方向和画面流畅性。包含完成块的 Watch 和 Studio 链接。vanillasky link video.json
重新打印它们而无需渲染。
编写默认路径
从以下形状开始,然后使用目录的精确 schema:
{
"format": "launch",
"orientation": "portrait",
"style": {
"font": "Inter",
"preset": "bold",
"brandKit": { "accent": "#6D5EF8", "secondary": "#F8B45E" }
},
"audio": { "trackId": "<from vanillasky tracks>" },
"scenes": [
{
"id": "s0",
"templateId": "media",
"variables": { "texts": "Ship it today", "mediaType": "gradient" },
"timing": { "fixedDuration": 3 }
}
]
}
brandKit属于style内部;故意选择一个样式预设。textArchetype和backgroundEffect是场景字段,而非变量。timing.fixedDuration设置独立场景长度。显式时间线使用连续的startTime和endTime;timing.duration不是一个字段。- 使用
vanillasky tracks根据情绪和能量选择音乐。静音是有效的, 但通常不适合社交视频。 - 倾向于使用真实的 HTTPS URL 或本地路径作为媒体。Base64 媒体会使分享链接
过大,并且
mediaKeyword结果必须固定到mediaUrl以实现 确定性的重新渲染。
当配置需要品牌化、媒体分辨率、显式时间控制、FPS 匹配或链接行为时, 阅读 references/config.md。
根据故事选择格式
| 格式 | 故事结构 | 典型长度 |
|---|---|---|
launch | 构建框架 → 理解 → 证明 | 3–8 个场景,通常 5 个 |
review | 引用 → 归属 → 结果 | 4–7 个场景,通常 5 个 |
milestone | 数字 → 背景 → 感谢 | 3–6 个场景,通常 4 个 |
update | 变化 → 演示 → 利益 | 4–7 个场景,通常 5 个 |
验证器强制执行场景数量、禁止的钩子、结尾放置和 相邻性规则。references/formats.md 包含生成的 契约。您的工作是做验证器无法做出的判断。
创意质量门
真实性和素材
- 用简要说明特定的内容替换每个模板默认值。永远不要提供占位符统计数据,
例如
10K、99.9%或<50ms。 - 使用每个重要的提供的截图。真实的产品界面胜过展示相同内容的 合成终端、编辑器、手机或浏览器。
- 将纵向截图匹配到手机模型,横向截图匹配到浏览器模型。
故事
- 钩子制造张力或好奇心;它不能“消耗”回报。
- 至少包含一个解释性主体,命名具体产品、受众或结果。通知、电话、推文和数字可以构建框架或证明,但不能单独解释产品。
- 结尾是一个地址——品牌、URL 或行动——而不是重复证明。
多样性和节奏
- 不要使每个主体都是卡片。至少使用两种非卡片主导的“寄存器”。
- 在一个平坦渐变上的普通句子是备选方案,不自动意味着强钩子。首选基于简要说明的视觉机制——警报用通知、开发者工作流用终端/编辑器、对话用聊天、提供的产品界面用设备或浏览器。即使是最小化的视频也需要一个具体的视觉想法;最小化意味着更少的元素,而不是在每个场景中使用相同的渐变和字体排印。
- 一致的调色板不等于场景多样性。共享相同平坦背景的三个或更多场景行即使它们的类型布局不同也未能通过此门。使用有根据的素材、股票背景、模板或适度的效果改变至少一个寄存器。当简要说明包含太少的批准副本或证据来支持许多不同场景时,使用格式的最短有效故事,而不是重复它。
- 给画面至少 3 秒,除非它是有意的短桥梁。变化背景运动,而不是在一个地方应用一个效果。
- 仅渐变的媒体场景应该是有意的品牌节拍,而不是因为股票或提供的媒体不方便而选择的备选方案。
- 检查实际出现的内容:持续时间有限的模板可能会省略后面的项目,即使配置包含它们。
文案
- 钩子:最多 7 个词。行动号召:最多 4 个词,最好是一个命令。
- 至少在一个场景中完整保留每个用户批准的标语或引用。不要通过分别展示其片段将一个批准的句子变成几个伪不同的场景;让视觉进展承载其他节拍。
- 避免三词列表的通用名词、类别或动词。节奏需要张力、进展或转折——而不是三个同义词。
- 将必须保持在一起的文本放在 nowrap 范围内;永远不要依赖 NBSP 进行 SVG 导出。
仅在模板失败时升级
使用能够表达简要说明的最低层级:
- 带有目的编写文案的模板。
- 带有调整变量的模板。
- 基于注册表项的弹出/自定义场景。
- 由沙箱场景元素组成的自定义场景。
默认路径在层级 2 停止。在使用层级 3 或 4 之前,阅读
references/custom-scenes.md、
references/libraries.md、
references/motion.md 和
references/visual-rules.md。使用
vanillasky scope 和生成的
references/motion-api.md,而不是发明 API。
参考路由器
- references/config.md — 时间控制、样式、品牌化、媒体、音频、FPS、DESIGN.md 和分享链接行为。
- references/formats.md — 生成的插槽契约和模板类别。
- references/custom-scenes.md — 弹出、来源、沙箱契约和验证规则。
- references/libraries.md — 生成的五库映射、受众指导、依赖项、安装目标和精确导出组。
- references/motion.md — 编排、阅读时间、焦点层级和剪辑连续性。
- references/motion-api.md — 生成的函数、弹簧和缓动名称,供自定义场景使用。
- references/visual-rules.md — 自定义场景的字体排印、方向布局、颜色、光照和构图。