Skip to content

Releases: unshackle-dl/unshackle

5.3.0

Choose a tag to compare

@imSp4rky imSp4rky released this 01 Jul 02:52
d4a5826

Features

  • --merge-video: merge video language variants into one MKV per (resolution, range, codec) group
  • Native ExpressVPN HTTPS proxy provider (full OAuth PKCE flow, no external tools)
  • Proton VPN proxy provider with country/city/server-number selection, plus ProtonVPN TV-code login
  • Load service plugins from git repos (clone + TTL-pull cache, refresh-services command, dirty-clone guard)
  • Python 3.14 support (supported range widened to 3.11-3.14)
  • Automatic Firefox cookie and localStorage extraction
  • Nested directories in folder templates (/ treated as path separator)
  • air_date for date-based episode naming (daily/sports content named by date instead of SxxExx)
  • Per-vault network timeout for remote API/HTTP vaults
  • Richer API job progress: active-track segment counts, transfer speed, title description/date/cover_url

Bug Fixes

  • drm: don't switch to a mismatched CDM type during licensing; raise a clear error instead
  • config: match per-service cdm keys case-insensitively
  • dl: apply per-service decryption tool override before decrypt
  • hls: stream segment merges to avoid OOM on large (multi-GB) tracks
  • console: pause active live/spinner contexts during terminal input so prompts stay visible
  • output: treat both / and \ as folder separators on any OS
  • env: only resolve Path items in directory lists (git repo specs pass through)

Performance & Changes

  • perf(hls): rename single decrypted range instead of re-copying a full track
  • perf(tracks): skip redundant DV/VUI bitstream passes when VUI already matches range
  • api: collapse route registration, dedup handlers, remove dead serve/remote code paths

Full Changelog: https://github.com/unshackle-dl/unshackle/blob/main/CHANGELOG.md

5.1.0

Choose a tag to compare

@github-actions github-actions released this 03 Jun 17:13
3dcc584

Features

  • ip-info: Consolidate IP lookup, add ipinfo.io token support
  • dl: Cache content keys in-memory to skip duplicate license requests
  • mux: Add muxing.default_language to override default track per type
  • hls: Detect DV-composite tracks and restore signaling post-mux
  • video: Normalize SPS VUI to match manifest-derived range
  • api: Sync /api/download with dl CLI flags and add serve.* defaults
  • vaults: Tolerate vault failures during key get/add
  • tracks: Configurable audio codec priority for tie-breaking
  • dl: Live countdown for --slow delay
  • dl: Gate s_lang/a_lang miss behind --best-available
  • dl: Add real bitrate probing (-rvb/-rab)
  • import: Reconstruct downloads from an --export sidecar
  • naming: Per-service title_map remapping
  • import: Include cover-art attachments in --export/--import

Bug Fixes

  • manifests: Clean stale .!dev resume markers before merge
  • sanitize: Preserve parentheses, strip unidecode bracket artifacts
  • tracks: Honor --worst in hybrid range selection
  • dl: Re-pick DV/HDR10 when HYBRID falls back under best_available
  • proxies/nordvpn: Use *.proxy.nordvpn.com for HTTPS proxy
  • template_formatter: Preserve dash separator around empty conditional
  • dl: Prefer Atmos in -l best/all language selection
  • title: Detect Atmos across all audio tracks for filename template
  • title: Use original-language audio for filename metadata
  • service: Render request_input prompt via rich console
  • titles: Normalize odd resolutions in filename quality token
  • api: Propagate Click default=None through service instantiation
  • api: Load real CDM for service init in list/session/download flows
  • vaults: Enable WAL on SQLite vault to fix concurrent locks
  • hybrid: Correct static L6 source and reset stale L5 active area
  • cli: Report broken command/service loads once and cleanly
  • hls: Resolve per-rendition KID in no-EXT-X-KEY fallback
  • dash: Inherit SegmentTemplate attributes across AdaptationSet/Representation
  • dl: Mux all requested ranges and select highest DV alongside hybrid
  • session: Proxy auth on http targets and string params support

