MCPcopy
hub / github.com/OpenCut-app/OpenCut

github.com/OpenCut-app/OpenCut @v0.3.0 sqlite

repository ↗ · DeepWiki ↗ · release v0.3.0 ↗
2,780 symbols 7,371 edges 645 files 9 documented · 0%
README
OpenCut Logo

OpenCut

A free, open-source video editor for web, desktop, and mobile.

Sponsors

Thanks to Vercel and fal.ai for their support of open-source software.

Vercel OSS Program

Powered by fal.ai

Why?

  • Privacy: Your videos stay on your device
  • Free features: Most basic CapCut features are now paywalled
  • Simple: People want editors that are easy to use - CapCut proved that

Project Structure

  • apps/web/: Next.js web application
  • apps/desktop/: Native desktop app built with GPUI (in progress)
  • rust/: Platform-agnostic core: GPU compositor, effects, masks, and WASM bindings. We're actively migrating business logic here from TypeScript.
  • docs/: Architecture and subsystem documentation

Getting Started

Prerequisites

Note: Docker is optional but recommended for running the local database and Redis. If you only want to work on frontend features, you can skip it.

Setup

  1. Fork and clone the repository

  2. Copy the environment file:

```bash # Unix/Linux/Mac cp apps/web/.env.example apps/web/.env.local

# Windows PowerShell Copy-Item apps/web/.env.example apps/web/.env.local ```

  1. Start the database and Redis:

bash docker compose up -d db redis serverless-redis-http

  1. Install dependencies and start the dev server:

bash bun install bun dev:web

The application will be available at http://localhost:3000.

The .env.example has sensible defaults that match the Docker Compose config — it should work out of the box.

Desktop setup

Desktop is opt-in. If you're only working on the web app, skip this entirely.

If you want to get ready for apps/desktop, see apps/desktop/README.md. It's a two-step setup: Rust toolchain first, then desktop native dependencies.

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.

  1. Build the package once from the repo root:

bash bun run build:wasm

  1. Register the generated package for linking:

bash cd rust/wasm/pkg bun link

  1. Link apps/web to the local package:

bash cd apps/web bun link opencut-wasm

  1. Rebuild on changes while you work:

bash bun dev:wasm

To switch apps/web back to the published package, run:

cd apps/web
bun add opencut-wasm

Self-Hosting with Docker

To run everything (including a production build of the app) in Docker:

docker compose up -d

The app will be available at http://localhost:3100.

Contributing

We welcome contributions! While we're actively developing and refactoring certain areas, there are plenty of opportunities to contribute effectively.

🎯 Focus areas: Timeline functionality, project management, performance, bug fixes, and UI improvements outside the preview panel.

⚠️ Avoid for now: Preview panel enhancements (fonts, stickers, effects) and export functionality - we're refactoring these with a new binary rendering approach.

See our Contributing Guide for detailed setup instructions, development guidelines, and complete focus area guidance.

Quick start for contributors:

  • Fork the repo and clone locally
  • Follow the setup instructions in CONTRIBUTING.md
  • Working on apps/desktop? See apps/desktop/README.md for setup
  • Create a feature branch and submit a PR

License

MIT LICENSE


Star History Chart

Extension points exported contracts — how you extend this code

GraphicDefinition (Interface)
(no doc) [2 implementers]
apps/web/src/lib/graphics/types.ts
SelectionBoxState (Interface)
(no doc)
legacy/use-assets-selection-box.ts
SectionContext (Interface)
(no doc)
legacy/components/properties/section.tsx
UseSelectionBoxProps (Interface)
(no doc)
legacy/timeline/use-selection-box.ts
StorageAdapter (Interface)
(no doc) [2 implementers]
apps/web/src/services/storage/types.ts
SectionProps (Interface)
(no doc)
legacy/components/properties/section.tsx
SelectionBoxState (Interface)
(no doc)
legacy/timeline/use-selection-box.ts
EyeDropperResult (Interface)
(no doc)
apps/web/src/types/eyedropper.d.ts

Core symbols most depended-on inside this repo

cn
called by 261
apps/web/src/utils/ui.ts
push
called by 171
apps/web/src/core/managers/commands.ts
useEditor
called by 142
apps/web/src/hooks/use-editor.ts
isRecord
called by 129
apps/web/src/services/storage/migrations/transformers/utils.ts
get
called by 79
apps/web/src/services/storage/types.ts
getActiveScene
called by 78
apps/web/src/core/managers/scenes-manager.ts
getInstance
called by 77
apps/web/src/core/index.ts
has
called by 60
apps/web/src/lib/registry.ts

Shape

Function 1,703
Method 501
Interface 367
Class 209

Languages

TypeScript100%

Modules by API surface

apps/web/src/core/managers/timeline-manager.ts47 symbols
apps/web/src/core/managers/project-manager.ts39 symbols
apps/web/src/lib/gradients/parser.ts38 symbols
apps/web/src/lib/animation/keyframes.ts35 symbols
apps/web/src/services/storage/service.ts30 symbols
apps/web/src/services/storage/migrations/transformers/v1-to-v2.ts30 symbols
apps/web/src/components/editor/panels/timeline/timeline-element.tsx29 symbols
apps/web/src/core/managers/playback-manager.ts27 symbols
apps/web/src/lib/timeline/types.ts26 symbols
apps/web/src/app/projects/page.tsx26 symbols
apps/web/src/lib/gradients/canvas.ts25 symbols
apps/web/src/services/storage/migrations/transformers/v21-to-v22.ts24 symbols

Dependencies from manifests, versioned

@biomejs/biome2.4.8 · 1×
@content-collections/core0.14.1 · 1×
@content-collections/next0.2.11 · 1×
@hello-pangea/dnd18.0.1 · 1×
@hugeicons/core-free-icons3.3.0 · 1×
@hugeicons/react1.1.6 · 1×
@napi-rs/canvas0.1.92 · 1×
@opennextjs/cloudflare1.18.0 · 1×
@radix-ui/react-accordion1.2.12 · 1×
@radix-ui/react-checkbox1.3.3 · 1×
@radix-ui/react-dialog1.1.15 · 1×

Datastores touched

opencutDatabase · 1 repos

For agents

$ claude mcp add OpenCut \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact