工具专题

OpenCut 开源视频编辑器

读之前先看这一条:OpenCut 现在有两个仓库,状态完全不同。 主仓 OpenCut-app/OpenCut 正在从零重写, README 承诺的 Editor API、第三方插件、跨三端一套代码、MCP server、无头批渲染、 内置脚本标签页——六条目前都还是计划,没有可用实现, 主仓当前也不接受外部贡献。 旧版代码搬到了 OpenCut-app/opencut-classic已归档、不再维护, 但 opencut.app 线上运行的仍然是它。 所以本专题分两轨写:讲功能怎么用的基于 classic,讲架构与路线图的基于重写版,每篇都会标明是哪一边。 核对日 2026-08-09。

本专题共 20 篇。内容依据两个 官方仓库 的 README、docs/ 架构文档、package.jsonCargo.tomlchangelog/ 整理。本专题内容为仓库源码与文档口径, 我们没有编译或运行过任何版本的 OpenCut, 因此不涉及界面、操作手感、渲染效果与导出速度的任何描述。

从这里开始 · 2026-08-09

OpenCut 现在有两个仓库,你该看哪一个

OpenCut 现在有两个 GitHub 仓库:主仓 OpenCut-app/OpenCut 正在从零重写、尚未发布,而已归档的 OpenCut-app/opencut-classic 才是 opencut.app 线上仍在跑的那个。这篇按仓库元数据、README 原文和实读目录结构,把两边的状态、技术栈、开发端口、工具链版本与官方路线图逐条分开摆清楚,并给出一条从你自己的处境(要剪片、要本地跑、要读架构、还是想提交贡献)倒推该看哪个仓库的判断路径,顺便说明为什么不能把官方声明的计划当成现成能力。

先搞清楚状态

归档的仓库还能不能用、README 里那五条承诺分别处在什么阶段、两份 package.json 差在哪、现在到底该看哪一个——先把状态问题解决,再谈技术细节。

2026-08-09

从 Next.js 到 TanStack Start:两份 package.json 的差异

OpenCut 旧版(classic)的 web 应用建在 Next.js 上,重写版换成了 TanStack Start 加 Vite。本文逐段核对两个仓库里能查到的依赖与脚本差异——框架、构建、部署、测试这四条线各自换到了什么,哪一层原封不动地平移了过来,Rust 核心的位置又落在哪里,以及端口和启动命令变成了什么样子,最后给出一套从依赖清单反推项目所处阶段的可操作读法。不猜动机,不比优劣,只陈述两份文件里写着的东西。

2026-08-09

现在到底该用哪个版本

OpenCut 现在有两个仓库:正在从头重写的主仓,和已归档的 classic 旧版。star 数差了几百倍,但线上跑的是后者。这篇不罗列参数,而是从你的处境倒推:只想在线上剪、想本地跑一份自己改、想读源码学架构、想提 PR、还是在等 Editor API 和插件——五种处境各自该看哪个仓库,依据是什么,以及哪些问题我们答不了。

2026-08-09

一个已归档的仓库还能用吗:把话说清楚

OpenCut 旧版仓库 opencut-classic 已归档、不再维护,但官方 README 说 opencut.app 线上跑的仍是它。归档到底意味着什么、又不意味着什么?本文不罗列参数,而是从五种常见处境出发——只想在线用、想本地跑一份、想读代码学架构、想提 PR、想给团队做选型——把「还能不能用」拆成能自己判断的几步,同时划清「归档」这个词的边界,并交代哪些结论我们手里没有依据、不替你下。

2026-08-09

Editor API、插件、MCP server、无头渲染:五条承诺目前都还是承诺

OpenCut 重写版主仓 README 列出的 Editor API、第三方插件、跨端共用一套 Rust 核心、MCP server、无头批量渲染,目前全部是官方声明的计划,不是已有能力。本文按核对日 2026-08-09 的仓库快照,逐条对照重写版仓库里实际存在的目录、Cargo.toml workspace 成员与 moon 任务,给出一套你自己十分钟内就能重复一遍的核查动作,并说清现在该用哪个仓库、旧版 classic 已归档意味着什么、什么时候值得回头再看一眼。

