mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-06-10 03:02:09 +00:00
4fdffc94353356729e5e53a07f1229dff2ad6f33
Addresses review feedback on the failed-subtitle handling: - Fully annotate download_tracks_in_passes and the download_track closure (MyPy strict). - Replace list[str] skipped_subtitles with a documented SkippedSubtitle TypedDict (id + language + title) so a client can report which subtitle of which title was skipped; pin the shape with a contract test. - Clear DOWNLOAD_CANCELLED in a finally so no failed track leaves it set for later code. - Document why the subtitle pass must stay sequential (a concurrent pass would silently drop in-flight subtitles via the cancel event). - Warn only when a title skipped a subtitle and produced no video/audio/subtitle (was a loose len(title.tracks) check that ignored chapters/attachments). - Narrow the over-broad remove() except to ValueError with a debug log. - Add tests: final-clear on the fatal path, all-subs-skipped keeps video/audio, and duplicate-language subtitles distinguished by id.
unshackle
Movie, TV, and Music Archival Software
Install · Wiki · Docs · Discord
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
uv tool install git+https://github.com/unshackle-dl/unshackle.git
unshackle --help
Tip
Prefer
uv run unshackle ...inside a clone to keep the virtual environment active.
Requirements
External tools on your PATH (recommended versions):
- Python - 3.10 - 3.12
- uv - ≥ 0.5
- FFmpeg - ≥ 6.0
- MKVToolNix - ≥ 80
- shaka-packager - 2.6.1
- Bento4 - ≥ 1.6.0-639
- dovi_tool - ≥ 2.1
License
GPL-3.0. Do not use unshackle for content you lack the rights to. Keep the core free and open; keep service code private. Be kind.
Languages
Python
99.9%