In your browser

ffsubsync can run entirely in your web browser, with no backend server and nothing to install — not even Python or ffmpeg. The Python code is compiled to WebAssembly and executed client-side via Pyodide, so your subtitle files never leave your machine (nothing is uploaded anywhere).

👉 https://smacke.github.io/ffsubsync

How to use it

  1. Open https://smacke.github.io/ffsubsync. On first visit the page downloads the WebAssembly runtime (a few megabytes); afterwards it is cached.

  2. Pick the reference type — a correctly-synced subtitle file, or a video / audio file.

  3. Choose the reference (subtitle, or the movie / audio track) and the subtitles to sync (the out-of-sync file you want to fix).

  4. Click Sync subtitles, then download the corrected file. The detected time offset (and framerate correction, if any) is shown alongside the result.

Subtitle references align two subtitle files by cross-correlating their speech patterns — pure numeric computation, no audio needed. Video / audio references are decoded to audio in the browser with ffmpeg.wasm and run through a voice-activity detector, exactly as the command-line tool does.

Large video files

Nothing is uploaded, and large references are not loaded whole into memory: the file is mounted into ffmpeg.wasm via WORKERFS, which reads it lazily as needed, so only the (downsampled) decoded audio occupies memory. Multi-gigabyte movies work.

Voice-activity detection

Video / audio references use WebRTC VAD — the same as the CLI default — compiled to WebAssembly. If that component is unavailable, video / audio references are disabled (subtitle references still work); use the command-line tool for those. See Voice-activity detectors (--vad) for background on the detectors.

Everything the command-line tool does is still available locally; the browser build simply packages the same ffsubsync code to run without an install.

Privacy

All processing happens locally in your browser tab. The only network traffic is the one-time download of the WebAssembly runtime and support libraries; your subtitle files are read directly from disk into the page and never transmitted.

For developers

The site is a static bundle built from the web/ directory of the repository. See web/README.md for how to build it (make site), serve it locally (make serve), and run the tests (make test).