Documentation

  • Update docs to match current codebase
  • output: Document muxing.default_language override
  • Simplify README with demo and requirements

Changes

  • routes, subtitle, track: Improve code readability by formatting list structures
  • hybrid: Extract dovi_tool and run_step helpers
  • ip_info: Simplify lookup and trim cache
  • example: Showcase full unshackle feature surface
  • dl: Declare hybrid_base_only flag and extract standalone mux helper
  • Remove dead aria2c and n_m3u8dl_re downloader code

Maintenance

  • pre-commit: Update hook versions in .pre-commit-config.yaml

4.0.0

Choose a tag to compare

@github-actions github-actions released this 17 Mar 15:12

Features

  • hybrid: Add L5 active area and dynamic L6 luminance metadata
  • debug: Add JSONL debug logging to decryption, muxing, and all downloaders
  • debug: Log binary tool versions at session start
  • dl: Add --repack flag to insert REPACK tag in output filenames
  • core: Add TrackRequest system for multi-codec/multi-range support
  • dl: Add --output option to override download directory
  • tracks: Add edition tags to output filenames
  • templates: [breaking] Add customizable output filename templates
  • templates: Add configurable language tagging rule engine
  • Update unshackle version to 4.0.0
  • dl: Add --animeapi and --enrich options for anime metadata and tagging
  • dl: Add skip messages for --no-audio and --no-chapters flags
  • dl: Extract closed captions from HLS manifests and improve CC extraction
  • dl: Add --worst flag and SHIELD OkHttp fingerprint preset

Bug Fixes

  • n_m3u8dl_re: Pass all content keys for DualKey DRM decryption
  • hybrid: Skip bitrate filter for DV tracks in HYBRID mode
  • attachment: Sanitize filenames with illegal Windows characters
  • hybrid: Accept HDR10+ tracks as valid base layer for HYBRID mode
  • dl: Allow selection of audio tracks for 'all' languages in addition to 'best'
  • dl: Overwrite existing files on re-download and use atomic replace
  • dl: Handle cross-device moves when temp and downloads differ
  • track: Fallback to requests downloader from n_m3u8dl_re for unsupported track types
  • n_m3u8dl_re: Disable segment count validation for duration-based DASH
  • Correct formatting and add missing newlines in selector and EXAMPLE service
  • dependencies: Update pyplayready version to 0.8.3 and adjust dependencies
  • drm: Update PlayReady KID extraction for pyplayready 0.8.3 compatibility
  • api: Resolve Sentinel serialization, missing params, and add search endpoint
  • dash: Pass period_filter to n_m3u8dl_re via filtered MPD file
  • title: Add HDR Vivid Format HDR Tag
  • ism: Prevent duplicate track IDs for audio tracks with same lang/codec/bitrate
  • aria2c: Correct progress bar tracking for HLS downloads
  • dl: Filter CC subtitle languages with --s-lang and extract all manifest CCs

Documentation

  • Update and correct configuration documentation

Changes

  • hybrid: Replace log.info with console status and add JSONL debug logging
  • dl: Remove legacy multi-fetch loop for unmigrated services
  • example: Migrate EXAMPLE service to track_request pattern
  • providers: Extract metadata providers into modular system

3.0.0

Choose a tag to compare

@imSp4rky imSp4rky released this 15 Feb 20:10

[3.0.0] - 2026-02-15

Features

  • Merge upstream dev branch
  • 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

Chore

  • release: [breaking] Bump version to 3.0.0

2.3.0

Choose a tag to compare

@imSp4rky imSp4rky released this 18 Jan 19:04

[2.3.0] - 2026-01-18

Added

  • Unicode Filenames Option: New unicode_filenames config option to preserve native characters
    • Allows disabling ASCII transliteration in filenames
    • Preserves Korean, Japanese, Chinese, and other native language characters
    • Closes #49

