Commit Graph

346 Commits

Author SHA1 Message Date
CodeName393
3fa4a81a39 Fix Missing HLS Curl Session Processing 2026-02-05 19:25:51 +09:00
Andy
b16610ac63 fix(progress): bind per-track bars and force terminal completion 2026-02-04 12:55:02 -07:00
Andy
5fae23eb99 feat(proxy): add specific server selection for WindscribeVPN 2026-02-04 19:49:52 +00:00
Andy
6186ff764b fix(progress): force track bar completion on terminal states 2026-02-04 12:31:49 -07:00
Sp5rky
207756c090 Merge pull request #69 from CodeName393/HDR-Vivid-File-Name-Processing
Fixed HDR Vivid showing the file name Range as 'None'
2026-02-04 12:24:24 -07:00
CodeName393
9e194f4868 Fix 2026-02-05 02:51:24 +09:00
CodeName393
5b50a6cd79 HDR Vivid 2026-02-05 02:50:03 +09:00
CodeName393
289c8a3b23 HDR Vivid 2026-02-05 02:49:50 +09:00
Andy
a6494d9b54 fix(dl): prevent attachment downloads during --skip-dl
Set DOWNLOAD_LICENCE_ONLY earlier in the download command so services build tracks in license-only mode.

Update Attachment URL handling to avoid eager downloads in license-only mode while keeping metadata, stable IDs, and safe cleanup behavior.
2026-02-03 21:20:26 -07:00
Andy
c83b7a853e fix(mux): avoid audio codec suffix on split-audio outputs 2026-02-03 17:21:51 -07:00
Andy
b70c350d0b docs(changelog): add 2.4.0 release notes 2026-02-03 13:54:32 -07:00
Andy
cacb695093 fix(subtitles): preserve sidecar originals
Use original subtitle files for sidecar output while keeping muxed conversion behavior.

Fixes #59
2026-02-02 21:43:27 -07:00
Andy
64875e8371 Merge branch 'quiet-sleeping-crane' into dev 2026-02-02 20:51:17 -07:00
Andy
5b9be075de feat(audio): codec lists and split muxing 2026-02-02 20:51:09 -07:00
Andy
1cde8964c1 fix(dash): preserve MPD DRM instead of overwriting from init segment
The init_data DRM extraction was unconditionally overwriting DRM already extracted from MPD ContentProtection elements. This caused failures when init segments contain malformed PSSH data while the MPD has valid PSSH.

Now only falls back to init_data extraction when no DRM was found from the manifest, matching the behavior in version 2.1.0.
2026-02-02 12:02:16 -07:00
Andy
cc55fd8922 fix(dash): add CENC namespace support for PSSH extraction
Some MPD manifests use the cenc: namespace prefix for PSSH elements (e.g., <cenc:pssh>) instead of non-namespaced <pssh>. This caused DRM extraction to fail for services.

- Add {urn:mpeg:cenc:2013}pssh fallback for Widevine PSSH extraction
- Add {urn:mpeg:cenc:2013}pssh fallback for PlayReady PSSH extraction
2026-02-02 10:59:15 -07:00
Andy
84466e12de Merge branch 'feat/monalisa-drm' into dev 2026-02-02 08:25:43 -07:00
Andy
ecedcb93eb fix(drm): hide Shaka Packager message for MonaLisa decryption 2026-02-02 08:24:13 -07:00
Andy
a07191ac4f fix(binaries): search subdirectories for binary files
Allow binaries to be found in subdirectories of the binaries folder.
2026-02-01 14:04:42 -07:00
Andy
6dd1ce6df9 fix(dash): handle high startNumber in SegmentTimeline for DVR manifests
When a DASH manifest has a high startNumber (common in DVR/catch-up content from live streams), the segment range calculation would produce an empty range because end_number was set to len(segment_durations) rather than being offset by startNumber.
2026-02-01 11:12:29 -07:00
Andy
d0d8044fb3 feat(video): detect interlaced scan type from MPD manifests 2026-01-31 23:51:57 -07:00
Andy
d4328f0eb7 fix(binaries): search subdirectories for binary files
Allow binaries to be found in subdirectories of the binaries folder.
2026-01-31 22:06:04 -07:00
Andy
3fcad1aa01 feat(drm): add MonaLisa DRM support to core infrastructure
- Add MonaLisaCDM class wrapping wasmtime for key extraction
- Add MonaLisa DRM class with decrypt_segment() for per-segment decryption
- Display Content ID and keys in download output (matching Widevine/PlayReady)
- Add wasmtime dependency for WASM module execution
2026-01-31 22:05:44 -07:00
Andy
ef338f0124 fix(downloader): correct progress bar tracking for segmented downloads
Use segmented=True when downloading multiple URLs to prevent inner downloads from overriding the total segment count, which caused the progress bar to always appear green (finished state).

