☰
HyperFrames Faceless Explainer 路由实战:把任意文本变成 30–90 秒无面孔解说视频
2026/9/26 23:18:27 网站建设 项目流程

HyperFrames Faceless Explainer 路由实战:把任意文本变成 30–90 秒无面孔解说视频

【免费下载链接】hyperframesWrite HTML. Render video. Built for agents.项目地址: https://gitcode.com/GitHub_Trending/hy/hyperframes

本篇技术指南围绕 HyperFrames 仓库中的faceless-explainer创作路由(route)展开:它的职责是把一篇主题、文章、笔记或任意文本,转化为一部无面孔解说视频(faceless explainer MP4)——画面不来自真实拍摄或网站截图,而是由编排器(orchestrator)与逐帧 worker 按解说词逐拍发明出来的排版、抽象图形、图示与数据可视化。读完本文,你将掌握该路由的输入/输出/触发契约、路由面试(Interview)中的五个关键决策(angle、length、destination、VO_MODE、run-shape),以及从初始化、BRIEF 落盘、设计系统、故事板、音频、视觉设计到逐帧构建与最终渲染的完整 Step 0–6 执行流水线,并附有仓库源码级的原理佐证。

路由契约:输入、输出与触发条件

路由契约定义在 skills/hyperframes/references/routes/faceless-explainer.md,它是整个路由的"身份证",在任何工作流 skill 被懒加载安装之前即可用:

  • Input(输入):一个主题、一篇文章、笔记或任意待解释的文本;关键前提是没有正在营销的产品、没有需要采集的网站。
  • Output(输出):一部无面孔解说 MP4——用发明的排版、抽象图形、图示或数据可视化讲清楚该主题。最佳时长区间(sweet spot)为30–90 秒,硬上限约3 分钟。
  • Triggers(触发语):典型的用户表述包括"faceless explainer about X"(关于 X 的无面孔解说)、"explain how DNS works as a video"(把"DNS 如何工作"做成视频)、"turn this article into an explainer"(把这篇文章变成解说视频)。

从 skills/hyperframes/SKILL.md 的路由表中可以看到这个契约在入口层如何被使用:hyperframes主 skill 是强制入口,收到新鲜创作请求时先运行意图层(skills/hyperframes/references/intent-interview.md),再按"优先匹配请求交付物、而非字面词"的原则查表路由。路由表第 9 行即为本路由:"解释一个主题/文章/笔记,使用发明的视觉,无产品、无网站采集 →/faceless-explainer"。

需要特别区分的是它的"边界路由"(skills/hyperframes/SKILL.md § 2 的歧义消解规则):

  • 有网站要展示/营销 → 走/product-launch-video;
  • 有现成 talking-head 素材要加字幕 →/embedded-captions,要加设计好的信息卡 →/talking-head-recut;
  • 由音乐节拍驱动、无旁白 →/music-to-video;
  • 明确的短小纯动效单元(通常 <10s)→/motion-graphics;
  • 用 URL/文章解释一个 PR →/pr-to-video;
  • 其他一切自定义视频 →/general-video。

faceless-explainer的判定红线是:"faceless"意味着每一步视觉都是下游发明的——没有采集步骤,也没有真实的素材清单。凡是不满足该契约的请求,入口会继续路由而不是强行套用。

路由面试(Interview):五个必须收敛的决策

当入口层确认走本路由后,会执行 skills/hyperframes/references/intent-interview.md 定义的八步意图访谈,其中本路由的专属问题由路由文件给出,最终全部写入BRIEF.md(字段语义见 skills/hyperframes-core/references/brief-contract.md § 2)。按 skills/hyperframes/references/route-briefs.md 的说明,每个路由的面试条目(must-haves、条件问题、推迟问题、pitch 候选字段、run-shape 是否适用)都收在其自身文件中,本路由的面试部分如下。

Must-haves:angle / length / destination

字段含义与推荐
angle解说角度——concept(概念)/how-to(怎么做)/listicle(清单体)/narrative(叙事)。推荐"文本自身形状所暗示的那一个",而不是凭空指定
length时长——落在 30–90 秒 sweet spot 内,并按文本实际教了多少东西来伸缩
destination投放目标,直接推导画幅:YouTube / embed →16:9;X / LinkedIn / Instagram feed →1:1;Shorts / TikTok →9:16

