Communitygithub.com

Filmsmith

由任意编码智能体制作的短技术影片,完全通过代码绘制与配乐(HyperFrames),基于模式模板。十种模式——一线、落墨、招贴、蓝图、荧屏、算筹、演算、一笔、网点、节拍——各有调色板预设、形态变体、场景注册表和可渲染模板;时长随内容而定,节奏明快,每次渲染都经过测量。当被要求为技术产品制作、重制或重新设计启动、宣传、预告、展示片、数据故事或解说视频时,或者为其选择视觉风格时使用。

Filmsmith 是什么?

Filmsmith 是一个针对编码智能体(如 Claude Code、Cursor、Codex 等)的 AI 技能,旨在创建短篇技术影片。这些影片完全通过代码生成视觉效果和音频,无需真人出镜。其核心在于利用“模式”模板系统,每种模式定义了一种独特的视觉语言(例如“一线”采用单线条勾勒一切,“落墨”使用厚重的字体和墨点效果),并附带调色板预设和形态变体。该技能源自一套理论体系,包含十项核心原则,确保影片风格“明快、直接、干净”。它支持生成宣传片、技术演示、数据故事等多种类型。工作流程包括澄清需求、搭建项目骨架、规划节奏、填充内容、检查渲染、最终交付,整个过程确保每次渲染都经过测量与质量控制。主要支持在本地环境中运行,需要 Node 22、FFmpeg,并依赖 HyperFrames 框架进行渲染。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add coder-xieshijie/filmsmith

在你喜欢的 AI 中提问

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

文档

Filmsmith 是做什么的?

十种用代码拍摄影片的方式。根据需求制作一部短技术影片——技术演示、技术报告或解说、技术产品发布——时长根据内容计算,无人出镜:选择一个模式,复制其模板,填写 content.js,然后渲染。每一帧画面都由代码绘制,每一段声音都由代码合成(生成的音乐轨道可替换背景音轨),因此一部影片只需要一个能运行 shell 命令的编码智能体。该技能建立在一种品味理论(基础)之上,以及由此理论和所有者评判衍生出的十项核心原则、一个共享的系统(涵盖颜色、字体、空间和运动),以及应用这些原则的十种模式,每种模式对应一种视觉语言。

所有模式的统一风格:明快、直接、干净——大约在每个节拍上都有变化,每次变化只带来一个新事物,观众无需等待影片——并且干净并非平淡:元素虽少,但每个元素的流动都足够流畅以吸引目光(原则 4–6)。

要求

  • 任何能运行 shell 命令的编码智能体。下面的 SKILL_ROOT 是包含此 SKILL.md 的文件夹。
  • 需要在 PATH 中的 Node 22 或更新版本、ffmpeg 和 ffprobe。new-film 脚本会检查它们,如果缺失则停止并显示消息。
  • 在影片搭建和渲染期间需要网络连接:从固定的 google/fonts 提交和固定的 GSAP 构建(均存储在影片文件夹中)获取字体,首次运行 npx [email protected](也会获取其无头 Chrome),以及在渲染时,HyperFrames 编译器也可能从 Google Fonts 获取字体。离线渲染未经验证。请保持模板锁定的 hyperframes 版本;不要在影片内部升级它。
  • 此版本中的屏幕文本为英语;当用户要求中文或其他文字时,请说明模板尚未支持。

模式

模式中文名称视觉风格形态变体适用场景
thread一线一条线变成一切,无切换thread:均匀规则或膨胀线条视频、动画或渲染工具链的展示片
ink落墨每个节拍上猛击的厚重字体,一个墨点绽放成色彩typeWidth:压缩或扩展字体名称揭示、启动片头、单行标语
plakat招贴动态的国际风格海报,一种信号色form:方形或对角区域一个主张加上步骤和决定者
blueprint蓝图一张逐张绘制的工程图纸,琥珀色印章linework:墨水或铅笔带有部件和签核的系统与工作流
phosphor荧屏夜间终端,一种磷光强调色,启动 HUDscreen:CRT 光栅或平面CLI 和开发工具
tally算筹每项一个方块,在图表间重新分组mark:方块、点或 Isotype 图形计数、份额、数据集故事
trace演算算法状态的深色实时图表stroke:矢量或草图机制或算法的工作原理
morph一笔一种墨色形状攀爬 点→线→面→实体→界面→标记,无切换corners:圆角或直角开发工具和界面产品:一个源头变成所有表面
halftone网点双墨水印刷:标记的一部分保持静止,而每个世界围绕它打印,然后收回整个标记dot:圆形、方形或线形网屏模型和产品发布:少数功能,一个数字,名称
pulse节拍一个以查询形式表演的问题:一个词一个节拍,背景沿一个色相翻转,一次白色闪屏作为答案aperture:切角或圆形版本发布和基准测试结果:一个经过测量的结论

