A free and open source subtitle editor for Linux, Windows, macOS and Haiku.
Time subtitles on the waveform, transcribe and translate them with engines that can run on
your own machine, and dub them with synthetic voices.
Install · Features · Add-ons · Formats · Run from source · Website · Discord
Features
⏱️ Timing on the waveform
- A timeline with the audio's waveform: drag a subtitle to move it, drag its edges to retime it.
- Snapping to the neighbouring subtitles and to a grid of frames or seconds, with zoom for fine work.
- A vertical timeline beside the list, for working down the subtitles.
- Set a subtitle's start or end to the playhead, slice it in two, merge it with its neighbour, nudge it by a step.
- A quality check against reading speed (characters per second, words per minute), duration, line count and line length, with the usual limits as defaults.
🎬 Video and audio
- The video with the current subtitle drawn over it, as it will be seen, with safe-area guides.
- Playback speed, looping and frame stepping.
- A mixer for the video's sound and the dubs, with EQ, compressor and gate per track.
- 4K and 8K videos get a lighter proxy to edit with, made on the GPU where there is one.
🗣️ Speakers
- Name the speakers and give them a face from the video; each one gets a colour, and a lane of their own on the timeline if you like.
- See how long each one speaks.
🤖 Transcription, translation and dubbing
- Transcribe the video's speech into timed subtitles: all of it, a range, or the selection. Or speak into the microphone and watch it become subtitles.
- Translate the subtitles, keeping each language's translation alongside the original.
- Dub: speak every subtitle with a synthetic voice, one voice per speaker. Dubs can be fitted to each subtitle's duration, and voices that clone take their sample from the video. Or record your own voice instead.
- Export the dub as WAV, FLAC or MP3: the whole mix, a track per speaker, the clips, or the background or the voices alone.
- Transcription and translation engines, and more voices, are add-ons, many of them fully offline. Two online voices (Edge and Google) come built in.
✍️ Editing
- Undo, find and replace (with regular expressions), autosave and backups.
- A plain-text view to edit all the subtitles as one document, as SRT, Markdown or JSON.
- Keyboard shortcuts, which you can change.
- Recent files reopen where you left off.
- Import a transcript from a text or Word file, sliced into subtitles.
🌐 subtitld.cc
subtitld.cc is Subtitld's community hub. When a video opens, Subtitld can look up subtitles made for that exact file (it sends a fingerprint, never the video or its name). You can also search, rate and open subtitles there, and publish your own, all from inside the app.
| Speakers, each on a track of their own | The vertical timeline |
Screenshots: Tears of Steel, © Blender Foundation, CC BY 3.0.
Install
| Linux | Arch Linux: subtitld on the AUR · Any distribution: the AppImage from the latest release |
| Windows | Or the installer, or the portable version, from the latest release |
| macOS | With Python, from PyPI |
| Haiku | Coming to HaikuPorts; the recipes are in packaging/haiku |
From PyPI
On any system with Python 3.10 to 3.14 and FFmpeg on the PATH:
pip install subtitld
subtitld
On Linux, the audio also needs PortAudio (libportaudio2 on Debian and Ubuntu).
Add-ons
Speech recognition, translation, more voices and audio separation come as add-ons, installed from inside Subtitld (Add-ons in the global settings). Each one brings its own models, so the app stays small and you only download what you use.
| Add-ons | |
|---|---|
| Speech to text | whisper.cpp (offline) · Vosk (offline) · RealtimeSTT (offline, as you speak) · AssemblyAI (cloud) |
| Translation | Offline translation (OPUS-MT models, no API key) |
| Voices | Piper · Kokoro · Supertonic · sanoTTS · Parler-TTS · with voice cloning: Qwen3-TTS, Coqui XTTS and F5-TTS |
| Audio | Audio separator: split the voices from the music and effects |
The list Subtitld shows comes from Subtitld/addons-catalog. Some models are for non-commercial use only; each add-on's page says which.
Formats
| Open and save | SubRip (.srt) · WebVTT (.vtt) · TTML (.ttml) · DFXP (.dfxp) · SAMI (.smi, .sami) · Scenarist (.scc) · JSON · Universal Subtitle Format (.usf) |
| Open | SubStation Alpha (.ass, .ssa; the text, not the styles) · MicroDVD (.sub) · iTunes Timed Text (.itt) · XML |
| Projects | .usfx: the subtitles bundled with the speakers' faces and dubs, and, if you choose, the waveform and the video |
| Transcripts | Import from .txt, .docx and .srt |
| Video | MP4, MKV, MOV, WebM, MPEG, Ogg and M4V, through FFmpeg |
| Dub | WAV, FLAC, MP3 |
Run from source
You need Python 3.10 to 3.14, FFmpeg, and on Linux PortAudio.
git clone https://github.com/Subtitld/subtitld.git
cd subtitld
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/subtitld
Tests
Each test is a script that runs Qt off-screen, with its own scratch settings:
for t in tests/test_*.py; do .venv/bin/python "$t" || echo "FAILED: $t"; done
Packaging
Every package is built by CI from this repository:
build.yml builds them all without publishing, and
release.yml publishes them on a version tag.
| Package | Where it's defined |
|---|---|
| Wheel (PyPI) | pyproject.toml |
| AppImage | AppImageBuilder.yml |
| Snap | snap/snapcraft.yaml |
| Flatpak | flatpak/ |
| AUR | packaging/aur/ |
| Windows: installer, portable, Microsoft Store | nsis-installer.nsi · packaging/msix/ · subtitld-windows.spec |
| macOS app | subtitld-macos.spec |
| Haiku | packaging/haiku/ |
The icons, installer pictures and this page's banner are drawn from two SVGs by
packaging/branding/render-icons.py.
Contributing
Bugs and ideas go in the issues; pull requests are welcome. For questions, help, or just to talk subtitles, join us on Discord. If Subtitld is useful to you, you can also support its development.
License
Subtitld is free software, released under the GNU General Public License v3.0.
Metadata
Release files for subtitld 26.10.18.124
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| subtitld-26.10.18.124.tar.gz | 5.9 MB | Without provenance | Details for subtitld-26.10.18.124.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| subtitld-26.10.18.124-py3-none-any.whl | Python 3 | none | any | Details for subtitld-26.10.18.124-py3-none-any.whl |
Total release size: 11.8 MB
Release files / subtitld-26.10.18.124.tar.gz
| Download URL | subtitld-26.10.18.124.tar.gz |
|---|---|
| Size | 5.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
55ed5f35b1bed9ac07f08c4292e4196d6e28c7cd3b52bcd4b17af82b7ebd8884
|
|
BLAKE2b-256 checksum How to use checksums |
5eb01bfa5bc5b0146c99e4f8c8d97b8aa76b62e8bc76fd8c55451f8ffe32cb63
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / subtitld-26.10.18.124-py3-none-any.whl
| Download URL | subtitld-26.10.18.124-py3-none-any.whl |
|---|---|
| Size | 5.9 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a67bf637af137bfed2a55e9432ea435bb0f8b28502f503f5b9ecc0d970507a15
|
|
BLAKE2b-256 checksum How to use checksums |
338d572135292225340c62d75a84d745cc1a642434f44730618881beb99b6b46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for subtitld 26.10.18.124
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.