其中destination → aspect的推导在 skills/hyperframes-core/references/brief-contract.md 中有明确策略:社媒信息流 →1080x1080;TikTok/Reels/Shorts →1080x1920;YouTube/网站/桌面 →1920x1080,推导过程要写进 brief。

Conditional:VO_MODE(仅在用户粘贴脚本时出现)

如果用户在需求里贴了一段现成旁白脚本,访谈需要确认VO_MODE:原样逐字使用(verbatim),还是按场景重排(restructure)?这个答案决定 Step 3 写SCRIPT.md时是"逐字切分"还是"把用户脚本当素材重写",详见后文 Storyboard 章节。

Pitch round:message + angle

skills/hyperframes/references/intent-interview.md 第 4 步规定:对"未成型"的请求(有主题但没有讲述角度),在正式提问前先跑一轮 pitch——沿五条真正不同的路径各给一个概念(至少两条来自分布尾部),全部展示后再推荐一个;用户可 pick / mix / redirect。"同一主题的五种讲述就是五部不同的视频"——这是 pitch round 存在的根本原因。被选中的概念回答路由的 pitch 候选字段,落入BRIEF.md的## Intent。

Run-shape:两个正交问题

最后按 skills/hyperframes-core/references/brief-contract.md § 1 确认运行形态,二者正交、不可合并成一个菜单:

  1. storyboard?—— 是否在 live board 上逐轮评审计划(文本)→ 草图(线框)→ 成品(成片);
  2. flow?——automation(匹配工作流端到端执行 brief)还是companion(在/general-video中共创)。

由二者可推导出交互模式(mode):companion恒为collaborative;automation + storyboard: yes为collaborative;automation + storyboard: no为autonomous。注意mode从不由用户直接选择,且会持久化到STORYBOARD.md的 frontmatter,恢复时显式mode覆盖推导值(skills/hyperframes-core/references/brief-contract.md § 1)。

Step 0–2:Setup、无采集 Brief 与设计系统

访谈结束后进入 skills/faceless-explainer/SKILL.md 定义的工作流。项目一律工作在videos/<project>/下,项目名按主题 kebab-case 命名(如compound-interest-explained),禁用工作区名或时间戳。

Step 0:初始化与 BRIEF 落盘

npx hyperframes init "videos/<project>" --non-interactive --example=blank --skill=faceless-explainer

init会对比已安装 skill 与最新版本并自动更新。初始化后立即写入BRIEF.md(init拒绝非空目录,所以必须先 init 后写 brief),随后把偏好类答案用node <MEDIA_DIR>/scripts/prefs.mjs record --hyperframes .记录。若意图层采纳了 recipe,则执行node <MEDIA_DIR>/scripts/recipe.mjs use --hyperframes . --name <name>——它会复制一份frame.md进项目(Step 2 被跳过),并返回 Step 3 草稿所用的骨架。

进入下一步前必须运行npx hyperframes auth status并如实汇报:它决定语音/BGM 走 HeyGen 还是本地引擎(Kokoro),登出时要明确提示登录方式。协作模式下等待用户登录或明确选择offline/go;自主模式下陈述状态后继续走本地引擎。禁止静默缺失必要能力:没有离线提供方时要把阻塞点亮出来(详见 skills/media-use/references/setup-providers.md 的 Providers 一节)。

Step 1:无采集的 Brief 合成包

与采集类工作流不同,这里绝不运行npx hyperframes capture(没有 URL)。Step 1 手工构造"合成采集包":

  • capture/extracted/visible-text.txt—— 用户的完整输入逐字保存。它是信息源,不是故事模板(Step 3 会重塑它);
  • capture/extracted/tokens.json—— 形如{ "title": "", "description": "", "colors": [], "fonts": [] }。title/description取自 brief;colors/fonts只有在用户明确给出品牌色/品牌字体时才填(设计预设无论如何都会提供完整调色板);
  • 若用户粘贴了脚本或要求保留原措辞,另存user_script.txt,VO_MODE取自BRIEF.md;
  • 不创建asset-descriptions.md,不填充capture/assets/。唯一的真实素材例外:用户提供了一张真实图片,则放入public/<basename>并在 Step 3 注明。