Fixed

  • WebVTT Cue Handling: Handle WebVTT cue identifiers and overlapping multi-line cues
    • Added detection and sanitization for cue identifiers (Q0, Q1, etc.) before timing lines
    • Added merging of overlapping cues with different line positions into multi-line subtitles
    • Fixes parsing issues with pysubs2/pycaption on certain WebVTT files
  • Widevine PSSH Filtering: Filter Widevine PSSH by system ID instead of sorting
    • Fixes KeyError crash when unsupported DRM systems are present in init segments
  • TTML Negative Values: Handle negative values in multi-value TTML attributes
    • Fixes pycaption parse errors for attributes like tts:extent="-5% 7.5%"
    • Closes #47
  • ASS Font Names: Strip whitespace from ASS font names
    • Handles ASS subtitle files with spaces after commas in Style definitions
    • Fixes #57
  • Shaka-Packager Error Messages: Include shaka-packager binary path in error messages
  • N_m3u8DL-RE Merge and Decryption: Handle merge and decryption properly
    • Prevents audio corruption ("Box 'OG 2' size is too large") with DASH manifests
    • Fixes duplicate init segment writing when using N_m3u8DL-RE
  • DASH Placeholder KIDs: Handle placeholder KIDs and improve DRM init from segments
    • Detects and replaces placeholder/test KIDs in Widevine PSSH
    • Adds CENC namespace support for kid/default_KID attributes
  • PlayReady PSSH Comparison: Correct PSSH system ID comparison in PlayReady
    • Removes erroneous .bytes accessor from PSSH.SYSTEM_ID comparisons

Full Changelog: https://github.com/unshackle-dl/unshackle/blob/main/CHANGELOG.md

2.2.0

Choose a tag to compare

@imSp4rky imSp4rky released this 15 Jan 03:08

[2.2.0] - 2026-01-15

Added

  • CDM-Aware PlayReady Fallback Detection: Intelligent DRM fallback based on selected CDM
    • Adds PlayReady PSSH/KID extraction from track and init data with CDM-aware ordering
    • When PlayReady CDM is selected, tries PlayReady first then falls back to Widevine
    • When Widevine CDM is selected (default), tries Widevine first then falls back to PlayReady
  • Comprehensive Debug Logging: Enhanced debug logging for downloaders and muxing

Fixed

  • Hybrid DV+HDR10 Filename Detection: Fixed HDR10 detection in hybrid Dolby Vision filenames
  • Vault Adaptive Batch Sizing: Improved bulk key operations with adaptive batch sizing
  • Test Command Improvements: Enhanced test command error detection and sorting

Full Changelog: https://github.com/unshackle-dl/unshackle/blob/main/CHANGELOG.md

2.1.0

Choose a tag to compare

@imSp4rky imSp4rky released this 27 Nov 23:37

Added

  • Per-Track Quality-Based CDM Selection: Dynamic CDM switching during runtime DRM operations
    • Enables quality-based CDM selection during runtime DRM switching
    • Different CDMs can be used for different video quality levels within the same download session
    • Example: Use Widevine L3 for SD/HD and PlayReady SL3 for 4K content
  • Enhanced Track Export: Improved export functionality with additional metadata
    • Added URL field to track export for easier identification
    • Added descriptor information in export output
    • Keys now exported in hex-formatted strings

Changed

  • Dependencies: Upgraded to latest compatible versions
    • Updated various dependencies to their latest versions

