Communitygithub.com

courtneymgabrus-star/Video

将任意文本(文章、笔记、主题、简报)转化为无脸解说视频:无需拍摄网站或素材,视觉元素按场景生成(排版、抽象图形、图表、数据可视化)。适用于主题解说、概念拆解、操作指南、列表文章。不适用于基于网站的视频(/product-launch-video — 推广或导览)。如有疑问请使用 → /hyperframes。

Video 是什么?

该技能的核心能力是将文本内容自动转化为“无脸解说视频”——无需任何真实素材或网站截图,所有视觉元素均由AI按场景生成,包括排版、抽象图形、图表和数据可视化。用户只需提供一段文字(文章、笔记、主题或简短简报),技能即可构建完整的解说视频。它适用于主题解说、概念拆解、操作指南和列表文章等场景,但不适用于基于网站的产品推广视频。技能支持HyperFrames平台,工作流程包括设计系统选择、叙事规划、脚本编写、音频生成、逐帧视觉构建和最终渲染输出。整个过程高度自动化,包含协作和自主两种模式,在关键步骤(如设置、故事板、最终渲染)需要用户确认或通知。该技能特别强调“无脸”特性,即不依赖任何现实资产,视觉完全通过预设的设计系统和动画蓝图在后端生成。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/courtneymgabrus-star/Video/tree/HEAD/.agents/skills/faceless-explainer

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

插件安装: 在进行设置或更新命令之前,请遵循 插件执行规则(当此技能位于 HyperFrames 插件内部时)。独立安装则保留以下更新说明。

首先,保持此技能最新——请先与用户确认再运行: npx hyperframes skills update faceless-explainer。当一切为最新时,该操作为空操作;否则,它会刷新此技能及其依赖的核心领域技能,然后再让您依赖它们。

media-use: 在获取音频/图像/标志之前,调用 /media-use 从 HeyGen 目录解析 BGM/SFX/图像,并从官方来源获取品牌标志。先运行 --adopt 以注册现有资产。参见 /media-use 技能。当宿主应用提供自己的音乐或音效工具时,请使用它们来获取音乐和音效。

Faceless Explainer 到 HyperFrames

使用此技能将一段文本转换为解说视频:选择一个设计系统,规划一个教学故事,并在 HyperFrames 中逐帧构建。无脸意味着每个视觉元素都是后续生成的——没有捕获步骤,也没有真实资产清单。

入口是 /hyperframes。 您是协调者。运行每个步骤,验证其关卡,然后才继续。此技能适用于从文本解释主题,没有产品和网站可供捕获。任何其他意图,仅说“制作视频”,或任何不确定性 → 先阅读 /hyperframes——意图层拥有每个路由决定权,一个新创建直接到达这里而没有 BRIEF.md 也会通过它(设置的初始规则)。

您是协调者。在 videos/<project>/ 目录中工作。按顺序运行步骤,并在继续之前通过每个关卡。用户控制的关卡是步骤 0、步骤 3 和步骤 6。在步骤 0 之前阅读 ../hyperframes/references/brief-contract.md——它定义了关卡类型以及 BRIEF.md 的 flow/storyboard 如何派生管理步骤 3/4/6 关卡的 mode。除步骤 5 外,自行执行每一步,在步骤 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) → 从故事板的前言和记录的偏好恢复;永远不要重新询问一个已部分构建的项目。(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 上的最新版本,并在任何过期时更新全局集。

初始化后,令 <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。Auth 所有权和离线回退:/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 <此工作流>,简报合约 § 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 设置前言中的 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": <其长度>, "source": "host" }。每次音频传递保持这些,并且带有宿主声音的帧不会获得查找的提示。

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

规范的全静音标记(在重用此音频模型的工作流之间共享):STORYBOARD.md 顶部 YAML 块中的 music: none,没有 SCRIPT.md,并且没有 sfx: 提示或宿主音频。此组合标记项目为静音……

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

courtneymgabrus-star/Video

Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet `anchor` rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.

courtneymgabrus-star/Video

Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link or asks to bring a Figma design, frame, logo, brand, or animation into a video/composition.

courtneymgabrus-star/Video

Author or edit a custom HyperFrames composition when no specialized workflow fits, or when BRIEF.md sets flow: companion. Use for longer or multi-scene pieces, brand and sizzle reels, montages, static loops, static title cards, footage remixes, and freeform builds. Use motion-graphics instead for a short unnarrated motion-first unit, including an animated title. Route fresh creation through hyperframes before using this skill.

courtneymgabrus-star/Video

All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.

相关技能