Step 2:设计系统——build-frame.mjs 一键采纳预设

faceless 解说通常没有品牌色/字体,因此设计系统的核心决策是选哪个已发布的 frame preset。先读 skills/hyperframes-creative/references/design-spec.md 并浏览 skills/hyperframes-creative/frame-presets/,按主题/语气/受众选一个(仓库当前预设包括biennale-yellow、blockframe、blue-professional、bold-poster、broadside、capsule、cartesian、cobalt-grid、code-editorial、coral、creative-mode、daisy-days、editorial-forest等),然后一条命令完成其余所有工作:

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

该脚本(skills/faceless-explainer/scripts/build-frame.mjs)是"LLM 只选预设、其余确定性完成"的典范:

  1. 把预设的FRAME.md复制为项目的frame.md;
  2. 品牌 remix:若有品牌色,则按角色映射重绘——ink 角色取品牌墨色、canvas 角色取品牌底色、其他颜色用最近品牌强调色的色相+饱和度重涂但保留自身明度,使色调族(如 sun / sun-soft / haze)仍是家族;品牌字体替换预设的 display/body 族;品牌字体实际提供的字重会钳制预设的字重阶梯(只提供 400/500 的字体会把 600/700 标题伪粗体化);
  3. 将预设的 caption skin 复制到.hyperframes/caption-skin.html;
  4. 自校验:颜色键数量必须不变、ink 与 canvas 的亮度差必须 ≥40(否则退出码 1),一旦失败即报错停止,不做任何手工修补。

空品牌 tokens 时则保留预设自身调色板——它本身就是一个完整可交付的设计。Step 2 的门槛是脚本退出 0,且把选中的预设作为偏好记录(--key style_preset --workflow <this workflow>)。

Step 3:故事板与脚本——把信息堆栈改写成教学序列

Step 3 的方法论集中在 skills/faceless-explainer/references/story-design.md,其核心法则一句话:"一篇文章是一次信息倾倒,而一部视频是一次被引导的理解行为。"

不要按段落顺序改写。要重排、合并、省略、压缩源文本,形成清晰的教学序列;剥离枝节、露出主干。最常见的失败就是按顺序改写文章——绝不要这么做。输入文本是信息源,不是故事模板。

1. 提取教学真值(teaching truth)

从 brief 和文本中提取六要素:audience(观众及已知/未知)、gap or stakes(解释要消解的困惑或"为什么在乎")、thesis(观众应带走的一句话)、spine(通向论点的主干 3–6 个想法:机制/步骤/条目/节拍)、evidence(落地的数字、例子、对比、演算)、landing(takeaway 或"去思考/尝试/行动"的号召)。故事板围绕thesis而非文章的章节来写。

2. 让语气匹配 frame.md

frame.md是软性向导——视觉系统调"声音"而非"结构"。例如 warm/handmade/notes-like 的信号对应 plain/considered/low-hype 的语气;bold/poster-like 对应短促有力、自信断言;literary/technical-but-human 对应 thoughtful/precise,对代码/开发者内容安全。

3. 选择一种解说结构

只选一种(或显式命名复合结构),禁止把不同结构的阶段拼接:

结构"它是什么"适用载荷躯干形状
concept-explainer"X 是什么、为什么重要"观众半懂的一个概念/术语/现象命名概念 → 逐层揭示机制 → 落点含义
how-to-process"怎么做/怎么运作"的有序步骤有清晰起点→终点的流程或机制在同一视觉舞台上 3–6 步,每步一个动作
listicle"关于 X 的 N 件事"一组平行、同权的条目(技巧/错误/原因)hook → N 个近似同权条目 → 收尾;rule-of-three 最强
story-explainer通过叙事弧线教学案例研究、历史、警示故事setup → tension → turn → resolution → lesson;教训要可泛化

复合结构如concept-explainer with process(机制阶段内嵌有序步骤)、story-explainer with how-to,设置 frontmatter 的arc字段。下游视觉阶段会读取它控制节奏:process 内节奏意味着更紧的接缝、更一致的舞台和更短的帧。

4. 逐帧构建:type / persuasion / beat / scene

