
Subtitler
github.com/dmtrkovalenko/subtitler- Category
- AI Tools
- Rank
- No. 1362Tools index
Previous survey · No. 1368 ·
- Pricing
- Open Source
- Type
- APP
- Builder
- dmtrkovalenko
- GitHub
- 375 stars
- Latest release
- v1.1
- Date
About
Free on-device web app for transcribing audio and rendering subtitles — runs in the browser via WASM, nothing leaves your machine.
What it does
Drop in a video, let the app decode its audio, edit the resulting subtitle cues and styling, then render a new video. It previews work in an editor, reports progress, and saves MP4, WebM or MOV output.
Why it's ranked here
The workflow covers more than transcription: it includes cue editing, styling, preview and final video rendering. That makes it useful as a compact production tool. The main reservation is compatibility, since decoding, encoding and saving depend on relatively new browser capabilities.
What's good
It validates codec support before committing to the workflow and presents user-facing failures when audio cannot be decoded. Rendering runs in a worker, keeping heavy frame processing away from the main interface. Output format and codec choices are validated, with progress shown for reading and rendering.
Tradeoffs
The app requires browser video decoding and audio APIs, and its own compatibility screen recommends a recent desktop Chrome. Direct file saving is not universal, so unsupported browsers fall back to generating an in-memory download. Production builds also enable Sentry tracing and session replay, which complicates an absolute privacy claim.
How to use it well
Use it for a hands-on workflow where one person transcribes, corrects cues, styles captions and exports a captioned video. Check browser and codec compatibility before starting a long file. It does not present a CLI, reusable library or server API for automated batch processing.
Technical notes+
package.json defines a private ESM application built with ReScript, TypeScript, React 19 and Vite; its test command targets tests/*.mjs. src/Main.tsx gates the UI through isBrowserSupported, registers a production service worker and initializes Sentry browser tracing plus replay. src/LolApp.tsx decodes audio with AudioContext, validates codecs through src/codecs/render-worker?worker, transfers an OffscreenCanvas for rendering, and supports MP4, WebM and MOV targets with file-picker or ArrayBuffer download paths. src/BrowserNotSupported.tsx requires VideoDecoder and AudioContext, while treating showSaveFilePicker as optional. Generated ReScript artifacts such as src/Player.res.mjs and src/Utils.res.mjs sit beside TypeScript bindings.
Observed
- Application surface
- Private browser application with a graphical editor; no CLI, library or server API is shown.
- Primary implementation
- ReScript and TypeScript source compiled into a React 19 application.
- Build packaging
- ES modules built with ReScript and Vite; production builds also run TypeScript checks.
- Output support
- Renders MP4, WebM and MOV, with selectable video and audio codecs.
- Browser requirements
- Requires VideoDecoder and AudioContext; direct file-picker saving is optional.
- Testing surface
- The package test script runs JavaScript module tests through retest.
- Production telemetry
- Production initialization enables Sentry browser tracing and sampled session replay.
Read from README.md, package.json, src/Main.tsx, src/LolApp.tsx, src/types.d.ts, src/Utils.gen.tsx, src/Utils.res.mjs, src/vite-env.d.ts, src/Player.gen.tsx, src/Player.res.mjs, src/ErrorBoundary.tsx, src/BrowserNotSupported.tsx, src/ui/Tabs.tsx, src/ui/Spinner.tsx, src/ui/Combobox.tsx.
What it can do
Transcribe audio to text
Audio file → Text transcription
Generate subtitle files
Audio file → Subtitle file (SRT/VTT)
Process audio locally in browser
Audio file → Processed audio data
Create timed text captions
Audio file → Time-synced subtitle text
Convert speech to synchronized subtitles
Video or audio file → Subtitle track with timestamps
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.