Fixed

  • Attachment Preservation: Fixed attachments being dropped during track filtering
    • Attachments (screenshots, fonts) were being lost when track list was rebuilt
    • Fixes image files remaining in temp directory after muxing
  • DASH BaseURL Resolution: Added AdaptationSet-level BaseURL support per DASH spec
    • URL resolution chain now properly follows: MPD → Period → AdaptationSet → Representation
  • WindscribeVPN Region Support: Restricted to supported regions with proper error handling
    • Added error handling for unsupported regions in get_proxy method
    • Prevents cryptic errors when using unsupported region codes
  • Filename Sanitization: Fixed space-hyphen-space handling in filenames
    • Pre-process space-hyphen-space patterns (e.g., "Title - Episode") before other replacements
    • Made space-hyphen-space handling conditional on scene_naming setting
    • Addresses PR #44 by fixing the root cause
  • CICP Enum Values: Corrected values to match ITU-T H.273 specification
    • Added Primaries.Unspecified (value 2) per H.273 spec
    • Renamed Primaries/Transfer value 0 from Unspecified to Reserved for spec accuracy
    • Simplified Transfer value 2 from Unspecified_Image to Unspecified
    • Verified against ITU-T H.273, ISO/IEC 23091-2, H.264/H.265 specs, and FFmpeg enums
  • HLS Byte Range Parsing: Fixed TypeError in range_offset conversion
    • Converted range_offset to int to prevent TypeError in calculate_byte_range
  • pyplayready Compatibility: Pinned to <0.7 to avoid KID extraction bug

Full Changelog: https://github.com/unshackle-dl/unshackle/blob/main/CHANGELOG.md

2.0.0

Choose a tag to compare

@imSp4rky imSp4rky released this 10 Nov 22:37

[2.0.0] - 2025-11-10

Breaking Changes

  • REST API Integration: Core architecture modified to support REST API functionality
    • Changes to internal APIs for download management and tracking
    • Title and track classes updated with API integration points
    • Core component interfaces modified for queue management support
  • Configuration Changes: New required configuration options for API and enhanced features
    • Added simkl_client_id now required for Simkl functionality
    • Service-specific configuration override structure introduced
    • Debug logging configuration options added
  • Forced Subtitles: Behavior change for forced subtitle inclusion
    • Forced subs no longer auto-included, requires explicit --forced-subs flag

Added

  • REST API Server: Complete download management via REST API (early development)
    • Implemented download queue management and worker system
    • Added OpenAPI/Swagger documentation for easy API exploration
    • Included download progress tracking and status endpoints
    • API authentication and comprehensive error handling
    • Updated core components to support API integration
    • Early development work with more changes planned
  • CustomRemoteCDM: Highly configurable custom CDM API support
    • Support for third-party CDM API providers with maximum configurability
    • Full configuration through YAML without code changes
    • Fixes #26 for flexible CDM integration
  • WindscribeVPN Proxy Provider: New VPN provider support
    • Added WindscribeVPN following NordVPN and SurfsharkVPN patterns
    • Fixes GitHub issue #29
  • Latest Episode Download: New --latest-episode CLI option
    • -le, --latest-episode flag to download only the most recent episode
    • Automatically selects the single most recent episode regardless of season
    • Fixes GitHub issue #28
  • Video Track Exclusion: New --no-video CLI option
    • -nv, --no-video flag to skip downloading video tracks
    • Allows downloading only audio, subtitles, attachments, and chapters
    • Useful for audio-only or subtitle extraction workflows
    • Fixes GitHub issue #39
  • Service-Specific Configuration Overrides: Per-service fine-tuned control
    • Support for per-service configuration overrides in YAML
    • Fine-tuned control of downloader and command options per service
    • Fixes GitHub issue #13
  • Comprehensive JSON Debug Logging: Structured logging for troubleshooting
    • Binary toggle via --debug flag or debug: true in config
    • JSON Lines (.jsonl) format for easy parsing and analysis
    • Comprehensive logging of all operations (session info, CLI params, CDM details, auth status, title/track metadata, DRM operations, vault queries)
    • Configurable key logging via debug_keys option with smart redaction
    • Error logging for all critical operations
    • Removed old text logging system
  • curl_cffi Retry Handler: Enhanced session reliability
    • Added automatic retry mechanism to curl_cffi Session
    • Improved download reliability with configurable retries
  • Simkl API Configuration: New API key support
  • Custom Session Fingerprints: Enhanced browser impersonation capabilities
    • Added custom fingerprint and preset support for better service compatibility
    • Configurable fingerprint presets for different device types
    • Improved success rate with services using advanced bot detection
  • TMDB and Simkl Metadata Caching: Enhanced title cache system
    • Added metadata caching to title cache to reduce API calls
    • Caches movie/show metadata alongside title information
    • Improves performance for repeated title lookups and reduces API rate limiting
  • API Enhancements: Improved REST API functionality
    • Added default parameter handling for better request processing
    • Added URL field to services endpoint response for easier service identification
    • Complete API enhancements for production readiness
    • Improved error responses with better detail and debugging information

