
今天拆的是 Diffusion Studio:把整条时间线写成一份 JSX 源码、让编码 Agent 和你在同一个文件上轮流改的开源剪辑器;文章给全它在链条上的位置、四条上手命令、九处已知阻塞,以及免费档与每月 19 美元之间那道真实的分界线。

@diffusionstudio/core(1,245 star、MPL-2.0),仓库最后推送停在 2025 年 11 月 18 日,npm 上最后一个版本 4.0.3 停在 2025 年 11 月 30 日 34;现在这台编辑器的包清单是 runtime、reconciler、jsx、assets、encoder、koota-solid 六个,分别管无头运行时、编译产物往实体树上对接、创作 API、素材库、离线编码 5。上一代引擎与这一代编辑器是两个东西,要用 core 的人先认清这一点。<stage>,里面每个 <scene> 是一帧可播放、可裁剪的画面,scene 的子元素就是摆在这条时间线上的对象,定位全部写成像素。标签和属性走的是编辑器自己的一套「伪 SVG」——形似 SVG 的形状与上色模型,规范由它自己定。这段是 README 里的例子,把素材、文字和出入场动画写在一起,能看清一份时间线在源码里长什么样 5。export default function Project() {
return (
<stage background="#161616" camera={[0.3, 0, 0, 0.3, 85, 150]}>
<scene name="Intro" width={1920} height={1080} fill="black" active>
<video src="b-roll/drone.mp4" start={0} end={6} width={1920} height={1080} />
<text y={860} width={1920} textAlign="center" fontFamily="Inter" fontSize={96} start={1} end={5}>
Hello
<animation type="fade" duration={0.5} />
<animation type="fade" phase="out" duration={0.5} />
</text>
</scene>
</stage>
);
}solid-js、solid-js/store 与 @diffusionstudio/jsx 由 app 提供。执行模块:顶层代码跑完,默认导出就是项目组件。挂载:组件树直接渲染进实体世界,中间没有暂存树,挂载是同步的。解析:每个 src 在后台解决,路径与素材 id 去加载,generate.* 声明按依赖序生成,没写 src 的 <captions> 去转写它所在的场景。持续运行:信号、副作用、useTicker 一直活着,导出、capture 和下一次打开都会重新执行同一个模块 2。generate.* 写在项目文件里。generate.image、generate.video、generate.voice、generate.audio 各自返回一个 AssetRef,塞进任何接受素材的地方当 src;声明本身只是登记,被挂载的元素真的用到它才会发出去,没人用到的声明不会消耗什么。声明之间可以互相引用——拿一张生成图当视频的首帧,或者把去背景和放大串成一条链——引用按值传递,依赖图按拓扑序执行,绕环在写法上就成立不了 6。generated/ 目录里、跨 app 重启存活。改一处不相关的代码,不会触发一次重新生成。http://127.0.0.1:3274/mcp 提供一个 Streamable HTTP 的 MCP 服务端,连上的 Agent 在 tools/list 里拿到全部工具;随 app 一起装的 diffusion 命令行(别名 dapi)把同一批工具包成命令,两边校验同一套 schema、返回同一个结果。四组工具:项目回路是 open、context、capture、check、export;素材检查是 media_probe、media_grab、media_filmstrip、media_waveform、media_transcribe、media_listen;声明可以引用的清单是 models、voices、fonts;app 自身是 logs、screenshot、report 7。isError: true 的工具结果,协议层照常,命令行版本把同一句话打到 stderr 并以 1 退出;capture、media_grab、media_filmstrip、media_waveform、screenshot 会把 PNG 写到磁盘并返回路径,通过 MCP 返回时四张以内、单张不超过 1 MB 的图直接进上下文,Agent 不用先去开文件 7。生成反过来:models、voices、fonts 只负责告诉你的 Agent 声明里能写哪些名字,生成动作本身写在项目文件里,工具面里没有对应的工具。assets/ 目录下的文件就成为素材库里的资产,资产 id 是内容哈希 7。docs/brand/ 下的 README 按任务分三张表——视觉设计、文案、视频——分别指向 design.md、voice.md、video.md、library.md,同一目录里还有可直接复用的 TSX 组件与成品合成:lower-third、title-card、media-grid 这类组件,end-card、product-demo、product-tour 这类整段合成 8。走查里有两条现成的工序,talking-head 那条把长口播拆成七步:先写 brief,再转写每个带人声的文件、把波形渲染出来区分静音与表演,按 sourceIn / sourceOut 把多条 take 拼成 A-roll,最后加钩子标题和字幕,并用 check 与 capture 逐条确认切点没有落在运动模糊帧上 9。官方另有 open-projects 仓库收录完工的工程,包括它自己的发布视频与一条募资公告动效,每个文件夹自带说明 10。
assets/ 里的素材。文件夹放在磁盘上任何位置都行,diffusion open 记一次路径,之后的工作就是编辑文件 7。brew install --cask diffusionstudio/tap/editor,也可以从官网下载页取 macOS(Apple Silicon)与 Windows(x64)的安装包 11。npx skills add diffusionstudio/skills -g -y --all。包里两个技能,editor 负责理解、生成与剪辑,watch 负责回答素材里有什么、某个镜头在第几分钟 1314。技能内容随 app 打包,路径是 Diffusion Studio.app/Contents/Resources/docs,所以它跟你装的版本一致。diffusion open /path/to/project 打开或新建项目文件夹,然后就是改文件。工具面里没有把内容推进 app 的命令,回路是开一次、之后编辑源码 7。git clone 之后 npm install、把 apps/web/.env.example 复制成 apps/web/.env(缺它 app 起不来)、npm run dev;想让 diffusion 与 dapi 进 PATH,再跑一次 npm run link --workspace=@diffusionstudio/cli。提交 PR 之前跑 npm run check、npm run lint、npm run test 三件套 5。app.diffusion.studio 免费,macOS、Windows、Linux 上都能开,代价是接不上编码 Agent——官方写得很直接,要用 Agent 编辑就装桌面 app 11。
dapi 的命名管道握手一直完不成;场景的子节点不挂到父节点,capture 与渲染出的是空帧。触发条件:Windows 上从源码跑,或者用 dapi 驱动。现状:#82 与 #83 都由 alvarovegaromero 在 2026 年 9 月 26 日提交,当天仍是 open 1718;#75(dapi 出错时直接 abort,退出码本该是 1)2026 年 9 月 17 日开、open 19。你能怎么办:Windows 上先用装好的 app 与应用内的 Chat 标签,dapi 那条链路等问题单关掉之后再试。dapi 报 not running。触发条件:app 没开,或者在无图形界面的环境里跑。现状:工具文档写明每个工具都运行在 app 内部、app 必须在跑,CLI 只是它的 MCP 服务端的客户端,diffusion open 是唯一会拉起 app 的命令 7;#60(diffusion-studio.sock 没被创建,app 在跑也报 not running)2026 年 9 月 5 日开、至今 0 条评论 20;#52(希望能在浏览器里跑起 app,好在 Codex、Cursor 这类浏览器 harness 里用)2026 年 9 月 2 日开,还是一条 feature request 21。你能怎么办:当前把它当成“桌面机上的编辑器加 Agent 驱动”,无人值守渲染这条路还没有官方入口。capture 不受影响);在场景结束前结束的音频片段,尾巴被切掉。触发条件:导出。现状:#24 由 doruk-kavcioglu 在 2026 年 8 月 14 日提交、3 条评论 22,#65 在 2026 年 9 月 13 日提交 23,两条都还是 open;仓库里对应的修复 PR #67 与 #66 尚未合并。你能怎么办:导出后自己抽一帧、听一遍接缝,把“导出成功”和“画面正确”分开确认。start / end 时校验非负,改完跑一次 diffusion check。shell.openExternal 接受任意 URL,Agent 写下的 markdown 里的相对链接会以 file:// 到达它。触发条件:打开 Agent 生成的 markdown。现状:#71 在 2026 年 9 月 17 日开、0 条评论、open,对应 PR #72 未合并 25。你能怎么办:等修复合并之前,别把不可信的 Agent 输出直接点开。report 要求 Agent 先审它附上去的日志,却从不把日志显示出来。触发条件:用 report 开问题单。现状:#73 在 2026 年 9 月 17 日开、open,对应 PR #74 未合并 26。你能怎么办:开单之前自己跑一次 diffusion logs。dapi CLI 与官方 skills 27。同一份许可说明还写了一条例外:apps/desktop/assets 里的品牌资产不在这份许可之内,版权归 Diffusion Studio Inc.。MPL-2.0 是文件级的 copyleft,你改了它的源文件再分发,那些文件要按同样许可开放,把它当组件接进自己的产品、其余部分不受牵连。开源许可管的是软件,管不到你用产出的视频——官方口径是各档都能商用,输入的权利归你,AI 产出在法律允许的范围内归你 12。dapi、skills 与 Agent 工作流继续可用 12。

