yt-dlp-assify
A yt-dlp post-processor plugin that automatically converts YouTube srv3 / ytt formatted subtitles into styled .ass subtitles using YTSubConverter.
This allows embedding fully styled, formatted, and positioned YouTube subtitles directly into .mkv files or saving standalone .ass subtitle files.
Installing
Requires yt-dlp 2023.01.02 or higher.
YTSubConverter must be present on your system.
You can download the .whl file from the latest release and place the zip file in a supported plugin directory.
pip/pipx/uv
pipx inject yt-dlp yt-dlp-assify
python -m pip install -U yt-dlp-assify
uv tool install --reintall yt-dlp --with yt-dlp-assify
Installing YTSubConverter
Windows
- WinGet:
winget install arcusmaximus.ytsubconverter - Scoop:
scoop bucket add extras && scoop install ytsubconverter - Manual: Download
YTSubConverter.exefrom Releases and place it in yourPATH.
Linux
- Debian / Ubuntu: Install the official
.debpackage. - Fedora / RHEL: Install the official
.rpmpackage. - Arch Linux: Install
ytsubconverter-binfrom the AUR. - Manual: Extract
YTSubConverter-Linux.tar.xzto~/.local/binor/usr/local/bin.
macOS
- Download
YTSubConverter-macOS.dmgfor eitherx64orarm64(Apple Silicon). - Drag
YTSubConverter.appto your/Applicationsdirectory.
Usage
The following options are required:
--sub-formatset tosrv3and/orytt--embed-subs--remux-video mkvor--merge-output-format mkvdepending on the format selection.--use-postprocessor Assify
Example:
yt-dlp \
--sub-langs "all,-live_chat" \
--sub-format "srv3/ytt" \
--use-postprocessor Assify \
--embed-subs \
--remux-video mkv \
"https://www.youtube.com/watch?v=VIDEO_ID"
Options
Options can be passed directly to the post-processor in key-value format via --use-postprocessor "Assify:key=value". Multiple options can be combined using semicolons:
Specifying the YTSubConverter Executable Path
If YTSubConverter is not located in standard search paths or PATH, pass the path option:
yt-dlp --use-postprocessor "Assify:path=/custom/path/to/YTSubConverter" ...
Visually Accurate Positioning (--visual)
YTSubConverter supports a --visual flag for visually accurate positioning. Pass visual=true:
yt-dlp --use-postprocessor "Assify:visual=true" ...
Note: When this option is enabled, the resulting
.assfile cannot be converted back to SRV3.
Conversion Mode
Controls how subtitle tracks are converted based on whether they contain styles:
yt-dlp --use-postprocessor "Assify:mode=auto" ...
auto(Default): Inspects the SRV3 XML content. Converts styled subtitles (karaoke, custom fonts, colors, positioning) to.assviaYTSubConverter, and converts unstyled (plain dialogue) subtitles to.srt.always_ass: Converts all SRV3/YTT tracks to.ass, even if unstyled (legacy plugin behavior).only_styled: Converts styled tracks to.ass, but leaves unstyled tracks as original SRV3.
Subtitle Display Cap
When converting unstyled SRV3 subtitles to .srt, YouTube occasionally omits the duration (d) attribute on caption cues.
You can pass max_duration_cap in milliseconds to prevent captions from remaining frozen on screen during long pauses or music breaks:
# Default: Set to 0 to disable the cap, matching YouTube's behavior
yt-dlp --use-postprocessor "Assify:max_duration_cap=0" ...
# Set a 5 second cap
yt-dlp --use-postprocessor "Assify:max_duration_cap=5000" ...
Metadata
Release files for yt-dlp-assify 2026.11.11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| yt_dlp_assify-2026.11.11-py3-none-any.whl | Python 3 | none | any | Details for yt_dlp_assify-2026.11.11-py3-none-any.whl |
Release files / yt_dlp_assify-2026.11.11-py3-none-any.whl
| Download URL | yt_dlp_assify-2026.11.11-py3-none-any.whl |
|---|---|
| Size | 8.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2fc9041d50c3235a5936fc0a83774c51ee912bef4b111889db2e9e3655966ce2
|
|
BLAKE2b-256 checksum How to use checksums |
696d407111ede4c139974d4870a68e3f651001abd505bdd49ed09dc504eb2c0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for yt-dlp-assify 2026.11.11
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.