Changed

  • Binary Search Enhancement: Improved binary discovery
    • Refactored to search for binaries in root of binary folder or subfolder named after the binary
    • Better organization of binary dependencies
  • Type Annotations: Modernized to PEP 604 syntax
    • Updated session.py type annotations to use modern Python syntax
    • Improved code readability and type checking

Fixed

  • Audio Description Track Support: Added option to download audio description tracks
    • Added --audio-description/-ad flag to optionally include descriptive audio tracks
    • Previously, audio description tracks were always filtered out
    • Users can now choose to download AD tracks when needed
    • Fixes GitHub issue #33
  • Config Directory Support: Cross-platform user config directory support
    • Fixed config loading to properly support user config directories across all platforms
    • Fixes GitHub issue #23
  • HYBRID Mode Validation: Pre-download validation for hybrid processing
    • Added validation to check both HDR10 and DV tracks are available before download
    • Prevents wasted downloads when hybrid processing would fail
  • TMDB/Simkl API Keys: Graceful handling of missing API keys
    • Improved error handling when TMDB or Simkl API keys are not configured
    • Better user messaging for API configuration requirements
  • Forced Subtitles Behavior: Correct forced subtitle filtering
    • Fixed forced subtitles being incorrectly included without --forced-subs flag
    • Forced subs now only included when explicitly requested
  • Font Attachment Constructor: Fixed ASS/SSA font attachment
    • Use keyword arguments for Attachment constructor in font attachment
    • Fixes "Invalid URL: No scheme supplied" error
    • Fixes GitHub issue #24
  • Binary Subdirectory Checking: Enhanced binary location discovery
    • Updated binaries.py to check subdirectories in binaries folders named after the binary
    • Improved binary detection and loading
  • HLS Manifest Processing: Minor HLS parser fix
  • lxml and pyplayready: Updated dependencies
    • Updated lxml constraint and pyplayready import path for compatibility
  • DASH Segment Calculation: Corrected segment handling
    • Fixed segment count calculation for DASH manifests with startNumber=0
    • Ensures accurate segment processing for all DASH manifest configurations
    • Prevents off-by-one errors in segment downloads
  • HDR Detection and Naming: Comprehensive HDR format support
    • Improved HDR detection with comprehensive transfer characteristics checks
    • Added hybrid DV+HDR10 support for accurate file naming
    • Better identification of HDR formats across different streaming services
    • More accurate HDR/DV detection in filename generation
  • Subtitle Processing: VTT subtitle handling improvements
    • Resolved SDH (Subtitles for Deaf and Hard of hearing) stripping crash when processing VTT files
    • More robust subtitle processing pipeline with better error handling
    • Fixes crashes when filtering specific VTT subtitle formats
  • DRM Processing: Enhanced encoding handling
    • Added explicit UTF-8 encoding to mp4decrypt subprocess calls
    • Prevents encoding issues on systems with non-UTF-8 default encodings
    • Improves cross-platform compatibility for Windows and some Linux configurations
  • Session Fingerprints: Updated OkHttp presets
    • Updated OkHttp fingerprint presets for better Android TV compatibility
    • Improved success rate with services using fingerprint-based detection

Documentation

  • GitHub Issue Templates: Enhanced issue reporting
    • Improved bug report template with better structure and required fields
    • Enhanced feature request template for clearer specifications
    • Added helpful guidance for contributors to provide complete information

Refactored

  • Import Cleanup: Removed unused imports
    • Removed unused mypy import from binaries.py
    • Fixed import ordering in API download_manager and handlers

Contributors

