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

2026-08-09

如果你这几天搜 OpenCut,大概率会同时刷到两条不一样的说法:一条说它是个从头重写的项目、Rust 核心、插件优先;另一条说它是 Next.js 写的网页剪辑器,opencut.app 上跑的就是它。两条说法各有出处,因为它们指的根本不是同一个代码库。

先把状态说清楚,这篇后面所有判断都建立在这一段上:

本文描述的是 OpenCut 重写版仓库当前的代码结构与官方 README 声明的路线图。该版本尚未发布,Editor API、插件体系、MCP server、无头模式等均为官方声明的计划,我们没有见到可用实现。

本文同时涉及 OpenCut 旧版(classic)。该代码库已归档、不再维护,opencut.app 线上目前仍运行该版本;重写版正在开发中,功能与操作可能变化。核对日 2026-08-09。

两个仓库摆在一起看

主仓(重写版)classic(旧版)
全名OpenCut-app/OpenCutOpenCut-app/opencut-classic
仓库描述The open-source CapCut alternativeOriginal OpenCut codebase
star81917213
fork8102
open issues3660
主语言TypeScript
创建时间2025-06-22
最后推送2026-08-052026-05-17
归档状态是(已归档)
licenseMITMIT
主页opencut.app

以上为 2026-08-09 的 GitHub API 快照。这里要先说一句扫兴的话:81917 和 213 这两个数字之间的差距,不能拿来推导任何关于质量、稳定性或适用性的结论。 star 的分布只说明关注度集中在哪个仓库名下,它既不代表重写版已经可用,也不代表 classic 不能用。真正决定你该看哪一个的,是下面这几段状态信息。

本节延伸

README 自己是怎么说的

主仓 README 的 Status 段落第一句就写了:

OpenCut is being rewritten from the ground up.

翻过来就是「OpenCut 正在被从头重写」。紧接着列了一份「即将到来」的清单:

  • 一个 Editor API
  • 一等公民的第三方插件(由插件优先的架构实现)
  • 桌面、移动、浏览器共用一套代码库(Rust 核心)
  • 一个面向 AI agent 的 MCP server
  • 无头模式(自动化、批量渲染)
  • 编辑器里直接内置的脚本标签页

这份清单很容易被转述成「OpenCut 支持插件」「OpenCut 有 MCP server」——这是本文最想拦住的一种误读。清单上的每一条都是官方声明的计划,不是现在就能调用的能力。 我们没有在任何一个仓库里见到它们的可用实现。

同一段 README 紧接着还有一句同样重要的话:旧版本仍在 opencut-app/opencut-classic那才是今天该用的那个opencut.app 线上跑的仍然是 classic 版本;重写版会先住在 new.opencut.app,直到它准备好接管。至于「准备好」是什么时候,README 没有给时间表,我们也不猜。

classic 那边的 README 第一句更直接:

OpenCut (Legacy)

This is the original OpenCut codebase. It’s archived and no longer maintained.

「已归档,不再维护」是项目方自己的原话。

本节延伸

实读目录:重写版现在到底有什么

