Skip to content

Repository files navigation

Rescript logo

rescript.

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

GitHub Join the Discord Follow @wassgha on X

Rescript Demo

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.

Download

Download for macOS β€” Apple Silicon Β  Download for macOS β€” Intel Β  Download for Windows Β  Download the AppImage for Linux

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)

Stack

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

Development

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    # eslint

Open 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.

How it works

  1. Extract β€” ffmpeg.wasm decodes the audio track to mono 16 kHz PCM.
  2. 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.
  3. 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.
  4. Export β€” the kept ranges are trimmed and concatenated with an ffmpeg filter graph and re-encoded (libx264/aac), so cuts are word-accurate.

Browser support

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.

License

MIT

License: MIT Platforms Electron Stars Latest release


Built by @wassgha β€” follow along on X for updates, or come say hi in the Discord.

Releases

Contributors

Languages