关于 faceless-explainer
faceless-explainer 是将主题文本制作成讲解视频的 HyperFrames 技能,不需要采集网站或真实素材清单。它涵盖设计预设选择、教学故事规划、逐帧制作及评审检查点。
主要功能
- 01基于文本的讲解视频流程
- 02无需采集网站
- 03基于预设的设计系统
- 04教学分镜与脚本规划
- 05逐帧制作视频
- 06评审与渲染检查点
适用场景
- 01根据文章或笔记讲解主题
- 02将提供的文本转为教学分镜
- 03在没有采集品牌素材时制作讲解视频
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ heygen-com/ hyperframes --skill faceless-explainer安装后在 Claude Code 中输入/faceless-explainer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/cut-catalog.mdmotion-language.mdstory-design.mdvisual-design.mdscripts/assemble-index.mjsassemble-index.test.mjsaudio.mjsaudio.test.mjsbuild-frame.mjscaptions.mjscaptions.test.mjsframe-packets.mjsframe-packets.test.mjstransitions.mjstransitions.test.mjsscripts/lib/assets.mjsbgm-volume.mjscaptured-fonts.mjsdimensions.mjsframe-packets-core.mjshost-audio.mjsmain-module.mjspad-frame-duration.mjsstoryboard.mjstokens.mjstransition-registry.mjstransitions.jsonsub-agents/frame-worker.md详细介绍
插件安装: 在运行设置或检查更新命令之前,如果此技能位于 HyperFrames 插件中,请遵循插件执行规则。独立安装请保留下方的更新说明。
首先,保持此技能为最新状态——运行前请先向用户确认:
npx hyperframes skills update faceless-explainer。如果一切都是最新的,这会快速完成且不做任何更改;否则,它会刷新此技能及其依赖的核心领域技能,之后再依赖这些技能。
media-use:在获取音频/图片/徽标之前,请调用
/media-use,从 HeyGen 目录获取背景音乐/图片、从 Openverse 获取音效,并从官方来源获取品牌徽标。先运行--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 步外,所有步骤都由你亲自完成;第 5 步则为每一帧派发一个子 Agent。不要在此处编写设计或动画规则;这些规则位于帧工作者子 Agent、本技能的本地 ../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 缺失时才初始化。根据主题以 kebab-case 命名 <project>,例如 compound-interest-explained;绝不要使用工作区名称或时间戳。
npx hyperframes init "videos/<project>" --non-interactive --example=blank --skill=faceless-explainer — init 会检查已安装的技能是否为 GitHub 上的最新版本,并在有过期技能时更新全局技能集。
初始化后,将 videos/<project> 设为 <PROJECT_ROOT>,并以该目录作为工作目录运行之后所有相对路径命令。以下命令中的 . 表示 <PROJECT_ROOT>;绝不要在调用方目录中写入 .media、capture 或输出文件。
初始化后立即写入 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 § Providers。
关卡: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 Audio API 检索音乐,而非生成音乐;使用的凭据与 TTS 相同,即 ~/.heygen。有关提供方的详情,请阅读 ../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: 提示或宿主音频。这些条件同时满足时,项目即为静音项目——没有旁白、BGM 或 SFX。audio.mjs 可识别此标记,不会生成任何内容(会删除过时的 audio_meta.json;assemble 将缺少 audio_meta.json 视为静音),因此可直接跳过此步骤。如果没有旁白,但有 sfx: 提示或宿主音频,则影片并非静音:audio.mjs 会写入 audio_meta.json 文件,供 fetch-sfx 填充。带有旁白时,music: none 会保留 TTS,只关闭 BGM。请严格使用此拼写——不要自行编造其他标记。
**关卡条件:**音频任务已启动,或项目已标记为静音(music: none,没有 SCRIPT.md、sfx: 提示或宿主音频)。
步骤 4:构思视觉设计
目标:为每个分镜添加视觉方向、布局意图和动态效果选择。
先绘制分镜表草图(仅限协作模式)。 计划获批后立即开始草图绘制——参阅 ../hyperframes/references/review-loop.md § 2(不要等到步骤 3.1;静帧不使用时间)。亲自设计每一帧的构图,将其放在 index.html 中计划的起始时间点,在一次运行中截取所有静帧并制作分镜表 boards/storyboard.html(参阅 ../hyperframes-creative/references/storyboard-recipe.md),将每帧标记为 built;待所有帧都标记为 built 后,暂停并提出唯一的布局问题;只修改被指出的帧,直到分镜表得到确认。只有这样,才能将下方的视觉设计写入已确认的布局。自主模式下,或用户在步骤 3 选择跳过草图时,跳过此环节——步骤 5 时,帧会直接从 outline 进入 animated 状态。
直接编辑 STORYBOARD.md。不要另建分镜文件。以 frame.md 作为色彩、字体、布局感觉和风格的准则。
阅读 references/visual-design.md、../hyperframes-animation/blueprints-index.md、references/motion-language.md 和 ../hyperframes-animation/rules-index.md。使用 visual-design.md 中的方法(带时间码的镜头序列、内联 Layout 词汇和创意视觉处理方式),以及必需的 ## Video direction 区块。使用 ../hyperframes-animation/blueprints-index.md 选择每一帧的镜头形态。动态效果请参考 motion-language.md(动态效果词汇及动态效果原则)和 ../hyperframes-animation/rules-index.md(有效规则名称)——不要自行编造动态效果名称。
构思任何命名视觉效果前,先搜索实时目录。 无真人出镜的解说视频需要自行创作所有视觉元素,因此最容易出现手工重建已有素材块的情况。对于简报中提到的每一种视觉风格、效果、处理方式或转场——例如“CRT 扫描线”“故障效果”“胶片颗粒”“闪光扫过”“彩纸爆开”——请运行 npx hyperframes catalog --query "<the look, in plain English>" --json,并在将该视觉效果写入 STORYBOARD.md 之前阅读排名靠前的结果。搜索无需安装任何内容:不需要项目、不需要事先运行 add,也不需要账户。它会从任意目录搜索整个托管注册表(约 400 个素材块和组件)。如果已有素材块能实现目标,就将其用作该帧的 focal——在此处注明;步骤 5 会在分派任务前预先安装一次,之后由对应工作者进行定制。只有在搜索后找不到合适结果时,才能自行创作视觉效果。
按照 visual-design.md 的方法,为每一帧在 STORYBOARD.md 中编写带时间码的镜头序列:选择该帧的蓝图(或自行组合),使用本帧自行创作的内容来构建,并根据旁白安排每个 Scene 的揭示节奏,让画面在整个时长内逐步展开,而不是一开始就全部呈现,然后静止不动。由于解说视频不出现真人,focal/roles 应标明自行创作的视觉元素(例如核心词语、图示节点、数据可视化系列)——这些由你设计,而非从已拍摄的素材中挑选。每个 Scene 都要内联说明布局和动态效果(词汇请参考 visual-design.md 和 motion-language.md)。添加一个适用于整条视频的 ## Video direction 区块。
不要更改故事、脚本、transition_in 或源文本。除草图环节中设计的画面外,此步骤不要编写 HTML。没有素材暂存步骤——无真人出镜的视觉元素由步骤 5 的工作者制作。如果用户提供了真实的 public/<basename> 图片,请在相关帧的 focal/roles 中引用其路径;否则无需暂存任何内容。
验收条件: 每一帧都有带时间码的镜头序列,揭示节奏与旁白相符(不能一开始就全部呈现);每一帧都注明自行创作的 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 .
时长同步是机械操作:以语音的实际时长为准;静音画面保留估算值;绝不要手动编辑已同步的时长。
在分派任务前,预先安装 STORYBOARD.md 中提到的所有注册表模块,每个模块安装一次,以免并行工作进程同时操作注册表:
for b in <each registry block named in the storyboard>; do npx hyperframes add "$b"; done
分派前,阅读 ../hyperframes/references/subagent-dispatch.md。构建每帧的数据包和工作进程角色说明:
node <SKILL_DIR>/scripts/frame-packets.mjs --project "$PROJECT_DIR" --storyboard "$PROJECT_DIR/STORYBOARD.md"
构建器会在 .hyperframes/frame-packets/ 下为每帧写入一个范围明确的数据包(该帧完整的分镜区块 + 蓝图正文 + 所有引用的规则配方,并内联其中内容),以及 _role.md(将 ../hyperframes/references/frame-worker-core.md 与此技能的 sub-agents/frame-worker.md 原样拼接而成,即完整的工作进程角色说明)。每帧分派一个子 Agent;尽可能并行执行,否则分批运行工作进程。每个工作进程只处理一帧:其提示词包含 _role.md 和该帧的数据包——完整粘贴两者,或提供两个文件路径,让工作进程先读取(两种方式效果相同;无论哪种,工作进程都只从这两份文档开始)——以及分派上下文,其中包含 PROJECT_DIR、frame_id、磁盘上是否存在该画面的已确认草图(若存在,工作进程会在该布局上添加样式,而不是重新绘制——参见 frame-worker core § 存在已确认草图时)、画布尺寸,以及字幕状态和字幕启用时的避让区域。每个工作进程只能读取自己的数据包和 frame.md;不得打开 STORYBOARD.md 或技能文档(上游选定的内容已内联在数据包中)。每个工作进程只能写入 compositions/frames/NN-*.html。工作进程绝不能编辑 STORYBOARD.md。
满屏背景必须放在 class="clip" 图层上,绝不能放在 #root 上。 画面的底色(色块/渐变/网格)必须是持续整个画面时长的独立背景片段——设置在 #root/data-composition-id 元素上的 background 会受画面时间窗口限制,不能可靠地充当底色,因此深色内容可能落在黑色的宿主 body 上,导致不可见。视频的基础底色由组装器根据 frame.md 中的 canvas 颜色绘制到索引页的 #root 上。(完整规则和自检方法:../hyperframes/references/frame-worker-core.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>) 是有效结果。如果明确跳过字幕,则继续执行,无需字幕。
检查关卡: 每个画面都已标记为 animated(协作流程中,草图表已在第 4 步确认)、index.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 check
npx hyperframes snapshot --at <frame-midpoints>
snapshot 会将捕获的帧拼接成一张缩略图总览(.hyperframes/artifacts/snapshots/<id>/contact-sheet.jpg;命令会打印路径)。快速看一眼;如果没有明显问题,就继续下一步——不必在这里停留太久。
如果命令失败,展示 stderr 并停止——不要接连运行恢复命令。自行修复:以最简单且安全的方式编辑 compositions/frames/NN-*.html,然后重新运行失败的检查。
已知误报——不要追查。 check 可能会在字幕高亮词(选择器 #caption-word-* / .caption-line)上报告少量约 1–4px 的 text_box_overflow 问题。字幕胶囊使用了刻意设置得较紧凑的 line-height(在 scripts/captions.mjs 中设置一次),且没有 overflow:hidden,因此较粗的显示字体字形会有几像素溢出到胶囊自身的内边距中——实际上并未被裁切。将这些问题视为预期情况并继续。不要增大字幕的 line-height(这会让胶囊膨胀,效果更差)。只有当 text_box_overflow 指向帧元素(#el-NN-*)而非字幕词时,才采取处理措施。
检查通过后,暂停以供用户审核——审核循环的最后一轮检查(../hyperframes/references/review-loop.md § 4):在最终 Studio 预览中只问一个问题——现在渲染,还是需要修改?(自主模式:相同,作为唯一保留的问题——即使用户没有要求,也要打开预览。)然后交付 MP4、缩略图总览和帧 ID,以便修改时能针对单帧进行。
预览:npx hyperframes preview --background
仅在用户批准后渲染(自主模式:在询问渲染还是修改之后):
npx hyperframes render --skill=faceless-explainer --quality high --output renders/video.mp4
渲染后不要重新运行 lint、check 或 snapshot,除非用户提出要求。
**门槛:**渲染前,lint 和 check 均已通过,且已检查快照;用户在暂停审核时已批准(自主模式:检查已通过,交付内容包含缩略图总览);renders/video.mp4 已存在。最终回复需说明 MP4 路径和最终时长。
快速参考
**格式:**横屏 1920x1080;竖屏 1080x1920;方形 1080x1080——根据目标平台确定(简述约定 § 2)。在故事板 frontmatter 中设置一次格式。
**与使用捕获素材的工作流相比,无人出镜模式的差异:**不执行步骤 1 的捕获(使用合成的 tokens.json + visible-text.txt);不创建 asset-descriptions.md 和 capture/assets/;步骤 4 不暂存素材;默认情况下 asset_candidates 为空;所有视觉内容都由步骤 5 的工作线程创作(排版/抽象图形/图表/数据可视化)。用户提供的 public/<basename> 图片是唯一的真实素材路径。
**后台脚本:**该工作流在 scripts/ 下仅提供以下脚本:build-frame,用于将帧预设应用并进行品牌改造,生成 frame.md(以及字幕样式);audio,用于 TTS、转录、BGM、SFX 和时长同步;captions;用于注入和验证的 transitions;以及 assemble-index。其他所有操作都由 hyperframes CLI 完成。
可复用、与领域无关的镜头形态位于 ../hyperframes-animation/blueprints/(由 ../hyperframes-animation/blueprints-index.md 编入索引)。
| 阅读 | 何时阅读 |
|---|---|
[../hyperframes/references/brief-contract.md](../hyperframes/references/brief-contract.md) | 门控类型、从 BRIEF.md 推导模式、字段含义。 |
[../hyperframes-creative/references/story-spine.md](../hyperframes-creative/references/story-spine.md) | 步骤 3:故事准则——钩子语言、先价值后证据、提案结构、可追溯至来源的视觉内容。 |
[../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-animation/blueprints-index.md](../hyperframes-animation/blueprints-index.md) | 步骤 3:角色→蓝图选项。步骤 4:选择镜头形态。 |
[../hyperframes/references/storyboard-format.md](../hyperframes/references/storyboard-format.md) | 步骤 3:编写 STORYBOARD.md。 |
[../hyperframes/references/script-format.md](../hyperframes/references/script-format.md) | 步骤 3:编写 SCRIPT.md。 |
[../media-use/audio/references/tts.md](../media-use/audio/references/tts.md) | 步骤 3.1:选择或了解 TTS 提供方和语音。 |
[references/visual-design.md](references/visual-design.md) | 步骤 4:编写画面的镜头序列(以及布局词汇)。 |
[references/motion-language.md](references/motion-language.md) | 步骤 4:运动词汇与运动准则。 |
[references/cut-catalog.md](references/cut-catalog.md) | 步骤 4-5:剪辑目录(工作器构建画面内的衔接)。 |
[../hyperframes-animation/rules-index.md](../hyperframes-animation/rules-index.md) + [../hyperframes-animation/rules/](../hyperframes-animation/rules/) | 步骤 5:所引用运动对应的本地规则配方正文。 |
[../hyperframes/references/frame-worker-core.md](../hyperframes/references/frame-worker-core.md) | 步骤 5:共享工作器契约(数据包构建器会将其置于增量内容之前)。 |
[sub-agents/frame-worker.md](sub-agents/frame-worker.md) | 步骤 5:工作流的画面工作器增量内容。 |
[../hyperframes/references/subagent-dispatch.md](../hyperframes/references/subagent-dispatch.md) | 步骤 5:安全地调度子 Agent。 |