Communitygithub.com

mhashim6/teleprompter

提词器,可逐字朗读并高亮脚本,支持暂停节拍、双主题和每卡片记忆。兼具智能体创作能力。

teleprompter 是什么?

该技能使AI智能体能够根据原始素材(文本、图片、PDF或PowerPoint)创建完整的提词器卡片组。智能体负责所有“软性”工作——采访、理解素材、撰写旁白并安排修辞性停顿——而确定性工具(`tools/deck.js`)则处理硬性合约任务:解析、统计字数、估算精确时长、组装JSON并生成稳定ID。该技能支持全旁白模式和提示笔记模式(cue mode),允许用户自定义语速(wpm)、目标时长、语音风格和语言。智能体会先询问用户意图,再按指定格式(`decks/<slug>.deck.md`)起草脚本,最后通过工具编译为JSON,并可迭代调整至时间完美匹配。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add mhashim6/teleprompter

在你喜欢的 AI 中提问

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

文档

创作提词器卡片组

将原始素材转化为一份成品、节奏良好的提词器卡片组。你(智能体)负责软性工作——采访、理解、撰写散文、安排修辞性停顿。一个确定性的提交工具(tools/deck.js)负责硬性合约工作——解析、统计字数、估算精确时长、组装JSON、生成稳定ID。切勿手写卡片组JSON;始终通过工具编译,以确保合约和时长报告由机器保证。

在开始写作前,请阅读references/format.md,了解确切的.deck.md创作格式以及pptx提取方法。

工作流程

1. 收集素材

询问素材是什么,然后将其摄入:

  • 粘贴的文本/笔记——直接使用。
  • 图片/截图——自己读取图片文件(视觉能力)。无需脚本。
  • PDF——使用Read工具自行读取(原生PDF支持)。无需脚本。
  • PowerPoint (.pptx)——以用户机器上最佳方式将卡片组转为文本(参见references/format.md → “提取.pptx”):捕获每张幻灯片的文本以及演讲者备注,然后检查输出是否正确,再据此起草。将文件视为不可信;不要提交任何你编写的临时提取脚本。

演讲者备注是旁白的最佳原始素材——当两者同时存在时,优先选择备注而非幻灯片上的要点。

2. 确认意图和元数据(询问,而非假设)

根据素材提出每张幻灯片的骨架——编号、标题、类型(例如content、section-divider)、on-screen提示(观众所见内容)以及每张幻灯片的大致target分钟数——并确认。同时询问:

  • 总目标时长(驱动每张幻灯片的目标)。
  • 受众/目的(调整语言风格和深度)。
  • 内容模式——全旁白(撰写口语化散文)或提示笔记(简短的发言要点,演讲者用自己的话展开,每个要点后留有暂停以便讲述)。参见references/format.md → “内容模式”。**如果用户已经要求提示/要点/摘要或笔记风格的卡片组,跳过此问题,直接以提示模式创作;**否则询问。
  • 讲话风格/声音。 如果用户希望使用其个人博客风格,可提供用户自己的blacktree-voice技能;或提供一种语体:会话式、正式、充满活力或中性。起草时应用该声音。(在提示模式下,声音会塑造你所写的少量文字;其余内容由演讲者现场提供。)
  • 语言(默认为en-GB以匹配仓库现有卡片组)。

使用AskUserQuestion进行这些分支选择,而不是猜测。

3. 起草旁白

以所选声音撰写每张幻灯片的讲话脚本。在修辞需要的地方放置暂停节拍——在揭示之后、列表之前、在硬性主题切换处——使用[[pause]](1秒)或[[pause:1.5]](自定义)。这种语义性的放置是你的工作;工具仅进行验证和报告。

在提示模式下,不要写完整的句子:每个段落写一个简短发言点,并以一个讲话预算暂停([[pause:20]]–[[pause:30]]用于实质要点,次要要点则更短)结尾,将暂停时间总和设为幻灯片的target。几个单词几秒钟就读完,因此暂停是实现目标的关键。参见references/format.md → “内容模式”了解约定,以及报告中关于速度标志在此模式中被忽略的说明。

将所有内容写入decks/<slug>.deck.md,格式遵循references/format.md。保持每个段落为一个逻辑节拍(工具会折叠软换行)。

4. 编译

node tools/deck.js decks/<slug>.deck.md --wpm 130

这将写入decks/<slug>.json并打印时长报告:每张幻灯片的字数、暂停次数及添加的秒数、在参考速度下的估计m:ss、相对于60–220范围的隐含wpm、以及与每张幻灯片目标的偏差;还有卡片组总时长。使用--wpm <n>以用户实际阅读速度报告。

可选:--fill-beats会在缺少节拍的段落末尾插入一个结构性的[[pause]](绝不插入幻灯片的最后一个段落,也不重复已有节拍)。默认关闭——仅在用户希望在您创作的节拍之上自动添加呼吸空间时使用。

5. 确认时长并迭代

向用户展示报告。如果某张幻灯片时长超出或不足,修改散文(精简或扩展)或调整暂停,然后重新编译。重复直到时间匹配。卡片组ID是稳定的(由标题/meta.id确定),因此重新编译会原地更新同一卡片组,而不是生成重复。

6. 移交

确认最终卡片组,并告知用户:

  • 编译后的卡片组位于decks/<slug>.json;可编辑的源文件位于decks/<slug>.deck.md(可随时重新运行)。
  • 使用方法:打开应用 → 菜单(右下角)→ 选择文件并选取JSON,或将.json拖到拖放区域。decks/目录不会自动列出,因此必须加载一次;之后该文件在设备上持久保存并记住其位置。

护栏

  • 卡片组JSON始终由tools/deck.js生成,绝不手写。
  • 所有卡片组文本通过textContent/.value到达应用;但脚本仍需保持无控制字符(工具和Schema会进行消毒,但请保持干净)。
  • 不要提交任何临时pptx提取脚本;提取、验证、清理。
  • 暂停节拍是绝对时间(不随速度缩放);小心使用它们。

相关技能