Edit video and audio like you edit text β fully offline, on your device.
β¨ Try it in the browser wassgha.github.io/rescript or download the Desktop App
Rescript is an open-source, transcript-based media editor. Drop in a video or audio file and it is transcribed locally with per-word timestamps and speaker labels. Delete words in the transcript and the corresponding clip is cut from the media. Export the final cut β without your file ever leaving your device.
See the Releases page. Desktop builds auto-update from GitHub Releases. Prefer the browser? Use the web app β same editor, no install.
- π Private by design β no server, no auth, no uploads; all media processing happens on-device
- π Word-level editing β select words, press β«, the cut follows the text
- π₯ Import your own transcript β skip Whisper and edit with an SRT, VTT, or JSON caption file
- π§Ή Filler removal β one-click cut of "um", "uh", and similar fillers
- π£οΈ Speaker diarization β the transcript is grouped by speaker
- π¬ Timeline β waveform, wordbar with draggable timing handles, Split, cut regions, playhead; scroll to zoom, side-scroll to pan
- βοΈ Split & trim β blade clips at the playhead; drag clip edges to refine cuts beyond word boundaries
- π― Word timing β zoom in and drag a word's edges when ASR alignment is off
- π΄ Cut edges β drag either edge of a cut to trim independently of Whisper timestamps; double-click to reset
- β‘ Live preview β playback skips your cuts in real time
- π¦ In-browser / desktop export β frame-accurate MP4 (video) or M4A (audio) with ffmpeg.wasm
- π§ Audio files β edit podcasts, voice notes, and interviews the same way as video
- π₯οΈ Desktop app β macOS, Windows, and Linux via Electron (signed + notarized on Mac)
| Piece | Tech |
|---|---|
| App | Next.js + React + TypeScript + Tailwind |
| Desktop | Electron + electron-builder (auto-update from GitHub Releases) |
| Transcription | transformers.js running whisper-base_timestamped or whisper-small_timestamped (WebGPU with WASM fallback) in a Web Worker |
| Speaker labels | pyannote-segmentation-3.0 (ONNX) |
| Media processing | ffmpeg.wasm (multi-threaded) for audio extraction and export |
| State | zustand |
npm install # also copies ffmpeg/onnxruntime WASM into public/vendor
npm run dev # Next.js web app (http://localhost:3000)
npm run electron:dev # Electron shell + Next.js dev server
npm run build # production web build
npm run dist # unsigned desktop installers into dist/
npm run lint # eslintOpen http://localhost:3000 and drop in a video with an audio track. For desktop packaging, signing, and cutting releases, see RELEASING.md.
Note on "offline": the AI models (Whisper Base ~200 MB, or Small ~600 MB, plus a small speaker model) are downloaded from the Hugging Face Hub the first time you transcribe, then cached in browser / app storage. After that, everything β transcription, editing, export β works with the network fully disconnected. Your media and transcript never leave the device; the only third-party request the app makes is anonymous page analytics (Google Analytics), which fails silently when offline.
- Extract β ffmpeg.wasm decodes the audio track to mono 16 kHz PCM.
- Transcribe β Whisper runs in a Web Worker with
return_timestamps: "word", streaming text as it goes; pyannote assigns a speaker to every word. Choose Whisper Base, Whisper Small, or Import transcript (SRT / VTT / JSON) on the homepage. - Edit β deleting words produces "cut ranges" of the original media. The preview player skips them in real time and the timeline shows them in red. Remove fillers cuts every detected "um" / "uh" / etc. in one click.
- Export β the kept ranges are trimmed and concatenated with an ffmpeg
filter graph and re-encoded (
libx264/aac), so cuts are word-accurate.
A Chromium-based browser is recommended for the web app. It requires
SharedArrayBuffer (served with COOP/COEP headers) and uses WebGPU for
inference when available, falling back to WASM otherwise. The desktop app
bundles Chromium via Electron and sets the same isolation headers on its
app:// protocol.
MIT
Built by @wassgha β follow along on X for updates, or come say hi in the Discord.

