How the Add Subtitles Tool Works
AnyTool burns subtitles into video entirely in the browser using a self-hosted single-threaded ffmpeg.wasm engine — the core (ffmpeg-core.js + the 32 MB wasm) is bundled from npm and served as a same-origin asset, so nothing is fetched from a CDN. You can upload an SRT or VTT file, or type cues directly which are serialized to SRT. The subtitle file, a bundled font, and the video are written to ffmpeg's virtual filesystem (MEMFS), then the libass-backed subtitles filter renders and permanently hardcodes the captions, with force_style controlling font size, color (in BGR), outline and alignment. The styled video is re-encoded to H.264/AAC and read back as an MP4 blob, so the captions are baked in and play everywhere. Single-threaded is deliberate: the multi-threaded core needs SharedArrayBuffer + cross-origin isolation (COOP/COEP), which would block cross-origin ad iframes.
- Runs client-side — the video is never uploaded
- Self-hosted ffmpeg core (bundled) — no CDN
- Accepts SRT and VTT, or typed cues serialized to SRT
- libass subtitles filter with a bundled font written to MEMFS
- force_style: font size, color (BGR), outline, alignment
- Captions permanently hardcoded into the H.264/AAC MP4
- No backend, no signup, no size cap
