Communitygithub.com

madhavsomani/animation-skills

Madhav 的“案件档案”调查解说工具:一种纪录片式“证据室”风格,专为 Reels/Shorts/YouTube 设计(炭色背景、白色发光照片卡、撕裂姓名标签、带有发光红色路线的暗色街道地图、白色粘土 3D 微缩模型、附有真实来源的证词引语卡、红色日期印章、脚注标记、衬线章节标题),由平静的旁白和持续的低保真环境配乐驱动。适用于请求制作“案件档案”、“证据室”、“调查”、“真实犯罪/纪录片风格”或“X 是如何被发现/被黑/泄露”的视频,内容涉及技术事件、漏洞、中断、丑闻或历史故事。在动画视频技能的各个阶段和审批节点内运行。不适用于乐观的概念解说(矢量世界解说)、在主持人镜头上的纸拼贴(纸实验室卷)或普通镜头剪辑(视频使用)。

animation-skills 是什么?

该技能专为创建具有调查纪录片风格的视频而设计,特别适合解释技术事件、漏洞或历史故事。它提供了一套完整的艺术指导、镜头词汇、音频配方和可工作的工具包,所有内容都集成在 `animated-video` 技能(基于 Remotion)的框架内。技能的核心是“证据室”美学:使用炭色背景、红色高亮(表示证据)、白色发光照片卡、系统地图、粘土 3D 微缩模型和带有真实来源的证词卡。视频节奏平缓、旁白冷静,配以持续的低保真环境音轨,营造紧张而非夸张的氛围。支持从 Reels(30-45 秒)到 YouTube 长视频的分章节格式,并包含一个专门用于教育性安全事件的变体(约 55-60 秒),用于解释漏洞的成因、影响和防护措施。该技能强调事实的准确性,要求所有事实都必须在 `NOTES.md` 文件中附上来源和验证状态。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/madhavsomani/animation-skills/tree/HEAD/skills/case-file-explainer

在你喜欢的 AI 中提问

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

文档

案件档案解说器

一个以证据形式讲述的调查故事:谁、在哪、何时、以及记录说了什么,只有一个红色强调色,始终表示“这就是证据”。紧张感来源于冷静的克制:没有夸张的词语,没有快速剪辑。取而代之的是,一个永不停止漂移的镜头,一个永不静音的配乐,以及准确落在旁白所述单词上的事实。

