conardli/garden-skills95 files

Web Video Presentation

把一篇文章或口播稿,做成"看起来像视频"的点击驱动 16:9 网页演示,可选合成口播音频。流程:原始文章 → **一次产出**口播稿 + outline 开发计划 → 用户**一次对齐** 5 件事(稿子 / outline / 主题 / 素材 / 开发模式)→ 网页开发(逐章 / 顺序 / 并行)→ 可选音频合成(provider-agnostic:内置 MiniMax mmx-cli + OpenAI TTS,可换 ElevenLabs / edge-tts / Azure / 自带 TTS)。**outline 只规划节奏与信息密度,不规划动画** —— 动画由章节开发时按 PRINCIPLES + ANTI-AI 法则即时设计。每次点击推进口播稿的一个节拍,每一步独占整屏,进度条平时隐藏只在悬浮时出现。适用场景:用网页做视频(动态 PPT 但不像 PPT)、把口播稿 / 文章变成可交互的解说、为 B 站 / YouTube / 视频号录屏教程、做有电影感的产品 / talk demo。本 Skill 沉淀的是设计方法论 + 协作流程 —— 不绑定任何特定样式 / 字体 / 颜色 —— 因此能复用到任意主题与美学。

Specification
Skill ID
conardli/garden-skills/web-video-presentation
Publisher
conardli
Repository
garden-skills
Installs
0
Files
95
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

conardli/garden-skills/web-video-presentationInstalls these files
  • README.md
  • README.zh-CN.md
  • SKILL.md
  • manifest.json
  • references/AUDIO.md
  • references/CHAPTER-CRAFT.md
  • references/EXAMPLES/README.md
  • references/EXAMPLES/case-tech-review/README.md
  • references/EXAMPLES/case-tech-review/outline-snippet.md
  • references/EXAMPLES/hook-chapter/README.md
  • references/EXAMPLES/hook-chapter/chapter.css
  • references/EXAMPLES/hook-chapter/chapter.tsx
  • references/EXAMPLES/list-reveal/README.md
  • references/EXAMPLES/list-reveal/chapter.css
  • references/EXAMPLES/list-reveal/chapter.tsx
  • references/OUTLINE-FORMAT.md
  • references/RECORDING.md
  • references/SCRIPT-STYLE.md
  • references/THEMES.md
  • scripts/scaffold.sh
  • templates/index.html
  • templates/scripts/extract-narrations.ts
  • templates/scripts/synthesize-audio.sh
  • templates/scripts/tts-providers/README.md
  • templates/scripts/tts-providers/minimax.sh
  • templates/scripts/tts-providers/openai.sh
  • templates/src/App.tsx
  • templates/src/chapters/01-example/Example.css
  • templates/src/chapters/01-example/Example.tsx
  • templates/src/chapters/01-example/narrations.ts
  • templates/src/components/AutoStartGate.css
  • templates/src/components/AutoStartGate.tsx
  • templates/src/components/AutoToggle.css
  • templates/src/components/AutoToggle.tsx
  • templates/src/components/MaskReveal.tsx
  • templates/src/components/ProgressBar.css
  • templates/src/components/ProgressBar.tsx
  • templates/src/components/Stage.tsx
  • templates/src/hooks/useAudioPlayer.ts
  • templates/src/hooks/useAutoMode.ts
  • templates/src/hooks/useStageScale.ts
  • templates/src/hooks/useStepper.ts
  • templates/src/main.tsx
  • templates/src/registry/chapters.ts
  • templates/src/registry/types.ts
  • templates/src/styles/animations.css
  • templates/src/styles/base.css
  • templates/src/styles/fonts.css
  • templates/vite.config.ts
  • themes/bauhaus-bold/theme.json
  • themes/bauhaus-bold/tokens.css
  • themes/blueprint/theme.json
  • themes/blueprint/tokens.css
  • themes/bold-signal/theme.json
  • themes/bold-signal/tokens.css
  • themes/chalk-garden/theme.json
  • themes/chalk-garden/tokens.css
  • themes/creative-voltage/theme.json
  • themes/creative-voltage/tokens.css
  • themes/dark-botanical/theme.json
  • themes/dark-botanical/tokens.css
  • themes/dune/theme.json
  • themes/dune/tokens.css
  • themes/electric-studio/theme.json
  • themes/electric-studio/tokens.css
  • themes/forest-ink/theme.json
  • themes/forest-ink/tokens.css
  • themes/indigo-porcelain/theme.json
  • themes/indigo-porcelain/tokens.css
  • themes/kraft-paper/theme.json
  • themes/kraft-paper/tokens.css
  • themes/midnight-press/theme.json
  • themes/midnight-press/tokens.css
  • themes/monochrome-print/theme.json
  • themes/monochrome-print/tokens.css
  • themes/neon-cyber/theme.json
  • themes/neon-cyber/tokens.css
  • themes/newsroom/theme.json
  • themes/newsroom/tokens.css
  • themes/paper-press/theme.json
  • themes/paper-press/tokens.css
  • themes/pastel-dream/theme.json
  • themes/pastel-dream/tokens.css
  • themes/split-canvas/theme.json
  • themes/split-canvas/tokens.css
  • themes/sunset-zine/theme.json
  • themes/sunset-zine/tokens.css
  • themes/swiss-ikb/theme.json
  • themes/swiss-ikb/tokens.css
  • themes/terminal-green/theme.json
  • themes/terminal-green/tokens.css
  • themes/vintage-editorial/theme.json
  • themes/vintage-editorial/tokens.css
  • themes/warm-keynote/theme.json
  • themes/warm-keynote/tokens.css

