VideoHelp Forum





Try StreamFab Downloader and download streaming video from Netflix, Amazon!



+ Reply to Thread
Page 42 of 46
FirstFirst ... 32 40 41 42 43 44 ... LastLast
Results 1,231 to 1,260 of 1351
  1. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Originally Posted by kev043 View Post
    I'm still trying to figure it out
    Image
    [Attachment 93853 - Click to enlarge]


    The highlighted part of the image shows what variables you can choose - in any order - to make a file name.

    The output_template contains the current chosen variables for movies, series and songs. You just change the output_template to match your preference by selecting the variables you want, in the order you want them in. Some variables like 'year' from some providers, may not always have a value given. To stop that breaking the script a '?' is added to the variable. In this case {year?}: meaning if the year has a value print it otherwise miss it out. The variables are held inside curly-braces. If you put a space or a character between the braces, it will be printed too. Currently curly-braces have a space you seem to want a full stop, so...

    ... can you manage to put together something like
    Code:
    output_template
      movies:  ......
      series: '{title}.{season_episode}.{episode_name?}.{resolution}'   and keep adding what you need inside curly-braces
    ??

    The page I referred you too had this:-
    Image
    [Attachment 93854 - Click to enlarge]

    Which looks pretty much the solution you are looking for but with ressolution missing.
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  2. Thanks again for the help A_n_g_e_l_a

    here is part of my yaml
    Code:
    # Custom output templates for filenames
    # Configure output_template in your envied.yaml to control filename format.
    # If not configured, default scene-style templates are used and a warning is shown.
    # Available variables: {title}, {year}, {season}, {episode}, {season_episode}, {episode_name},
    #                     {quality}, {resolution}, {source}, {audio}, {audio_channels}, {audio_full},
    #                     {video}, {hdr}, {hfr}, {atmos}, {dual}, {multi}, {tag}, {edition}, {repack},
    #                     {lang_tag}
    # Conditional variables (included only if present): Add ? suffix like {year?}, {episode_name?}, {hdr?}
    # Customize the templates below:
    #
    # Example outputs:
    # Scene movies: 'The.Matrix.1999.1080p.SERVICE.WEB-DL.DDP5.1.H.264-EXAMPLE'
    # Scene movies (HDR): 'Dune.2021.2160p.SERVICE.WEB-DL.DDP5.1.HDR10.H.265-EXAMPLE'
    # Scene movies (REPACK): 'Dune.2021.REPACK.2160p.SERVICE.WEB-DL.DDP5.1.H.265-EXAMPLE'
    # Scene series: 'Breaking.Bad.2008.S01E01.Pilot.1080p.SERVICE.WEB-DL.DDP5.1.H.264-EXAMPLE'
    # Plex movies: 'The Matrix (1999)'
    # Plex series: 'Breaking Bad S01E01 Pilot'
    output_template:
      # Scene-style naming (dot-separated)
      #movies: '{title}.{year}.{repack?}.{edition?}.{quality}.{source}.WEB-DL.{dual?}.{multi?}.{audio_full}.{atmos?}.{hdr?}.{hfr?}.{video}-{tag}'
      series: '{title}.{year?}.{season_episode}.{episode_name?}.{repack?}.{edition?}.{quality}.{source}.WEB-DL.{dual?}.{multi?}.{audio_full}.{atmos?}.{hdr?}.{hfr?}.{video}-{tag}'
      #songs: '{track_number}.{title}.{repack?}.{edition?}.{source?}.WEB-DL.{audio_full}.{atmos?}-{tag}'
      #
      # Plex-friendly naming (space-separated, clean format)
      movies: '{title} ({year})'
      series: '{title} {season_episode} {episode_name?}'
      songs: '{track_number} {title}'
      #
      # Minimal naming (basic info only)
      # movies: '{title}.{year}.{quality}'
      # series: '{title}.{season_episode}.{episode_name?}'
      #
      # Custom scene-style with specific elements
      # movies: '{title}.{year}.{quality}.{hdr?}.{source}.WEB-DL.{audio_full}.{video}-{tag}'
      # series: '{title}.{year?}.{season_episode}.{episode_name?}.{quality}.{hdr?}.{source}.WEB-DL.{audio_full}.{atmos?}.{video}-{tag}'
      #
      # Folder naming (optional). One template for all, or a per-kind map.
      # Valid kinds: movies, series, songs, albums (album vars: see docs).
      # folder: '{title} ({year?})'
      folder:
        movies: '{title} ({year})'
        series: '{title} ({year?})'
    I have uncommented this section to try and give me scene naming
    Code:
    series: '{title}.{year?}.{season_episode}.{episode_name?}.{repack?}.{edition?}.{quality}.{source}.WEB-DL.{dual?}.{multi?}.{audio_full}.{atmos?}.{hdr?}.{hfr?}.{video}-{tag}'
    then started downloading a series and it gives me a folder and file with standard naming - Vinnie Jones In the Country\Vinnie Jones In the Country S01E01 Keep Swinging.mkv

    I definitely must have something wrong in my yaml

    Thank you again for the help.
    Quote Quote  
  3. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Originally Posted by kev043 View Post
    I definitely must have something wrong in my yaml
    Yes. You do.
    -
    Think like a computer: it reads line by line. Only when it sees a # at the line start, it knows to ignore the line and just move on. Those lines are comments for humans; we say the the line is commented-out (with the hash key #). We also talk of uncommenting lines by removing the hash symbol (#)

    This is a section of your yaml

    output_template:
    # Scene-style naming (dot-separated)
    #movies: '{title}.{year}.{repack?}.{edition?}.{quality}.{so urce}.WEB-DL.{dual?}.{multi?}.{audio_full}.{atmos?}.{hdr?}.{ hfr?}.{video}-{tag}'
    *series: '{title}.{year?}.{season_episode}.{episode_name?}. {repack?}.{edition?}.{quality}.{source}.WEB-DL.{dual?}.{multi?}.{audio_full}.{atmos?}.{hdr?}.{ hfr?}.{video}-{tag}'
    #songs: '{track_number}.{title}.{repack?}.{edition?}.{sour ce?}.WEB-DL.{audio_full}.{atmos?}-{tag}'
    #
    # Plex-friendly naming (space-separated, clean format)
    movies: '{title} ({year})'
    *series: '{title} {season_episode} {episode_name?}'
    songs: '{track_number} {title}'
    #
    # Minimal naming (basic info only)
    # movies: '{title}.{year}.{quality}'
    # series: '{title}.{season_episode}.{episode_name?}'
    #
    # Custom scene-style with specific elements
    # movies: '{title}.{year}.{quality}.{hdr?}.{source}.WEB-DL.{audio_full}.{video}-{tag}'
    # series: '{title}.{year?}.{season_episode}.{episode_name?}. {quality}.{hdr?}.{source}.WEB-DL.{audio_full}.{atmos?}.{video}-{tag}'
    #
    # Folder naming (optional). One template for all, or a per-kind map.
    # Valid kinds: movies, series, songs, albums (album vars: see docs).
    # folder: '{title} ({year?})'
    folder:
    movies: '{title} ({year})'
    series: '{title} ({year?})'

    The computer reads in output_template. Next it finds an uncommented line starting 'series' which it reads and understands - its the line that sets scene naming that you want.

    It continues and reads lines starting movies and sees you want title and year. So far so good.

    Next it reads series, (again??) and sees you are now telling it to make series '{title} {season_episode} {episode_name?}' which it does.

    Do you now have enough information to correct your code? # is the clue.

    I've marked a red asterisk where you define series twice. Your computer is only doing as its told.
    Last edited by A_n_g_e_l_a; 21st Sep 2026 at 09:09.
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  4. Hi A_n_g_e_l_a

    thanks for the info I've got it working now, I didn't notice I had it selected in both scene and plex, once I # the plex part out it worked

    Thanks again for the help.
    Quote Quote  
  5. Having an issue with TUBI today all the VPN for U.S. for Windscribe are resulting in " - Failed to obtain video resources. Check geography settings.
    Title is available in: United States". Hopefully I find one that works. I will check with Twinvine Envied.

    It is working fine with Twinvine Envied.

    I ran across some failures with 403 unauthorized when it comes to Tubi.
    Last edited by Tom Saurus; 22nd Sep 2026 at 17:11.
    Quote Quote  
  6. Hi there, I've been trying to work out this error with envied dscp service, I ran the script through claude and it says it fixed some errors but when I ran it, it said the changes needed to be pushed, this was my error.

    Code:
    (TwinVine) C:\Users\Test\TwinVine\.venv\Scripts>uv run envied dl -v h.265 -q 1080 -ns -w s01 dscp https://play.discoveryplus.com/show/3f7f2ee3-1478-4dd4-927a-a04be06623b0
    
                               ░█▀▀░█▀█░█░█░▀█▀░█▀▀░█▀▄
                               ░█▀▀░█░█░▀▄▀░░█░░█▀▀░█░█
                               ░▀▀▀░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀░
    
                               ...more than unshackled...
    
                    v 5.4.0 - https://github.com/vinefeeder/envied
    
         Loaded 68 services
         Service Config loaded
         Loaded 2/2 Vaults
         Loaded PlayReady CDM: Sharp AQUOS LCD TV 4T-CXXFXX (L3000)
    
      ────────────────────────────── Service: DSCP ───────────────────────────────
    
         Service has no Geofence
          + Using cached Tokens...
         Authenticated with Service
    
      ────────────── Series: James May's Shed Load Of Ideas (2025) ───────────────
    
         1 season, S1(8)
    
      ──────── James May's Shed Load Of Ideas 2025 S01E01 Traffic Wardens ────────
    
    C:\Users\Test\TwinVine\packages\envied\src\envied\services\_repos\git.gay__vinefe
    eder__twinvine-services\DSCP\__init__.py:380: FutureWarning: Truth-testing of
    elements was a source of confusion and will always return True in future
    versions. Use specific 'len(elem)' or 'elem is not None' test instead.
      template = rep.find("SegmentTemplate") or adapt_set.find("SegmentTemplate")
         Skipped subtitles as --no-subs was used...
         Original language not available for title, skipping 'orig' selection
         for video
         There's no orig Video Track...
    
    (TwinVine) C:\Users\Test\TwinVine\.venv\Scripts>
    Thank you for the help as always, do these services get maintained now?

    edit, I've managed to fix the error by using -l en
    Last edited by kev043; 23rd Sep 2026 at 06:59.
    Quote Quote  
  7. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Originally Posted by kev043 View Post
    Hi there, I've been trying to work out this error with envied dscp service, I ran the script through claude and it says it fixed some errors but when I ran it, it said the changes needed to be pushed, this was my error.

    Code:
    (TwinVine) C:\Users\Test\TwinVine\.venv\Scripts>uv run envied dl -v h.265 -q 1080 -ns -w s01 dscp https://play.discoveryplus.com/show/3f7f2ee3-1478-4dd4-927a-a04be06623b0
    
                               ░█▀▀░█▀█░█░█░▀█▀░█▀▀░█▀▄
                               ░█▀▀░█░█░▀▄▀░░█░░█▀▀░█░█
                               ░▀▀▀░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀░
    
                               ...more than unshackled...
    
                    v 5.4.0 - https://github.com/vinefeeder/envied
    
         Loaded 68 services
         Service Config loaded
         Loaded 2/2 Vaults
         Loaded PlayReady CDM: Sharp AQUOS LCD TV 4T-CXXFXX (L3000)
    
      ────────────────────────────── Service: DSCP ───────────────────────────────
    
         Service has no Geofence
          + Using cached Tokens...
         Authenticated with Service
    
      ────────────── Series: James May's Shed Load Of Ideas (2025) ───────────────
    
         1 season, S1(8)
    
      ──────── James May's Shed Load Of Ideas 2025 S01E01 Traffic Wardens ────────
    
    C:\Users\Test\TwinVine\packages\envied\src\envied\services\_repos\git.gay__vinefe
    eder__twinvine-services\DSCP\__init__.py:380: FutureWarning: Truth-testing of
    elements was a source of confusion and will always return True in future
    versions. Use specific 'len(elem)' or 'elem is not None' test instead.
      template = rep.find("SegmentTemplate") or adapt_set.find("SegmentTemplate")
         Skipped subtitles as --no-subs was used...
         Original language not available for title, skipping 'orig' selection
         for video
         There's no orig Video Track...
    
    (TwinVine) C:\Users\Test\TwinVine\.venv\Scripts>
    Thank you for the help as always, do these services get maintained now?
    Kev, read the error message! It's there to help you.

    It would appear if you don't say what language to download, and the service doesn't use 'orig', it will bale out. This is all new to me, never used DSCP.

    So try specifying --lang en as a parameter or maybe --lang en-us.

    EDIT: Found an online correction file for DSCP. Now posted to repo on git.gay/vinefeeder. It should load for next use; if not delete the folder - packages/envied/src/envied/services/_repo and re-run envied.
    Last edited by A_n_g_e_l_a; 23rd Sep 2026 at 08:13. Reason: EDIT
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  8. Thank you for the update on dcsp A_n_g_e_l_a I will update and give it a test later, are there any script updates for hmax as everything works fine except there is an error downloading sport content.

    I really appreciate the help thank you.
    Quote Quote  
  9. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Originally Posted by kev043 View Post
    Thank you for the update on dcsp A_n_g_e_l_a I will update and give it a test later, are there any script updates for hmax as everything works fine except there is an error downloading sport content.

    I really appreciate the help thank you.
    I inadvertently added an error this morning. The script will not run. I will fix it tomorrow. I do not support services; they are not coded by me. If I happen to see an update it may get added, but you can play your part and look around too.
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  10. Anyone running into an error with Vinefeeder and DSCP, edit the services/_repos/git.gay.../DSCP/__init__.py

    Change:
    from unshackle.core.utilities import is_close_match

    to:
    from envied.core.utilities import is_close_match
    Quote Quote  
  11. Originally Posted by mikeh14 View Post
    Anyone running into an error with Vinefeeder and DSCP, edit the services/_repos/git.gay.../DSCP/__init__.py

    Change:
    from unshackle.core.utilities import is_close_match

    to:
    from envied.core.utilities import is_close_match
    post #1243, the one above yours!
    Quote Quote  
  12. ...
    Last edited by mikeh14; 23rd Sep 2026 at 16:13. Reason: duplicate
    Quote Quote  
  13. Originally Posted by phased View Post
    Originally Posted by mikeh14 View Post
    Anyone running into an error with Vinefeeder and DSCP, edit the services/_repos/git.gay.../DSCP/__init__.py

    Change:
    from unshackle.core.utilities import is_close_match

    to:
    from envied.core.utilities import is_close_match
    post #1243, the one above yours!
    Not sure why you're mad? I was just explaining how to fix the issue that Angela said she will fix tomorrow, incase you want to get it working today...
    Quote Quote  
  14. thanks for the advice on the fix mikeh14
    Quote Quote  
  15. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Pushed a fix for import errors DSCP and fixed a number of other import errors arising from the update to v5.5.0. Additionally pushed corrections to twinvine-services on git.gay.

    Image
    [Attachment 93879 - Click to enlarge]
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  16. hi, i just pulled the latest update but get these errorsImage
    [Attachment 93881 - Click to enlarge]
    Quote Quote  
  17. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Originally Posted by iamrobbles View Post
    hi, i just pulled the latest update but get these errors
    That has been sorted.

    You probably have the old service files in packages/envied/src/envied/services/_repos.
    Delete your existing _repos folder to stop old service code being used.
    I have had to change some imports in all those services giving errors.

    We have been in a bit of a no-man's-land, 5.4 downloaded and stored services permanently while 5.5.0 now has them as volatile downloads.
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  18. Thank you for the update on the services A_n_g_e_l_a

    I know you don't deal with services on here, but should I change this to envied.core? thanks

    Code:
    import click
    from click import Context
    from langcodes import Language
    from lxml import etree
    from unshackle.core.credential import Credential
    from unshackle.core.manifests import DASH
    from unshackle.core.search_result import SearchResult
    from unshackle.core.service import Service
    from unshackle.core.session import session as CurlSession
    from unshackle.core.titles import Episode, Movie, Movies, Series
    from unshackle.core.tracks import Audio, Chapter, Chapters, Subtitle, Track, Tracks
    from envied.core.utilities import is_close_match
    Quote Quote  
  19. Originally Posted by A_n_g_e_l_a View Post
    Originally Posted by iamrobbles View Post
    hi, i just pulled the latest update but get these errors
    That has been sorted.

    You probably have the old service files in packages/envied/src/envied/services/_repos.
    Delete your existing _repos folder to stop old service code being used.
    I have had to change some imports in all those services giving errors.

    We have been in a bit of a no-man's-land, 5.4 downloaded and stored services permanently while 5.5.0 now has them as volatile downloads.

    thanks for this. is there a problem with roku? or is it my setup. i get the following errors now:



    PS C:\Multimedia\Video\video-tools\TwinVine> uv run envied dl roku https://therokuchannel.roku.com/watch/ae962efa0d2550fbb02a30ec46e1d3a0

    ░█▀▀░█▀█░█░█░▀█▀░█▀▀░█▀▄
    ░█▀▀░█░█░▀▄▀░░█░░█▀▀░█░█
    ░▀▀▀░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀░

    ...more than unshackled...

    v 5.5.0 - https://github.com/vinefeeder/envied

    Loaded 69 services
    Service Config loaded
    Loaded 2/2 Vaults
    Loaded Widevine CDM: 4445 (L3)

    ────────────────────────────── Service: ROKU ───────────────────────────────

    Service is not Geoblocked in your region
    Authenticated with Service

    ──────────────────── Series: Hanging by a Thread (2005) ────────────────────

    1 season, S3(1)

    ───────────────────── Hanging by a Thread 2005 S03E01 ──────────────────────

    ╭───────────────────── Traceback (most recent call last) ──────────────────────╮
    │ in _run_module_as_main:198 │
    │ in _run_code:88 │
    │ │
    │ in <module>:10 │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\.venv\Lib\site-packages\rich_click\ │
    │ rich_command.py:402 in __call__ │
    │ │
    │ 399 │ │ # Include this here because I run into a false warning │
    │ 400 │ │ # in the PyCharm IDE otherwise; for some reason PyCharm doesn' │
    │ 401 │ │ # seem to think RichGroups are callable. (No issues with Mypy, │
    │ ❱ 402 │ │ return super().__call__(*args, **kwargs) │
    │ 403 │ │
    │ 404 │ @overload │
    │ 405 │ def command(self, __func: Callable[..., Any]) -> RichCommand: ... │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\.venv\Lib\site-packages\click\core. │
    │ py:1462 in __call__ │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\.venv\Lib\site-packages\rich_click\ │
    │ rich_command.py:216 in main │
    │ │
    │ 213 │ │ try: │
    │ 214 │ │ │ try: │
    │ 215 │ │ │ │ with self.make_context(prog_name, args, **extra) as ct │
    │ ❱ 216 │ │ │ │ │ rv = self.invoke(ctx) │
    │ 217 │ │ │ │ │ if not standalone_mode: │
    │ 218 │ │ │ │ │ │ return rv │
    │ 219 │ │ │ │ │ # it's not safe to `ctx.exit(rv)` here! │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\.venv\Lib\site-packages\click\core. │
    │ py:1850 in invoke │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\.venv\Lib\site-packages\click\core. │
    │ py:1850 in invoke │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\.venv\Lib\site-packages\click\core. │
    │ py:1819 in _process_result │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\.venv\Lib\site-packages\click\core. │
    │ py:814 in invoke │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\packages\envied\src\envied\core\tem │
    │ p.py:77 in wrapper │
    │ │
    │ 74 │ @functools.wraps(fn) │
    │ 75 │ def wrapper(*args: P.args, **kwargs: P.kwargs) -> R: │
    │ 76 │ │ with task_temp_dir(): │
    │ ❱ 77 │ │ │ return fn(*args, **kwargs) │
    │ 78 │ │
    │ 79 │ return wrapper │
    │ 80 │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\packages\envied\src\envied\commands │
    │ \dl.py:2146 in result │
    │ │
    │ 2143 │ │ │ tracks_label = "Getting Remote Tracks..." if self.is_remo │
    │ 2144 │ │ │ with console.status(tracks_label, spinner="dots"): │
    │ 2145 │ │ │ │ try: │
    │ ❱ 2146 │ │ │ │ │ title.tracks.add(service.get_tracks(title), warn_ │
    │ 2147 │ │ │ │ │ title.tracks.chapters = service.get_chapters(titl │
    │ 2148 │ │ │ │ except Exception as e: │
    │ 2149 │ │ │ │ │ if self.debug_logger: │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\packages\envied\src\envied\services │
    │ \_repos\git.gay__vinefeeder__twinvine-services\ROKU\__init__.py:184 in │
    │ get_tracks │
    │ │
    │ 181 │ │ │ headers=headers, │
    │ 182 │ │ │ json=payload, │
    │ 183 │ │ ) │
    │ ❱ 184 │ │ r.raise_for_status() │
    │ 185 │ │ │
    │ 186 │ │ videos = r.json()["playbackMedia"]["videos"] │
    │ 187 │ │ self.license = next( │
    │ │
    │ C:\Multimedia\Video\video-tools\TwinVine\.venv\Lib\site-packages\requests\mo │
    │ dels.py:1026 in raise_for_status │
    │ │
    │ 1023 │ │ │ ) │
    │ 1024 │ │ │
    │ 1025 │ │ if http_error_msg: │
    │ ❱ 1026 │ │ │ raise HTTPError(http_error_msg, response=self) │
    │ 1027 │ │
    │ 1028 │ def close(self): │
    │ 1029 │ │ """Releases the connection back to the pool. Once this method │
    ╰───────────────────────────────────────────────── ─────────────────────────────╯
    HTTPError: 451 Client Error: Unknown for url:
    https://therokuchannel.roku.com/api/v3/playback
    PS C:\Multimedia\Video\video-tools\TwinVine>
    Quote Quote  
  20. Originally Posted by A_n_g_e_l_a View Post
    Originally Posted by iamrobbles View Post
    hi, i just pulled the latest update but get these errors
    That has been sorted.

    You probably have the old service files in packages/envied/src/envied/services/_repos.
    Delete your existing _repos folder to stop old service code being used.
    I have had to change some imports in all those services giving errors.

    We have been in a bit of a no-man's-land, 5.4 downloaded and stored services permanently while 5.5.0 now has them as volatile downloads.
    thanks
    Quote Quote  
  21. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Originally Posted by kev043 View Post
    Thank you for the update on the services A_n_g_e_l_a

    I know you don't deal with services on here, but should I change this to envied.core? thanks

    Code:
    import click
    from click import Context
    from langcodes import Language
    from lxml import etree
    from unshackle.core.credential import Credential
    from unshackle.core.manifests import DASH
    from unshackle.core.search_result import SearchResult
    from unshackle.core.service import Service
    from unshackle.core.session import session as CurlSession
    from unshackle.core.titles import Episode, Movie, Movies, Series
    from unshackle.core.tracks import Audio, Chapter, Chapters, Subtitle, Track, Tracks
    from envied.core.utilities import is_close_match
    Do you need too? I have shims installed so that some unshackle imports get redirected to envied. As strange as it seems the above should still work. At least it all parsed correctly when I ran
    uv run envied dl -?
    as a test.

    I have reconciled all the imports for DSCP at source. git.gay/vinefeeder/twinvine-services/
    Last edited by A_n_g_e_l_a; 24th Sep 2026 at 08:23.
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  22. Thank you for the update to the services A_n_g_e_l_a I've installed the updated ones, it's strange as dscp was working fine yesterday, I still have a backup of the working one, I was getting this error on a dscp series.

    Code:
    (TwinVine) C:\Users\Kev\TwinVine\.venv\Scripts>uv run envied dl -v h.265 -q 1080 -ns -w s05 dscp https://play.discoveryplus.com/show/52b11615-79e2-48f0-9332-5800cd3450a4
    
                               ░█▀▀░█▀█░█░█░▀█▀░█▀▀░█▀▄
                               ░█▀▀░█░█░▀▄▀░░█░░█▀▀░█░█
                               ░▀▀▀░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀░
    
                               ...more than unshackled...
    
                    v 5.4.0 - https://github.com/vinefeeder/envied
    
         Loaded 69 services
         Service Config loaded
         Loaded 2/2 Vaults
         Loaded PlayReady CDM: Sharp AQUOS LCD TV 4T-CXXFXX (L3000)
    
      ────────────────────────────── Service: DSCP ───────────────────────────────
    
         Service has no Geofence
          + Using cached Tokens...
         Authenticated with Service
    
      ──────────────────────── Series: Man v. Food (2017) ────────────────────────
    
         7 seasons, S1(10), S2(14), S3(14), S4(20), S5(12), S6(10), S7(10)
    
      ─────────────── Man v. Food 2020 S05E01 Mystic, Connecticut ────────────────
    
    ╭───────────────────── Traceback (most recent call last) ──────────────────────╮
    │ in _run_module_as_main:203                                                   │
    │ in _run_code:88                                                              │
    │                                                                              │
    │ in <module>:10                                                               │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\rich_click\rich_command.py:402 │
    │ in __call__                                                                  │
    │                                                                              │
    │   399 │   │   # Include this here because I run into a false warning         │
    │   400 │   │   # in the PyCharm IDE otherwise; for some reason PyCharm doesn' │
    │   401 │   │   # seem to think RichGroups are callable. (No issues with Mypy, │
    │ ❱ 402 │   │   return super().__call__(*args, **kwargs)                       │
    │   403 │                                                                      │
    │   404 │   @overload                                                          │
    │   405 │   def command(self, __func: Callable[..., Any]) -> RichCommand: ...  │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:1462 in __call__ │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\rich_click\rich_command.py:216 │
    │ in main                                                                      │
    │                                                                              │
    │   213 │   │   try:                                                           │
    │   214 │   │   │   try:                                                       │
    │   215 │   │   │   │   with self.make_context(prog_name, args, **extra) as ct │
    │ ❱ 216 │   │   │   │   │   rv = self.invoke(ctx)                              │
    │   217 │   │   │   │   │   if not standalone_mode:                            │
    │   218 │   │   │   │   │   │   return rv                                      │
    │   219 │   │   │   │   │   # it's not safe to `ctx.exit(rv)` here!            │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:1850 in invoke   │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:1850 in invoke   │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:1819 in          │
    │ _process_result                                                              │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:814 in invoke    │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\core\temp.py:77 in wrapper  │
    │                                                                              │
    │   74 │   @functools.wraps(fn)                                                │
    │   75 │   def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:                │
    │   76 │   │   with task_temp_dir():                                           │
    │ ❱ 77 │   │   │   return fn(*args, **kwargs)                                  │
    │   78 │                                                                       │
    │   79 │   return wrapper                                                      │
    │   80                                                                         │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\commands\dl.py:2473 in      │
    │ result                                                                       │
    │                                                                              │
    │   2470 │   │   │   tracks_label = "Getting Remote Tracks..." if self.is_remo │
    │   2471 │   │   │   with console.status(tracks_label, spinner="dots"):        │
    │   2472 │   │   │   │   try:                                                  │
    │ ❱ 2473 │   │   │   │   │   title.tracks.add(service.get_tracks(title), warn_ │
    │   2474 │   │   │   │   │   title.tracks.chapters = service.get_chapters(titl │
    │   2475 │   │   │   │   except Exception as e:                                │
    │   2476 │   │   │   │   │   if self.debug_logger:                             │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\services\_repos\git.gay__vi │
    │ nefeeder__twinvine-services\DSCP\__init__.py:309 in get_tracks               │
    │                                                                              │
    │   306 │   │   │   if isinstance(track, Subtitle):                            │
    │   307 │   │   │   │   tracks.subtitles.remove(track)                         │
    │   308 │   │                                                                  │
    │ ❱ 309 │   │   subtitles = self._process_subtitles(dash, original_language, s │
    │   310 │   │   tracks.add(subtitles)                                          │
    │   311 │   │                                                                  │
    │   312 │   │   return tracks                                                  │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\services\_repos\git.gay__vi │
    │ nefeeder__twinvine-services\DSCP\__init__.py:440 in _process_subtitles       │
    │                                                                              │
    │   437 │   │   │   track_name = "Original" if (language and is_close_match(la │
    │   438 │   │   │                                                              │
    │   439 │   │   │   final_tracks.append(                                       │
    │ ❱ 440 │   │   │   │   Subtitle(                                              │
    │   441 │   │   │   │   │   id_=track_id,                                      │
    │   442 │   │   │   │   │   url=dash.url,                                      │
    │   443 │   │   │   │   │   codec=Subtitle.Codec.WebVTT,                       │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\core\tracks\subtitle.py:172 │
    │ in __init__                                                                  │
    │                                                                              │
    │    169 │   │   │   More in-depth information, examples, and stuff to look fo │
    │    170 │   │   │   explanation list above.                                   │
    │    171 │   │   """                                                           │
    │ ❱  172 │   │   super().__init__(*args, **kwargs)                             │
    │    173 │   │                                                                 │
    │    174 │   │   if not isinstance(codec, (Subtitle.Codec, type(None))):       │
    │    175 │   │   │   raise TypeError(f"Expected codec to be a {Subtitle.Codec} │
    ╰──────────────────────────────────────────────────────────────────────────────╯
    TypeError: Track.__init__() got an unexpected keyword argument 'service'
    I can't thank you enough, I'm trying my hardest to fix the errors myself and learn, you have a great knowledge thank you.
    Quote Quote  
  23. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Originally Posted by kev043 View Post
    Thank you for the update to the services A_n_g_e_l_a I've installed the updated ones, it's strange as dscp was working fine yesterday, I still have a backup of the working one, I was getting this error on a dscp series.
    I have earlier today released an update to v5.5.0 , hopefully working with DSCP. Update TwinVine and try again.
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  24. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Using remote repos means they do not get downloaded until envied is run.
    If you, like me, start with vinefeeder, on the very first run it will complain
    Image
    [Attachment 93882 - Click to enlarge]

    if you run uv run envied dl -? all the services will be loaded and vinefeeder will be happy!
    It is not ideal; maybe we should go back to fixed services?
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  25. I am getting this a lot with Tubi. Any advice is appreciated and thank you in advance:

    Code:
    C:\TwinVine>uv run envied dl -q 422 TUBI https://tubitv.com/movies/100005833/jackie-chan-s-first-strike
    
                               ░█▀▀░█▀█░█░█░▀█▀░█▀▀░█▀▄
                               ░█▀▀░█░█░▀▄▀░░█░░█▀▀░█░█
                               ░▀▀▀░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀░
    
                               ...more than unshackled...
    
                    v 5.5.0 - https://github.com/vinefeeder/envied
    
         Loaded 69 services
         Service Config loaded
         Loaded 2/2 Vaults
         Loaded Widevine CDM: 4445 (L3)
    
      ────────────────────────────── Service: TUBI ───────────────────────────────
    
         Service has no region restrictions
         Authenticated with Service
    
      ──────────────── Movies: Jackie Chan's First Strike (1996) ─────────────────
    
         1 Movie
    
      ──────────────────── Jackie Chan's First Strike (1996) ─────────────────────
    
    
         1 Video
         └── [H.264, SDR] | en | 1024x422 @ 2182 kb/s, 23.976 FPS
             ⠦ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ • --:-- • FAILED
         1 Audio
         └── [AAC] | en | 2.0 | 135 kb/s
              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ • 00:01 • SKIPPED
         1 Subtitle
         └── [SRT] | en
              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ • 00:01 • SKIPPED
         2 Chapters
         ├── 00:00:00.000
         └── 01:19:36.000 | End Credits
         Widevine(AAAAOHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABgSEPdn8ZHABUXcv...)
         └── An exception occurred in the Service's license function:
             Unauthorized. Error code: 403
    
    
         ❌ Download Failed...
            ConnectionError: Unauthorized. Error code: 403
            An unexpected error occurred in one of the download workers.
    
    ╭───────────────────── Traceback (most recent call last) ──────────────────────╮
    │ C:\TwinVine\packages\envied\src\envied\commands\dl.py:2982 in result         │
    │                                                                              │
    │   2979 │   │   │   │   │                                                     │
    │   2980 │   │   │   │   │   skipped_before = len(self.skipped_subtitles)      │
    │   2981 │   │   │   │   │   grow_session_pool(service.session, downloads * (w │
    │ ❱ 2982 │   │   │   │   │   download_tracks_in_passes(                        │
    │   2983 │   │   │   │   │   │   title.tracks,                                 │
    │   2984 │   │   │   │   │   │   downloads,                                    │
    │   2985 │   │   │   │   │   │   download_track,                               │
    │                                                                              │
    │ C:\TwinVine\packages\envied\src\envied\commands\dl.py:304 in                 │
    │ download_tracks_in_passes                                                    │
    │                                                                              │
    │    301 │   │   with ThreadPoolExecutor(max_concurrent) as pool:              │
    │    302 │   │   │   future_to_track = {pool.submit(run_one, track, i): track  │
    │    303 │   │   │   for download in futures.as_completed(future_to_track):    │
    │ ❱  304 │   │   │   │   download.result()  # a video/audio failure is fatal   │
    │    305 │   │                                                                 │
    │    306 │   │   for i, track in skippable:                                    │
    │    307 │   │   │   DOWNLOAD_CANCELLED.clear()                                │
    │                                                                              │
    │ C:\Users\sheld\AppData\Roaming\uv\python\cpython-3.14.2-windows-x86_64-none\ │
    │ Lib\concurrent\futures\_base.py:443 in result                                │
    │                                                                              │
    │   440 │   │   │   │   if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: │
    │   441 │   │   │   │   │   raise CancelledError()                             │
    │   442 │   │   │   │   elif self._state == FINISHED:                          │
    │ ❱ 443 │   │   │   │   │   return self.__get_result()                         │
    │   444 │   │   │   │                                                          │
    │   445 │   │   │   │   self._condition.wait(timeout)                          │
    │   446                                                                        │
    │                                                                              │
    │ C:\Users\sheld\AppData\Roaming\uv\python\cpython-3.14.2-windows-x86_64-none\ │
    │ Lib\concurrent\futures\_base.py:395 in __get_result                          │
    │                                                                              │
    │   392 │   def __get_result(self):                                            │
    │   393 │   │   if self._exception is not None:                                │
    │   394 │   │   │   try:                                                       │
    │ ❱ 395 │   │   │   │   raise self._exception                                  │
    │   396 │   │   │   finally:                                                   │
    │   397 │   │   │   │   # Break a reference cycle with the exception in self._ │
    │   398 │   │   │   │   self = None                                            │
    │                                                                              │
    │ C:\Users\sheld\AppData\Roaming\uv\python\cpython-3.14.2-windows-x86_64-none\ │
    │ Lib\concurrent\futures\thread.py:86 in run                                   │
    │                                                                              │
    │    83 │   │   │   return                                                     │
    │    84 │   │                                                                  │
    │    85 │   │   try:                                                           │
    │ ❱  86 │   │   │   result = ctx.run(self.task)                                │
    │    87 │   │   except BaseException as exc:                                   │
    │    88 │   │   │   self.future.set_exception(exc)                             │
    │    89 │   │   │   # Break a reference cycle with the exception 'exc'         │
    │                                                                              │
    │ C:\Users\sheld\AppData\Roaming\uv\python\cpython-3.14.2-windows-x86_64-none\ │
    │ Lib\concurrent\futures\thread.py:73 in run                                   │
    │                                                                              │
    │    70 │                                                                      │
    │    71 │   def run(self, task):                                               │
    │    72 │   │   fn, args, kwargs = task                                        │
    │ ❱  73 │   │   return fn(*args, **kwargs)                                     │
    │    74                                                                        │
    │    75                                                                        │
    │    76 class _WorkItem:                                                       │
    │                                                                              │
    │ C:\TwinVine\packages\envied\src\envied\commands\dl.py:2954 in download_track │
    │                                                                              │
    │   2951 │   │   │   │   with SyncLive(Padding(download_table, (1, 5)), consol │
    │   2952 │   │   │   │   │                                                     │
    │   2953 │   │   │   │   │   def download_track(track: AnyTrack, i: int) -> No │
    │ ❱ 2954 │   │   │   │   │   │   track.download(                               │
    │   2955 │   │   │   │   │   │   │   session=track.session or service.session, │
    │   2956 │   │   │   │   │   │   │   no_proxy_download=no_proxy_download,      │
    │   2957 │   │   │   │   │   │   │   proxy_download=proxy_download,            │
    │                                                                              │
    │ C:\TwinVine\packages\envied\src\envied\core\tracks\track.py:665 in download  │
    │                                                                              │
    │    662 │   │   │   │   │   license_widevine=prepare_drm,                     │
    │    663 │   │   │   │   │   cdm=cdm,                                          │
    │    664 │   │   │   │   )                                                     │
    │ ❱  665 │   │   │   │   manifest_parsers[self.descriptor].download_track(trac │
    │    666 │   │   │   elif self.descriptor == self.Descriptor.URL:              │
    │    667 │   │   │   │   try:                                                  │
    │    668 │   │   │   │   │   if not self.drm and track_type in ("Video", "Audi │
    │                                                                              │
    │ C:\TwinVine\packages\envied\src\envied\core\manifests\dash.py:509 in         │
    │ download_track                                                               │
    │                                                                              │
    │    506 │   │   │   │   │   if not license_widevine:                          │
    │    507 │   │   │   │   │   │   raise ValueError("license_widevine func must  │
    │    508 │   │   │   │   │   progress(downloaded="LICENSING")                  │
    │ ❱  509 │   │   │   │   │   license_widevine(drm, track_kid=track_kid)        │
    │    510 │   │   │   │   │   progress(downloaded="[yellow]LICENSED")           │
    │    511 │   │   │   │   except Exception:  # noqa                             │
    │    512 │   │   │   │   │   DOWNLOAD_CANCELLED.set()  # skip pending track do │
    │                                                                              │
    │ C:\TwinVine\packages\envied\src\envied\commands\dl.py:4552 in prepare_drm    │
    │                                                                              │
    │   4549 │   │   │   │   │   │   │   │   │   context={"track": str(track), "ex │
    │   4550 │   │   │   │   │   │   │   │   )                                     │
    │   4551 │   │   │   │   │   │   │   self.flush_vault_writes(pending_vault_wri │
    │ ❱ 4552 │   │   │   │   │   │   │   raise e                                   │
    │   4553 │   │   │   │   │                                                     │
    │   4554 │   │   │   │   │   log_event(                                        │
    │   4555 │   │   │   │   │   │   "license_keys_retrieved",                     │
    │                                                                              │
    │ C:\TwinVine\packages\envied\src\envied\commands\dl.py:4532 in prepare_drm    │
    │                                                                              │
    │   4529 │   │   │   │   │   )                                                 │
    │   4530 │   │   │   │   │                                                     │
    │   4531 │   │   │   │   │   try:                                              │
    │ ❱ 4532 │   │   │   │   │   │   drm.get_content_keys(cdm=track_cdm, licence=l │
    │   4533 │   │   │   │   │   except Exception as e:                            │
    │   4534 │   │   │   │   │   │   if drm.content_keys:                          │
    │   4535 │   │   │   │   │   │   │   self.log.debug(f"License call failed but  │
    │                                                                              │
    │ C:\TwinVine\packages\envied\src\envied\core\drm\widevine.py:238 in           │
    │ get_content_keys                                                             │
    │                                                                              │
    │   235 │   │   │   │   │   │   kid_count=len(self.kids),                      │
    │   236 │   │   │   │   │   )                                                  │
    │   237 │   │   │   │   │   try:                                               │
    │ ❱ 238 │   │   │   │   │   │   license_res = licence(challenge=challenge, pss │
    │   239 │   │   │   │   │   except TypeError:                                  │
    │   240 │   │   │   │   │   │   license_res = licence(challenge=challenge)     │
    │   241 │   │   │   │   │   cdm.parse_license(session_id, license_res)         │
    │                                                                              │
    │ C:\TwinVine\packages\envied\src\envied\commands\dl.py:4249 in                │
    │ service_licence                                                              │
    │                                                                              │
    │   4246 │   │   if drm_system is None:                                        │
    │   4247 │   │   │   drm_system = "playready" if is_playready_cdm(self.cdm) el │
    │   4248 │   │   fn = service.get_playready_license if drm_system == "playread │
    │ ❱ 4249 │   │   return fn(**declared_kwargs(fn, kwargs))                      │
    │   4250 │                                                                     │
    │   4251 │   def prepare_drm(                                                  │
    │   4252 │   │   self,                                                         │
    │                                                                              │
    │ C:\TwinVine\packages\envied\src\envied\services\_repos\git.gay__vinefeeder__ │
    │ twinvine-services\TUBI\__init__.py:275 in get_widevine_license               │
    │                                                                              │
    │   272 │   │                                                                  │
    │   273 │   │   r = self.session.post(url=license_url, data=challenge)         │
    │   274 │   │   if r.status_code != 200:                                       │
    │ ❱ 275 │   │   │   raise ConnectionError(r.text)                              │
    │   276 │   │                                                                  │
    │   277 │   │   return r.content                                               │
    │   278                                                                        │
    ╰──────────────────────────────────────────────────────────────────────────────╯
    ConnectionError: Unauthorized. Error code: 403
    
    C:\TwinVine>
    Quote Quote  
  26. I tested with Pluto and had success so my .wvd is working for it and it seems happy with the VPN. I like Tubi quite a bit so I hope whatever the problem is I am having I can remedy it.

    Now onto another thing I would like some advice on:

    Code:
    C:\TwinVine>uv run envied dl --list CWTV https://www.cwtv.com/series/wild-cards/?viewContext=Home+Swimlane
    
                               ░█▀▀░█▀█░█░█░▀█▀░█▀▀░█▀▄
                               ░█▀▀░█░█░▀▄▀░░█░░█▀▀░█░█
                               ░▀▀▀░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀░
    
                               ...more than unshackled...
    
                    v 5.5.0 - https://github.com/vinefeeder/envied
    
         Loaded 69 services
         Service Config loaded
         Loaded 2/2 Vaults
         Loaded Widevine CDM: 4445 (L3)
    
      ────────────────────────────── Service: CWTV ───────────────────────────────
    
         Service is not Geoblocked in your region
    
      ──────────────────────── Series: Wild Cards (2024) ─────────────────────────
    
         3 seasons, S1(10), S2(13), S3(10)
    
      ──────────────── Wild Cards 2024 S01E01 The Infinity Thief ─────────────────
    
         Search -> No match found
         ┌───────────────────────── Available Tracks ─────────────────────────┐
         │ 5 Videos                                                           │
         │ ├── [H.264, SDR] | en | 1920x1080 @ 3557 kb/s, 29.970 FPS          │
         │ ├── [H.264, SDR] | en | 1280x720 @ 1693 kb/s, 29.970 FPS           │
         │ ├── [H.264, SDR] | en | 960x540 @ 1020 kb/s, 29.970 FPS            │
         │ ├── [H.264, SDR] | en | 640x360 @ 486 kb/s, 29.970 FPS             │
         │ └── [H.264, SDR] | en | 384x216 @ 240 kb/s, 29.970 FPS             │
         │ 4 Audio                                                            │
         │ ├── [AAC] | en | 192 kb/s                                          │
         │ ├── [AAC] | en | 125 kb/s                                          │
         │ ├── [AAC] | en | 93 kb/s                                           │
         │ └── [AAC] | en | 61 kb/s                                           │
         │ 1 Subtitle                                                         │
         │ └── [VTT] | en                                                     │
         │ 6 Chapters                                                         │
         │ ├── 00:00:00.000                                                   │
         │ ├── 00:00:01.646                                                   │
         │ ├── 00:10:58.333                                                   │
         │ ├── 00:19:49.834                                                   │
         │ ├── 00:31:55.266                                                   │
         │ └── 00:35:36.333                                                   │
         └────────────────────────────────────────────────────────────────────┘
    Code:
    C:\TwinVine>uv run envied dl -q 720 -w S01E01 CWTV https://www.cwtv.com/series/wild-cards/?viewContext=Home+Swimlane
    
                               ░█▀▀░█▀█░█░█░▀█▀░█▀▀░█▀▄
                               ░█▀▀░█░█░▀▄▀░░█░░█▀▀░█░█
                               ░▀▀▀░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀░
    
                               ...more than unshackled...
    
                    v 5.5.0 - https://github.com/vinefeeder/envied
    
         Loaded 69 services
         Service Config loaded
         Loaded 2/2 Vaults
         Loaded Widevine CDM: 4445 (L3)
    
      ────────────────────────────── Service: CWTV ───────────────────────────────
    
         Service is not Geoblocked in your region
    
      ──────────────────────── Series: Wild Cards (2024) ─────────────────────────
    
         3 seasons, S1(10), S2(13), S3(10)
    
      ──────────────── Wild Cards 2024 S01E01 The Infinity Thief ─────────────────
    
         Original language not available for title, skipping 'orig' selection
         for video
         There's no orig Video Track...
    I just consulted envied usage and found the solution but others can learn along with me:

    uv run envied dl -q 720 --lang eng -w S01E01 CWTV https://www.cwtv.com/series/wild-cards/?viewContext=Home+Swimlane
    Quote Quote  
  27. I've updated to the latest version of twinvine and services ran a series download for dscp and got this error.

    Code:
    (TwinVine) C:\Users\Kev\TwinVine\.venv\Scripts>uv run envied dl -v h.265 -q 1080 -ns -w s05 dscp https://play.discoveryplus.com/show/52b11615-79e2-48f0-9332-5800cd3450a4
    
                               ░█▀▀░█▀█░█░█░▀█▀░█▀▀░█▀▄
                               ░█▀▀░█░█░▀▄▀░░█░░█▀▀░█░█
                               ░▀▀▀░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀░
    
                               ...more than unshackled...
    
                    v 5.5.0 - https://github.com/vinefeeder/envied
    
         Loaded 69 services
         Service Config loaded
         Loaded 2/2 Vaults
         Loaded PlayReady CDM: Sharp AQUOS LCD TV 4T-CXXFXX (L3000)
    
      ────────────────────────────── Service: DSCP ───────────────────────────────
    
         Service has no region restrictions
          + Setting up new profile...
         Authenticated with Service
    
      ──────────────────────── Series: Man v. Food (2017) ────────────────────────
    
         7 seasons, S1(10), S2(14), S3(14), S4(20), S5(12), S6(10), S7(10)
    
      ─────────────── Man v. Food 2020 S05E01 Mystic, Connecticut ────────────────
    
    ╭───────────────────── Traceback (most recent call last) ──────────────────────╮
    │ in _run_module_as_main:203                                                   │
    │ in _run_code:88                                                              │
    │                                                                              │
    │ in <module>:10                                                               │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\rich_click\rich_command.py:402 │
    │ in __call__                                                                  │
    │                                                                              │
    │   399 │   │   # Include this here because I run into a false warning         │
    │   400 │   │   # in the PyCharm IDE otherwise; for some reason PyCharm doesn' │
    │   401 │   │   # seem to think RichGroups are callable. (No issues with Mypy, │
    │ ❱ 402 │   │   return super().__call__(*args, **kwargs)                       │
    │   403 │                                                                      │
    │   404 │   @overload                                                          │
    │   405 │   def command(self, __func: Callable[..., Any]) -> RichCommand: ...  │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:1462 in __call__ │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\rich_click\rich_command.py:216 │
    │ in main                                                                      │
    │                                                                              │
    │   213 │   │   try:                                                           │
    │   214 │   │   │   try:                                                       │
    │   215 │   │   │   │   with self.make_context(prog_name, args, **extra) as ct │
    │ ❱ 216 │   │   │   │   │   rv = self.invoke(ctx)                              │
    │   217 │   │   │   │   │   if not standalone_mode:                            │
    │   218 │   │   │   │   │   │   return rv                                      │
    │   219 │   │   │   │   │   # it's not safe to `ctx.exit(rv)` here!            │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:1850 in invoke   │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:1850 in invoke   │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:1819 in          │
    │ _process_result                                                              │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\.venv\Lib\site-packages\click\core.py:814 in invoke    │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\core\temp.py:77 in wrapper  │
    │                                                                              │
    │   74 │   @functools.wraps(fn)                                                │
    │   75 │   def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:                │
    │   76 │   │   with task_temp_dir():                                           │
    │ ❱ 77 │   │   │   return fn(*args, **kwargs)                                  │
    │   78 │                                                                       │
    │   79 │   return wrapper                                                      │
    │   80                                                                         │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\commands\dl.py:2146 in      │
    │ result                                                                       │
    │                                                                              │
    │   2143 │   │   │   tracks_label = "Getting Remote Tracks..." if self.is_remo │
    │   2144 │   │   │   with console.status(tracks_label, spinner="dots"):        │
    │   2145 │   │   │   │   try:                                                  │
    │ ❱ 2146 │   │   │   │   │   title.tracks.add(service.get_tracks(title), warn_ │
    │   2147 │   │   │   │   │   title.tracks.chapters = service.get_chapters(titl │
    │   2148 │   │   │   │   except Exception as e:                                │
    │   2149 │   │   │   │   │   if self.debug_logger:                             │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\services\_repos\git.gay__vi │
    │ nefeeder__twinvine-services\DSCP\__init__.py:309 in get_tracks               │
    │                                                                              │
    │   306 │   │   │   if isinstance(track, Subtitle):                            │
    │   307 │   │   │   │   tracks.subtitles.remove(track)                         │
    │   308 │   │                                                                  │
    │ ❱ 309 │   │   subtitles = self._process_subtitles(dash, original_language, s │
    │   310 │   │   tracks.add(subtitles)                                          │
    │   311 │   │                                                                  │
    │   312 │   │   return tracks                                                  │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\services\_repos\git.gay__vi │
    │ nefeeder__twinvine-services\DSCP\__init__.py:440 in _process_subtitles       │
    │                                                                              │
    │   437 │   │   │   track_name = "Original" if (language and is_close_match(la │
    │   438 │   │   │                                                              │
    │   439 │   │   │   final_tracks.append(                                       │
    │ ❱ 440 │   │   │   │   Subtitle(                                              │
    │   441 │   │   │   │   │   id_=track_id,                                      │
    │   442 │   │   │   │   │   url=dash.url,                                      │
    │   443 │   │   │   │   │   codec=Subtitle.Codec.WebVTT,                       │
    │                                                                              │
    │ C:\Users\Kev\TwinVine\packages\envied\src\envied\core\tracks\subtitle.py:173 │
    │ in __init__                                                                  │
    │                                                                              │
    │    170 │   │   │   More in-depth information, examples, and stuff to look fo │
    │    171 │   │   │   explanation list above.                                   │
    │    172 │   │   """                                                           │
    │ ❱  173 │   │   super().__init__(*args, **kwargs)                             │
    │    174 │   │                                                                 │
    │    175 │   │   if not isinstance(codec, (Subtitle.Codec, type(None))):       │
    │    176 │   │   │   raise TypeError(f"Expected codec to be a {Subtitle.Codec} │
    ╰──────────────────────────────────────────────────────────────────────────────╯
    TypeError: Track.__init__() got an unexpected keyword argument 'service'
    
    (TwinVine) C:\Users\Kev\TwinVine\.venv\Scripts>
    Thank you once again for the help.
    Quote Quote  
  28. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Originally Posted by kev043 View Post
    I've updated to the latest version of twinvine and services ran a series download for dscp and got this error.

    Thank you once again for the help.

    I found an update to DSCP yesterday and updated the git.gay/vinefeeder/twinvine-services repo; it would appear it doesn't work. I don't do pay services; I can't and won't test it. Its not part of my remit to support service code, you all know that. AI can help you and you should explore ways of helping yourselves.

    However, I will say this to you and others who fail to appreciate the power you now have in your hands. Remote services allow you to have many versions of the same service available to you; you can set up a choice of which service loads!!

    You can set this up in the envied.yaml; here is part of mine presently:-
    Image
    [Attachment 93888 - Click to enlarge]


    The yaml entries for where to find services are taken in order when envied first runs. I have no services in the link .packages/envied/src/envied/services
    but there are some in the second location, a remote one, https://git.gay/stabbedbybrick/unshackle-services.git so they all get loaded.

    (Note these are unshackle coded services but with shims they work with envied. I needed to add some more shims this evening for some imports that SBB's services need.)

    Then the next remote repo from twinvine-servies gets loaded - again any duplicates for services already loaded are ignored. New services should be added.

    And so on until the service list of locations is consumed.

    I have updated the envied-working-example.yaml; comment out and change the load order to suit you.
    Remember, any remote repos you find may be used, as well as lone services.
    If any need a shim not provided, say so here.

    What this means is, if you want to use SBB's services in preference to any at twinvine-services you would have SBB's services loaded first.

    You have control over which groups of services is loaded from which location. If you ever find a service that replaces one of SBBs's or twinvine-services' you would put in in the local packages/envied/src/envied/services/ folder and make sure that location is first on your list in the yaml.

    Image
    [Attachment 93889 - Click to enlarge]
    Last edited by A_n_g_e_l_a; 24th Sep 2026 at 17:59. Reason: added image
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  29. Thank you for the detailed info A_n_g_e_l_a it makes for a good read I appreciate the help
    Quote Quote  
  30. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    And don't forget if you are signed up to sp4rkys discord channel and can get a key you can use his remote services
    Image
    [Attachment 93895 - Click to enlarge]

    ...snip....
    Image
    [Attachment 93896 - Click to enlarge]
    Noob Starter Pack. Just download any Widevine media! Over 30,000 downloads for V6!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!