README 是立场,目录结构是现状。我们把主仓的源码目录逐层看了一遍,这里只陈述看到的东西:

  • apps/web/src/components/ui/ 下有 40 多个 shadcn 风格的基础 UI 组件(accordion、button、dialog、command 之类)。注意这是通用组件库,不是编辑器功能。
  • apps/web/src/ 其余是 routes/hooks/lib/,整个 web app 目录一共 98 个文件。
  • apps/desktop/src/ 是 Rust + gpui,只有 main.rsshell.rstheme.rs、7 个 components/ 文件,以及 4 个 panels/browser.rsinspector.rspreview.rstimeline.rs。这四个文件名勾勒出一个典型编辑器的四区布局,但这是从文件名推断的,我们没有见过界面。
  • apps/api/ 是一个 Cloudflare Worker,只有 src/index.tswrangler.jsoncmoon.ymlpackage.json 四个文件。我们没有读 index.ts 的实现,所以不描述它提供什么接口。
  • Cargo.toml 的 workspace 只有 apps/desktop 一个成员,crates/* 这一行是被注释掉的

最后这条值得单独停一下。README 承诺的「Rust 核心」,在重写主仓里目前还没有对应的 crate——workspace 成员清单里那一行还躺在注释里。这只是一个客观事实,不构成对进度快慢的评价,也不用来预测发布时间;但如果你是奔着「去读一读那个跨三端复用的 Rust 核心」点进主仓的,看到这一行就该知道自己会扑空。

作为对照,classic 那边的 rust/crates/ 是实打实有六个 crate 的:bridgecompositoreffectsgpumaskstime,另有 rust/wasm/ 发布为 npm 包 opencut-wasm。这也是很多人第一眼会搞混的地方:Rust 代码两边都有,但不是同一批代码,也不在同一个仓库里。

本节延伸

技术栈完全换了一套

两边 package.json 的差异,是重写版最直观的变化。只列我们能从依赖清单确认的部分:

方面classic重写版
框架/路由Next.jsTanStack Router + TanStack Start
构建—(Next.js 自带)Vite
部署@opennextjs/cloudflare@cloudflare/vite-plugin + wrangler deploy
本地开发端口localhost:3000web localhost:5173、api localhost:8787
测试Vitest + Testing Library

端口这一条看着琐碎,实际最容易出事:如果你照着某篇教程去开 localhost:3000,你跑的是 classic 的开发服务;重写版的 moon run web:dev 起在 5173,moon run api:dev 起在 8787。看到文章里写 3000,基本可以判定它讲的是 classic。 这是一条很便宜的辨认线索。

工具链也换了。重写版用 proto + moon,.prototools 里把三个版本钉死:

moon = "2.3.3"
bun  = "1.3.11"
rust = "1.97.0"

文件里那行注释写得很朴素——每个开发者和 CI 机器自动拿到完全相同的版本。桌面端的根 Cargo.toml 里,workspace 版本是 0.1.0,edition 是 2024,GUI 框架是 gpui 0.2.2。这些数字原样抄,我们既没装过 proto/moon,也没构建过桌面端,所以只报数字,不谈构建体验。

至于「哪套栈更好」「他们为什么要换」——README 没有说理由,我们不替它编,也不做技术选型上的褒贬。

本节延伸

归档到底意味着什么

「classic 已归档」这句话会同时被两种人误读:一种觉得等于宣判死刑,一种觉得等于什么都没变。都不对。

可以确定地说的是:归档意味着这个仓库不再接受提交与 issue;opencut.app 线上仍在运行该版本,这是 README 自己写的;代码是 MIT 许可,仍然可以 fork 出来自行维护。

不能说的同样要点明:归档不等于它不安全、有漏洞、别用了——我们没有任何安全信息,任何这类判断都是凭空的;官方也没有给出迁移时间表,README 只说「直到它准备好」;重写版会不会更快更好,现在没有任何依据可以下结论。

那么,你该看哪一个

按你的处境往下走,比背两个仓库的参数管用:

如果你现在就要剪片子 —— 你实际接触的是 classic,因为 opencut.app 跑的就是它。任何讲功能怎么用的文章(包括我们后续写的),底子都是 classic 的行为,而 classic 仓库已归档、不再接受提交与 issue,也就不会再有新的修复进来。

如果你想在本地把它跑起来 —— 同样是 classic。它的 README 给的是 Bun + Docker 那一套,起在 localhost:3000。重写版可以跑 moon run web:dev,但你要清楚自己跑起来的是一个尚未发布的重写中项目的 web 应用,不是一个能替代 classic 的剪辑器。

如果你想读代码、学架构 —— 分两种。想看一个成型的编辑器怎么组织 actions、关键帧、特效与 GPU 渲染的分工,去 classic,它的 docs/ 下有对应的架构文档,rust/crates/ 下有六个 crate。想看一个大项目重写时怎么搭地基——monorepo 用 moon 管任务、.prototools 钉死工具链版本、web 与 api 各自独立部署——去主仓,这部分是现成可读的。

如果你想提 PR —— 先看清楚:主仓 README 明写「架构还在设计中,我们还没准备好接受外部贡献」(原文:We’re not set up to take outside contributions yet while the architecture is being designed)。想跟进的人可以加 Discord(discord.gg/zmR9N35cjK)或开 issue。classic 那边已归档,同样不收提交。两个仓库当下都不是提 PR 的地方,动手之前知道这一点,能省掉一整个周末。

如果你是冲着插件、MCP server、无头批渲染来的 —— 现在还没有可看的东西。它们都在主仓 README 的「即将到来」清单里,是计划。

本节延伸

还有一处容易归错的资料

主仓的 changelog/ 目录下有三份带 frontmatter 的版本记录:0.1.0(2026-02-23,Editor foundation,14 条)、0.2.0(2026-03-01,Motion & effects,19 条)、0.3.0(2026-04-15,Masks, animation & more,52 条)。条目内容很具体,比如 0.1.0 记载属性面板从零重建、数值输入支持数学表达式与点击拖拽 scrub,0.3.0 记载蒙版、曲线图形编辑器、音量与速度控制。

这些文件位于重写主仓的 changelog/ 目录,日期在 2026-02 到 2026-04 之间。我们只陈述「该仓库的 changelog 记录了这三个版本及其条目」,不断言它属于哪一个代码库的发布历史——README 没有明说,我们不做推断。同样地,changelog 里那些「播放性能大幅改善」之类的描述是官方自述,不是我们的测评结论。

最后两句立场声明

classic 的 README 给了三条「Why」:Privacy(视频留在你自己设备上)、Free features(原文提到 CapCut 的多数基础功能被收进付费墙)、Simple。这三条是项目方自己的主张,我们原样转述,既不背书,也不对任何商业产品的收费策略做评判。 另外,classic README 感谢了 Vercel 与 fal.ai 对开源软件的支持,主仓 README 的 Sponsors 段列出 fal.ai 并留了招赞助的邮箱——这些关系如实提一句,不影响也不参与褒贬。

回到最开始那个问题。两个仓库,一个在跑但已归档,一个在改但没发布。分清楚你手上这篇资料讲的是哪一个,比记住任何一条功能都重要。 最简单的三个辨认点:提到 localhost:3000、Next.js、opencut-wasm 的,是 classic;提到 moon、5173/8787、gpui 的,是重写版;提到插件、MCP server、无头模式的,是还没落地的计划。

专题全部内容

本专题共 20 篇。因为两个仓库状态不同,分组也按这条线切:讲功能怎么用的基于已归档的 classic,讲架构与路线图的基于尚未发布的重写版,每篇都标明是哪一边。

先搞清楚状态

状态问题不解决,后面所有技术细节都可能张冠李戴。

classic 的架构与实战

旧版已归档不再维护,但线上仍在跑、代码仍是 MIT。这一组讲它的栈与三个值得单独学的子系统。

重写版与工具链

重写版尚未发布,这一组只讲仓库里当前能看到的东西。


本文依据 OpenCut 官方仓库(github.com/OpenCut-app/OpenCut 与已归档的 github.com/OpenCut-app/opencut-classic)的 README、docs/ 架构文档、package.jsonCargo.tomlchangelog/ 整理,核对日 2026-08-09。本文内容为仓库源码与文档口径,我们没有编译或运行过任何版本的 OpenCut。

本文描述的是 OpenCut 旧版(classic)的行为。该代码库已归档、不再维护,opencut.app 线上目前仍运行该版本;重写版正在开发中,功能与操作可能变化。

本文描述的是 OpenCut 重写版仓库当前的代码结构与官方 README 声明的路线图。该版本尚未发布,Editor API、插件体系、MCP server、无头模式等均为官方声明的计划,我们没有见到可用实现。

许可条款请以官方 LICENSE 原文为准,本文不构成法律意见。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。