Local-first, transcript-based video editing for Apple Silicon Macs. Edit the words; YusafCut edits the video.
YusafCut is an open-source desktop editor for cutting talking-head videos, podcasts, interviews, courses, screen recordings, and creator clips by editing their transcript. Delete a word and the matching video disappears. Reorder paragraphs and the video follows. Everything runs locally on your Mac with no cloud upload, no telemetry, and no API keys.
The project is built with Tauri, React, TypeScript, Rust, whisper.cpp, and FFmpeg. It currently targets Apple Silicon Macs.
If YusafCut helps you, consider supporting the project:
- Transcript-first editing: the transcript is the timeline, not a side panel.
- Local by default: media, transcripts, models, and project files stay on your machine.
- Fast Apple Silicon pipeline: whisper.cpp uses Core ML and Metal; exports use FFmpeg with VideoToolbox where possible.
- Real project files:
.scribebundles store the edit decision list, metadata, snapshots, and project state. - Open-source foundation: AGPL-licensed so improvements to the editor stay available to the community.
YusafCut 4.7.0 is production-ready for local-first transcript editing, screen and camera recording, timeline preview, and MP4 export on Apple Silicon Macs. The project is pre-1.0 from an open-source governance and release-process perspective, so expect fast iteration and some rough edges around packaging.
| Feature | State |
|---|---|
| Media import with FFprobe | Complete |
| Whisper.cpp transcription with Core ML + Metal | Complete |
| Transcript editor with TipTap + custom word nodes | Complete |
| EDL-based edit operations + 50-step undo | Complete |
Project save/load as .scribe bundles |
Complete |
| Smart-cut MP4 export with FFmpeg + VideoToolbox | Complete |
| Background job queue with cancellation | Complete |
| Multi-clip editing and Add Clip support | Complete |
| Multi-track audio with music ducking | Complete |
| Project snapshots and named restore points | Complete |
| Workspace modes (Transcribe / Edit) with mode-aware left sidebar | Complete |
| Top-bar Project menu with recent projects | Complete |
| Blocking-operation progress dialogs | Complete |
| One-click filler word removal | Complete |
DTW word-timestamp refinement via whisper.cpp --dtw |
Complete |
| Cut-point pre-roll padding | Complete |
| Timeline zoom and in/out markers | Complete |
| Built-in screen / camera / voice recorder with picture-in-picture | Complete |
| Global recording shortcuts (⌥⌘R / ⌥⌘P / ⌥⌘E) with pause + re-record | Complete |
| Recordings auto-transcribed and appended to the end of the video | Complete |
| Speaker diarisation | Experimental |
| Auto-update and notarisation | Planned |
Screenshots and release assets are not committed yet. If you are evaluating the
project today, run the app locally with npm run tauri:dev.
- macOS on Apple Silicon
- Node.js 20 or newer
- Rust stable via
rustup - Xcode Command Line Tools
- Sidecar binaries for transcription/export:
whisper-cli,ffmpeg, andffprobe
Clone the repository and install dependencies:
git clone https://github.com/awaismirza/yusafCut.git
cd yusafCut
nvm use
npm run setup:allThe setup:all script handles:
- Node.js dependencies installation
- Rust toolchain setup
- Sidecar binary fetching (FFmpeg, FFprobe)
The Whisper CLI binary may need to be built separately. See src-tauri/binaries/README.md for instructions.
Start the full desktop app (React + Tauri + Rust):
npm startThe dev server reloads on file changes. First launch takes ~30–60 seconds while Rust compiles; subsequent restarts are faster.
Build a release-ready .app and .dmg for macOS:
npm run build:productionThe built artifacts will be in src-tauri/target/release/bundle/.
| Command | What it does |
|---|---|
npm run dev |
Start the Vite UI only |
npm run tauri:dev |
Run the full desktop app |
npm run tauri:build |
Build a release .app and .dmg |
npm run typecheck |
Run TypeScript checks |
npm run lint |
Run ESLint over the frontend |
npm test |
Run Vitest unit tests |
npm run test:rust |
Run Rust tests |
npm run check |
Run typecheck and lint |
npm run ci |
Run the full local CI suite |
The Edit Decision List (EDL) is the source of truth. It is a flat list of
segments, each pointing into a source media file with sourceIn, sourceOut,
and word-level timing metadata. The transcript view, preview player, waveform,
snapshots, and export pipeline all derive from this structure.
Edits are pure transformations. Deleting a word range splits surrounding segments and drops the middle. Source timecodes on words are never mutated, which keeps preview, undo, save/load, and export predictable.
Read more in:
YusafCut is local-first:
- Your media is not uploaded.
- Generated transcripts stay on your machine.
- There is no telemetry, analytics, or remote crash reporting in v1.
- Network access is limited to model downloads and, once enabled, release update metadata.
See SECURITY.md for the current threat model and vulnerability
reporting process.
YusafCut currently saves projects as .scribe bundles. The extension is kept
for compatibility with existing project files while the product name changes to
YusafCut.
- Tauri 2.x: native macOS shell and Rust backend
- React + TypeScript + Vite: frontend app
- Tailwind + shadcn/ui: styling and UI primitives
- TipTap / ProseMirror: transcript editing surface
- Zustand + zundo: state management and undo
- WaveSurfer.js: waveform display
- whisper.cpp: local transcription
- FFmpeg: media processing and export
Contributions are welcome. Please start with
CONTRIBUTING.md, especially the EDL invariants and testing
expectations. For larger architectural changes, open an issue first so the
direction can be discussed before implementation.
Good first contribution areas:
- Improve onboarding and setup docs.
- Add screenshots and short demo assets.
- Expand manual and automated regression coverage.
- Improve packaging, signing, notarisation, and release automation.
- Polish accessibility and keyboard workflows.
Please do not open public issues for vulnerabilities. Follow the private
reporting process in SECURITY.md.
YusafCut is licensed under AGPL-3.0-or-later.
The AGPL protects against closed-source hosted or networked forks of an editor with this much local-first value. Reusable libraries split out of this repo may use a more permissive license in the future.