每种模式都有颜色预设(在其卡片上)和一个形态变体,两者都在 content.js 中设置;默认渲染与之前相同。每张卡片都列出了其用例及一个工作示例,并标记了最佳匹配。2026-10-19 之前的名称(thread-reel、ink-beat、swiss-poster、blueprint-drafting、terminal-launch、unit-data、diagram-explainer)在 new-film 中仍然有效。

选择规则和模式卡片格式:references/modes/README.md。模式不可混用。主题(按影片类型划分的叙事骨架和规则):tech-product-launch 适用于 thread、ink、plakat、blueprint、phosphor、morph、halftone 和 pulse 模式;tech-explainer 适用于 tally 和 trace 模式。

工作流程

1. 澄清

跳过用户已提供的信息;询问其余部分,首先确定模式。以平实的对话提问,一次最多三个问题;当某个缺口不妨碍开始时,进行假设并告知用户。所有影片均为 16:9,1920×1080,用于横向全屏播放;当被要求制作竖屏或方形影片时,请说明该技能无法制作。

#问题原因
1内容是什么:一个工具、一个带有步骤的主张、一个系统、一个名字、一个展示片、数字、一个机制?决定模式(选择表);提出一个并解释原因
2事实来源于哪里(仓库、文档、数据集、算法)?屏幕上的每个事实都来源于此;每个数字都从此计算得出
3平台,以及目标时长(如果有的话)?时长根据内容计算(原则 5);目标时长会在模式范围内调整节奏,然后场景会被裁剪或添加
4哪个调色板预设?仅限预设,在模式卡片上列出;不接受自定义十六进制值
5硬约束(必须显示、不得显示、URL、名称)?避免返工
6音乐:这个智能体能否调用音乐生成 API?如果可以,则使用与影片节奏匹配的生成背景音轨替换合成音轨(系统);如果不能,则使用合成背景音轨,并在交接中说明

当模式、来源和预设已命名,音乐来源已知,并且目标时长(如果有的话)已确定时,此步骤完成。

2. 搭建脚手架

node <SKILL_ROOT>/scripts/new-film.mjs <mode> <film-dir> --palette <id>

此命令检查 Node 和 FFmpeg,复制模板,添加共享运行时作为 lib/(带有 lib/VERSION 时间戳),写入 PLAN.md 骨架,从固定的 google/fonts 提交和固定的 GSAP 构建中下载模板 fonts.json 中列出的字体到 lib/vendor/;如果任何步骤失败,则停止,因此影片永远不会使用回退字体渲染或依赖 CDN。需要可变字体轴的模板在 fonts.json 中声明其轴(weight 和 stretch 范围,请参阅 CONTRACT.md)。然后完整阅读模式卡片和文件夹的 TEMPLATE.md:场景注册表、每个槽位的字符限制和固定的编排逻辑都在那里。当你能说出该模式提供的每种场景类型时,此步骤完成。

3. 概念和节拍计划

new-film 已在影片文件夹中写入了 PLAN.md 骨架。在接触 content.js 之前填写它;没有计划的影片不会被渲染(原则 10):

  1. 概念句,格式为“在这部影片中,[该产品独有的东西]变成了[该模式的标志性手法]”,以及竞争对手测试:将最接近的竞争对手放入句子中,它必须不再成立。然后是贯穿线(引导观众从第一帧看到最后一帧的对象或框架)。
  2. 禁止列表:从模式卡片的“出厂默认值”和 ai-tells.md 开始;添加任何与最接近的参考影片过于相似的内容。
  3. 最接近的参考和母题表:命名最接近的参考影片并列出该影片与之共享的母题;在具有已知参考的模式中,超过一半的共享母题会导致违反 P1。
  4. 节拍计划:每个场景一行——场景类型、屏幕文案及其哪些是主要文本或扫视文本、事实来源、此场景在下一个场景中变成什么,以及音乐中断用于阅读或下降用于关键时刻的位置。不选择时长:将场景写入 content.js 并运行 npm run fit,该命令打印每个场景的开始时间、节拍、阅读需求、切换前的填充及其在短语四舍五入中的份额、影片时长,将 renders/timing.json 写入文件,并将表格复制到 PLAN.md 的 fit 标记之间。当 PLAN.md 缺失时 npm run fit 会停止,并且在其仍有未填充的 <!-- fill --> 部分时发出警告。

