imSp4rky 4422c975c3 feat(drm): add FairPlay->PlayReady bridge for cbcs HLS
FairPlay HLS (SAMPLE-AES/cbcs) ships a content KID in its skd:// key but no PlayReady/Widevine PSSH. Synthesize a PlayReady header from that KID so a PlayReady CDM can license and decrypt it whenever the backend is multi-DRM.

- FairPlay DRM (PlayReady subclass) + FairPlay.from_kid; fairplay_kid_from_skd extracts the KID from GUID / ?KID= / 32-hex skd forms (core/drm/fairplay.py)
- build_pr_header_from_kid synthesizes a WRMHEADER/PRO (cbcs->AESCBC v4.3, cenc->AESCTR v4.0); PlayReady.from_track falls back to a tenc KID when no PSSH
- Service.get_fairplay_license hook (defaults to get_playready_license)
- dl.py routes FairPlay tracks to get_fairplay_license through the PlayReady CDM
- EXAMPLE service + config.yaml document the bridge end to end
- tests for the synthesized header and skd KID extraction
2026-06-18 16:05:02 +00:00
2025-07-18 00:46:05 +00:00
2025-07-18 00:46:05 +00:00
2025-07-18 00:46:05 +00:00
2025-07-18 00:46:05 +00:00
2025-07-18 00:46:05 +00:00

no_encryption unshackle
Movie, TV, and Music Archival Software
Discord

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.

unshackle demo

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):

Optional:

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.

Description
No description provided
Readme GPL-3.0 20 MiB
Languages
Python 99.9%