每帧一个明确职责,每帧必带四个叙事字段:

  • type—— 从共享枚举中重映射教学角色:hook(钩子/好奇缺口)、pain_point(痛点/为什么在乎)、product_intro(命名核心概念——此处的"主角"是想法)、feature_showcase(机制/步骤/条目单元)、benefit_highlight(含义/"所以呢")、social_proof(证据/例子/数据点)、branding(论点/takeaway/原则)、cta(号召去思考/尝试/行动)。躯干通常是一串feature_showcase,穿插benefit_highlight与social_proof;
  • persuasion—— 一个具名的修辞/清晰化技法(来自技法目录),如 Analogy、Progressive disclosure、Before/after、Rule of three、Statistical proof、Callback、Distillation 等,可组合如"Analogy + progressive disclosure";目录不适配时允许内联命名新技法并说明机制(如"Subtractive framing:先用"它不是什么"来定义"),但绝不允许写笼统的 "explain the idea";
  • beat—— 一个词或短复合词的目标情绪,沿理解弧线分布:负谷(curiosity/surprise/tension/recognition)、转向(clarity/orientation/anticipation)、构建(comprehension/"aha"/confidence/foresight/mastery)、收束(clarity/satisfaction/"now I get it");复合情绪往往最强;
  • scene—— 一行视觉想法,而非详细构图。

Hook 策略与脚本规则

开场 3–5 秒必须打开认知缺口或 stakes,可选策略包括:Shocking statistic(如"90% 的塑料从未被回收")、Rhetorical question、Counterintuitive claim、Pain validation、Visceral metaphor("你的注意力是一束聚光灯,App 们为开关打架")、Concept announcement、Direct address、Imagine/scenario、Stakes/consequence。禁止以通用定义开场;论点(message)要在第 2 个节拍前落地,之后的解释都是它的证据。

旁白写作(无用户脚本时):每个口播帧 1–2 句、通常 6–20 词;把每句写成离散的提示词而非一口气的长句——Step 5 会在旁白点名时逐个揭示画面元素(这就是反 PowerPoint 机制)。示例:

  • 强(具象化):"Compound interest isn't addition, it's a snowball — every turn picks up the snow from the last, then more."
  • 弱(复述文章):"The study, published in 2019, examined three cohorts and found that…"——这是朗读,不是解释。

静默帧被允许且常见:图表自行组装、演算动画、转折前的悬念节拍。设置voiceover为空并从SCRIPT.md中省略即可。

若VO_MODE = restructure:把user_script.txt当素材,重写/重排/合并/省略以适配所选结构与目标时长;若VO_MODE = verbatim:不改写用户措辞,只在句/段边界切成帧大小(长句可在自然从句处拆分),最终时长跟随提供的脚本。

故事板 frontmatter 的music:字段承载 BGM 情绪(如music: confident minimal tech underscore);music: none关 BGM 但保留旁白;music: none+ 无SCRIPT.md是规范的"全静音"标记(无旁白、无 BGM、无 SFX),audio.mjs会识别并跳过。

帧模板(叙事形状)

## Frame N — Short name - scene: one clear visual idea - voiceover: "spoken guide text, or empty" - duration: rough estimate in seconds - transition_in: crossfade - status: outline - src: compositions/frames/NN-short-name.html - type: feature_showcase - persuasion: Progressive disclosure - beat: comprehension - blueprint: dataviz-countup — candidate shape from the role→blueprint menu; omit when none fits narrativeRole: What this frame does in the viewer's understanding. keyMessage: The one idea the viewer should remember.

基础字段的格式语义(status: outline → built → animated、transition_in、src、poster、解析后的StoryboardManifest结构)由 skills/hyperframes-core/references/storyboard-format.md 定义,HyperFrames Studio 会把故事板渲染成 contact sheet(默认每个 Studio 会话都有 Storyboard 视图)。Step 3 的门槛是计划获批:协作模式下用 skills/hyperframes-core/references/review-loop.md § 1 的"计划即提案"流程——npx hyperframes preview --background打开 board,用"This video tells [audience] that [message]"开场,给出逐帧表,然后问两个问题(批准或修改?草图先行还是直接构建?);自主模式则发布同样摘要作为 heads-up 后继续。

Step 3.1:音频——TTS、时间戳、BGM 与全静音标记

