Communitygithub.com

KKcorps/code-film

用代码绘制每一帧画面和每一段音效,生成一个 HTML 页面和 MP4 短片。支持各种主题(技术系统解说、音乐视频、故事片、广告、视觉诗)和各种手工质感(孔版印刷、纸拼贴、墨水、水彩、像素、蓝图、沙画)。从书面意图卡开始,根据 29 部人们喜爱的代码绘制影片的图库进行评判,并验证成品是否符合意图。

code-film 是什么?

该技能让用户通过纯代码生成短电影——每个画面和每一段声音都由一个 HTML 页面计算得出,无需任何图片、视频素材或音频采样。它涵盖了各种影片类型(技术系统解说、音乐视频、故事片、广告、视觉诗)和任何手工质感(孔版印刷、纸拼贴、墨水、水彩、像素、蓝图、沙画)。工作流程以书写意图卡开始,然后根据一个包含 29 部人们喜爱的代码绘制影片的图库进行评判,最后使用自动化检查工具验证生成的 MP4 是否符合原意图。技能自带一个包含孔版印刷机效果和移动算法的帧引擎、一个计算生成的乐谱、一键构建 MP4 的命令,以及针对缺陷、衔接、画面和音效的检查工具。它还能拆解参考剪辑、图片或 HTML 页面。该技能适用于动画解说视频、代码绘制影片、音乐视频或静态图像、孔版印刷或打印效果,以及匹配或学习参考影片的场景。不适用于面向 YouTube 的旁白课程(应使用 lesson-film 技能)或页面/文档内部的动画图示。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/KKcorps/inkreel/tree/main/skills/code-film

在你喜欢的 AI 中提问

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

文档

代码绘制影片

本技能生成一个 HTML 页面,该页面从 (f, seed) 绘制帧 f,并同步计算音轨,最终输出 MP4。影片的内容、外观和运动方式由你决定。本技能包含三个核心要素:你首先写下的意图、你用于评判的审美标准,以及验证成品是否实现意图的检查工具。

设置

在新机器上运行 bash assets/doctor.sh 一次。它会检查 Chrome(或 CHROME 路径)、Node 22 或更高版本、ffmpeg,以及带 numpy 和 Pillow 的 Python 3,并说明如何修复缺失的部分。

1. 撰写意图

将 assets/intent.md 复制到页面旁边,命名为 piece.intent.md。首先填写核心信息和感受:观众观看一次后能说出的要点,以及影片结束时的感受。其余部分等到选定草图后再填写,因为先写好的卡片固定了想法,后续的草图只能改变其外观。这就是分类账影片的三个草图变成同一想法三种外观的方式。

选定草图后,完成卡片。其“评判”部分说明了我们遵循的内容、只有该主题才能提供的观点、外观及其原因、是否以及如何出现文字、它学习的图库影片,以及结尾如何呼应开头。其“衡量”部分给出了时长、节奏、声音和节拍。此后的每一个选择都服务于这张卡片。当作品显示卡片有误时,修改卡片并说明原因。

2. 根据图库评判

reference/gallery.md 包含 29 部 Claude 用代码绘制每一帧的影片,涵盖音乐、解说、故事和实验,以及这些受人喜爱的影片的共同点:

  • 有一个贯穿每个场景的事物。
  • 每一帧画面都传递信息,而不仅仅是为了变化。
  • 影片在开始的地方结束,但已改变。
  • 有东西显示我们身处何处:仪表盘、计数器、时钟。
  • 外观是一种真实的材质,带着其瑕疵使用,并为该故事而选择。
  • 声音和画面浑然一体。
  • 文字稀少、醒目,并且是画面世界的一部分。
  • 具有观点和温度。
  • 和想法一样简短。

这些是判断标准,而非规则。可以在卡片说明原因时打破其中一条。reference/taste.md 包含了该技能作者 Kartik 在构建过程中所进行的修正:这是一个起始品味,并非你的最终标准。当它们与图库不符时,说明差异并询问影片面向的对象。

3. 验证结果

