FreeCut is a professional-grade video editor that runs entirely in your browser. Professional video editing, zero installation. Create stunning videos with multi-track editing, keyframe animations, real-time preview, and high-quality exports.
See the codeEdit videos. In your browser.

FreeCut is a browser-based, multi-track video editor. No install, no uploads: projects and media stay local, while editing, preview, analysis, transcription, AI generation, and export run in the browser through WebGPU, WebCodecs, Web Workers, OPFS, and the File System Access API.
FreeCut writes projects, linked media metadata, thumbnails, waveforms, generated AI assets, transcripts, scene cuts, and caches as plain files inside a workspace folder you choose on disk.
New to FreeCut? Start with the user guide.
Join the FreeCut Discord to share edits, request features, report bugs, and give feedback on browser-based editing workflows.
Timeline
|
Keyframes
|
Semantic scene search
|
Export
|
Audio EQ
|
Hotkeys
|
Clock and composition runtimeAll visual effects and compositing paths are WebGPU-first, with fallbacks where practical.
.cube), grayscale, sepia, invert.json and .lottie): remap colors and themes, edit text, and adjust value slots with live previewRuns on-device in the browser — nothing is uploaded.
Prerequisites: Node.js 22+ recommended, npm 11+, and a modern Chromium browser.
git clone https://github.com/walterlow/freecut.git
cd freecut
npm install
npm run dev
Open http://localhost:5173 in Chrome, Edge, Brave, or Arc.
Chrome or Edge 113+ is recommended. FreeCut depends on WebGPU, WebCodecs, OPFS, and the File System Access API, so a modern Chromium browser is required for the full workflow.
Brave may disable the File System Access API. To enable it:
brave://flags/#file-system-access-apiMost commands are npm scripts backed by vite-plus (vp).
npm run dev # Dev server on port 5173
npm run build # Production build
npm run preview # Preview the production build
npm run perf # Build + serve a production-like perf target
npm run lint # Oxlint through Vite+
npm run format # Oxfmt
npm run test:run # Run the test suite once (npm run test to watch)
npm run verify # Full gate: static/arch/unit/build + portable headless contracts
npm run headless:test # Build once, then run the complete portable headless suite
npm run routes # Regenerate the TanStack Router route tree
npm run verify runs the complete quality gate, including architecture and
dead-code checks scoped to the current diff, all Node headless contracts, the
built-harness Chrome regression, every public edit operation, and generated
media/audio rendering. Real-GPU effects remain an explicit operator/release
gate because hosted PR CI does not provide a portable WebGPU adapter.
npm run dev is best for correctness and iteration, but includes React/Vite dev overhead, HMR, and debug instrumentation.npm run perf is the better check for real playback or rendering performance because it serves a production build locally.npm run dev:quiet keeps HMR while hiding the editor debug panel.npm run dev:compare starts http://localhost:5173 and http://localhost:4173 together for side-by-side dev vs production-like checks.VITE_SHOW_DEBUG_PANEL=true # Show debug panel in dev
The src/ tree is organized into a few layers:
features/ — user-facing UI modules (editor, timeline, preview, media library, effects, keyframes, export, projects, settings, scene browser, and more)runtime/ — playback and rendering engines (composition runtime, player, clock) that are not user-facing UIinfrastructure/ — platform adapters for GPU (effects, transitions, compositor, masks, text, scopes), analysis, audio, browser, storage, and thumbnailsshared/ — framework-agnostic primitives and cross-feature state (transition engine, schema migrations, Zustand stores, utils)app/, components/, config/, routes/, types/ — bootstrap, shadcn/ui components, configuration, file-based routes, and shared typesFeature modules use their local deps/ adapters for cross-feature imports.
Platform-coupled code (GPU, ML, audio, storage, browser) lives in
@/infrastructure/* and is imported directly; there is no separate lib/
layer.
FreeCut welcomes contributions that match the current priorities.
Current development priorities, in order:
TypeScript
92.6%
JavaScript
7.1%
FreeCut is a professional-grade video editor that runs entirely in your browser. Professional video editing, zero installation. Create stunning videos with multi-track editing, keyframe animations, real-time preview, and high-quality exports.
See the codeEdit videos. In your browser.

FreeCut is a browser-based, multi-track video editor. No install, no uploads: projects and media stay local, while editing, preview, analysis, transcription, AI generation, and export run in the browser through WebGPU, WebCodecs, Web Workers, OPFS, and the File System Access API.
FreeCut writes projects, linked media metadata, thumbnails, waveforms, generated AI assets, transcripts, scene cuts, and caches as plain files inside a workspace folder you choose on disk.
New to FreeCut? Start with the user guide.
Join the FreeCut Discord to share edits, request features, report bugs, and give feedback on browser-based editing workflows.
Timeline
|
Keyframes
|
Semantic scene search
|
Export
|
Audio EQ
|
Hotkeys
|
Clock and composition runtimeAll visual effects and compositing paths are WebGPU-first, with fallbacks where practical.
.cube), grayscale, sepia, invert.json and .lottie): remap colors and themes, edit text, and adjust value slots with live previewRuns on-device in the browser — nothing is uploaded.
Prerequisites: Node.js 22+ recommended, npm 11+, and a modern Chromium browser.
git clone https://github.com/walterlow/freecut.git
cd freecut
npm install
npm run dev
Open http://localhost:5173 in Chrome, Edge, Brave, or Arc.
Chrome or Edge 113+ is recommended. FreeCut depends on WebGPU, WebCodecs, OPFS, and the File System Access API, so a modern Chromium browser is required for the full workflow.
Brave may disable the File System Access API. To enable it:
brave://flags/#file-system-access-apiMost commands are npm scripts backed by vite-plus (vp).
npm run dev # Dev server on port 5173
npm run build # Production build
npm run preview # Preview the production build
npm run perf # Build + serve a production-like perf target
npm run lint # Oxlint through Vite+
npm run format # Oxfmt
npm run test:run # Run the test suite once (npm run test to watch)
npm run verify # Full gate: static/arch/unit/build + portable headless contracts
npm run headless:test # Build once, then run the complete portable headless suite
npm run routes # Regenerate the TanStack Router route tree
npm run verify runs the complete quality gate, including architecture and
dead-code checks scoped to the current diff, all Node headless contracts, the
built-harness Chrome regression, every public edit operation, and generated
media/audio rendering. Real-GPU effects remain an explicit operator/release
gate because hosted PR CI does not provide a portable WebGPU adapter.
npm run dev is best for correctness and iteration, but includes React/Vite dev overhead, HMR, and debug instrumentation.npm run perf is the better check for real playback or rendering performance because it serves a production build locally.npm run dev:quiet keeps HMR while hiding the editor debug panel.npm run dev:compare starts http://localhost:5173 and http://localhost:4173 together for side-by-side dev vs production-like checks.VITE_SHOW_DEBUG_PANEL=true # Show debug panel in dev
The src/ tree is organized into a few layers:
features/ — user-facing UI modules (editor, timeline, preview, media library, effects, keyframes, export, projects, settings, scene browser, and more)runtime/ — playback and rendering engines (composition runtime, player, clock) that are not user-facing UIinfrastructure/ — platform adapters for GPU (effects, transitions, compositor, masks, text, scopes), analysis, audio, browser, storage, and thumbnailsshared/ — framework-agnostic primitives and cross-feature state (transition engine, schema migrations, Zustand stores, utils)app/, components/, config/, routes/, types/ — bootstrap, shadcn/ui components, configuration, file-based routes, and shared typesFeature modules use their local deps/ adapters for cross-feature imports.
Platform-coupled code (GPU, ML, audio, storage, browser) lives in
@/infrastructure/* and is imported directly; there is no separate lib/
layer.
FreeCut welcomes contributions that match the current priorities.
Current development priorities, in order:
TypeScript
92.6%
JavaScript
7.1%