classic 的架构与实战

旧版代码库已归档、不再维护,但 opencut.app 线上跑的仍是它,代码也仍是 MIT。这一组讲它的技术栈、本地怎么跑、Rust WASM 开发链路,以及三个值得单独学的子系统:Actions 触发层、关键帧三层结构、TypeScript 决策与 Rust 执行分工的 GPU 特效渲染器。

2026-08-09

本地把 classic 跑起来:Bun、Docker 与四条命令

OpenCut 有两个仓库,能在本地跑起来的是已归档的 classic 旧版。这篇按官方 README 原文梳理它的启动路径:装什么前置、复制哪个环境变量文件、起哪三个容器、四条命令的先后顺序、服务落在哪个端口,以及桌面端与 WASM 这两条 opt-in 分支该不该碰。

2026-08-09

改 Rust 那部分:本地 WASM 开发的四步链路

OpenCut 旧版(classic)把 GPU 合成器、特效、蒙版都放在 rust/ 目录里,编译成 WASM 给浏览器用。如果你只改 TypeScript,这条链路完全不用碰;一旦要动 rust/wasm,就得先装 Rust 工具链和 wasm-pack,再走构建、注册包、链接、监听重建这四步。本文逐条拆解 README 给的命令、每一步的产出物落在哪个目录、验收时人要看哪几处,以及哪些情况根本不该走这条路。

2026-08-09

改了默认快捷键老用户拿不到,因为它存在 localStorage 里

在 OpenCut classic 里给一个 action 加了 defaultShortcuts,全新环境能用,已经用过编辑器的环境却没反应——这不是缓存没清,而是快捷键被持久化在 localStorage,新的默认值只对全新安装生效。本文按现象、怎么确认、文档给出的处置、处置后怎么验证、什么情况不是这个原因五步走,并说清它和特殊键没注册这条岔路的区别。

2026-08-09

关键帧系统的三层:数据模型、注册表、UI

拆解 OpenCut 旧版(classic)仓库 docs/keyframes.md 描述的关键帧分层:数据模型怎么存关键帧、注册表怎么声明哪些属性可动画、UI hooks 怎么在静态值与动画通道之间自动切换,并给出你要新增一个可动画属性时该在哪一层落笔的判断依据。

2026-08-09

加一个可动画属性要动几个文件

想给 OpenCut 旧版(classic)的时间轴元素加一个能打关键帧的属性,到底要碰几个文件?本文按官方 docs/keyframes.md 的口径拆开:两处必须注册、两处必须读懂、UI 层两个 hook 怎么挑,附可直接复制的本地开发命令、改完后的验收清单,以及哪些情况根本不该走这条路。全文只依据仓库文档与源码结构,不含任何运行结果。

2026-08-09

六个 crate 的分工:compositor、effects、gpu、masks、time、bridge

OpenCut 旧版(classic)把 Rust 核心切成了六个 crate。这篇不翻译源码,而是回答一个更实用的问题:拿到这个目录,你怎么判断要改的东西该落在哪一层、哪些结论有依据、哪些只是名字带来的联想。附官方文档的 TypeScript 与 Rust 分工边界、gpu 的跨端线索与本地 WASM 链路。

2026-08-09

为什么模糊要分两趟:单 pass、多 pass 与 buildPasses

OpenCut classic 的特效系统把一次渲染拆成 pass 数组。这篇按官方架构文档讲清三件事:判断一个特效必须写多 pass 的依据是什么,pass 数量随参数变化时怎么用 buildPasses,以及一条最容易踩空的规则——buildPasses 一旦存在,静态 passes 数组就完全不参与渲染。

2026-08-09

classic 的技术栈:Next.js、Rust WASM 与浏览器里的媒体处理

拆开 OpenCut classic(旧版,已归档)的仓库结构:apps/web 的 Next.js 应用、rust/ 下六个 crate 与发布为 opencut-wasm 的 WASM 包,以及 60 个 web 依赖里媒体与 AI 相关的那几个。重点讲清 TypeScript 与 Rust/wgpu 的分工边界,帮你判断一个改动该落在哪一层、要不要装 Rust 工具链。

2026-08-09

OpenCut Actions 系统:快捷键、按钮、右键菜单的统一触发层

OpenCut 旧版(classic)把键盘快捷键、界面按钮、右键菜单收拢到同一个 Actions 触发层。本文按官方 docs/actions.md 拆开这套机制,逐条给出你自己要做的判断:一条 action 定义包含哪四个字段、什么操作该登记进来、七个 category 枚举怎么选、什么时候该给 defaultShortcuts、用到特殊键为什么要动 getPressedKey,以及为什么改了默认快捷键就必须补一份 keybindings 迁移——快捷键持久化在 localStorage 里,新的默认值只对全新安装生效,这个坑在开发机上几乎不可能复现。

2026-08-09

TypeScript 决定跑什么 shader,Rust 和 wgpu 负责怎么跑

OpenCut 旧版(classic)的特效文档写了一句很干脆的分工话:TypeScript 决定跑哪些 shader 标识符、传哪些 uniform,Rust 和 wgpu 拥有设备创建、纹理与 pass 执行。这篇文章拆开这条边界,讲清一个特效在代码里究竟由哪几个字段构成、判断需不需要多 pass 的标准是什么、`buildPasses` 一旦出现静态 passes 数组为什么会悄悄失效,以及你手上的这个改动到底该落在 TypeScript 一侧还是 Rust 一侧,顺带划清旧版与重写版的差别。

重写版与工具链

重写版尚未发布。这一组只讲仓库里能看到的东西:TanStack Start 加 Vite 的新栈、proto 三行钉死工具版本、moon 任务的缓存粒度、Rust 加 gpui 的桌面外壳,以及官方 changelog 记录的三个版本。

2026-08-09

从 0.1.0 到 0.3.0:官方 changelog 记了些什么

OpenCut 重写版仓库的 changelog 里有 0.1.0、0.2.0、0.3.0 三份记录,条目数 14、19、52。本文不复述功能清单,只讲三件事:这些记录的归属为什么必须先存疑、new / improved / fixed 的分布怎么读、把它当成「某功能现在能不能用」的依据时会在哪一步翻车。

2026-08-09

三行配置钉死整个团队的工具版本

OpenCut 重写主仓根目录的 .prototools 只有三行,把 moon、bun、rust 的版本钉死在仓库里。本文拆开这三行,给出从装 proto 到起服务的完整命令(Windows 与 Linux 分开),说明配套 moon.yml 的 inputs、outputs、deps 各解决什么,以及这套做法何时不适用。

2026-08-09

用 Rust 和 gpui 写桌面端:现在只有一个外壳和四个面板

尚未发布的 OpenCut 重写版桌面端用 Rust 加 gpui,但 apps/desktop/src 下只有三个顶层源文件和四个面板,根 Cargo.toml 里 crates/* 还被注释着。本文核对这个目录的真实内容、workspace 0.1.0 与 edition 2024 声明、proto 加 moon 钉死的工具链,并给出复核「Rust 核心到位没有」的动作。

2026-08-09

重写版的栈:TanStack Start、Vite、Cloudflare 与 Rust gpui

OpenCut 重写版换了整套技术栈:proto 加 moon 钉死 moon 2.3.3、bun 1.3.11、rust 1.97.0,web 端用 TanStack Start 加 Vite 部署到 Cloudflare,桌面端 Rust 加 gpui 0.2.2。本文按配置文件逐层拆开每层约束了什么。该版本尚未发布。

2026-08-09

inputs、outputs、deps:任务缓存的粒度是自己声明出来的

OpenCut 重写版仓库的 apps/web/moon.yml 用 inputs、outputs、deps 把任务缓存的粒度写成了声明。本文逐字段拆开这份配置,讲清 dev 为什么标 runInCI false、build 的 inputs 为什么只列五项、deploy 为什么用 deps,并给出自己项目该怎么写的判断顺序。

想读懂一个真实项目的架构,而不只是会用它?

从 AI 编程实践到 Agent 工程落地,站内有成体系的教程与课程。

看 AI Agent 学习路线