try change dowloader in unshackle.yaml
[Attachment 92112 - Click to enlarge] or requests
+ Reply to Thread
Results 901 to 930 of 985
-
-
I have been testing out TVNZ service quite a bit today and I was able to get the first season of LOR: Rings of Power and all is fine except episodes 8 which to me has the audio with the background noise being very clearly heard but when it comes to the characters in the episode speaking that isn't audible. I checked the first seven episode of season one and that problem isn't there. Maybe I will try to download it again. How can I select just the stereo sound option if the default option doesn't work correctly? Thank you in advance. Maybe since the video is fine I could demux and replace the audio with stereo sound.
uv run unshackle dl --list -w S1E8 TVNZ https://www.tvnz.co.nz/tvseries/the-lord-of-the-rings-the-rings-of-power
uv run unshackle dl -q 720 -w S01E08 TVNZ https://www.tvnz.co.nz/tvseries/the-lord-of-the-rings-the-rings-of-power -
Hi everyone, has anyone been able to download with SPOT? In my case, I get the following error:
I:\unshackle-4.0.0>uv run unshackle dl SPOT "https://open.spotify.com/track/1WBOafEFY6UETRWMA1CyqC?si=d0ee7c6fd9084a2a"
▄ ▄▌ ▐ ▄ .▄▄ · ▄ .▄ ▄▄▄· ▄▄· ▄ ▄ ▄▄▌ ▄▄▄ .
█▪██▌█▌▐█▐█ ▀. ██▪▐█▐█ ▀█ ▐█ ▌▪█▌▄▌▪██ ▀▄.▀·
█▌▐█▌▐█▐▐▌▄▀▀▀█▄██▀▐█▄█▀▀█ ██ ▄▄▐▀▀▄·██▪ ▐▀▀▪▄
▐█▄█▌██▐█▌▐█▄▪▐███▌▐▀▐█ ▪▐▌▐███▌▐█.█▌▐█▌▐▌▐█▄▄▌
▀▀▀ ▀▀ █▪ ▀▀▀▀ ▀▀▀ · ▀ ▀ ·▀▀▀ ·▀ ▀.▀▀▀ ▀▀▀
v 4.0.0 - © 2025-2026 - github.com/unshackle-dl/unshackle
Service Config loaded
Loaded 1/1 Vaults
Loaded Widevine CDM: 8159 (L3)
────────────────────────────── Service: SPOT ───────────────────────────────
Service has no Geofence
╭───────────────────── Traceback (most recent call last) ──────────────────────╮
│ in _run_module_as_main:198 │
│ in _run_code:88 │
│ │
│ in <module>:10 │
│ │
│ I:\unshackle-4.0.0\.venv\Lib\site-packages\click\core.py:1485 in __call__ │
│ │
│ I:\unshackle-4.0.0\.venv\Lib\site-packages\click\core.py:1406 in main │
│ │
│ I:\unshackle-4.0.0\.venv\Lib\site-packages\click\core.py:1873 in invoke │
│ │
│ I:\unshackle-4.0.0\.venv\Lib\site-packages\click\core.py:1873 in invoke │
│ │
│ I:\unshackle-4.0.0\.venv\Lib\site-packages\click\core.py:1842 in │
│ _process_result │
│ │
│ I:\unshackle-4.0.0\.venv\Lib\site-packages\click\core.py:824 in invoke │
│ │
│ I:\unshackle-4.0.0\unshackle\commands\dl.py:1052 in result │
│ │
│ 1049 │ │ │ try: │
│ 1050 │ │ │ │ cookies = self.get_cookie_jar(self.service, self.prof │
│ 1051 │ │ │ │ credential = self.get_credentials(self.service, self. │
│ ❱ 1052 │ │ │ │ service.authenticate(cookies, credential) │
│ 1053 │ │ │ │ if cookies or credential: │
│ 1054 │ │ │ │ │ self.log.info("Authenticated with Service") │
│ 1055 │ │ │ │ │ if self.debug_logger: │
│ │
│ I:\unshackle-4.0.0\unshackle\services\SPOT\__init__.py:71 in authenticate │
│ │
│ 68 │ │ ) │
│ 69 │ │ self.session.cookies.update(cookies) │
│ 70 │ │ home_page = self.session.get("https://open.spotify.com/").cont │
│ ❱ 71 │ │ token = re.search(r'accessToken":"(.*?)"', home_page).group(1) │
│ 72 │ │ self.is_premium = re.search(r'isPremium".*?),', home_page).g │
│ 73 │ │ self.session.headers.update( │
│ 74 │ │ │ { │
│ │
│ C:\Users\Edgar │
│ Lσpez\AppData\Roaming\uv\python\cpython-3.12-windows-x86_64-none\Lib\re\__in │
│ it__.py:177 in search │
│ │
│ 174 def search(pattern, string, flags=0): │
│ 175 │ """Scan through string looking for a match to the pattern, returni │
│ 176 │ a Match object, or None if no match was found.""" │
│ ❱ 177 │ return _compile(pattern, flags).search(string) │
│ 178 │
│ 179 def sub(pattern, repl, string, count=0, flags=0): │
│ 180 │ """Return the string obtained by replacing the leftmost │
╰──────────────────────────────────────────── ───── ─────────────────────────────╯
TypeError: cannot use a string pattern on a bytes-like object
If anyone could help me with this error, I would be very grateful. A hug from Mιxico. -
That isn't one of the free services that we discuss. Perhaps someone will send you a personal message to help with this issue. As for myself I have no idea how to address this issue but I am sure someone can help you if they chose to.
-
-
AttributeError: 'NoneType' object has no attribute 'split'Code:
Service Config loaded Loaded 1/1 Vaults Loaded Widevine CDM: 4445 (L3) Loaded Basic: 4 Countries (4 Servers) ─────────────────────────── Service: PARAMOUNTP ──────────────────────────── Service is Geoblocked in your region, getting a Proxy to US Got Proxy from Basic /Users/iam/Downloads/unshackle/.venv/bin/unshackle:10 in <module> │ │ │ │ 7 │ │ sys.argv[0] = sys.argv[0][:-11] │ │ 8 │ elif sys.argv[0].endswith(".exe"): │ │ 9 │ │ sys.argv[0] = sys.argv[0][:-4] │ │ ❱ 10 │ sys.exit(main()) │ │ 11 │ │ │ │ /Users/iam/Downloads/unshackle/.venv/lib/python3.12/site-packages/click/c │ │ ore.py:1485 in __call__ │ │ │ │ /Users/iam/Downloads/unshackle/.venv/lib/python3.12/site-packages/click/c │ │ ore.py:1406 in main │ │ │ │ /Users/iam/Downloads/unshackle/.venv/lib/python3.12/site-packages/click/c │ │ ore.py:1873 in invoke │ │ │ │ /Users/iam/Downloads/unshackle/.venv/lib/python3.12/site-packages/click/c │ │ ore.py:1873 in invoke │ │ │ │ /Users/iam/Downloads/unshackle/.venv/lib/python3.12/site-packages/click/c │ │ ore.py:1842 in _process_result │ │ │ │ /Users/iam/Downloads/unshackle/.venv/lib/python3.12/site-packages/click/c │ │ ore.py:824 in invoke │ │ │ │ /Users/iam/Downloads/unshackle/unshackle/commands/dl.py:1064 in result │ │ │ │ 1061 │ │ │ try: │ │ 1062 │ │ │ │ cookies = self.get_cookie_jar(self.service, self.prof │ │ 1063 │ │ │ │ credential = self.get_credentials(self.service, self. │ │ ❱ 1064 │ │ │ │ service.authenticate(cookies, credential) │ │ 1065 │ │ │ │ if cookies or credential: │ │ 1066 │ │ │ │ │ self.log.info("Authenticated with Service") │ │ 1067 │ │ │ │ │ if self.debug_logger: │ │ │ │ /Users/iam/Downloads/unshackle/unshackle/services/PARAMOUNTP/__init__.py: │ │ 87 in authenticate │ │ │ │ 84 │ │ │ raise EnvironmentError("Service requires Cookies for Authe │ │ 85 │ │ │ │ 86 │ │ jwt_token = next((cookie.value for cookie in cookies if cookie │ │ ❱ 87 │ │ payload = json.loads(base64.urlsafe_b64decode(jwt_token.split( │ │ 88 │ │ profile_id = payload.get("profileId", None) │ │ 89 │ │ self.session.headers.update({"user-agent": self.config["client │ │ 90Last edited by lovedownload; 27th Apr 2026 at 06:37.
-
thanks for the info iamghost I tried this but I still get the error, it's weird but it was working okay before I reinstalled my pc, I'm using stabbys latest services, I have Shaka Packager v2.6.1, N_m3u8DL-RE_v0.5.1-beta_win-x64_20251029, CCExtractor: v0.93, MKVToolNix latest version, FFmpeg latest version and the enviroment paths set correctly.
I can download series stuff fine off HMAX but it's sport I'm getting this error
Code:(unshackle) C:\Users\Test\unshackle\.venv\Scripts>unshackle dl HMAX https://play.hbomax.com/video/watch-sport/a957424c-b2fd-5a61-b3a9-ec86d857c29b/3da8699a-3e4e-483a-8a60-477f11c2f5b2 ▄ ▄▌ ▐ ▄ .▄▄ · ▄ .▄ ▄▄▄· ▄▄· ▄ ▄ ▄▄▌ ▄▄▄ . █▪██▌█▌▐█▐█ ▀. ██▪▐█▐█ ▀█ ▐█ ▌▪█▌▄▌▪██ ▀▄.▀· █▌▐█▌▐█▐▐▌▄▀▀▀█▄██▀▐█▄█▀▀█ ██ ▄▄▐▀▀▄·██▪ ▐▀▀▪▄ ▐█▄█▌██▐█▌▐█▄▪▐███▌▐▀▐█ ▪▐▌▐███▌▐█.█▌▐█▌▐▌▐█▄▄▌ ▀▀▀ ▀▀ █▪ ▀▀▀▀ ▀▀▀ · ▀ ▀ ·▀▀▀ ·▀ ▀.▀▀▀ ▀▀▀ v 4.0.0 - © 2025-2026 - github.com/unshackle-dl/unshackle Service Config loaded Loaded 1/1 Vaults Loaded PlayReady CDM: Qingdao Haier Optronics Co.,Ltd Haier TV Haier TV (L3000) ────────────────────────────── Service: HMAX ─────────────────────────────── Service has no Geofence + Using cached Tokens... Authenticated with Service ───────────────── Series: John Higgins - Ronnie O'Sullivan ───────────────── 1 seasons, S0(1) ─── John Higgins - Ronnie O'Sullivan S00E00 World Championship | Round 2 ─── Cached 1 Key to 1/1 Vaults Cached 1 Key to 1/1 Vaults 1 Video └── [H.264, SDR] | en | 1920x1080 @ 9429 kb/s, 50.000 FPS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 04:15 Downloaded 1 Audio └── [DD+] | en | 6.0 | 275 kb/s ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 00:30 Downloaded PlayReady(AAAC2HBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAri4AgAAAQABAK4C...) ├── 0100f3972195318ee65b0024b231fe36:a4294f2c42760780bfc7abdfc096d77f* └── 0105fe2e32e8889c5be3f7ea6a5d140f:a383e110d3b7142d8163778241ed94df* Track downloads finished in 4m15s ╭───────────────────── Traceback (most recent call last) ──────────────────────╮ │ in _run_module_as_main:198 │ │ in _run_code:88 │ │ │ │ in <module>:10 │ │ │ │ C:\Users\Test\unshackle\.venv\Lib\site-packages\click\core.py:1485 in │ │ __call__ │ │ │ │ C:\Users\Test\unshackle\.venv\Lib\site-packages\click\core.py:1406 in main │ │ │ │ C:\Users\Test\unshackle\.venv\Lib\site-packages\click\core.py:1873 in invoke │ │ │ │ C:\Users\Test\unshackle\.venv\Lib\site-packages\click\core.py:1873 in invoke │ │ │ │ C:\Users\Test\unshackle\.venv\Lib\site-packages\click\core.py:1842 in │ │ _process_result │ │ │ │ C:\Users\Test\unshackle\.venv\Lib\site-packages\click\core.py:824 in invoke │ │ │ │ C:\Users\Test\unshackle\unshackle\commands\dl.py:2145 in result │ │ │ │ 2142 │ │ │ │ │ │ │ │ │ │ else title.language or video_ │ │ 2143 │ │ │ │ │ │ │ │ │ ) │ │ 2144 │ │ │ │ │ │ │ │ │ track_id = f"ccextractor-{video_t │ │ ❱ 2145 │ │ │ │ │ │ │ │ │ cc = video_track.ccextractor( │ │ 2146 │ │ │ │ │ │ │ │ │ │ track_id=track_id, │ │ 2147 │ │ │ │ │ │ │ │ │ │ out_path=config.directories.t │ │ 2148 │ │ │ │ │ │ │ │ │ │ / config.filenames.subtitle.f │ │ │ │ C:\Users\Test\unshackle\unshackle\core\tracks\video.py:369 in ccextractor │ │ │ │ 366 │ │ │ │ 367 │ │ # Try on the original file first (preserves container-level CC │ │ 368 │ │ # then fall back to repacked file (ccextractor can fail on som │ │ ❱ 369 │ │ if not _run_ccextractor(): │ │ 370 │ │ │ self.repackage() │ │ 371 │ │ │ _run_ccextractor() │ │ 372 │ │ │ │ C:\Users\Test\unshackle\unshackle\core\tracks\video.py:355 in │ │ _run_ccextractor │ │ │ │ 352 │ │ │ │ 353 │ │ def _run_ccextractor() -> bool: │ │ 354 │ │ │ try: │ │ ❱ 355 │ │ │ │ subprocess.run( │ │ 356 │ │ │ │ │ [binaries.CCExtractor, "-trim", "-nobom", "-noru", │ │ 357 │ │ │ │ │ check=True, │ │ 358 │ │ │ │ │ stdout=subprocess.PIPE, │ │ │ │ C:\Users\Test\AppData\Roaming\uv\python\cpython-3.12-windows-x86_64-none\Lib\ │ │ subprocess.py:571 in run │ │ │ │ 568 │ │ │ raise │ │ 569 │ │ retcode = process.poll() │ │ 570 │ │ if check and retcode: │ │ ❱ 571 │ │ │ raise CalledProcessError(retcode, process.args, │ │ 572 │ │ │ │ │ │ │ │ │ output=stdout, stderr=stderr) │ │ 573 │ return CompletedProcess(process.args, retcode, stdout, stderr) │ │ 574 │ ╰──────────────────────────────────────────────────────────────────────────────╯ CalledProcessError: Command '[WindowsPath('C:/WINDOWS/system32/ccextractor.EXE'), '-trim', '-nobom', '-noru', '-ru1', '-o', WindowsPath('C:/Users/Test/unshackle/Temp/Subtitle_ccextractor-68997335-0_en.srt' ), WindowsPath('C:/Users/Test/unshackle/Temp/Video_68997335.mp4')]' returned non-zero exit status 1000. (unshackle) C:\Users\Test\unshackle\.venv\Scripts> -
all I can see, problem is ccextactor, It need replace
https://files.videohelp.com/u/301156/CCExtractor.zip
you can see other post have problem with ccextractor
https://forum.videohelp.com/threads/418705-Unshackle-Modular-Movie-TV-and-Music-Archiv...26#post2793358Last edited by iamghost; 27th Apr 2026 at 07:28.
-
Thanks for the help iamghost, I replaced the CCExtractor with your zip and still got the same error, I just removed all my binaries and replaced them with your binaries zip and now when I try to download I get this error.
Code:(unshackle) C:\Users\Kev\unshackle\.venv\Scripts>unshackle dl HMAX https://play.hbomax.com/video/watch-sport/a957424c-b2fd-5a61-b3a9-ec86d857c29b/3da8699a-3e4e-483a-8a60-477f11c2f5b2 ▄ ▄▌ ▐ ▄ .▄▄ · ▄ .▄ ▄▄▄· ▄▄· ▄ ▄ ▄▄▌ ▄▄▄ . █▪██▌█▌▐█▐█ ▀. ██▪▐█▐█ ▀█ ▐█ ▌▪█▌▄▌▪██ ▀▄.▀· █▌▐█▌▐█▐▐▌▄▀▀▀█▄██▀▐█▄█▀▀█ ██ ▄▄▐▀▀▄·██▪ ▐▀▀▪▄ ▐█▄█▌██▐█▌▐█▄▪▐███▌▐▀▐█ ▪▐▌▐███▌▐█.█▌▐█▌▐▌▐█▄▄▌ ▀▀▀ ▀▀ █▪ ▀▀▀▀ ▀▀▀ · ▀ ▀ ·▀▀▀ ·▀ ▀.▀▀▀ ▀▀▀ v 4.0.0 - © 2025-2026 - github.com/unshackle-dl/unshackle Service Config loaded Loaded 1/1 Vaults Loaded PlayReady CDM: Qingdao Haier Optronics Co.,Ltd Haier TV Haier TV (L3000) ────────────────────────────── Service: HMAX ─────────────────────────────── Service has no Geofence + Using cached Tokens... Authenticated with Service ───────────────── Series: John Higgins - Ronnie O'Sullivan ───────────────── 1 seasons, S0(1) ─── John Higgins - Ronnie O'Sullivan S00E00 World Championship | Round 2 ─── 1 Video └── [H.264, SDR] | en | 1920x1080 @ 9429 kb/s, 50.000 FPS ⠧ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ --:-- Parsing streams... 1 Audio └── [DD+] | en | 6.0 | 275 kb/s ⠧ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ --:-- Parsing streams... PlayReady(AAAC2HBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAri4AgAAAQABAK4C...) ├── 0100f3972195318ee65b0024b231fe36:a4294f2c42760780bfc7abdfc096d77f* │ from Local SQLite └── 0105fe2e32e8889c5be3f7ea6a5d140f:a383e110d3b7142d8163778241ed94df* from Local SQLite ❌ Download Failed... Output directory does not exist: C:\Users\Kev\unshackle\Temp\Video_68997335.mp4_segments An unexpected error occurred in one of the download workers. See the error trace above for more information. -
well I dont have that service, it not from here.
go back and add -ns in cmd it will download without subtitles -
Thanks for the help iamghost, I have just got it working, I used your CCExtractor.zip what version of CCExtractor is that? but at the moment I just downloaded the video with no subs as you said, I never use subs so that's fine. The HMAX service is stabbys latest DSCP but modified as it says in the service to make it work for HMAX.
I really appreciate the Help iamghost thank you. -
Code:
CCExtractor detailed version info Version: 0.94 Git commit: 97b381a2b0bee35d3b22411772329eb540ee511b Compilation date: 2021-12-15 CEA-708 decoder: Rust File SHA256: ff622c2997d8bd515e69a713da7b643cd2bd7fe5b8672153d9619a38026850d7 Libraries used by CCExtractor Tesseract Version: 4.00.00alpha Leptonica Version: leptonica-1.74 (Dec 31 2016, 10:56:23) [MSC v.1900 LIB Release x86] libGPAC Version: 1.0.1 zlib: 1.2.11 utf8proc Version: 2.4.0 protobuf-c Version: 1.3.1 libpng Version: 1.6.37 FreeType libhash nuklear libzvbi -
I updated my TwinVine yesterday and now I can't abort downloads by pressing CTRL+C in Windows.
-
Noob Starter Pack. Just download any Widevine media! Over 25,000 downloads for V6!.
https://files.videohelp.com/u/301890/hellyes6.zip -
PS C:\unshackle> uv run unshackle dl aubc https://iview.abc.net.au/video/LE2527H001S00
ERROR: No 'output_template' configured in your unshackle.yaml.
Please add an 'output_template' section with movies, series, and songs templates.
See unshackle-example.yaml for examples.
PS C:\unshackle> uv run unshackle dl aubc https://iview.abc.net.au/show/gruen
ERROR: No 'output_template' configured in your unshackle.yaml.
Please add an 'output_template' section with movies, series, and songs templates.
See unshackle-example.yaml for examples.
i just updated to 4.0 and am now getting this. I must be blind, i cant find the example.
Cheers -
Noob Starter Pack. Just download any Widevine media! Over 25,000 downloads for V6!.
https://files.videohelp.com/u/301890/hellyes6.zip -
Crave and Kanopy services have been added.
Make sure to only use Crave with a free account
-
Since I updated it, I can't download anything:
EDIT: I "fixed" it by deleting KNPY folder.Code:Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "D:\Programs\TwinVine\.venv\Scripts\envied.exe\__main__.py", line 4, in <module> main() ^^^^^^^^^^^ File "D:\Programs\TwinVine\packages\envied\src\envied\core\__main__.py", line 14, in <module> from envied.core.commands import Commands File "D:\Programs\TwinVine\packages\envied\src\envied\core\commands.py", line 12, in <module> _MODULES = {path.stem: getattr(import_module_by_path(path), path.stem) for path in _COMMANDS} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programs\TwinVine\packages\envied\src\envied\core\commands.py", line 12, in <dictcomp> _MODULES = {path.stem: getattr(import_module_by_path(path), path.stem) for path in _COMMANDS} ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programs\TwinVine\packages\envied\src\envied\core\utilities.py", line 113, in import_module_by_path spec.loader.exec_module(module) File "D:\Programs\TwinVine\packages\envied\src\envied\commands\dl.py", line 47, in <module> from envied.core.cdm import CustomRemoteCDM, DecryptLabsRemoteCDM File "<frozen importlib._bootstrap>", line 1229, in _handle_fromlist File "D:\Programs\TwinVine\packages\envied\src\envied\core\cdm\__init__.py", line 32, in __getattr__ from .custom_remote_cdm import CustomRemoteCDM File "D:\Programs\TwinVine\packages\envied\src\envied\core\cdm\custom_remote_cdm.py", line 14, in <module> from envied.core.vaults import Vaults File "D:\Programs\TwinVine\packages\envied\src\envied\core\vaults.py", line 12, in <module> _MODULES = {path.stem: getattr(import_module_by_path(path), path.stem) for path in _VAULTS} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programs\TwinVine\packages\envied\src\envied\core\vaults.py", line 12, in <dictcomp> _MODULES = {path.stem: getattr(import_module_by_path(path), path.stem) for path in _VAULTS} ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programs\TwinVine\packages\envied\src\envied\core\utilities.py", line 113, in import_module_by_path spec.loader.exec_module(module) File "D:\Programs\TwinVine\vaults\MySQL.py", line 8, in <module> from envied.core.services import Services File "D:\Programs\TwinVine\packages\envied\src\envied\core\services.py", line 18, in <module> _MODULES = {path.parent.stem: getattr(import_module_by_path(path), path.parent.stem) for path in _SERVICES} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programs\TwinVine\packages\envied\src\envied\core\services.py", line 18, in <dictcomp> _MODULES = {path.parent.stem: getattr(import_module_by_path(path), path.parent.stem) for path in _SERVICES} ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programs\TwinVine\packages\envied\src\envied\core\utilities.py", line 113, in import_module_by_path spec.loader.exec_module(module) File "D:\Programs\TwinVine\packages\envied\src\envied\services\KNPY\__init__.py", line 140 id_=f"/video/{result.get("videoId")}", ^^^^^^^ SyntaxError: f-string: unmatched '('Last edited by kalehrl; 1st May 2026 at 06:47.
-
-
You're very welcome! I was pretty surprised by how not-terrible Kanopy was. Both in terms of selection and quality, it's better than some premium services.
-
I can get CRAV to successful load a list of titles and also to show quality available for a title but beyond that is is failing for me.
Code:C:\Unshackle>uv run unshackle dl -q 540 -w S01E01 CRAV https://www.crave.ca/en/series/reba-56028 ▄ ▄▌ ▐ ▄ .▄▄ · ▄ .▄ ▄▄▄· ▄▄· ▄ ▄ ▄▄▌ ▄▄▄ . █▪██▌█▌▐█▐█ ▀. ██▪▐█▐█ ▀█ ▐█ ▌▪█▌▄▌▪██ ▀▄.▀· █▌▐█▌▐█▐▐▌▄▀▀▀█▄██▀▐█▄█▀▀█ ██ ▄▄▐▀▀▄·██▪ ▐▀▀▪▄ ▐█▄█▌██▐█▌▐█▄▪▐███▌▐▀▐█ ▪▐▌▐███▌▐█.█▌▐█▌▐▌▐█▄▄▌ ▀▀▀ ▀▀ █▪ ▀▀▀▀ ▀▀▀ · ▀ ▀ ·▀▀▀ ·▀ ▀.▀▀▀ ▀▀▀ v 4.0.0 - © 2025-2026 - github.com/unshackle-dl/unshackle Service Config loaded Loaded 1/1 Vaults Loaded Widevine CDM: 4464 (L3) ────────────────────────────── Service: CRAV ─────────────────────────────── Service is not Geoblocked in your region + Using cached tokens... + Refreshing profile tokens... Authenticated with Service ─────────────────────────── Series: Reba (2001) ──────────────────────────── 6 seasons, S1(22), S2(24), S3(22), S4(22), S5(22), S6(13) ────────────────────────── Reba 2001 S01E01 Pilot ────────────────────────── 1 Video └── [H.264, SDR] | en | 960x540 @ 1800 kb/s, 29.970 FPS ⠹ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ --:-- FAILED 1 Audio └── [DD] | en | 6.0 | 384 kb/s | Original ⠹ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ --:-- FAILED 3 Subtitles ├── [WVTT] | en | Original │ ⠙ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ --:-- FAILED ├── [WVTT] | en | Original (SDH) │ ⠙ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ --:-- FAILED └── [VTT] | en | Original (SDH) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 00:10 SKIPPED 3 Chapters ├── 00:00:00.000 ├── 00:03:23.000 | Intro └── 00:03:34.000 Widevine(AAAAU3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADMIARIQahFGRyjXr...) └── An exception occurred in the Service's license function: 'CRAV' object has no attribute 'license_url' Widevine(AAAAU3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADMIARIQS2IlOdCck...) └── An exception occurred in the Service's license function: 'CRAV' object has no attribute 'license_url' ╭───────────────────── Traceback (most recent call last) ──────────────────────╮ │ C:\Unshackle\unshackle\commands\dl.py:1979 in result │ │ │ │ 1976 │ │ │ │ │ │ │ │ for i, track in enumerate(title.track │ │ 1977 │ │ │ │ │ │ │ ) │ │ 1978 │ │ │ │ │ │ ): │ │ ❱ 1979 │ │ │ │ │ │ │ download.result() │ │ 1980 │ │ │ │ │ 1981 │ │ │ except KeyboardInterrupt: │ │ 1982 │ │ │ │ console.print(Padding(":x: Download Cancelled...", (0 │ │ │ │ C:\Users\sheld\AppData\Local\Programs\Python\Python312\Lib\concurrent\future │ │ s\_base.py:449 in result │ │ │ │ 446 │ │ │ │ if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: │ │ 447 │ │ │ │ │ raise CancelledError() │ │ 448 │ │ │ │ elif self._state == FINISHED: │ │ ❱ 449 │ │ │ │ │ return self.__get_result() │ │ 450 │ │ │ │ │ │ 451 │ │ │ │ self._condition.wait(timeout) │ │ 452 │ │ │ │ C:\Users\sheld\AppData\Local\Programs\Python\Python312\Lib\concurrent\future │ │ s\_base.py:401 in __get_result │ │ │ │ 398 │ def __get_result(self): │ │ 399 │ │ if self._exception: │ │ 400 │ │ │ try: │ │ ❱ 401 │ │ │ │ raise self._exception │ │ 402 │ │ │ finally: │ │ 403 │ │ │ │ # Break a reference cycle with the exception in self._ │ │ 404 │ │ │ │ self = None │ │ │ │ C:\Users\sheld\AppData\Local\Programs\Python\Python312\Lib\concurrent\future │ │ s\thread.py:58 in run │ │ │ │ 55 │ │ │ return │ │ 56 │ │ │ │ 57 │ │ try: │ │ ❱ 58 │ │ │ result = self.fn(*self.args, **self.kwargs) │ │ 59 │ │ except BaseException as exc: │ │ 60 │ │ │ self.future.set_exception(exc) │ │ 61 │ │ │ # Break a reference cycle with the exception 'exc' │ │ │ │ C:\Unshackle\unshackle\core\tracks\track.py:260 in download │ │ │ │ 257 │ │ │ │ │ cdm=cdm, │ │ 258 │ │ │ │ ) │ │ 259 │ │ │ elif self.descriptor == self.Descriptor.DASH: │ │ ❱ 260 │ │ │ │ DASH.download_track( │ │ 261 │ │ │ │ │ track=self, │ │ 262 │ │ │ │ │ save_path=save_path, │ │ 263 │ │ │ │ │ save_dir=save_dir, │ │ │ │ C:\Unshackle\unshackle\core\manifests\dash.py:517 in download_track │ │ │ │ 514 │ │ │ │ │ if not license_widevine: │ │ 515 │ │ │ │ │ │ raise ValueError("license_widevine func must b │ │ 516 │ │ │ │ │ progress(downloaded="LICENSING") │ │ ❱ 517 │ │ │ │ │ license_widevine(drm, track_kid=track_kid) │ │ 518 │ │ │ │ │ progress(downloaded="[yellow]LICENSED") │ │ 519 │ │ │ │ except Exception: # noqa │ │ 520 │ │ │ │ │ DOWNLOAD_CANCELLED.set() # skip pending track dow │ │ │ │ C:\Unshackle\unshackle\commands\dl.py:2668 in prepare_drm │ │ │ │ 2665 │ │ │ │ │ │ │ │ service=self.service, │ │ 2666 │ │ │ │ │ │ │ │ context={"track": str(track), "except │ │ 2667 │ │ │ │ │ │ │ ) │ │ ❱ 2668 │ │ │ │ │ │ raise e │ │ 2669 │ │ │ │ │ │ │ 2670 │ │ │ │ │ if self.debug_logger: │ │ 2671 │ │ │ │ │ │ self.debug_logger.log( │ │ │ │ C:\Unshackle\unshackle\commands\dl.py:2652 in prepare_drm │ │ │ │ 2649 │ │ │ │ │ │ if self.service == "NF": │ │ 2650 │ │ │ │ │ │ │ drm.get_NF_content_keys(cdm=self.cdm, lic │ │ 2651 │ │ │ │ │ │ else: │ │ ❱ 2652 │ │ │ │ │ │ │ drm.get_content_keys(cdm=self.cdm, licenc │ │ 2653 │ │ │ │ │ except Exception as e: │ │ 2654 │ │ │ │ │ │ if isinstance(e, (Widevine.Exceptions.EmptyLi │ │ 2655 │ │ │ │ │ │ │ msg = str(e) │ │ │ │ C:\Unshackle\unshackle\core\drm\widevine.py:180 in get_content_keys │ │ │ │ 177 │ │ │ session_id = cdm.open() │ │ 178 │ │ │ │ │ 179 │ │ │ try: │ │ ❱ 180 │ │ │ │ cert = certificate(challenge=cdm.service_certificate_c │ │ 181 │ │ │ │ if cert and hasattr(cdm, "set_service_certificate"): │ │ 182 │ │ │ │ │ cdm.set_service_certificate(session_id, cert) │ │ 183 │ │ │ │ C:\Unshackle\unshackle\services\CRAV\__init__.py:279 in │ │ get_widevine_service_certificate │ │ │ │ 276 │ │ │ 277 │ def get_widevine_service_certificate(self, challenge: bytes, **_: │ │ 278 │ │ if self.drm_system == "widevine": │ │ ❱ 279 │ │ │ return self.session.post(url=self.license_url, data=challe │ │ 280 │ │ │ │ 281 │ │ return None │ │ 282 │ ╰──────────────────────────────────────────────────────────────────────────────╯ AttributeError: 'CRAV' object has no attribute 'license_url' ❌ Download Failed... -
change playready cdm will work
[Attachment 92151 - Click to enlarge] -
I will have to find myself a playready cdm and then learn how to change CRAV to accept it. My Twinvine has a python playready something. It is good it is working for you and thanks for the information.
I think I better take a break. I am getting confused trying to figure it out.Last edited by Tom Saurus; 1st May 2026 at 19:11.
-
That was actually an error on my part and has been fixed in the latest update. Widevine L3 will only work up to 720p, though, so keep that in mind.
Edit: Actually, it looks like some titles can license 1080p L3. Either way, I'd recommend using playready for anything higher quality.Last edited by stabbedbybrick; 1st May 2026 at 23:31.
Similar Threads
-
Devine - Modular Movie, TV, and Music Archival Software
By billybanana in forum Video Streaming DownloadingReplies: 1871Last Post: 26th Jan 2026, 14:12 -
Bitrate confusion: HD vs. DV archival
By taigi in forum Capturing and VCRReplies: 3Last Post: 9th Nov 2024, 03:38 -
How do I completely remove the music and sound effects from a movie?
By cns00 in forum EditingReplies: 1Last Post: 15th Jan 2024, 12:11 -
Which software can remove music from show but keep character dialogue?
By Mohamed61020 in forum AudioReplies: 6Last Post: 2nd Jul 2023, 21:32 -
Software for simple music videos?
By dewiclements in forum Software PlayingReplies: 3Last Post: 26th Jul 2022, 01:21




Quote