dapi 握手失败,两条都由 alvarovegaromero 在 2026 年 9 月 26 日提交。28| 方案 | 你给它什么 | 它给你什么 | 它在这一层 | 许可与公开体量 |
|---|---|---|---|---|
| Diffusion Studio(本期) | 一个项目文件夹(入口 TSX 加 assets/)与一个能连 MCP 的 Agent | 能继续改的 TSX 工程,最高 4K 的成片 | 合成文档与剪辑环境 | MPL-2.0,3,098 star、283 fork、18 个 release 1 |
| FableCut(第 5 期) | 一个项目文件夹与 project.json | 浏览器里实时重排的时间线 | 浏览器非线性剪辑 | MIT,694 star 29 |
| OpenChatCut | 本机工程与对话 | 多轨时间线工程,可导出剪映草稿 | 本地优先的对话式剪辑器 | AGPL-3.0,2,011 star 30 |
| capcut-cli(第 10 期) | 本机剪映草稿库 | 还能继续编辑的剪映工程 | 草稿文件读写 CLI | MIT,783 star 31 |
| video-use(第 3 期) | 一堆原始素材与转写稿 | 剪好的 final.mp4 | 装进 Agent 的剪辑技能 | MIT,27,322 star 32 |
| PenShot(第 12 期) | 一整段剧本 | 5 秒级镜头提示词包 | 剧本到分镜的规划层 | MIT,204 star 33 |
| Nomi(第 8 期) | 本机工作台与自备的模型额度 | 本地工程与导出(付费提交与导回要人按) | 本地优先的桌面工作台 | AGPL-3.0,523 star 34 |
| Comfy MCP(第 9 期) | 提示词与工作流模板 | 生成的素材 | 生成底座 | AGPL-3.0 或商用许可,237 star 35 |
| HyperFrames | HTML、CSS、媒体与可寻址动画 | 确定性输出的一支 MP4 | 渲染框架,也能当上游的渲染内核 | Apache-2.0,53,327 star 36 |
| hypit | 一条要复刻的原片与生成额度 | 克隆出来的一批变体 | 以原片为模板的批量生成 | Apache-2.0 附条件,16,324 star 37 |
dapi 或从源码跑;或者你在 Linux、容器、CI 里做流水线;或者你真正要的是把生成批量接进后端,而这一层交付的是编辑器与文档。等 #82、#83、#40 那批问题单有结论,再回来评估。github.com
raw.githubusercontent.com
github.com
npmjs.com
raw.githubusercontent.com
raw.githubusercontent.com
raw.githubusercontent.com
raw.githubusercontent.com
raw.githubusercontent.com
github.com
diffusion.studio
diffusion.studio
raw.githubusercontent.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.