This release includes contributions from:

  • @Sp5rky - REST API server implementation, dependency updates
  • @stabbedbybrick - curl_cffi retry handler (PR #31)
  • @stabbedbybrick - n_m3u8dl-re refactor (PR #38)
  • @TPD94 - Binary search enhancements, manifest parser fixes (PR #19)
  • @ scene (Andy) - Core features, configuration system, bug fixes

Full Changelog: https://github.com/unshackle-dl/unshackle/blob/main/CHANGELOG.md

1.4.8

Choose a tag to compare

@imSp4rky imSp4rky released this 08 Oct 21:32

[1.4.8] - 2025-10-08

Added

  • Exact Language Matching: New --exact-lang flag for precise language matching
    • Enables strict language code matching without fallbacks
  • No-Mux Flag: New --no-mux flag to skip muxing tracks into container files
    • Useful for keeping individual track files separate
  • DecryptLabs API Integration for HTTP Vault: Enhanced vault support
    • Added DecryptLabs API support to HTTP vault for improved key retrieval
  • AC4 Audio Codec Support: Enhanced audio format handling
    • Added AC4 codec support in Audio class with updated mime/profile handling
  • pysubs2 Subtitle Conversion: Extended subtitle format support
    • Added pysubs2 subtitle conversion with extended format support
    • Configurable conversion method in configuration

Changed

  • Audio Track Sorting: Optimized audio track selection logic
    • Improved audio track sorting by grouping descriptive tracks and sorting by bitrate
    • Better identification of ATMOS and DD+ as highest quality for filenaming
  • pyplayready Update: Upgraded to version 0.6.3
    • Updated import paths to resolve compatibility issues
    • Fixed lxml constraints for better dependency management
  • pysubs2 Conversion Method: Moved from auto to manual configuration
    • pysubs2 no longer auto-selected during testing phase

Fixed

  • Remote CDM: Fixed curl_cffi compatibility
    • Added curl_cffi to instance checks in RemoteCDM
  • Temporary File Handling: Improved encoding handling
    • Specified UTF-8 encoding when opening temporary files

Reverted

  • tinycss SyntaxWarning Suppression: Removed ineffective warning filter
    • Reverted warnings filter that didn't work as expected for suppressing tinycss warnings

Full Changelog: 1.4.7...1.4.8

1.4.7

Choose a tag to compare

@imSp4rky imSp4rky released this 25 Sep 06:34

[1.4.7] - 2025-09-25

Added

  • curl_cffi Session Support: Enhanced anti-bot protection with browser impersonation
    • Added new session utility with curl_cffi support for bypassing anti-bot measures
    • Browser impersonation support for Chrome, Firefox, and Safari user agents
    • Full backward compatibility with requests.Session maintained
    • Suppressed HTTPS proxy warnings for improved user experience
  • Download Retry Functionality: Configurable retry mechanism for failed downloads
    • Added retry count option to download function for improved reliability
  • Subtitle Requirements Options: Enhanced subtitle download control
    • Added options for required subtitles in download command
    • Better control over subtitle track selection and requirements
  • Quality Selection Enhancement: Improved quality selection options
    • Added best available quality option in download command for optimal track selection
  • DecryptLabs API Integration: Enhanced remote CDM configuration
    • Added decrypt_labs_api_key to Config initialization for better API integration

Changed

  • Manifest Parser Updates: Enhanced compatibility across all parsers
    • Updated DASH, HLS, ISM, and M3U8 parsers to accept curl_cffi sessions
    • Improved cookie handling compatibility between requests and curl_cffi
  • Logging Improvements: Reduced log verbosity for better user experience
    • Changed duplicate track log level to debug to reduce console noise
    • Dynamic CDM selection messages moved to debug-only output

Fixed

  • Remote CDM Reuse: Fixed KeyError in dynamic CDM selection
    • Prevents KeyError when reusing remote CDMs in dynamic selection process
    • Creates copy of CDM dictionary before modification to prevent configuration mutation
    • Allows same CDM to be selected multiple times within session without errors

Full Changelog: 1.4.6...1.4.7