Step 3 获批后后台启动音频(skills/faceless-explainer/SKILL.md Step 3.1),命令:

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

音频脚本一次性处理:旁白、词级时间戳、BGM 查找(来自 HeyGen 音乐库,情绪取自故事板music:字段)与时间元数据。选声线时若用户点名了声音/性别/语气,必须显式传--voice <id>——管线默认是 HeyGen 的Marcia(女性)/ 离线 Kokoro 的am_michael,一句"要男声"而不传 flag 会被静默忽略。提供方解析规则(skills/media-use/audio/references/tts.md):

顺序提供方触发条件声线 ID词时间戳格式
1HeyGen (Starfish)$HEYGEN_API_KEY/~/.heygen/credentialsGET /v3/voices?engine=starfish返回的 UUID有(响应内word_timestamps[])mp3 → wav (ffmpeg)
2ElevenLabs$ELEVENLABS_API_KEYElevenLabs dashboard UUID无mp3 → wav
3Kokoro-82M恒可用(本地兜底)am_michael、af_heart等 54 个声线无wav 直出

有旁白但无SCRIPT.md时跳过声线生成,BGM 可照跑;判定为全静音时整个音频步骤干净跳过。Step 3.1 之后,audio.mjs sync-durations会把真实旁白时长写回故事板(真实语音时长优先,静默帧保留估算,禁止手改同步后的时长),audio.mjs fetch-sfx负责拉取 SFX。

Step 4:视觉设计——以旁白为节拍的时间码镜头序列

Step 4 的方法论在 skills/faceless-explainer/references/visual-design.md(配合 skills/faceless-explainer/references/motion-language.md 与 skills/hyperframes-animation/blueprints-index.md 使用)。它的核心单元是时间码镜头序列(time-coded shot sequence)——一个帧是一个按 VO 编排的时间窗口序列,而不是效果标签袋。

被读作 PowerPoint 的失败是前置倾倒(front-loading):agent 把整个画布在前 ~25% 时间里一股脑放上来,然后画面就僵住了。按 VO 写的时间码序列让这不可能发生:每个窗口声明什么在屏上、什么在动,旁白讲到之前什么都不出现。在解说视频里,发展本身就是教学——公式逐项组装、图示逐层加厚、数字逐位落定。让构建本身成为信息。

镜头序列的书写纪律

Scene 1 (0.0–Xs): only what the VO is saying at t=0 enters — never the whole canvas Scene 2 (Xs–Ys): the next piece reveals as the VO names it (a line / layer / node / stat) … one window per spoken cue Scene N (…–end): content has resolved; hold the read (stillness; subtle jitter at most)
  • 每个 Scene 行内声明:屏幕上有什么、此窗口在动什么、放在哪(layout 内联);
  • 揭示节奏对齐 VO,绝不前置倾倒:窗口数 = 该句旁白所需的提示数(两句两窗口、五项枚举五六窗口),没有固定数量、没有强制"中间幕",唯一的罪是开局全抛;静默帧则按节拍而非 VO 排布揭示;
  • 以静止的阅读态收尾:内容解析完成后保持静止——宁要静止不要坏动效,至多细微 jitter(sine-wave-loop低幅档)维持生命感;只有最后一帧才有真正的出场(exit),其余帧的出场就是框架注入的transition_in。

实例化 blueprint,保留 signature move

先查 skills/hyperframes-animation/blueprints-index.md 的 role→blueprint 菜单,把帧的角色映射到已验证的镜头形状(blueprints/<id>.md,含[slots]与具名 signature move),然后以本帧发明的内容实例化它的槽位,三种姿态:

  • Reproduce——蓝图与节拍吻合、内容干净映射,填满所有[slot]并沿用其 Scene 时序;
  • Adapt——结构吻合但内容/元素数/表面不吻合:一行说明"保留什么/改什么"后改写 Scene 行;可以扩展、可以变化,但绝不能丢弃 signature move(丢了就说明选错了蓝图),且揭示仍须对齐 VO;
  • Compose——无蓝图适配时用运动词汇自建镜头,标记blueprint: compose。

