faceless-explainer

faceless-explainer

热门

将任意文本(文章、笔记、主题、简报)转化为无人物出镜的解说视频,时长最长约3分钟(最佳30-90秒),所有视觉元素均为原创(排版、抽象图形、图表、数据可视化),而非实拍素材。不涉及URL、网站抓取或真实资产。此技能适用于主题解说、概念拆解、教程、列表文章和叙事型解说。请勿用于产品发布/推广(请使用/product-launch-video)、真实网站导览(请使用/website-to-video)、GitHub PR(请使用/pr-to-video)、现有素材加字幕(请使用/embedded-captions)或短篇无旁白动态图形(请使用/motion-graphics)。若意图不明确,请先通过/hyperframes路由。

3.1万Star
3036Fork
更新于 2026/6/25
SKILL.md
只读
名称
faceless-explainer
描述

将任意文本(文章、笔记、主题、简报)转化为无人物出镜的解说视频,时长最长约3分钟(最佳30-90秒),所有视觉元素均为原创(排版、抽象图形、图表、数据可视化),而非实拍素材。不涉及URL、网站抓取或真实资产。此技能适用于主题解说、概念拆解、教程、列表文章和叙事型解说。请勿用于产品发布/推广(请使用/product-launch-video)、真实网站导览(请使用/website-to-video)、GitHub PR(请使用/pr-to-video)、现有素材加字幕(请使用/embedded-captions)或短篇无旁白动态图形(请使用/motion-graphics)。若意图不明确,请先通过/hyperframes路由。

media-use: 在获取音频/图片前,调用/media-use从HeyGen目录中解析BGM/SFX/图片。先运行--adopt注册已有资产。参见/media-use技能。

无人物解说转HyperFrames

使用此技能将文本转化为解说视频:选择设计系统,规划教学故事,并在HyperFrames中逐帧构建。无人物意味着所有视觉元素均由后续流程原创生成——无需抓取步骤,也无真实资产清单。

在步骤0前确认路由。 你是编排者。执行每一步,验证其关卡,然后继续。此技能适用于从文本解说主题,无需产品或网站抓取。其他意图请路由至别处:产品发布/推广→/product-launch-video;真实网站导览→/website-to-video;GitHub PR→/pr-to-video;现有素材加字幕→/embedded-captions;短篇无旁白动态图形→/motion-graphics。若用户仅说“制作视频”或路由不确定,请先阅读/hyperframes

你是编排者。在videos/<project>/目录下工作。按顺序执行步骤,通过每个关卡后再继续。用户参与的关卡为步骤0、步骤3和步骤6。除步骤5(为每帧分派一个子代理)外,所有步骤均由你亲自完成。请勿在此处放置设计或运动规则;这些规则位于帧工作子代理、hyperframes-creativehyperframes-animation中。

工作流:步骤0设置→hyperframes.json;步骤1简报→capture/extracted/;步骤2设计系统→frame.md;步骤3故事板/脚本→STORYBOARD.mdSCRIPT.md;步骤3.1音频→audio_meta.json;步骤4视觉设计→增强的STORYBOARD.md;步骤5帧→compositions/frames/NN-*.htmlindex.html;步骤6最终渲染→renders/video.mp4


步骤0:设置与简报

目标:锁定核心视频简报,并在需要时创建HyperFrames项目。

仅在hyperframes.json缺失时初始化。将<project>命名为主题的kebab-case形式,例如compound-interest-explained;切勿使用工作区名称或时间戳。

npx hyperframes init "videos/<project>" --non-interactive --skip-skills --example=blank

在简报前显示登录状态——运行npx hyperframes auth status逐字输出其结果(不要转述或重写)。 它会报告语音/BGM将使用HeyGen还是本地引擎,以及未登录时的登录方法。如果未登录,则停止并等待用户选择——登录,或说“go”/“offline”以使用本地引擎继续——然后再询问简报或其他内容。 将其视为一个真正的决策点,而非附带说明;不要将选择并入简报问题,也不要将密钥写入每个仓库的.env。(在自主模式下,记录状态并离线继续。)参见../hyperframes-media→Preflight获取规范指导。