What this skill tells the agent

Web Video Presentation

把一篇文章或口播稿,一步步做成可录屏的"伪装成视频的网页",可选合成 口播音频。产出物 = Vite + React + TS 项目 + 按章节切分的音频。

适用场景

  • "我有口播稿 / 一篇文章,帮我做成视频" —— 口播驱动的内容
  • 想做 "动态 PPT"
  • 16:9 横屏录屏,大字、留白、每屏都要有动效
  • 教学 / 产品演示 / keynote 想要电影感
  • B 站 / YouTube /抖音视频内容

本 Skill 以方法论 + 协作流程为核心。脚手架模板提供 token 和原语, 但每个美学决策(配色、字型、动效气质)都应该针对你的主题重新设计 —— 不要照搬。


工作流总览

Phase 1   内容编写
   1.1  识别用户输入
   1.2  一次产出 script.md + outline.md
        (口播稿 + 开发计划)
   ▼
[Checkpoint Plan]      ← 必须停。一次对齐 5 件事:
                         稿子 / outline / 主题 / 素材 / 开发模式
   ▼
Phase 2   网页开发
   2.1  脚手架(按选定主题)
   2.2  第 1 章 = 主线程 + 完整版本(强制 anchor)
        ▼
        [硬节点] 用户验收第 1 章 ← 不可跳过
        ▼
   2.3  第 2~N 章(按选定模式:A 逐章 / B 顺序 / C 并行)
   ▼
[Checkpoint Audio]     ← 必须停。是否合成音频
   ▼
Phase 3   音频合成(可选)
   ▼
Phase 4   录屏 + 后期

工作目录约定(agent 在用户当前目录下创建 / 编辑):

my-video/
├── article.md          # 用户给原文时必有 —— 不删!开发阶段画面信息源
├── script.md           # 必有:保持原文语言的平台化口播稿(决定节拍)
├── outline.md          # 必有:开发计划(章节切分 + 每步内容 + 信息池)
└── presentation/       # 脚手架产出的 Vite + React + TS 项目
    ├── src/chapters/<NN>-<id>/
    │   ├── <Chapter>.tsx     # 视觉实现
    │   ├── <Chapter>.css
    │   └── narrations.ts     # ★ step 数 + 口播文本的唯一真相源
    ├── scripts/
    │   ├── extract-narrations.ts   # 扫所有 narrations.ts → audio-segments.json
    │   ├── synthesize-audio.sh     # provider-agnostic runner(循环 segments)
    │   └── tts-providers/          # 每 provider 一个 .sh(内置 2 个)
    │       ├── README.md           # 三函数契约 + 5 段现成代码片段(11labs / edge-tts / say / azure / gcloud)
    │       ├── minimax.sh          # 默认 provider,用 mmx-cli
    │       └── openai.sh           # 内置 OpenAI TTS(curl + OPENAI_API_KEY)
    ├── audio-segments.json         # extract 产出(合成前 review)
    └── public/audio/<id>/<N>.mp3   # 可选:合成的音频
关键:narrations.ts 是 step 数和音频合成的唯一真相源。 章节 .tsx 里的 if (step === N) 出现的最大 N + 1 必须等于 narrations.length。这保证 5 处地方(script / outline / 章节代码 / chapters.ts / 音频文件)永远不会漂。

硬性自检协议(贯穿整个 Skill)

下面三个产出,每一个完成后必须走自检 → 修复 → 再汇报 / 推进:

产出自检清单出处
script.md`SCRIPT-STYLE.md` 三层自检(形式 / 风骨 / 念出来)
outline.md`OUTLINE-FORMAT.md` 自检
单章实现完成`CHAPTER-CRAFT.md` 完工自检

执行方式(按能力降级,优先用更隔离的方式):

  1. Agent Teams(最优):开一个独立的 reviewer agent,给它"产出文件 路径 + 对应清单 + 关键上下文",让它逐项核查并严格汇报结论 (哪几条 pass / 哪几条 fail + 证据 + 改写建议)。
  2. subAgent(次优):没有 Teams 能力但能开 subagent 就用 subagent 走同样流程。
  3. 自检(兜底):当前 agent 都没有上述能力,就自己严格逐项 核查 —— 不允许目测一遍就放行。

