1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# OpenCut
Offline-first, privacy-first video editor. Your projects and media never leave your device.
Continues the abandoned [opencut-app/OpenCut](https://github.com/opencut-app/OpenCut) codebase: the editor was already fully client-side, so the dead backend (auth, database, blog) was ripped out. The web app is now a fully static site, and there is a self-contained Linux desktop app with native ffmpeg exports.
## Variants
- **Desktop (Linux)**: self-contained app — AppImage, `.deb`, `.rpm` on the [releases page](https://github.com/cashmeredev/opencut/releases). Exports are encoded by a bundled ffmpeg (libx264 / libvpx-vp9) instead of the browser encoder, so MP4 quality settings are actually honored and colors are correctly tagged BT.709.
- **Web**: fully static site, host it anywhere. Grab `opencut-web-static.tar.gz` from releases and serve it with any static file server.
## Project structure
- `apps/web/`: Next.js editor, built as a static export (`next build` → `out/`). All state lives in IndexedDB.
- `apps/desktop/`: Electron shell. Serves the static web build over a privileged `opencut://` protocol and bridges exports to a bundled ffmpeg over IPC.
- `rust/`: wgpu compositor, effects, masks, and time primitives compiled to WASM (`opencut-wasm`).
## Development
Prerequisites: [Bun](https://bun.sh/docs/installation). No env files, no database, no Docker.
```bash
bun install
bun dev:web
```
The editor is at [http://localhost:3000](http://localhost:3000).
### Desktop
```bash
bun build:web # static export -> apps/web/out
bun run --cwd apps/desktop copy:web # bundle it into the desktop app
bun run --cwd apps/desktop dev # run the shell
```
Package for Linux (AppImage, deb, rpm into `apps/desktop/release/`):
```bash
bun run --cwd apps/desktop dist
```
### Local WASM development
Only needed if you're editing `rust/wasm` and want the web app to use your local build instead of the published package. Requires a Rust toolchain, `wasm-pack`, and `cargo-watch`:
```bash
bun run build:wasm # build once
cd rust/wasm/pkg && bun link
cd apps/web && bun link opencut-wasm
bun dev:wasm # rebuild on changes
```
Switch back to the published package with `cd apps/web && bun add opencut-wasm`.
### Self-hosting the web app
```bash
docker compose up -d
```
Serves the static build at [http://localhost:3000](http://localhost:3000). Any static file server works — the build output is `apps/web/out/`.
## Releases
Tags (`v*`) trigger the GitHub release workflow: static web tarball plus AppImage, `.deb`, and `.rpm`.
## License
[MIT LICENSE](LICENSE)
|