关卡: hyperframes.json存在;角度、时长、宽高比和语言已锁定;登录状态已显示(已登录,或继续离线)。


步骤1:简报(无抓取)

目标:将用户的文本作为信息源纳入项目。不涉及网站抓取或真实资产——这是一个无人物解说。

将用户的完整输入逐字保存,然后手动创建合成抓取包:

  • capture/extracted/visible-text.txt——完整的文章/笔记/主题/简报,逐字保存。这是信息的来源,而非故事模板(步骤3会重塑它)。
  • capture/extracted/tokens.json——{ "title": "", "description": "", "colors": [], "fonts": [] }。根据简报填写title/description。除非用户明确提供了品牌颜色或字体,否则将colors/fonts留空——若提供了则添加(设计预设会提供完整的调色板)。

不要运行npx hyperframes capture(没有URL)。不要创建asset-descriptions.md或填充capture/assets/——无人物视觉元素在步骤4-5中原创生成,而非抓取。唯一例外:如果用户提供了真实图片,将其放在public/<basename>下,并在步骤3中注明。

关卡: capture/extracted/visible-text.txtcapture/extracted/tokens.json存在;你能用一句清晰的话说明解说的主题和受众。


步骤2:设计系统

目标:选择一个已提供的帧预设;脚本将其转化为本视频的frame.md+字幕皮肤。

你需要做出一个判断——选择哪个预设。阅读../hyperframes-creative/references/design-spec.md并浏览../hyperframes-creative/frame-presets/;选择外观最适合主题、语气和受众的预设。然后运行:

node <SKILL_DIR>/scripts/build-frame.mjs --preset <name> --hyperframes .

脚本将确定性完成其余工作:复制预设的FRAME.mdframe.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作为字幕皮肤源存在。


步骤3:故事板与脚本

目标:将文本转化为经批准的逐帧教学计划。

阅读references/story-design.md../hyperframes-core/references/storyboard-format.md../hyperframes-core/references/script-format.md。使用它们编写STORYBOARD.md,并在需要旁白时编写SCRIPT.md

使用story-design.md获取解说结构(概念/教程/列表/故事)、钩子策略、清晰度技巧、情感节奏、类型枚举映射和VO_MODE。视频序列来自叙事设计,而非输入文本的段落顺序——可重新排序、合并、省略、压缩。无人物视觉元素在后续流程中生成,因此帧不携带资产清单:除非用户提供了真实的public/<basename>图片,否则将asset_candidates留空。使用故事板和脚本参考中的必填字段。

草稿完成后,显示逐帧摘要。在同一条消息中向用户询问两件事:(a) 批准或请求修改,(b) 是否想要故事板框架的实时预览(npx hyperframes preview)——仅在用户同意时打开。迭代直到获得批准,并将预览选择带到步骤6。

关卡: STORYBOARD.md存在,每帧都有必填的叙事字段;需要旁白时SCRIPT.md存在;用户批准了逐帧计划。


步骤3.1:音频

目标:根据批准的脚本生成旁白、单词时间戳、音乐和音频元数据。

在步骤3批准后开始音频。在后台运行它,然后继续步骤4。(登录状态已在步骤0中显示;引擎会自动回退。)

node <SKILL_DIR>/scripts/audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json &

音频脚本处理旁白、单词时间戳、从HeyGen音乐库查找BGM以及时间元数据。BGM情绪来自故事板的music:字段。这使用HeyGen音频API进行检索而非生成,并使用与TTS相同的~/.heygen凭据。有关提供商详情,请阅读../hyperframes-media/references/tts.md

如果没有旁白且没有SCRIPT.md,则跳过语音生成。如果故事板有音乐情绪,BGM仍可能运行。