轻量标签:blueprint:(实例化的 id + Reproduce/Adapt,或 compose)、focal:(本节的发明主角:英雄词、图示节点、图表序列、造词卡)、roles:(每个发明元素的角色:foreground subject/background全幅并压暗 30–50% /supporting安静配角)、sfx:(命名声音,由fetch-sfx拉取、组装器挂在根上,绝不自己嵌入<audio>)。布局与运动都内联在 Scene 行里命名(如Centered, ~50% of frame、asymmetric 60/40, 3 depth layers、per-word reveal、layer-reveal、count-up),严禁写 px/scale/shadow/ms/缓动曲线——那些由 Step 5 的 frame worker 从 skills/hyperframes-animation/rules/ 的规则配方解析(运动名与规则 id 一一对应,见 skills/hyperframes-animation/rules-index.md)。

无面孔视觉的三种一等公民处理

因为是 faceless,帧的主角是设计出来的而非截屏:

  • 排版 / 动态字型——英雄词、造词、数字、短枚举;在全幅尺度、重量对比、单个强调词上下文章。faceless 解说里字型常是主视觉,要大胆用足字号阶梯;
  • 抽象图形——形状、场、路径、几何去承载想法(雪球、聚光灯、楼梯而非悬崖):构建旁白点名的隐喻,不要用泛泛的 bokeh 装饰;
  • 图示 / 数据可视化——节点+边、图表、数轴、公式、流程;"逐拍组装"本身就是教学,设计成跨 Scene 组装,而不是整体出现。

发明的英雄要占画面40–60%。禁止出现:导航栏、页脚、滚动条、真实光标/浏览器 chrome、代替设计隐喻的通用装饰形状、漂浮 bokeh / 紫蓝"AI"渐变(默认-AI 陈词滥调,禁用)。

每视频一次的## Video direction不变量

整个视频共享一套外观与运动语法,在STORYBOARD.md顶部只写一次:palette system(取自frame.md,禁止发明)、motion grammar + reveal model(power3长尾缓动默认 + VO 对齐揭示 + 静置期仅允许 subtle jitter)、rhythm / held-frame allocation(点名缓拍帧,避免全程均匀忙碌)、negative list(两种运动失败模式:slideshow 前置倾倒与 screensaver 万物漂浮)。逐帧只写增量。

运动学说(skills/faceless-explainer/references/motion-language.md Part 2)四条载荷级规则:①平滑胜过弹跳,power3为默认(back.out/bounce.out/elastic.out降级为罕见、显式俏皮的例外);②后 ~50% 顺序揭示、对齐 VO;③无懒惰呼吸、无后半程慢推/慢摇——"我宁愿没有运动也不要坏运动";④ 帧内接缝是速度匹配的剪切(在峰值速度处切、两侧方向速度一致)。另有 seek-safe 硬规则(Part 3):无无限运动、无Math.random/Date.now(每帧渲染必须一致)、入场一律fromTo(显式 from 态保证 seek 到 t=0 时元素就位)、不用 CSStransition/@keyframes驱动运动、只入不出的揭示模型。帧内剪切的四技法(Zoom-Through / Inverse Zoom-Through / Cut the Curve / Waterfall Cut,含 10px 文本 vs 18–20px 全幅的模糊逻辑与镜像缓动公式)见 skills/faceless-explainer/references/cut-catalog.md。

Step 5:逐帧构建——一帧一 worker 的并行管线

Step 5 先把音频时间戳同步回故事板(audio.mjs sync-durations),再读 skills/hyperframes-core/references/subagent-dispatch.md,然后:

node <SKILL_DIR>/scripts/frame-packets.mjs --project "$PROJECT_DIR" --storyboard "$PROJECT_DIR/STORYBOARD.md"

包构建器为每帧写出一个有界的 packet到.hyperframes/frame-packets/(该帧在故事板中的精确块 + 蓝图正文 + 引用的全部规则配方,均已内联),并生成_role.md(frame-worker-core.md+ 本 skill 的 skills/faceless-explainer/sub-agents/frame-worker.md 逐字拼接,即完整 worker 角色)。随后每帧派发一个子代理(可并行或分批):每个 worker 恰好拿到一帧,读_role.md与它的 packet(两者只读其一即等价),外加派发上下文(PROJECT_DIR、frame_id、是否有已确认草图、画布尺寸、字幕状态与 keep-out 条)。