在交付说明中报告所有三个层面。

  • 缺陷会阻止构建。 页面能解析、运行并每次都绘制相同的帧。没有帧闪烁或跳跃出剪辑点。混音电平在 -28 至 -8 dBFS 之间且不削波。check.py、seamcheck.py、verify.py 和 build.sh 强制执行这些检查。
  • 意图是可衡量的。 python3 assets/verify.py piece.mp4 检查意图卡片的“衡量”部分。任何不符都意味着影片或卡片有误。修复其中一项并说明修复的是哪一项。
  • 观看测试由你负责。 即使每行检查都通过了两次,结果可能仍然糟糕。回答 verify.py 打印的五个问题:像新人一样复述故事、说出每一帧的内容、关掉声音观看、与参考影片并排观看、评判最后一帧。

lookcheck.py 和 soundcheck.py 从不阻止构建。它们描述节奏、色彩、同步和节拍,你需要对照卡片来解读它们。

工作流程

每一步都有报告行,因此不能在不说明情况的情况下勾选完成。

  1. 如果对方分享了参考素材,先拆解它。 剪辑、图片或 HTML 页面均可。阅读 reference/references.md。报告其形式、作用、哪些差距可以弥合,以及你采用了什么、保留了什么。
  2. 写下核心信息和感受。 仅这两行。报告它们。
  3. 完整观看两部或三部最接近的图库影片。 报告你从每部影片中获取了什么,以及你不会复制什么。
  4. 用静态图草拟三个不同的故事。 每个故事都是不同的事件,用一句话描述,而不是同一个想法的三种外观。至少有一个应该是观众可以沉浸其中的世界,而不是图表。使用引擎和印刷效果以成品外观绘制每个草图,绝不能是线框图。草图可以跳过缺陷检查,但不能跳过工艺。assets/sketchcheck.py 会拒绝平淡的草图,以及在提供已批准帧时检测出的复制品(使用 --refs)。将草图展示给目标受众,让他们选择或组合。报告每个故事的情节。然后完成意图卡片。
  5. 撰写文字(如果有的话)。 在编写任何代码之前,用同一语调写一段话,保存为 piece.chain.txt。阅读 reference/story.md 中的“读起来像人声的文字”。报告这段文字及其连接词比例。
  6. 规划影片。 按顺序列出节拍点、每帧画面在一句话中的含义、显示观众位置的内容,以及结尾。报告计划。这是一个计划,而非合同。
  7. 构建页面。 从 assets/engine.html 开始,或者按照下面的页面契约编写自己的页面。在连接场景之前单独检查每个场景。报告你在观看后重新绘制的内容。
  8. 制作声音。 首先在 TUNE 和 SECTIONS 中编写旋律,然后为故事的转折点编写四到八个重音。或者使用你自己的 piece.score.py、页面生成的 piece.wav,或静音。报告 score.py 打印的乐谱,以及声音为何符合意图卡片。
  9. 构建。 assets/build.sh piece.html out.mp4。在其前面加上 ROUGH=1 可以生成用于早期展示的草稿。报告相关数据。
  10. 验证。 所有三个层面。逐一报告。
  11. 作为新文件交付。 切勿覆盖上次的构建结果。

一部影片中的两种外观

一部影片可以在两种渲染器之间切换,例如孔版印刷场景和墨水分类账。为第二种渲染器提供其独立的作用域,使用 { raw: (ctx, u, f, size) => {} } 选项绘制其段落,并将剪辑点放入 EXTRA_CUTS 中。assets/examples/parcel42-day/ 正是这样做的。它也是整个工作流程的典型示例,因此请阅读其 README,并关注其方法,而不是外观。

页面契约

任何满足以下条件的页面都可以构建和验证。它设置 const FPS = n。在 ?capture=1 模式下,它将 window.__frames 设置为帧数,将 window.__render(f) 设置为每次以相同方式绘制帧 f,然后将标题设置为 capture ready N。其脚本的第一行将任何错误写入 document.title,因此崩溃不会表现为空白页面。

基于引擎构建的页面还可以使用 ?play=1、?f=N、?grid=1、?scene=id 和 ?cuts=1,并且 score.py 从 plate() 读取其段落。

文件列表