关卡: 音频任务已启动,或项目标记为静音。


步骤4:帧视觉设计

目标:为每个故事板帧添加视觉方向、布局意图和运动选择。

原地编辑STORYBOARD.md。不要创建另一个故事板。使用frame.md作为颜色、排版、布局感觉和风格的真相来源。

阅读references/visual-design.mdreferences/composition.mdreferences/motion-language.md../hyperframes-animation/。使用visual-design.md获取必填的帧字段和必填的## Video direction块。使用composition.md获取布局、层次、焦点和原创视觉处理。使用motion-language.md../hyperframes-animation/获取有效的效果和蓝图ID。不要发明效果名称或蓝图ID。

对于每帧,添加必填的视觉和运动字段,包括effectsfocal和/或roles。由于解说是无人物,focal/roles描述原创视觉元素(一个关键词、一个图表节点、一个数据可视化系列),而非抓取资产。添加一个视频范围的## Video direction块,用于整体视觉方向、运动风格、节奏和设计规则。

不要更改故事、脚本、transition_in或源文本。不要在此步骤中编写HTML。没有资产暂存步骤——无人物视觉元素由步骤5的工作者构建。如果用户提供了真实的public/<basename>图片,在相关帧的focal/roles中通过路径引用它;否则无需暂存。

关卡: 每帧都有effects加上focal和/或roles## Video direction存在。


步骤5:构建帧

目标:将每个故事板帧构建为HTML合成,并组装可播放的视频。

如果音频已启动,等待步骤3.1的音频完成。然后同步时长并获取音效;如果静音则跳过两者。

node <SKILL_DIR>/scripts/audio.mjs sync-durations --audio-meta ./audio_meta.json --storyboard ./STORYBOARD.md

node <SKILL_DIR>/scripts/audio.mjs fetch-sfx --storyboard ./STORYBOARD.md --hyperframes .

时长同步是机械性的:真实语音时长优先;静音帧保留估计值;切勿手动编辑同步后的时长。

在分派前,阅读sub-agents/frame-worker.md../hyperframes-core/references/subagent-dispatch.md。每帧分派一个子代理,尽可能并行;否则分批运行工作者。每个工作者只处理一帧。

每个工作者的上下文必须包含PROJECT_DIRframe_id、画布大小、字幕状态和保留区域(如果启用了字幕),以及ANIM_DIR../hyperframes-animation/的绝对路径)。每个工作者读取frame.mdSTORYBOARD.md中自己的## Frame N块,以及每个引用的效果或蓝图ID的配方主体。每个工作者只写入compositions/frames/NN-*.html。工作者绝不能编辑STORYBOARD.md

当每个工作者返回时,编排者在STORYBOARD.md中将该帧标记为animated

在音频时间存在后,在后台构建字幕并组装索引:

node <SKILL_DIR>/scripts/captions.mjs build --storyboard ./STORYBOARD.md --audio-meta ./audio_meta.json --hyperframes . --out ./caption_groups.json &

node <SKILL_DIR>/scripts/assemble-index.mjs --storyboard ./STORYBOARD.md --hyperframes .

captions.mjs使用项目的.hyperframes/caption-skin.html(在步骤2中复制)作为字幕外观,从frame.md注入品牌令牌;如果没有皮肤,则渲染内置的默认药丸形状。captions: skipped (<reason>)是有效的。当明确跳过时,继续而不带字幕。

关卡: 每帧都标记为animatedindex.html存在,字幕已构建或明确跳过。


步骤6:最终确定

目标:验证组装的视频,获得用户批准,并渲染最终的MP4。

注入转场,运行检查,暂停供审查,然后渲染。

node <SKILL_DIR>/scripts/transitions.mjs inject --storyboard ./STORYBOARD.md --hyperframes .

node <SKILL_DIR>/scripts/transitions.mjs verify --storyboard ./STORYBOARD.md --index ./index.html

npx hyperframes lint