在 cstack animated-video 技能(Remotion;请先阅读它)内部运行,并保留其审批节点、全质量交付和四个独立的 QA 状态(技术、事实、创意、所有者验收)。此技能添加了艺术指导、镜头词汇表、音频配方和一个可工作的工具包。

  • 可复制的工作示例:template/(30 秒的 xz 后门演示:src/kit/casefile.tsx = 工具包,src/scenes/* = 每个镜头类型一个场景,audio/score.py = 配乐)。截图:../../docs/case-file-explainer/。

为每个故事重新设计。复制方法和工具包,而不是 xz 影片的镜头。

清晰度优先。 我们的第二个案件档案(一个 PHP 远程代码执行故事)看起来很精致,但很难理解。对于任何解释某物如何工作的视频,请先用 decode-explainer 技能(概念阶梯、先做玩具模型、屏幕上有图例、每屏一个想法、术语定义后才使用、字号 ≥ 44 px)进行规划,然后仅将此技能用于证据室外观和调查节奏。

1. 故事:调查主线

只有当赌注是真实的并且每个主张都有来源时,调查故事才有效。

  • 钩子(0-3 秒): 异常,以一个带数字的事实陈述(“他的登录慢了半秒”)。第 0 帧是封面:一个衬线标题加上证据对象,永远不是黑色。
  • 追踪(中间部分): 跟随证据穿越地点和人物。每 2-4 秒一个节拍:日期印章,然后是人物卡,然后是地图上的路线,最后是找到的对象。
  • 揭示: 掉出的时刻。音乐减弱,一件红色的东西亮起。
  • 记录: 一张引用真实主要来源(电子邮件、证词、报告)的证词卡,下方注明作者和日期,以及一个脚注编号。切勿编造引语;将重建内容标记为“重建”。
  • 结尾: 一个衬线标题,将钩子重述为裁决(“半秒。”),一条红色规则和案件编号。保持住,然后有目的地淡出。仅在创作者想要时才添加口头评论 CTA;如果有 CTA,则需完整说出。
  • 短格式:30-45 秒,4-6 个镜头。长格式(YouTube):带有“Chapter I”衬线标题卡的章节。
  • 将每个事实放在 NOTES.md 中,并附上其来源和验证状态,然后再将其放到屏幕上。事实是影片的关卡。

教育变体(安全事件):此格式的默认选项

使其具有教育意义:帮助人们理解它是什么、为什么会发生以及他们可以做些什么来保护自己。主线(约 55-60 秒,6 个镜头):

  1. 封面/钩子: 日期印章、衬线事件名称、严重性印章和 CVE 标签,所有这些在第 0 帧可见。
  2. 规模: 为什么重要(影响多少网络或多少用户),附有来源统计和脚注。
  3. 它是什么: 一个管道图,展示漏洞所在的位置(互联网、Web 服务器、引擎、应用程序)。请求沿着红色路线行进,出现故障的阶段变红,并显示后果(例如,陌生人的 Shell 提示符)。在屏幕上定义术语(“shell = 你服务器上的命令行”)。
  4. 为什么会发生: 根本原因作为白色粘土 3D 隐喻(内存如块:半建好的堆栈、带有幸存指针的释放幽灵块),加上一个 3 行良性代码卡(malloc/free)。
  5. 时间线 + 现实检查: 带日期的大头针(最古老的影响代码、首次攻击、泄露、补丁),然后是一张来自主要来源的证词卡,使风险保持适度。
  6. 保护: 一个“如何检查”终端(php -v 和修复版本),一个编号的检查清单,与配音同步,以及一个用于边缘情况的页脚(EOL 版本、仅作为权宜之计的 WAF)。
  7. 裁决 + CTA: 一个两行的衬线裁决和一个保存/关注 CTA。

教育安全:概念性地解释攻击类别。切勿展示载荷、请求体、偏移量或逐步利用过程。命名修复方法以及如何验证它。

2. 外观(艺术圣经)

元素规则
背景炭色 #0d0d0e,带有柔和的径向提亮;始终开启渐晕和细微颗粒
强调色一种红色 #ff2d2a,始终发光(三重文字阴影 + 泛光)。红色 = 证据:路线、异常、嫌疑对象、关键词。没有其他东西被着色
内容单色:米白色 #f2f0ea,暗淡 #8d8b86;档案照片为黑白
字体衬线标题(Source Serif 4 700);打字机正文/标签(Courier Prime 700);数据/日期印章(IBM Plex Mono 700,字母间距大写)
照片卡黑白照片,白色边框,边缘略微撕裂,白色发光;角色行使用大写等宽字体;黑色姓名标签带有撕裂的白色边缘。未知人物 = 模糊卡片,带有“无已知照片”
系统地图由细灰色线条、几条粗主干线和弯曲高速公路组成的暗色街道地图,巨大的字母间距衬线区域水印(“D E B I A N”);路径以发光红色绘制,带有白色头部;大头针是带有指针的姓名标签
微缩模型白色粘土 3D 模型(three.js):浅灰色地面上的哑光白色方块,柔和的阴影,雾。当它被点燃时,唯一的红色物体照亮其周围
引语卡大号衬线引号,白色规则,等宽字体输入的文字,关键词为红色,下方有来源行和日期
日期印章红色发光时钟 + “FRIDAY, MARCH 29, 2024” + 一行上下文
脚注屏幕上显示有来源的主张时,在右上角用暗淡等宽字体显示 [n]

9:16 的安全区域:将内容保持在 x 60-960 和 y 240-1440。字幕位于 y 约 1470,使用等宽字体放在深色标签上,关键词为红色。切勿将其放在面部上方。

3. 运动

  • 极少硬切。 此风格的长纪录片在十分钟内只剪辑几次。镜头通过内容连接:潜入红色印章,它变成了地图的起始节点;潜入地图的红色节点,它变成了红色的 3D 方块。
  • 镜头永不停止: 缓慢推近(每个镜头 5-8%),拉远以揭示上下文,以及沿路线平移。每种运动都缓入缓出;在对数空间中缩放。
  • 卡片以阻尼弹簧弹出(缩放从 0.82 到 1);标签向下掉落 18 像素到位;文字逐字打出。
  • 红色路线以旁白的速度绘制:头部在每个单词处到达相应节点。
  • 每 1.5-3 秒改变一些内容,每次命中在单词后 2 帧内落地。

4. 音频配方

  • 配乐永不停止。 前 5 分钟内无低于 -45 dB 的静音。小调的低保真环境无人机/垫音;仅音乐开场(长格式约 12 秒,Reels 约 0 秒)。
  • 旁白在前,音乐低约 10 dB。 从配音包络中闪避(侧链式)。在配音间隙 0.6 秒或更长时增强音乐,并在揭示词之前将其淡出。
  • 长格式目标:约 -16 LUFS 集成,LRA 约 6 LU。平静而密集,而非动态。Reels 交付目标:-14 LUFS / -1.5 dBTP。
  • SFX 稀疏且物理: 打字音对应打字文本,卡片和标签落地时的轻柔砰声,路线绘制时的数据噪音,揭示时的次低音,裁决时的玻璃 ping 声或铃声。
  • 声音: 一个平静、低沉、克制的旁白:短的陈述句,事实后停顿。首先使用创作者自己的录音;语音克隆需要花费审批。TTS 替身仅用于草稿,并且必须标明。
  • 示例中的 audio/score.py 根据单词时间构建整个配乐和混音。

5. 流程

  1. 事实和来源放入 NOTES.md;获取脚本和节拍表批准(animated-video 停止点 1)。
  2. 配音,然后是 words.json(Whisper 或 TTS 单词边界);在 audio/fix_words.py 中修复分词问题。
  3. 从 cue() 在 src/lib.ts 中定义幕;使用相同的提示用 audio/score.py 构建配乐。
  4. 复制 src/kit/casefile.tsx 和场景模式;使用 snap.sh 渲染关键帧板(停止点 2:风格帧/关键帧)。
  5. 以 --scale=1.3333333333333333(1440x2560)渲染,然后进行两遍 loudnorm 至 -14 LUFS,H.264 High,CRF 14,maxrate 24M,yuv420p 有限范围,BT.709 标签,faststart。
  6. QA:完整解码、blackdetect、响度、联系表、每个转换周围的密集帧,以及配音的 Whisper。分别报告 4 个 QA 状态。

构建第一个时发现的问题

  • 整个脚本的 edge-tts 运行速度缓慢(180 个单词用时 88 秒)。使用 scripts/tts_lines.py(每行一次 TTS 调用,控制间隙,“|”开始一个部分),然后使用 scripts/squeeze.py(缩短超过 0.45 秒的暂停并重新映射单词时间):68.6 秒变为 58.5 秒。
  • cue("Before")、cue("PHP") 和其他重复单词会抛出问题。使用 2 单词短语,或传递 nth。
  • 在 3D 广角镜头中,单行方块会使帧内空白。添加后行(z = -1.6, -3.2, -4.8)以增加深度。
  • 将镜头保持在一个 bug 的位置上,直到下一个节拍前约 6 帧。过早移动会使主体在句子中间离开画面。
  • 覆盖卡片必须在屏幕上至少显示 1.5 秒。从较早的单词开始,而不是最后一个。
  • 通过共享浏览器,导航可能会落在当前所在的任何选项卡中,包括用户自己的选项卡。首先选择自己的选项卡。
  • edge-tts 返回“March 2024”作为一个单词边界。在 chunk() 之前拆分它,否则字幕会出错。
  • cue("It") 和其他重复单词需要 nth,或更长的短语(cue("It had"))。
  • 发光的红色立方体加上泛光效果会变成橙/黄色。将自发光保持在 0.5 或以下,基色为深色(#b8120c),场景泛光为 0.5。
  • 在竖屏 3D 中,塔必须位于卡片带(y 300-750)和字幕(y 1470)之间。对于一个 6 单位高的模型,将相机向后拉约 23 个单位。
  • 终端上的 HTML 缩放会裁剪其边缘,超过约 1.12 倍。缩放到读数,而不是角落。
  • 宽度超过约 300 px 的地图节点标签会跑出画面。将其居中于节点下方。

Individual skills in this repo

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

相关技能