在编写文案之前,阅读模式的 TEMPLATE.md 中的时长表:它说明了每个场景的哪些槽位算作主要文本以及它们如何进入,因此每个状态都可以被预算而不是被发现。当每个场景类型都在注册表中,每个字符串都符合其字符限制,每个数字都命名了计算它的代码,并且 npm run fit 报告没有错误时,此步骤完成。字符限制只是第一道过滤器:一个槽位的宽度可能取决于其邻居,因此像素检查是步骤 4 中的红色横幅。对于规则声明了时序 API 3 的模板,错误意味着影片违反了变化的四个层级之一(原则 5):一次进入的主要文本超过五个词(对于主张是八个词,需在标记的暂停中阅读),着陆后保持超过两个节拍,构图超过 6 秒,超过四个节拍没有变化的间隔,或者表达性过渡和高峰的数量或位置错误。首先将长行拆分成依次进入的短语,然后使重复的标签成为扫视文本,然后拆分场景;切勿缩小字体或加速到阅读底线以下。在时序表下方,npm run fit 打印层级度量;仍在使用 API 2 的模板保留其页面限制(十二个主要词,一步保持一个小节,最后一步一个半小节,一个页面四个小节),并在 INFO 注释中显示层级。

4. 首先填充和取景

编辑 content.js(以及 data/ 或 run.js,如果模式使用它们的话);切勿输入 duration 或场景 bars 以达到某个时长。然后渲染关键帧的静态图并在动画化之前查看它们(脚本首先运行 fit,因此静态图使用当前时长):

npm run snapshot -- --at <t1>,<t2>,<t3>

静态图上的红色横幅表示某个槽位的文本宽度超出其盒子:缩短该文本。修复任何违反核心原则或模式原则的帧:信息文本低于 25 px、文本无法阅读、超过三个类型层级、两个主角、第二种强调色、剪裁或溢出的副本、任何来自 ai-tells.md 的内容。当每个关键帧都通过模式卡片的 P0 检查时,此步骤完成。

5. 渲染

npm run film        # fit → audio → check → render, writes renders/film.mp4

npm run check 必须报告 0 个错误。其警告根据检查清单进行判断:仅对仍在进入(正在输入、淡入)且着陆后只读取一次的文本,对比度警告是可接受的;任何其他警告都会被修复或列在“已知问题”下。声音遵循与 content.js 相同的节拍网格;要改用生成的音乐,请以影片适配的节奏和时长(renders/timing.json)渲染它,将其保存到 assets/audio/,并设置 content.bed = { file, offset }(请参阅模式的 TEMPLATE.md)。

6. 测量和审查

node <SKILL_ROOT>/scripts/check-film.mjs renders/film.mp4 --film-dir .
sh <SKILL_ROOT>/scripts/contact-sheet.sh renders/film.mp4 renders/contact-sheet.jpg 20

check-film 读取 renders/timing.json 并根据它测量渲染结果:格式和时长、响度(含短期和瞬时跳动)、黑帧、按面积计算的闪光、节拍上的关键事件(2 帧内,伴随图片事件和声音起始 [≥ 3 dB 在 1 帧内])、每个场景内内容掩码下的静止伸展(相对于颗粒感知噪底层)、节奏(没有长时间近乎静止的节拍运行,不超过一半的影片是近乎静止的)、保持稳定、交接、等长场景的运行,以及声明事件上的四个变化层级(T0 间距、T1 构图长度、T2 表达性过渡、T3 高峰、保持长度),这些仅对时序 API 3 的模板判定 FAIL;画面起始、大面积变化和最响亮时刻是它们旁边的像素和信号估计。最小文本、文本对比度、类型层级、强调色面积、八度平衡、四小节重复和限制是像素或信号估计,报告为 INFO。没有可测量项的项目报告 N/A,而不是 PASS;--json 提供每个结果及其对应的检查清单项目。

然后浏览 references/checklist.md 和模式卡片的检查项:从金字塔底部向上检查 P0,然后从上到下判断(合适度、新鲜度、质感)。在改变任何内容之前进行测量;修复原因,然后重新测量。当每个 P0 都通过,并且每个 P1/P2 的缺失都已修复或写在影片 README 的“已知问题”下时,此步骤完成。

7. 交接

提供 MP4 路径、联系表以及一份 README,内容包含计划、模式和预设、音乐来源(合成或生成)、命令、check-film 报告和已知问题;除非有人听过,否则说明“尚未通过听觉确认”。请求用户的评判,并逐字引用回用户(附上日期);当用户不可用时,写入“等待评判”并停止。

维护者:从评判到规则

仅限维护此技能源的人使用;影片制作者在步骤 7 停止。评判不会直接编辑模式卡片或原则。首先将其放在金字塔的一个层级上,并对照 foundations.md 进行检查:在层级 1-2,由标准决定;在层级 3-4,由领域共识决定,除非偏离项写明了理由;在层级 5-6,由所有者在理论认为同样好的候选者之间选择。一个趋势在两个一致的评判后成为规则。

[此处截断,原文完整内容已省略,但保留了所有其余部分]

相关技能