CutScript
Open-source AI-powered text-based video editor. Edit video by editing text.
Install / Use
/learn @DataAnts-AI/CutScriptREADME
CutScript
An open-source, local-first, Descript-like text-based audio and video editor powered by AI. Edit audio/video by editing text — delete a word from the transcript and it's cut from the audio/video.
<img width="1034" height="661" alt="image" src="https://github.com/user-attachments/assets/b1ed9505-792e-42ca-bb73-85458d0f02a5" />Architecture
- Electron + React desktop app with Tailwind CSS
- FastAPI Python backend (spawned as child process)
- WhisperX for word-level transcription with alignment
- FFmpeg for video processing (stream-copy and re-encode)
- Ollama / OpenAI / Claude for AI features (filler removal, clip creation)
Quick Start
Prerequisites
- Node.js 18+
- Python 3.10+
- FFmpeg (in PATH)
- (Optional) Ollama for local AI features
Install
# Root dependencies (Electron, concurrently)
npm install
# Frontend dependencies (React, Tailwind, Zustand)
cd frontend && npm install && cd ..
# Backend dependencies
cd backend && pip install -r requirements.txt && cd ..
Run (Development)
# Start all three (backend + frontend + electron)
npm run dev
Or run them separately:
# Terminal 1: Backend
cd backend && python -m uvicorn main:app --reload --port 8642
# Terminal 2: Frontend
cd frontend && npm run dev
# Terminal 3: Electron
npx electron .
Project Structure
cutscript/
├── electron/ # Electron main process
│ ├── main.js # App entry, spawns Python backend
│ ├── preload.js # Secure IPC bridge
│ └── python-bridge.js
├── frontend/ # React + Vite + Tailwind
│ └── src/
│ ├── components/ # VideoPlayer, TranscriptEditor, etc.
│ ├── store/ # Zustand state (editorStore, aiStore)
│ ├── hooks/ # useVideoSync, useKeyboardShortcuts
│ └── types/ # TypeScript interfaces
├── backend/ # FastAPI Python backend
│ ├── main.py
│ ├── routers/ # API endpoints
│ ├── services/ # Core logic (transcription, editing, AI)
│ └── utils/ # GPU, cache, audio helpers
└── shared/ # Project schema
Features
| Feature | Status | |---------|--------| | Word-level transcription (WhisperX) | Done | | Text-based video editing | Done | | Undo/redo | Done | | Waveform timeline | Done | | FFmpeg stream-copy export | Done | | FFmpeg re-encode (up to 4K) | Done | | AI filler word removal | Done | | AI clip creation (Shorts) | Done | | Ollama + OpenAI + Claude | Done | | Word-level captions (SRT/VTT/ASS) | Done | | Caption burn-in on export | Done | | Studio Sound (DeepFilterNet) | Done | | Keyboard shortcuts (J/K/L) | Done | | Speaker diarization | Done | | Virtualized transcript (react-virtuoso) | Done | | Encrypted API key storage | Done | | Project save/load (.cutscript) | Done | | AI background removal | Planned |
Keyboard Shortcuts
| Key | Action | |-----|--------| | Space | Play / Pause | | J / K / L | Reverse / Pause / Forward | | ← / → | Seek ±5 seconds | | Delete | Delete selected words | | Ctrl+Z | Undo | | Ctrl+Shift+Z | Redo | | Ctrl+S | Save project | | Ctrl+E | Export | | ? | Shortcut cheatsheet |
API Endpoints
| Method | Endpoint | Description | |--------|----------|-------------| | GET | /health | Health check | | POST | /transcribe | Transcribe video with WhisperX | | POST | /export | Export edited video (stream copy or re-encode) | | POST | /ai/filler-removal | Detect filler words via LLM | | POST | /ai/create-clip | AI-suggested clips for shorts | | GET | /ai/ollama-models | List local Ollama models | | POST | /captions | Generate SRT/VTT/ASS captions | | POST | /audio/clean | Noise reduction (DeepFilterNet) | | GET | /audio/capabilities | Check audio processing availability |
License
MIT License — see LICENSE for details.