文件说明
assets/intent.md意图卡片模板
assets/engine.html可选起始点:帧网格、段落和镜头、场景库、移动算法、孔版印刷机、手写笔、三个演示世界
assets/score.py基于页面节拍网格的计算分数,包含每段的调性、和声、音色、摇摆和结尾
assets/build.sh门控、捕获、衔接、分数、编码、测量、验证,一站式命令
assets/verify.py将影片与其意图卡片进行对比,同时检查响度和削波,然后询问观看测试问题
assets/check.py页面门控:解析、错误处理、模式、网格、渲染
assets/seamcheck.py闪烁、跳跃出剪辑点、运动内的抖动、漂移的固定锚点
assets/sketchcheck.py故事草图检查:不平淡、不是已批准帧的复制品(--refs)、不涉及禁止的世界(--world)、无残留存根
assets/lookcheck.py、assets/soundcheck.py画面和声音的测量指标,需对照卡片和图库解读
assets/printcheck.py判断帧看起来是打印的还是计算生成的,与参考图像对比。将宽幅帧中心裁剪为正方形
assets/refpage.mjs拆解作为参考的 HTML 页面:其调色板、标记、图层和音频音色(在绘制它们时),以及一个 MP4 文件,以便剪辑检查也能对其生效
assets/capture.mjs通过 CDP 进行帧捕获。由 build.sh 调用
assets/capture-range.mjs、assets/capture-par.sh以任意宽度和高度捕获,支持多 Chrome 实例同时运行。适用于 16:9 及超过一分钟的影片
assets/doctor.sh检查机器是否就绪:Chrome、Node 22+、ffmpeg、numpy、Pillow
assets/examples/parcel42-day/已批准影片的源代码,附带说明构建过程的 README
assets/example-print-still.html孔版印刷效果的模型

何时阅读什么

每次调用读取一个完整文件。在输出限制下,每次 Codex 运行会读取三到四个技能文件。它会在不提示的情况下丢失约 13000 token 的中间读取内容,包括 gallery.md 的一半。如果读取提示 token 被截断,则单独重新读取该文件。

  • 在撰写意图卡片之前,以及展示任何内容之前,阅读 reference/gallery.md。然后阅读 reference/taste.md。
  • 当对方分享了参考剪辑、图片或 HTML 页面时,阅读 reference/references.md。
  • 规划故事或撰写说明文字时,阅读 reference/story.md。
  • 画面和声音共享节拍网格时,阅读 reference/time.md。
  • 规划转场或镜头运动时,阅读 reference/moves.md。
  • 外观是孔版印刷或任何打印效果时,先阅读 reference/press.md,然后在调整纹理前阅读 reference/surface.md。
  • 添加手写效果时,阅读 reference/hand.md。
  • 制作声音时,阅读 reference/sound.md。
  • 构建时,阅读 reference/export.md。
  • 影片时长超过一分钟时,阅读 reference/export.md 的末尾部分。
  • 影片是面向 YouTube 的旁白课程时,使用 lesson-film 技能,该技能基于本技能构建。
  • 陷阱,按阶段列出至今为止本技能出现的所有问题。在填写卡片和绘制草图之前,以及展示任何内容之前,阅读 reference/traps-story.md。在构建页面之前,阅读 reference/traps-page.md。规划移动、镜头或节拍网格时,阅读 reference/traps-motion.md。外观为打印效果时,阅读 reference/traps-print.md。制作声音时,阅读 reference/traps-sound.md。首次完整构建之前,阅读 reference/traps-build.md。

修改本技能

陈述意图和判断标准,并对照意图检查结果。切勿将一部影片的风格变成规则:这会让每个作品都变成一件参考作品的复制品。任何经验教训都应放入其专属的文件中,其他每个文件都应在同一行中指向该文件。新增的已批准影片应放入图库的“我们的作品”部分,并说明其为何有效。

借鉴与致谢

平面填充加裁剪边缘效果的模型,以及 wob、crayon、hatch、grain、dotScreen 和 scribble 的形状,来自 alesha-pro 的 hand-drawn-canvas-animation 技能(MIT 协议,github.com/alesha-pro/tools)。其纹理是修饰而非渐变,以及形状的填充和轮廓绝不能重合的规则,是解锁本技能打印外观的关键。

优秀范例

一个新人观看一次后能复述故事,且复述内容与核心信息相符。联系表中的每一帧都是一幅有意义的画面。它可以放在图库影片旁边而不显得是复制品。最后一帧完美结尾。零缺陷,卡片匹配,并且你无论如何都会观看它。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能