npx hyperframes validate

npx hyperframes inspect

npx hyperframes snapshot --at <frame-midpoints>

snapshot将捕获的帧拼接成一张联系表(snapshots/contact-sheet.jpg)。快速浏览;如果没有明显问题,继续——不要在此停留。

如果命令失败,显示stderr并停止——不要堆叠恢复命令。自行修复:对compositions/frames/NN-*.html进行最安全的编辑,然后重新运行失败的检查。

已知误报——不要追查。 inspect可能报告少量text_box_overflow错误,约1-4px,出现在字幕高亮词上(选择器#caption-word-* / .caption-line)。字幕药丸使用故意紧凑的line-height(在scripts/captions.mjs中设置一次),并且没有overflow:hidden,因此一个粗体显示字形的墨水会溢出几像素到药丸自身的内边距中——实际上没有任何内容被裁剪。将这些视为预期并继续。不要增大字幕的line-height(这会使药丸膨胀,更糟)。仅当text_box_overflow命名的是元素(#el-NN-*)而非字幕词时才采取行动。

检查通过后,暂停供用户审查。视频已组装、可查看,并可在Studio中编辑。仅在步骤3和步骤6之间管理一次预览:如果用户之前要求过则打开,如果之前拒绝过则提供,如果用户已在Studio中审查则不再询问。

预览:npx hyperframes preview

仅在用户批准后渲染:

npx hyperframes render --skill=faceless-explainer --quality high --output renders/video.mp4

渲染后不要重新运行lintvalidateinspectsnapshot,除非用户要求。

关卡: 渲染前lintvalidateinspect通过;用户在审查暂停时批准;renders/video.mp4存在。最终回复说明MP4路径和最终时长。


快速参考

格式: 默认横向1920x1080;纵向1080x1920;方形1080x1080。在故事板前言中设置一次格式。

无人物与抓取资产工作流的差异: 无步骤1抓取(合成tokens.json + visible-text.txt);无asset-descriptions.mdcapture/assets/;步骤4无资产暂存;asset_candidates默认空;每个视觉元素由步骤5工作者原创(排版/抽象图形/图表/数据可视化)。用户提供的public/<basename>图片是唯一的真实资产路径。

后台脚本: 工作流仅包含以下scripts/下的脚本:build-frame用于采用并品牌混音帧预设到frame.md(+字幕皮肤);audio用于TTS、转录、BGM、音效和时长同步;captionstransitions用于注入和验证;以及assemble-index。其他所有内容都是hyperframes CLI。

阅读 时机
[../hyperframes-creative/frame-presets/](../hyperframes-creative/frame-presets/) 步骤2:选择并采用帧预设。
[../hyperframes-creative/references/design-spec.md](../hyperframes-creative/references/design-spec.md) 步骤2:正确应用品牌令牌。
[references/story-design.md](references/story-design.md) 步骤3:规划解说故事。
[../hyperframes-core/references/storyboard-format.md](../hyperframes-core/references/storyboard-format.md) 步骤3:编写STORYBOARD.md
[../hyperframes-core/references/script-format.md](../hyperframes-core/references/script-format.md) 步骤3:编写SCRIPT.md
[../hyperframes-media/references/tts.md](../hyperframes-media/references/tts.md) 步骤3.1:选择或了解TTS提供商。
[references/visual-design.md](references/visual-design.md) 步骤4:视觉上丰富故事板。
[references/composition.md](references/composition.md) 步骤4:判断构图。
[references/motion-language.md](references/motion-language.md) 步骤4:判断运动语言。
[../hyperframes-animation/](../hyperframes-animation/) 步骤4:引用效果和蓝图ID。
[sub-agents/frame-worker.md](sub-agents/frame-worker.md) 步骤5:分派每帧工作者。
[../hyperframes-core/references/subagent-dispatch.md](../hyperframes-core/references/subagent-dispatch.md) 步骤5:安全分派子代理。