铁律:拿到结论后先按 fail 项把产出改完,再向用户汇报"做完了

  • 自检结论 + 改了什么"。直接拿原始结论汇报但不修复 = 违规。

各阶段文件读取指南

不同阶段读不同的文件。长会话里 agent 容易遗忘原则,特别是 Phase 2.4 的"实现单章"会重复 N 次 —— 每次都要回看核心约束。

阶段必读(每次都看)一次性看完 / 按需查
Phase 1.1-1.2 内容编写references/SCRIPT-STYLE.md + references/OUTLINE-FORMAT.md + article.md(用户原文,如有)——
Checkpoint Plan 选主题——themes/*/theme.json(动态读全部,列清单 + bestFor 推荐 + descriptionZh);references/THEMES.md(用户想了解主题系统时)
Phase 2.1 脚手架——SKILL.md 本节看一次
Phase 2.4 实现单章(×N 次,被 2.2 / 2.3 调用)`references/CHAPTER-CRAFT.md` 单一入口 —— Part 0 十条原则 / Part 1 开工 5 问 / Part 2 关系→动作决策树 / Part 3 视觉工具箱 / Part 4 时长参考 / Part 5 反 AI 味反模式 / Part 6 代码硬规则(含 narrations.ts 强制约束)/ Part 7 完工自检 / Part 8 反馈速查 + 当前主题的 themes/<id>/theme.json + 当前章节的 outline.md 段落 + `article.md` 本章对应段落 + 素材清单references/EXAMPLES/(结构示意,不是抄袭模板);references/THEMES.md 完整 token 契约
Phase 3 音频合成references/AUDIO.md(含 narrations.ts → segments.json → 任意 provider 流程,内置 minimax + openai)templates/scripts/tts-providers/README.md(换 provider / 自带 TTS 时)
Phase 4 录屏 + 后期references/RECORDING.md(含 ?auto=1 自动录屏)——
选 / 造 / 切主题——references/THEMES.md
写章节时只读一份 `CHAPTER-CRAFT.md`。十条原则 / 开工 self-prompting / 决策树 / 反 AI 味反模式 / 完工自检全部并入这一份单一入口。EXAMPLES/ 不是必读 —— 先按内容自由设计,卡壳才翻(按 anchor 翻"形",不要照搬)。

Phase 1 —— 内容编写(一次产出)

1.1 识别用户输入

用户给的东西该做的
原始文章(书面语 / 公众号 / 论文 / 博客)一次产出 script.md + outline.md(1.2),过 Checkpoint Plan
直接的口播稿 / 视频脚本落盘成 script.md,一次产出 outline.md(1.2 简化版),过 Checkpoint Plan
啥都没有,只说"帮我做个 X 主题的视频"反问:先给一段素材或大纲。Skill 不替用户构思内容

1.2 一次产出 script.md + outline.md

两份产出物在一次思考中完成:

  1. 生成 `script.md`:按 `references/SCRIPT-STYLE.md` 的规则把 article 转成保持原文语言的平台化口播稿。保留 `article.md` 不删——它是 outline 写信息池和章节实现画面时的细节源(双源原则)。
  2. 生成 `outline.md`:按 `references/OUTLINE-FORMAT.md` 规则切章节 + 切 step + 每章首段抽信息池。

outline 的边界(关键):

outline 必须写outline 不要写
章节切分 / 每章 step 数 / 估时具体动画类型(blur clear / wipe / 弹簧)
每步屏幕内容(hero / 数据 / 标语 / 列表项)CSS 实现手段(filter / SVG / clip-path)
章节级信息池:从 article 抽的数字 / 引用 / 案例 / 标签时长数值(不写 ~2.5s / 80~120ms)
步级关系名前缀("反差对照" / "递进列表" / "金句" 等可选 hint)持续微动 / 错峰量等微观节奏
outline 不写动画的理由:写死动画 = chapter agent 退化为翻译机; 留白让 chapter agent 在每步开工时按 `CHAPTER-CRAFT.md` 的"内容驱动决策树"自由设计,才有真正的视频感。详见 `CHAPTER-CRAFT.md` Part 0 原则 7。

落盘后必须先走自检再进 Checkpoint Plan:按上文「硬性自检协议」分别 对 script.md / outline.md 执行(优先 Agent Teams → subAgent → 自检), 按结论修复完成后再进入 Checkpoint Plan。


Checkpoint Plan —— 5 件事一次对齐(硬节点)

script.md + outline.md 写完后必须停下来。用户在这一个节点同时确认 5 件事。

agent 此时要做的预备工作

  1. 读所有 themes/*/theme.json 拿 nameZh / descriptionZh / bestFor / mood —— 不要硬编码清单
  2. 根据 script.md 的内容类型 / 关键词 / 语气,主动从主题里挑 2~3 套最匹配的推荐(匹配 bestFor 字段)
  3. 扫一遍 outline.md 末尾"素材清单"部分

