Cue times were multiplied by the mdhd timescale instead of scaled to µs, so the pycaption path put cues hours out of sync for any timescale but 1000.
unshackle
Movie, TV, and Music Archival Software
A modular archival tool for movies, TV, and music. Fork of Devine with DASH/HLS/ISM parsing, Widevine & PlayReady DRM, and a REST API.
Install
The recommended way is a git clone with the install script. The script installs uv and unshackle, then runs unshackle setup to download the external tools and write a first config.
git clone https://github.com/unshackle-dl/unshackle.git
cd unshackle
sh install.sh # Windows: .\install.bat
uv run unshackle env check
In a clone, run every command as uv run unshackle ....
Note
Advanced:
uv tool install git+https://github.com/unshackle-dl/unshackle.gitinstalls unshackle into the tool folder ofuv, not a folder that you choose.unshackle setupthen puts the tools, config, and data in your user data and config directories. See Installation for details.
Requirements
External tools. (recommended versions):
- Python - 3.11 - 3.14
- uv - ≥ 0.5
- FFmpeg - ≥ 6.0
- MKVToolNix - ≥ 80
- shaka-packager - 2.6.1, or ≥ 3.10.0
Optional:
- Bento4 - ≥ 1.6.0-639
- dovi_tool - ≥ 2.1
- SubtitleEdit - ≥ 5.0 (
SeConvCLI)
License
GPL-3.0. Do not use unshackle for content you do not have the rights to. Keep the core free and open. Keep service code private. Be kind.