worker 只写compositions/frames/NN-*.html,绝不编辑STORYBOARD.md。两个关键约束:

  • 全幅背景必须骑在class="clip"层上,绝不能放在#root:帧的底色(色场/渐变/网格)是它自己的全时长背景 clip——设在#root/data-composition-id上的 background 会被裁剪到帧窗口,深色内容会落在黑色宿主body上而渲染不可见。视频的基础底色由组装器按frame.md的canvas色画在 index 的#root上(完整规则见 skills/hyperframes-core/references/frame-worker-core.md);
  • 每个发明的元素按roles设计:foreground subject遵守 83% keep-out、文字绕它排;background全幅且压暗;supporting保持安静。若用户提供了真实图片(public/<basename>),[video]标记的.mp4渲染为静音<video class="clip">且必须是帧根的直接子元素(嵌套进其他定时元素会让渲染器冻结它),未标记图 →<img>。

音频时间戳就绪后,后台构建字幕、前台组装 index:

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使用 Step 2 复制的.hyperframes/caption-skin.html作为字幕外观(从frame.md注入品牌 tokens;无 skin 时渲染内置默认药丸)。每返回一个 worker,编排器就把该帧在STORYBOARD.md里标记为animated。

Step 6:收尾——注入转场、质量门禁与最终渲染

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把各帧中点的截屏拼成一张 contact sheet(snapshots/contact-sheet.jpg),瞄一眼没明显问题就继续,不在此停留。命令失败时:贴出 stderr 并停止,不要连环堆恢复命令;自行用对compositions/frames/NN-*.html最便宜的编辑修复后重跑失败项。

一个已知误报不要追:check可能报几条 ~1–4px 的text_box_overflow,落在字幕高亮词上(选择器#caption-word-*/.caption-line)。字幕药丸故意用紧凑 line-height 且无overflow:hidden,重显示字形的墨迹溢出几像素进药丸自己的 padding——并没有真的被裁剪。只有报的是帧元素(#el-NN-*)时才处理。不要为了消除误报去撑大字幕 line-height(会把药丸撑爆)。

质量门禁通过后进入评审暂停(skills/hyperframes-core/references/review-loop.md § 4):协作模式问"现在渲染,还是改什么?";自主模式保留唯一问题"先预览,还是直接渲染?"预览用npx hyperframes preview --background。只有用户批准后才渲染:

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

渲染后除非用户要求,不再重跑lint/check/snapshot。最终回复必须给出 MP4 路径与实际时长,交付物还包括 contact sheet 与帧 id(便于后续按帧定位修改)。审批后还可以用media-use → scripts/recipe.mjs freeze --name <name>把这次运行冻结成 recipe,下次一句 "like last time" 即可复用整套设计规范与故事板骨架。

快速参考:faceless deltas 与脚本清单

与采集类工作流相比,faceless 的差异(skills/faceless-explainer/SKILL.md Quick Reference)集中为:无 Step 1 采集(合成tokens.json+visible-text.txt);无asset-descriptions.md与capture/assets/;Step 4 无素材 staging;asset_candidates默认空;所有视觉由 Step 5 的 worker 发明(字型/抽象图形/图示/数据可视化)。用户提供的public/<basename>图片是唯一真实素材路径。格式一律从 destination 推导:1920x1080(横)、1080x1920(竖)、1080x1080(方),在故事板 frontmatter 中只设一次。

工作流自带的脚本只有六个:build-frame(采纳+品牌 remix 预设成frame.md与 caption skin)、audio(TTS/转写/BGM/SFX/时长同步)、captions、transitions(inject + verify)、assemble-index、frame-packets,其余全部走hyperframesCLI(init / auth / preview / lint / check / snapshot / render)。可复用的、领域无关的镜头形状统一存放在 skills/hyperframes-animation/blueprints/,由 skills/hyperframes-animation/blueprints-index.md 索引。

从路由契约到最终renders/video.mp4,faceless-explainer的核心思想始终如一:输入文本只是信息源,故事由教学真值重构,画面由解说词驱动发明,每一帧都是被引导的一次理解——这正是它与"朗读文章配图"式视频的本质分野。

【免费下载链接】hyperframesWrite HTML. Render video. Built for agents.项目地址: https://gitcode.com/GitHub_Trending/hy/hyperframes

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询