This is still WIP so will continue to monitor.
2026-01-31 20:00:30 -07:00
Andy
caf67a6998 feat(env): add ML-Worker binary for DRM licensing 2026-01-31 16:58:10 -07:00
Andy
5cf488cb34 docs: add configuration documentation WIP 2026-01-30 16:34:49 -07:00
Andy
c352884c17 fix(proxy): collect servers from all locations in WindscribeVPN
Previously get_random_server only collected servers from the first location matching a country code. Now it collects from all matching locations before selecting randomly.
2026-01-30 15:52:44 -07:00
Andy
f852a43e7f Merge branch 'main' into dev 2026-01-30 15:44:17 -07:00
Andy
d2d86fa6b7 Merge remote-tracking branch 'origin/main' into dev 2026-01-30 15:39:50 -07:00
Andy
e2b65cef4a fix(proxy): remove regional restrictions from WindscribeVPN
OpenVPN credentials now work reliably on all regions, not just US, AU, and NZ. Remove the supported_regions check that was blocking other country codes.
2026-01-30 22:38:46 +00:00
Andy
385fcb2752 Revert "Merge pull request #64 from Aerglonus/dev"
This reverts commit 55bc2b16ee, reversing
changes made to 8c8c9368ba.
2026-01-30 15:52:06 +00:00
Sp5rky
55bc2b16ee Merge pull request #64 from Aerglonus/dev
fix(proxies): Fixes WindscribeVPN server authentication
2026-01-30 08:19:27 -07:00
Andy
8c8c9368ba fix(manifests): correct DRM type selection for remote PlayReady CDMs
HLS: Filter segment keys by CDM type during aria2c merge phase to prevent incorrect Widevine selection when using PlayReady-only CDMs. The merge phase now uses filter_keys_for_cdm() before get_supported_key(), matching the pattern used in initial licensing.

DASH: Extend PlayReady CDM detection to include remote CDMs with is_playready attribute, not just native PlayReadyCdm instances. This ensures correct DRM extraction order from init_data when using remote PlayReady CDMs.
2026-01-29 10:34:03 -07:00
Aerglonus
a96bc9e4a6 fix(proxies): Fixes WindscribeVPN server authentication 2026-01-27 00:48:03 -06:00
Andy
b72a5dd84a fix(n_m3u8dl_re): remove duplicate --write-meta-json argument causing download failures 2026-01-26 22:02:36 -07:00
Andy
ab762fc81f fix(serve): correct PlayReady RemoteCDM server validation 2026-01-26 22:01:47 -07:00
Andy
cf537891f7 fix(subs): route pycaption-unsupported formats to pysubs2 in auto mode 2026-01-26 10:13:03 -07:00
Andy
4b1d938b49 feat(cdm): add remote PlayReady CDM support via pyplayready RemoteCdm 2026-01-26 01:08:54 -07:00
Andy
98d579dc9b feat(serve): add PlayReady CDM support alongside Widevine 2026-01-26 00:48:20 -07:00
Andy
91a2d76f88 refactor: remove remote-service code until feature is more complete
Temporarily removes client-side remote service discovery and authentication until the implementation is more fleshed out and working.
2026-01-24 16:10:45 -07:00
Andy
4b30090d87 feat(gluetun): improve VPN connection display and Windscribe support 2026-01-24 13:36:04 -07:00
Andy
e77f000494 feat: Gluetun VPN integration and remote service enhancements
Major features:
- Native Docker-based Gluetun VPN proxy provider with multi-provider support
  (NordVPN, Windscribe, Surfshark, ExpressVPN, and 50+ more)
- Stateless remote service architecture with local session caching
- Client-side authentication for remote services (browser, 2FA, OAuth support)

Key changes:
- core/proxies/windscribevpn.py: Enhanced proxy handling
- core/crypto.py: Cryptographic utilities
- docs/VPN_PROXY_SETUP.md: Comprehensive VPN/proxy documentation
2026-01-24 11:23:13 -07:00
Andy
e3767716f3 feat(debug): add download output verification logging
Add comprehensive debug logging to diagnose N_m3u8DL-RE download failures where the process exits successfully but produces no output files.
2026-01-24 10:36:43 -07:00
Andy
6f5f25fa9b refactor(remote_auth): remove unused requests.Session
The session was created with headers but never used. The class saves sessions locally via the cache rather than uploading to a remote server.
2026-01-23 17:20:39 -07:00
Andy
0c7d20c943 fix(api): validate Bearer prefix before extracting API key
The replace("Bearer ", "") approach returned the full Authorization header value when the prefix was not present, incorrectly treating other auth schemes (e.g., "Basic xyz") as API keys.
2026-01-23 17:20:22 -07:00
Andy
6b90a19632 perf(aria2c): improve download performance with singleton manager
- Use singleton _Aria2Manager to reuse one aria2c process via RPC
- Add downloads via aria2.addUri instead of stdin input file
- Track per-GID byte-level progress (completedLength/totalLength)
- Add thread-safe operations with threading.Lock
- Enable graceful cancellation by removing individual downloads via RPC
2026-01-23 17:14:12 -07:00
Andy
b8e2f3da3f feat(titles): use track source attribute for service name in filenames
Allow services to set a custom `source` attribute on tracks, which will be used in the filename instead of the service class name.
2026-01-22 20:21:00 -07:00
Andy
af49560345 Merge branch 'main' into dev 2026-01-22 14:47:25 -07:00
Andy
f0bae6d6b4 fix(cdm): correct error key casing in Decrypt Labs API response parsing
The API returns error details with capital "Error" key, but the code was checking for lowercase "error", causing error details to be ignored.
2026-01-22 14:13:27 -07:00
Sp5rky
acbb92bb82 Merge pull request #46 from MasterOfKay/main
Merging dash-naming feature - adds optional dash separator format for filenames
2026-01-22 13:58:24 -07:00