总结模板(骨架,agent 按情况填充)

内容计划写完,产出文件:
  📄 article.md     {若用户给原文则保留}
  📄 script.md      {X} 字 / ~{T} 分钟
  📄 outline.md     {N} 章 / {M} 步 + 每章信息池 + 末尾素材清单

章节速览:
  1. <id>     <章节标题>    <S> 步 ~<T>s
  2. ...

接下来一次对齐 5 件事:

  1. 稿子 (script.md) 要不要改?
     可以直接编辑文件,或口头告诉我修改方向。

  2. 开发计划 (outline.md) 要不要改?重点看:
     - 章节切分 / step 数 / 估时是否合理(合理判断:每章 30~60s)
     - 每步屏幕内容是否清晰
     - 每章首段「信息池」是否有足够的 article 细节供画面挂
     - 末尾素材清单是否完整

  3. 选哪个主题?我的推荐:
     ★ <推荐 1:nameZh (id)> — 因为 <bestFor 命中>;<descriptionZh 摘要>
     ★ <推荐 2 / 推荐 3>
     其它可选:<剩余主题,nameZh + 一句话>
     也可以让我帮你做新主题(详见 references/THEMES.md)。

  4. 真素材怎么准备?粗看本视频要的图:<列粗略清单>
     a) 我从 <现有素材路径> 帮你挑   b) 你自己提供   c) 全部 placeholder

  5. 开发模式选哪个?

     **第 1 章无论哪种模式都必须主线程做完 + 用户验收**(强制 anchor)。
     差异在第 2 章及之后:

     A) 默认 · 逐章确认(推荐)
        每章做完都暂停验收 → 风险可控 / 节奏最稳
     B) 第 1 章后顺序开发(不并行)
        第 2~N 章主线程顺序做完后统一验收 → 速度中 / 适合 agent 不支持并行
     C) 第 1 章后并行开发(subagent)
        第 2~N 章用 subagent 并行 → 最快 / 用户控并行数(一次几章)
        ⚠️ 风格各章会有差异(这是预期,主题禁区兜底)

收到反馈后:

  • 稿子 / outline 要改:直接编辑文件,编辑完 ping 一次(或口头描述 agent 改)
  • 主题必须明确才进入 Phase 2。用户说"主题你帮我选" → 取你推荐的第 1 个, 告诉用户你选了什么、为什么,给反悔机会
  • 模式选定 → 进 Phase 2

Phase 2 —— 网页开发

2.1 脚手架

bash <path-to-web-video-presentation>/scripts/scaffold.sh \
  ./presentation \
  --theme=<用户选的主题 id>

bash <path-to-web-video-presentation>/scripts/scaffold.sh --list-themes
自定义主题 → 先按 `references/THEMES.md` "创作新主题"流程做一个 themes/<my-theme>/,再 --theme=<my-theme>。

脚手架带一个 01-example demo。在写第一章真实内容前删掉:

rm -rf presentation/src/chapters/01-example

并把 presentation/src/registry/chapters.ts 里 EXAMPLE_CHAPTER 的 import 和数组项移除。

2.2 第 1 章 —— 主线程 + 强制验收

核心:第 1 章 = 完整版本一次到位(节奏 + 视觉 + 真素材齐全)。 没有"骨架版"概念 —— 第一章就要做出用户能直接验收的样板。

为什么第 1 章必须主线程:

  • 它是 `CHAPTER-CRAFT.md` 这套指引在当前 主题 + 当前题材下的第一次落地
  • 如果指引有盲区 / 主题颜色 / 字体 token 不够用,第 1 章一定会暴露 —— 这时候有人类反馈就能修指引 / 调主题,早改成本最低
  • 后续章节(无论顺序 / 并行)都要参考第 1 章的代码模式,所以第 1 章 = 当次项目的"风格锚点(不强求章节间一致,但单章自身得有完整说服力)"

做完第 1 章后必须停下来等用户验收:

第 1 章 <id> 做完了,dev server 在 localhost:5173 运行。

验收重点:
  □ 视觉气质对不对?符合 <theme nameZh> 的预期吗?
  □ 节奏对不对?某些步太快 / 太慢 / 信息太薄?
  □ 内容驱动动画是否到位?还是有几步是无脑入场动画?
  □ 双源原则:屏幕画面有没有"口播没念但 article 能挂"的细节?

More from conardli

Use this skill in a project

Open any RiverX project, search the Skills panel for conardli/garden-skills/web-video-presentation, and install it in one click.

Use this skill