
今天拆的是 OpenFilm:把一部片子写成一个 HTML 文件、每个镜头一个 frame(t) 函数,Agent 写、你在本地 Studio 手改;文章给全它在链条上的位置、最短上手路径、十三处已知阻塞,以及 MIT 许可下的真实开销。
film.html,Agent 下次读到的就是你手改过的那一版3。playwright-core4。项目 2026-10-04 才建仓,到今天 8 天,32 次提交、4 个发布5。
film.html 是一个网页。每个 <section> 是一条轨道,按顺序从上往下叠,第一条在最上面。t 永远画出同一张图,不管之前画过什么、按什么顺序被问到。宿主会乱序、并行地要帧,还会在帧与帧之间再要一次来做运动模糊,守住这条规则的页面在任何机器、任何尺寸下都出同样的画面2。preserveDrawingBuffer;页面自己也没有声音,所有声音都是 film.html 里的 clip1。openfilm look 把整片的缩略图逐帧画两遍,两遍的顺序各自打乱,再逐帧比对,把画得不一样的时刻点出来;同一趟还会报页面错误、没加载上的字体、找不到的声音文件、被画面裁掉的文字1。openfilm render 出 mp4,默认 30 fps,可以加 --4k、--fps 60、--alpha(出带透明通道的 webm 或 mov)。
openfilm.dev/media/hero.jpg;左边是媒体区,中间是预览,下面是时间线,右侧是会话面板3。film.html 的 overrides,Agent 会留着它们继续往上做1。它还能导出 GIF、音轨或分轨、字幕、静帧、幻灯片,以及给 Premiere Pro 和 DaVinci Resolve 的时间线2。
packages/openfilm/MANUAL.md,2026-10-13 截取;Agent 跑 npx openfilm 打印的就是这一页,film.html 的样例、唯一那条规则和四个命令都在这份约一千词的手册里1。assets/,它按你给的剪;没有就用网页画出来。npx skills add openfilm/openfilm给我做一支 20 秒的发布视频,带配乐npx openfilm、读它打印的手册,写出 film.html、几个网页和 assets/。你的 Agent 不支持技能也能做,只要告诉它「用 npx openfilm 做一支视频」15。npx openfilm open # 在 Studio 里打开一部片子,新建或已有的都行,也可以直接开一个 GitHub 上的
npx openfilm look # 自查:整片缩略图、单帧、一段,或者某个素材
npx openfilm render # 出 mp4;--4k、--fps 60、--alpha
npx openfilm get # 从你连的服务取配音、音乐、音效、转写、图片、视频
look 或 render 手机和相机拍的 MP4。现状:提交 PR #30 的贡献者在 2026-10-12 写,Playwright 装的 Chromium 在 Linux 上只解 VP9 和 AV1,H.264、HEVC、AAC 的 canPlayType 返回空,画面位置是黑的,每帧还要先等一轮超时,六秒的片子要跑几分钟;同一份材料里,维护者 PazChen 当天在该 PR 下回复说他们自己的 Linux CI 用的是同一个 chromium-headless-shell(playwright-core 1.61.1),跑 ffmpeg 默认编码器做的 H.264 MP4 画面正常,要求提交者给出复现步骤。这条 PR 现在状态是「要求修改」,2026-10-13 还没有合并17。你能怎么办:在 Linux 上先用一段自己的 H.264 素材跑一次 look 再决定要不要把整条流水线搬上去,不确定就先在 macOS 或 Windows 上做片。package.json 的 engines 写 >=22.1818,npm 包的 engines 又写 >=22.24。你能怎么办:按最严的那个来,装 22.18 以上。ELEVENLABS_API_KEY(文档:Services,2026-10-13 读取)13。你能怎么办:只做网页画得出来的镜头,一分钱不花;要生成式素材就先连一家服务。t 必须画出同一张图,帧是乱序并行的,页面不能自己动,WebGL 画布要开 preserveDrawingBuffer,页面没有声音(MANUAL.md,2026-10-13 读取)1。你能怎么办:要状态就自己算出来;Blender、Python 或视频模型做的东西,先渲成视频或图片再当素材摆进去。speed(0.25 到 4),不要重新生成另一个速度的文件,也不要移 .vtt 的时间;裁切交给 CSS 的 object-fit,不要切出、不要重编码出新的媒体文件1。你能怎么办:按它的方式写,换个素材比换个文件快。film.html。现状:PR #33(2026-10-12)说明声音路径的解析在 URL 处理之后才解码,写成 x%2F..%2F..%2Foutside.mp3 就能让 look、render 和 Studio 的导出读到项目外的文件并混进成片;同一份列表里的 volume、at 等数字直接进了 ffmpeg 的滤镜链,非数字就是滤镜注入。修复在这个 PR 里,2026-10-13 还没有合并21。你能怎么办:先别渲染来路不明的片子,等这个修复进版本。
| 方案 | 你给它什么 | 它给你什么 | 它在这一层 | 许可与公开体量 |
|---|---|---|---|---|
| OpenFilm(本期) | 一个编码 Agent、一份网页画得出来的镜头 | 一个由 HTML 文件组成的片子、mp4、给剪辑软件的时间线 | 渲染底座加格式 | MIT,225 星5 |
| Remotion(第 23 期) | React 组件 | 逐帧渲染出的 mp4 | 渲染底座 | 自订两层,63,592 星8 |
| HyperFrames(第 14 期) | HTML 页面 | 浏览器逐帧拍出的 mp4 | 渲染底座 | Apache-2.0,61,779 星9 |
| hypit(第 15 期) | 一份 SVML 工作流 | 可重跑的一条片子 | 工作流语言 | 改过的 Apache-2.0,21,582 星27 |
| OpenMontage(第 1、10 期) | 一套产线描述 | 多产线跑出的成片 | 编排 | AGPL-3.0,67,536 星28 |
| Mortiflix(第 27 期) | Linux 机器、Claude、每道关的批注 | 成片、MIDI、可回溯的项目记录 | 流程与门控 | AGPL-3.0,590 星29 |
| OpenEdit(第 21 期) | 一段素材加一句话 | 剪好并渲染出的成片 | 编辑命令行 | Apache-2.0,1,641 星30 |
| OpenChatCut(第 16 期) | 一句话指令 | 改动先过你批准的时间线 | 编辑器 | AGPL-3.0,2,303 星10 |
| Palmier Pro(第 24 期) | 你和 Agent 同一条时间线 | 可继续剪的工程 | 编辑器 | 0.7.6 之后转闭源,14,560 星31 |
| ArcReel(第 20 期) | 小说或剧本 | 角色与场景资产、剪映草稿 | 方法论与资产 | AGPL-3.0,5,453 星32 |
| Shotstack(第 25 期) | 一条 Edit JSON | 云端渲染出的 mp4 | 云渲染服务 | 服务条款加 PolyForm 编辑器33 |
| VideoDB(第 26 期) | 你的素材库 | 可检索的视频数据 | 数据层 | 技能包 MIT,服务为 SaaS,128 星34 |
look 报的那几行就够了。raw.githubusercontent.com
raw.githubusercontent.com
openfilm.dev
npmjs.com
github.com
openfilm.dev
raw.githubusercontent.com
github.com
github.com
github.com
github.com
github.com
openfilm.dev
raw.githubusercontent.com
openfilm.dev
github.com
github.com
raw.githubusercontent.com
api.npmjs.org
raw.githubusercontent.com
github.com
github.com
raw.githubusercontent.com
anthropic.com
elevenlabs.io
github.com
github.com
github.com
github.com
github.com
github.com
github.com
shotstack.io
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.