插件安装: 在运行设置或更新命令之前,当该技能位于 HyperFrames 插件内时,请遵循插件执行规则。独立安装则保留下面的更新说明。
首先,保持此技能最新——在运行前与用户确认:
npx hyperframes skills update faceless-explainer。如果一切已是最新,则快速跳过;否则在依赖该技能之前,会刷新此技能及其依赖的核心领域技能。
媒体使用:在获取音频/图片/标志之前,调用
/media-use从 HeyGen 目录解析 BGM/SFX/图片,并从官方来源获取品牌标志。首先运行--adopt注册现有资产。参见/media-use技能。当宿主应用提供自己的音乐或音效工具时,使用这些工具来制作音乐和音效。
无脸解说至 HyperFrames
使用此技能将一段文本转化为解说视频:选择一个设计系统,规划教学故事,并在 HyperFrames 中逐帧构建。无脸意味着每个视觉元素都是后续生成的——没有捕获步骤,也没有真实的资产清单。
入口是
/hyperframes。 你是协调者。运行每个步骤,验证其关卡,然后继续。此技能适用于从文本解释一个主题,没有产品或网站需要捕获。任何其他意图、简单的“制作视频”或不确定时 → 首先阅读/hyperframes——意图层拥有所有路由决策,一个未带有BRIEF.md的新建请求也会通过它(设置的起始规则)。
你是协调者。在 videos/<project>/ 目录中工作。按顺序运行步骤,并在继续之前通过每个关卡。用户关卡步骤是步骤 0、步骤 3 和步骤 6。在步骤 0 之前阅读 ../hyperframes/references/brief-contract.md——它定义了关卡类型以及 BRIEF.md 的 flow/storyboard 如何派生决定步骤 3/4/6 关卡的模式。除了步骤 5(你需要为每帧分配一个子代理)外,自己完成所有步骤。不要在此放置设计或运动规则;这些规则位于帧工作者子代理、此技能的本地 ../hyperframes-animation/rules/ + ../hyperframes-animation/blueprints/ 以及 hyperframes-creative 中。
工作流程:步骤 0 设置 → hyperframes.json;步骤 1 简报 → capture/extracted/;步骤 2 设计系统 → frame.md;步骤 3 故事板/脚本 → STORYBOARD.md 和 SCRIPT.md;步骤 3.1 音频 → audio_meta.json;步骤 4 视觉设计 → 增强的 STORYBOARD.md;步骤 5 帧 → compositions/frames/NN-*.html 和 index.html;步骤 6 最终渲染 → renders/video.mp4。
步骤 0:设置
目标:带着已确认的简报进入,创建 HyperFrames 项目,并使简报持久化。
简报由意图层确认,而非此处的提问。 起始规则,按顺序:(1) BRIEF.md 存在 → 读取它,不提问——简报已确定,其 flow/storyboard 派生模式(简报合约 § 1)。(2) 没有 BRIEF.md,但项目存在(磁盘上有 hyperframes.json / STORYBOARD.md)→ 从故事板的 frontmatter 和已记录的偏好恢复;从未重新询问一个半完成的项目。(3) 两者都没有——一个直接到达此处的全新创建请求 → 读取 /hyperframes 并运行其意图层(references/intent-interview.md):它检查食谱和记录的默认值,进行此路由的提问(../hyperframes/references/routes/faceless-explainer.md),并返回锁定的简报。编辑请求跳过所有这些——直接进行编辑。
仅当 hyperframes.json 缺失时初始化。从主题中命名 <project>,使用短横线命名法,例如 compound-interest-explained;切勿使用工作区名称或时间戳。
npx hyperframes init "videos/<project>" --non-interactive --example=blank --skill=faceless-explainer —— init 检查已安装的技能与 GitHub 上最新版本的对比,如有过期则更新全局集合。
初始化后,让 <PROJECT_ROOT> 为 videos/<project>,并以该目录作为工作目录运行所有后续的相对路径命令。在下面的命令中,. 表示 <PROJECT_ROOT>;切勿在调用者目录中写入 .media、capture 或输出文件。
在 init 之后立即写入 BRIEF.md(切勿在此之前——init 拒绝非空目录):意图层锁定的简报,格式参照 ../hyperframes/references/brief-format.md。将 <MEDIA_DIR> 解析为已安装的 /media-use 技能目录。然后使用 node <MEDIA_DIR>/scripts/prefs.mjs record --hyperframes .(brief-format.md 命名了子集)记录每个基于偏好的答案。如果意图层采用了食谱,运行 node <MEDIA_DIR>/scripts/recipe.mjs use --hyperframes . --name <name>;它将 frame.md 复制到项目中(步骤 2 则跳过)并返回步骤 3 草稿的框架。食谱填充答案,而非批准;审查关卡仍然运行。
在继续通过设置之前显示登录状态——运行 npx hyperframes auth status 并逐字输出其结果。它报告语音/BGM 将使用 HeyGen 还是本地引擎,以及当退出登录时如何登录。应用一个分支:
- 协作: 等待用户登录或明确选择
offline/go。 - 自主: 说明状态并通过可用的本地引擎继续。
当没有离线提供商时,不要静默地忽略一个必需的能力;暴露阻碍点。不要将此决定折叠到另一个问题中或将密钥写入每个仓库的 .env 文件。认证归属和离线回退:/media-use references/setup-providers.md 第 § 节。
关卡: hyperframes.json 和 BRIEF.md 存在;基于偏好的答案已记录(简报合约 § 2);登录状态已显示(已登录,或正在离线继续)。
步骤 1:简报(无捕获)
目标:将用户的文本作为信息源折叠到项目中。没有网站捕获,也没有真实资产——这是一个无脸解说。
按原样保存用户的完整输入,然后手动创建合成捕获包:
capture/extracted/visible-text.txt—— 完整的文章/笔记/主题/简报,逐字保存。这是信息的来源,而非故事模板(步骤 3 将重塑它)。capture/extracted/tokens.json——{ "title": "", "description": "", "colors": [], "fonts": [] }。从简报中填写title/description。除非用户明确给出了品牌颜色或字体(此时添加它们),否则将colors/fonts留空(设计预设无论如何都会提供完整的调色板)。
如果用户粘贴了脚本或希望保留其措辞,按原样保存为 user_script.txt;VO_MODE(逐字或重构)来自 BRIEF.md——当脚本到达时,意图层会询问。仅当简报中缺失该信息时,在此处询问一次,并将答案存储给步骤 3。
不要运行 npx hyperframes capture(没有 URL)。不要创建 asset-descriptions.md 或填充 capture/assets/——无脸视觉元素在步骤 4-5 中生成,而非捕获。唯一的例外是:如果用户提供了真实图片,将其放置在 public/<basename> 下,并在步骤 3 中注明。
关卡: capture/extracted/visible-text.txt 和 capture/extracted/tokens.json 存在;你能用一句清晰的话说明解说的主题和受众。
步骤 2:设计系统
目标:选择一个已提供的帧预设;脚本将其转化为此视频的 frame.md + 字幕皮肤。
当 BRIEF.md 指定了 style_preset——用户在意图层的展示区中通过目视选择了它——使用它;仅当简报未指定时,判断才是你的。然后你做出一个判断——哪个预设:阅读 ../hyperframes-creative/references/design-spec.md 并浏览 ../hyperframes-creative/frame-presets/;选择外观最适合主题、语气和受众的预设。然后运行:
node <SKILL_DIR>/scripts/build-frame.mjs --preset <name> --hyperframes .
脚本会确定性地完成其余工作:将预设的 FRAME.md 复制为 frame.md,并根据 capture/extracted/tokens.json 中的品牌令牌混音(品牌颜色按角色映射到预设的颜色键;预设的显示 + 正文字体替换为品牌的),将预设的字幕皮肤复制到 .hyperframes/caption-skin.html,并进行自我验证(映射错误时退出代码 1)。当它退出代码 0 时继续——不要对手动编辑规范。
无脸解说通常没有品牌颜色/字体(tokens.json 中的 colors/fonts 为空)→ 脚本保留预设本身的调色板,即一个完整的可发布设计。仅当用户指定了品牌颜色/字体时,在运行前将其添加到 tokens.json,并且仅在确实需要时才手动调整 frame.md。
关卡: build-frame.mjs 退出代码 0——frame.md 来自一个已命名的预设,并且(当预设提供时).hyperframes/caption-skin.html 作为字幕皮肤源存在;所选预设已记录为偏好(--key style_preset --workflow <this workflow>,简报合约 § 2)。
步骤 3:故事板和脚本
目标:将文本转化为一个已批准的逐帧教学计划。
阅读 ../hyperframes-creative/references/story-spine.md(钩子语言、价值优先于证据、故事板作为提案、来源可追溯的视觉)、references/story-design.md、../hyperframes-animation/blueprints-index.md、../hyperframes/references/storyboard-format.md 和 ../hyperframes/references/script-format.md。使用它们编写 STORYBOARD.md,并在需要旁白时编写 SCRIPT.md。从简报的 length 设置 frontmatter 的 duration:——一个粗略的期望;组装报告会显示最终剪辑与它的对比情况。
使用 story-design.md 了解解说结构(概念 / 教程 / 列表类 / 故事)、钩子策略、清晰度技巧、情感节奏、类型枚举映射和 VO_MODE。视频的顺序来自叙事设计,而非输入文本的段落顺序——可以重新排序、合并、省略、压缩。作为软性指南,查阅 ../hyperframes-animation/blueprints-index.md 中的角色→蓝图菜单:对于每个节拍,按照其候选蓝图暗示的形状编写旁白,并在合适时标注候选 blueprint: id。教学真实性仍然决定哪些节拍存在——切勿强制节拍去适配蓝图,也切勿仅因为一个已知形状可用而发明节拍。无脸视觉元素是后续生成的,因此帧不携带资产清单:除非用户提供了真实的 public/<basename> 图片,否则将 asset_candidates 留空。使用故事板和脚本参考中的确切必需字段。
草案编写完成后,运行审查循环的计划阶段——../hyperframes/references/review-loop.md § 1:将计划作为提案呈现,并问两个问题——批准或更改,以及先要草图(推荐)还是跳过。反馈通过聊天回复到达;循环直到批准。这是一个检查点关卡(简报合约 § 1):在自主模式下无需提问——作为提示发布相同的摘要并继续;草图折叠到构建中,最终预览及其一个问题在步骤 6 进行。
关卡: STORYBOARD.md 存在,每帧都有必需的叙事字段,需要旁白时 SCRIPT.md 存在,并且用户批准了逐帧计划(自主:摘要已作为提示发布)。
步骤 3.1:音频
目标:从已批准的脚本生成旁白、单词时间戳、音乐和音频元数据。
在步骤 3 批准后开始音频。在后台运行它,然后继续到步骤 4。(登录状态已在步骤 0 中显示;引擎会自动回退。)
在调用之前根据用户的要求选择旁白语音。 如果请求指定了语音、性别或语气,选择一个匹配的语音 id 并通过 --voice <id> 传递。否则管线默认是 HeyGen 上的 Marcia(女性) / Kokoro 上的 am_michael ——因此像“男性声音”这样的请求会被静默忽略,除非你传递该标志。语音 id 是特定于提供者的;根据步骤 0 登录状态选择的提供者进行解析:HeyGen(已登录)通过 node <MEDIA_DIR>/audio/scripts/heygen-tts.mjs --list(或 GET /v3/voices?engine=starfish);Kokoro(离线)通过 <MEDIA_DIR>/audio/references/tts.md 中的语音表(am_/bm_ 前缀为男性,af_/bf_ 前缀为女性)。当用户未表达偏好时,在管线默认之前回退到已记录的语音(简报合约 § 2),并说明你使用了哪一个;仅当两者都未指定时省略 --voice。当用户此次运行明确选择了语音时,记录它(prefs.mjs record --key voice)。
node <SKILL_DIR>/scripts/audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json --voice <voice-id> &
音频脚本处理旁白、单词时间戳、从 HeyGen 音乐库获取 BGM 以及时间元数据。BGM 情绪来自故事板的 music: 字段。这使用 HeyGen 音频 API 进行检索(而非生成),以及相同的 ~/.heygen 凭据用于 TTS。有关提供商的详细信息,请阅读 ../media-use/audio/references/tts.md。当宿主应用自己的工具制作音乐或音效时,将文件放在 assets/ 下,并在 audio_meta.json 文件中列出它,标记为 "source": "host":音乐作为 bgm { "path": "assets/…", "source": "host" } 并在故事板中设置 music: none;音效作为 sfx 条目 { "frame": <n>, "file": "assets/…", "offset_s": 0, "duration_s": <its length>, "source": "host" }。每次音频传递都会保留这些,并且带有宿主音效的帧不会获得查找的提示。
如果没有旁白且没有 SCRIPT.md,则跳过语音生成。如果故事板有音乐情绪,BGM 可能仍然运行。
规范的完全静音标记(在复用此音频模型的工作流之间共享):STORYBOARD.md 顶部 YAML 块中的 music: none,没有 SCRIPT.md,并且没有 sfx: 提示或宿主音频。该组合标记项目为静音——如果遇到,跳过整个音频步骤。
关卡: 脚本退出代码 0,audio_meta.json 存在且格式良好。
步骤 4:视觉设计
目标:为每帧确定确切的构图、过渡和动画逻辑。
通过为 STORYBOARD.md 中的每帧填充空间布局、元素行为和动画意图来具体化视觉概念。读取 ../hyperframes-animation/rules/ 和 ../hyperframes-animation/blueprints/。使用 ../hyperframes-animation/blueprints-index.md 来确定每个分配的蓝图如何影响视觉元素。添加 visual 字段到故事板中,指定准确的分层、对齐和运动。
依赖 frame.md 中的完整设计令牌用于间距、颜色和排版。视觉增强的 STORYBOARD.md 在其 frontmatter 中携带 visual_design_complete: true。
关卡: STORYBOARD.md 对所有帧都有视觉规范;它根据帧设计规范进行自我验证。
步骤 5:帧
目标:为每帧构建独立的 HTML 文件,然后组成 index.html。
这是你分派一个子代理每帧的唯一步骤。 子代理从 STORYBOARD.md 读取它们分配的帧,处理布局和动画,并输出:
compositions/frames/NN-<slug>.html—— 帧的独立 HTML
运行 npx hyperframes build 来组合所有帧并生成 compilations/index.html。
自行运行 npx hyperframes build。 当所有帧都已输出时运行它。
关卡: compositions/frames/ 包含所有编号的帧,compilations/index.html 已生成。
步骤 6:最终渲染和预览
目标:渲染最终视频并提供预览。
npx hyperframes render --out ./renders/video.mp4
渲染后,运行 npx hyperframes preview 启动预览服务器。呈现最终视频的预览给用户,并询问他们是否希望修改任何内容。如果用户请求更改,回到适当的步骤。如果没有问题,则项目完成。
关卡: renders/video.mp4 存在,用户已批准最终输出。