mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-03-09 07:59:00 +00:00
BREAKING CHANGE: PlayReady users without explicit playready_devices no longer get access to all devices by default. Key changes: - feat(drm): add MonaLisa DRM support to core infrastructure - feat(cdm): add remote PlayReady CDM support via pyplayready RemoteCdm - feat(serve): add PlayReady CDM support alongside Widevine - feat(gluetun): Gluetun VPN integration and Windscribe support - feat(audio): codec lists and split muxing - feat(tracks): prioritize Atmos audio tracks over higher bitrate non-Atmos - feat(video): detect interlaced scan type from MPD manifests - feat(cdm): normalize CDM detection for local and remote implementations - fix(serve)!: make PlayReady users config consistently a mapping - 50+ additional bug fixes across HLS/DASH, proxies, subtitles, and more
22 KiB
22 KiB
Changelog
All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
This changelog is automatically generated using git-cliff.
3.0.0 - 2026-02-15
Features
- titles: Use track source attribute for service name in filenames
- debug: Add download output verification logging
- Gluetun VPN integration and remote service enhancements
- gluetun: Improve VPN connection display and Windscribe support
- serve: Add PlayReady CDM support alongside Widevine
- cdm: Add remote PlayReady CDM support via pyplayready RemoteCdm
- env: Add ML-Worker binary for DRM licensing
- video: Detect interlaced scan type from MPD manifests
- drm: Add MonaLisa DRM support to core infrastructure
- audio: Codec lists and split muxing
- proxy: Add specific server selection for WindscribeVPN
- cdm: Normalize CDM detection for local and remote implementations
- HLS: Improve audio codec handling with error handling for codec extraction
- tracks: Prioritize Atmos audio tracks over higher bitrate non-Atmos
Bug Fixes
- subs: Update SubtitleEdit CLI syntax and respect conversion_method
- n_m3u8dl_re: Include language in DASH audio track selection
- hls: Prefer media playlist keys over session keys for accurate KID matching
- deps: Upgrade vulnerable dependencies for security alerts
- serve: Use correct pywidevine users config format
- cdm: Correct error key casing in Decrypt Labs API response parsing
- api: Validate Bearer prefix before extracting API key
- serve: Correct PlayReady RemoteCDM server validation
- n_m3u8dl_re: Remove duplicate --write-meta-json argument causing download failures
- manifests: Correct DRM type selection for remote PlayReady CDMs
- proxies: Fixes WindscribeVPN server authentication
- subs: Route pycaption-unsupported formats to pysubs2 in auto mode
- proxy: Remove regional restrictions from WindscribeVPN
- proxy: Collect servers from all locations in WindscribeVPN
- downloader: Correct progress bar tracking for segmented downloads
- binaries: Search subdirectories for binary files
- dash: Handle high startNumber in SegmentTimeline for DVR manifests
- drm: Hide Shaka Packager message for MonaLisa decryption
- dash: Add CENC namespace support for PSSH extraction
- dash: Preserve MPD DRM instead of overwriting from init segment
- subtitles: Preserve sidecar originals
- mux: Avoid audio codec suffix on split-audio outputs
- dl: Prevent attachment downloads during --skip-dl
- progress: Force track bar completion on terminal states
- progress: Bind per-track bars and force terminal completion
- dl: Keep descriptive and standard audio for requested langs
- dl: Always clean up hybrid temp hevc outputs
- hls: Finalize n_m3u8dl_re outputs
- downloader: Restore requests progress for single-url downloads
- dl: Invert audio codec suffixing when splitting
- dl: Support snake_case keys for RemoteCdm
- aria2c: Warn on config mismatch and wait for RPC ready
- serve: [breaking] Make PlayReady users config consistently a mapping
- dl: Preserve proxy_query selector (not resolved URI)
- gluetun: Stop leaking proxy/vpn secrets to process list
- monalisa: Avoid leaking secrets and add worker safety
- dl: Avoid selecting all variants when multiple audio codecs requested
- hls: Keep range offset numeric and align MonaLisa licensing
- titles: Remove trailing space from HDR dynamic range label
- config: Normalize playready_remote remote_cdm keys
- titles: Avoid None/double spaces in HDR tokens
- naming: Keep technical tokens with scene_naming off
- api: Log PSSH extraction failures
- proxies: Harden surfshark and windscribe selection
- service: Redact proxy credentials in logs
- monalisa: Harden wasm calls and license handling
- hls: Remove no-op encryption_data reassignment
- serve: Default PlayReady access to none
- tracks: Close temp session and improve path type error
- main: Update copyright year dynamically in version display
Reverts
- monalisa: Pass key via argv again
Documentation
- Add configuration documentation WIP
- changelog: Add 2.4.0 release notes
- changelog: Update cliff config and regenerate changelog
- changelog: Complete 2.4.0 notes
- config: Clarify sdh_method uses subtitle-filter
Performance Improvements
- aria2c: Improve download performance with singleton manager
Changes
- remote_auth: Remove unused requests.Session
- Remove remote-service code until feature is more complete
Maintenance
- api: Remove remote services
2.3.0 - 2026-01-18
Features
- config: Add unicode_filenames option to preserve native characters
Bug Fixes
- drm: Correct PSSH system ID comparison in PlayReady
- dash: Handle placeholder KIDs and improve DRM init from segments
- dash: Handle N_m3u8DL-RE merge and decryption
- drm: Include shaka-packager binary in error messages
- subs: Strip whitespace from ASS font names
- subs: Handle negative TTML values in multi-value attributes
- drm: Filter Widevine PSSH by system ID instead of sorting
- subs: Handle WebVTT cue identifiers and overlapping multi-line cues
2.2.0 - 2026-01-15
Features
- debug: Add comprehensive debug logging for downloaders and muxing
- drm: Add CDM-aware PlayReady fallback detection
Bug Fixes
- util: Improve test command error detection and add natural sorting
- vaults: Batch bulk key operations to avoid query limits
- titles: Detect HDR10 in hybrid DV filenames correctly
- vaults: Adaptive batch sizing for bulk key operations
2.1.0 - 2025-11-27
Features
- export: Enhance track export with URL, descriptor, and hex-formatted keys
- cdm: Add per-track quality-based CDM selection during runtime DRM switching
- Merge upstream dev branch
Bug Fixes
- deps: Pin pyplayready to <0.7 to avoid KID extraction bug
- hls: Convert range_offset to int to prevent TypeError
- video: Correct CICP enum values to match ITU-T H.273 specification
- utilities: Handle space-hyphen-space separators in sanitize_filename
- utilities: Make space-hyphen-space handling conditional on scene_naming
- windscribevpn: Add error handling for unsupported regions in get_proxy method
- Restrict WindscribeVPN to supported regions
- dash: Add AdaptationSet-level BaseURL resolution
- dl: Preserve attachments when rebuilding track list
2.0.0 - 2025-11-10
Features
- Add REST API server with download management
- Add comprehensive JSON debug logging system
- cdm: Add highly configurable CustomRemoteCDM for flexible API support
- proxies: Add WindscribeVPN proxy provider support
- dl: Add --latest-episode option to download only the most recent episode
- Add service-specific configuration overrides
- Add retry handler to curl_cffi Session
- dl: Add --audio-description flag to download AD tracks
- api: Add url field to services endpoint response
- api: Complete API enhancements for v2.0.0
- api: Add default parameter handling and improved error responses
- cache: Add TMDB and Simkl metadata caching to title cache
- session: Add custom fingerprint and preset support
- fonts: Add Linux font support for ASS/SSA subtitles
- subtitle: Preserve original formatting when no conversion requested
- dl: Add --no-video flag to skip video track downloads
Bug Fixes
- Use keyword arguments for Attachment constructor in font attachment
- Only exclude forced subs when --forced-subs flag is not set
- Update lxml constraint and pyplayready import path
- tags: Gracefully handle missing TMDB/Simkl API keys
- config: Support config in user config directory across platforms
- dl: Validate HYBRID mode requirements before download
- drm: Add explicit UTF-8 encoding to mp4decrypt subprocess calls
- subtitle: Resolve SDH stripping crash with VTT files
- naming: Improve HDR detection with comprehensive transfer checks and hybrid DV+HDR10 support
- dash: Correct segment count calculation for startNumber=0
- session: Update OkHttp fingerprint presets
- session: Remove padding extension from OkHttp JA3 fingerprints
- dl: Prevent vault loading when --cdm-only flag is set
- cdm: Resolve session key handling for partial cached keys
- cdm: Apply session key fix to custom_remote_cdm
- n_m3u8dl_re: Read lang attribute from DASH manifests correctly
- subtitles: Fix closure bug preventing SDH subtitle stripping
- Ensure subtitles use requests downloader instead of n_m3u8dl_re if Descriptor.URL
- Suppress verbose fontTools logging when scanning system fonts
- tags: Skip metadata lookup when API keys not configured
Documentation
- Improve GitHub issue templates for better bug reports and feature requests
- Add dev branch and update README
- Update CHANGELOG for audio description feature
- changelog: Complete v2.0.0 release documentation
- changelog: Add --no-video flag and PR #38 credit
- changelog: Set release date for version 2.0.0
- readme: Remove dev branch warning for main merge
Changes
- session: Modernize type annotations to PEP 604 syntax
- binaries: Remove unused mypy import
- Remove unnecessary underscore prefixes from function names
- tags: Remove environment variable fallbacks for API keys
Maintenance
- api: Fix import ordering in download_manager and handlers
- Update CHANGELOG.md for version 2.0.0
1.4.8 - 2025-10-08
Features
- Add AC4 codec support in Audio class and update mime/profile handling
- Add pysubs2 subtitle conversion with extended format support
- Add --no-mux flag to skip muxing tracks into container files
- vaults: Add DecryptLabs API support to HTTP vault
- Add --exact-lang flag for precise language matching
Bug Fixes
- Optimize audio track sorting by grouping descriptive tracks and sorting by bitrate, fixes bug that does not identify ATMOS or DD+ as the highest quality available in filenaming.
- Update lxml constraint and pyplayready import path
- Dl.py
- Upgrade pyplayready to 0.6.3 and resolve import compatibility issues
- Suppress tinycss SyntaxWarning by initializing filter before imports
- (subtitle): Move pysubs2 to not be auto while in "testing" phase.
Reverts
- Remove tinycss SyntaxWarning suppression and fix isort
Documentation
- Add pysubs2 conversion_method to configuration documentation
Maintenance
- Bump version to 1.4.8
1.4.7 - 2025-09-25
Features
- Add options for required subtitles and best available quality in download command
- Add download retry count option to download function
- Add decrypt_labs_api_key to Config initialization and change duplicate track log level to debug
- Add curl_cffi session support with browser impersonation
- Update changelog for version 1.4.7
1.4.6 - 2025-09-13
Features
- Automatic audio language metadata for embedded audio tracks
- Add quality-based CDM selection for dynamic CDM switching
Bug Fixes
- Resolve service name transmission and vault case sensitivity issues
- Improve import ordering and code formatting
Maintenance
- Bump version to 1.4.6 and update changelog
1.4.5 - 2025-09-09
Features
- changelog: Update changelog for version 1.4.4 with enhanced CDM support, configuration options, and various improvements
- cdm: Enhance key retrieval logic and improve cached keys handling
- Implement intelligent caching system for CDM license requests
- tags: Enhance tag handling for TV shows and movies from Simkl data
- kv: Enhance vault loading and key copying logic
- dl: Truncate PSSH string for display in non-debug mode
- cdm: Add fallback to Widevine common cert for L1 devices
- cdm: Optimize get_cached_keys_if_exists for L1/L2 devices
- cdm: Update User-Agent to use dynamic version
Bug Fixes
- tags: Fix import order.
- cdm: Add error message for missing service certificate in CDM session
- tags: Fix formatting issues
Maintenance
- Bump version to 1.4.5 and update changelog
1.4.4 - 2025-09-02
Features
- ip-info: Add cached IP info retrieval with fallback tester to avoid rate limiting
- ip-info: Fix few more issues with the get_ip_info make sure we failover to different provider on 429 errors and allow future for more API providers to be added later.
- release: Bump version to 1.4.3 and update changelog with new features and improvements
- config: Add new configuration options for device certificate status list and language preferences
- cdm: Enhance DecryptLabsRemoteCDM to support cached keys and improve license handling
- cdm: Enhance DecryptLabsRemoteCDM with improved session management and caching support and better support for remote WV/PR
- cdm: Add DecryptLabs CDM configurations for Chrome and PlayReady devices with updated User-Agent and service certificate
- cdm: Refactor DecryptLabsRemoteCDM full support for Widevine/Playready and ChromeCDM
Bug Fixes
- dependencies: Remove unnecessary data extra requirement from langcodes
- main: As requested old devine version removed from banner to avoid any confusion the developer of this software. Original GNU is still applys.
- tags: Fix Matroska tag compliance with official specification
Changes
- drm: Simplify decrypt method by removing unused parameter and streamline logic
1.4.2 - 2025-08-14
Features
- dl: Add audio language option to override language for audio tracks
- vault: Add no_push option to Vault and its subclasses to control key reception
- hls: Enhance segment merging with recursive file search and fallback to binary concatenation
- hls: Enhance segment retrieval by allowing all file types and clean up empty segment directories. Fixes issues with VTT files from HLS not being found correctly due to new HLS "changes"
- config: Add series_year option to control year inclusion in titles and YAML configuration
- tags: Implement session management for API requests with retry logic
- release: Bump version to 1.4.2 and update changelog with new features and fixes
Bug Fixes
- dl: Adjust per_language logic to ensure correct audio track selection and not download all tracks for selected language.
1.4.1 - 2025-08-08
Features
- Implement title caching system to reduce API calls
- dl: Update language option default to 'orig' if no -l is set, avoids hardcoded en
- config: Add options for tagging with group name and IMDB/TMDB details and new API endpoint of simkl if no tmdb api key is added.
- tags: Enhance tag_file function to prioritize provided TMDB ID if --tmdb is used
- changelog: Update changelog with enhanced tagging configuration and improvements
Bug Fixes
- subtitle: Handle ValueError in subtitle filtering for multiple colons in time references fixes issues with subtitles that contain multiple colons
Changes
- Remove Dockerfile and .dockerignore from the repository
- tags: Simplify Simkl search logic and soft-fail when no results found
1.4.0 - 2025-08-05
Features
- update_checker: Enhance update checking logic and cache handling
- dl: Add option to include forced subtitle tracks
- subtitle: Add filtering for unwanted cues in WebVTT subtitles
- tracks: Add support for HLG color transfer characteristics in video arguments
- dl: Enhance language selection for video and audio tracks, including original language support
- dl: Improve DRM track decryption handling
- series: Enhance tree representation with season breakdown
- hybrid: Enhance extraction and conversion processes with dymanic spinning bars to follow the rest of the codebase.
- dl: Fix track selection to support combining -V, -A, -S flags
- titles: Better detection of DV across all codecs in Episode and Movie classes dvhe.05.06 was not being detected correctly.
- dl: Add support for services that do not support subtitle downloads
- playready: Enhance KID extraction from PSSH with base64 support and XML parsing
- Bump version to 1.4.0 and update changelog with new features and fixes
Maintenance
- Update changelog with new features, enhancements, and fixes for version 1.3.0
- Bump unshackle version to 1.3.0 in uv.lock
1.3.0 - 2025-08-03
Features
- Add update check interval configuration and implement rate limiting for update checks
- Implement terminal cleanup on exit and signal handling in ComfyConsole
- Add Unspecified_Image option to Transfer enum in Video class.
- Enhance credential management and CDM configuration in unshackle.yaml
- Update path of update_check.json to .gitignore
- Add scene naming option to configuration and update naming logic in titles
- Add unshackle-example.yaml to replace the unshackle.yaml file, you can now make changes to the unshackle.yaml file and pull from the the repo without issues.
- drm: Add support for mp4decrypt as a decryption method
Bug Fixes
- Correct URL handling and improve key retrieval logic in HTTP vault
- Rename 'servers' to 'server_map' for proxy configuration in unshackle.yaml to resolve nord/surfshark incorrect named config
Changes
- Replace log.exit calls with ValueError exceptions for error handling in Hybrid class
Maintenance
- Bump version to 1.3.0 and update changelog with mp4decrypt support and enhancements
1.2.0 - 2025-07-30
Features
- dl: Enhance hybrid processing to handle HDR10 and DV tracks separately by resolution, Hotfix for -q 2160,1080 both tracks will have Hybrid correctly now.
- hybrid: Display resolution of HDR10 track in hybrid mode console output and clean up unused code
- subtitle: Add information into unshackle.yaml on how to use new Subby subtitle conversion.
- vaults: Enhance vault loading with success status
- attachment: Ensure temporary directory is created for downloads
- tracks: Add duration fix handling for video and hybrid tracks
- hybrid: Add HDR10+ support for conversion to Dolby Vision and enhance metadata extraction
- Update version to 1.1.1 and add update checking functionality
- Bump version to 1.2.0 and update changelog, I'll eventually learn symantic versioning.
Changes
- env: Enhance dependency check with detailed categorization and status summary
Maintenance
- workflow: Remove Docker build and publish workflow, its too messy at the moment doing manual builds for now.
1.1.0 - 2025-07-30
Features
- Update version display in main.py
- proxies: Add SurfsharkVPN support
- binaries: Add support for
MKVToolNixandmkvpropedit - subtitles: Integrate
subbylibrary for enhanced subtitle processing and conversion methods - hybrid: Implement HDR10+DV hybrid processing and injection support
- EXAMPLE: Add support for HDR10 and DV tracks in hybrid mode
Bug Fixes
- cfg: Update services directory handling
- binaries: Improve local binary search functionality
- env: Update binary search functionality to use
binaries.find - env: Update
Shaka-Packagerbinary retrieval method - env: Improve handling of directory paths in
infocommand - install: Improve UV installation process and error handling
- download: Skip Content-Length validation for compressed responses in curl_impersonate and requests. The fix ensures that when Content-Encoding indicates compression, we skip the validation by setting content_length = 0, allowing the downloads to complete successfully.
- dl: Check for dovi_tool availability in hybrid mode
- download: Skip Content-Length validation for compressed responses in curl_impersonate and requests
Maintenance
- Bump version to 1.1.0 in pyproject.toml, init.py, and uv.lock to follow correct Semantic Versioning.
- Add CHANGELOG.md to document notable changes and version history
[1.0.1] - 2025-07-20
Features
- Enhance CONFIG.md with new configuration options for curl_impersonate, filenames, n_m3u8dl_re, and nordvpn
- Update .gitignore and enhance README with planned features
- Add .github/ to .gitignore to exclude GitHub-related files
- Implement VideoCodecChoice for enhanced codec selection
- Add Dockerfile and GitHub Actions workflow for building and publishing Docker image
- Update GitHub Actions workflow for Docker image build and add Docker installation instructions to README
Bug Fixes
- Change default value of set_terminal_bg to False
- Add video_only condition to subtitle track selection logic fixes issues where ccextractor would run even with -V enabled
- Add SubtitleCodecChoice for resolving issues with config clicktype selection, using names like VTT or SRT was not working as expected
- Update shaka packager version and enhance Docker run command with additional volume mounts
Changes
- Streamline README by removing outdated service and legal information and moved it directly to the WIKI
- Reorganize Planned Features section in README for clarity
- Improve track selection logic in dl.py