Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] Tidal track download JSONDecodeError: #797

Open
morgenstern72 opened this issue Jan 29, 2025 · 16 comments
Open

[BUG] Tidal track download JSONDecodeError: #797

morgenstern72 opened this issue Jan 29, 2025 · 16 comments
Labels
bug Something isn't working

Comments

@morgenstern72
Copy link

Describe the bug

C:\Windows\system32>rip search tidal track "All of me"
Select first entry from list from John Legend

┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ in _run_module_as_main:198                                                                       │
│ in _run_code:88                                                                                  │
│                                                                                                  │
│                                     ... 16 frames hidden ...                                     │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\json\decoder.py:337 in decode           │
│                                                                                                  │
│   334 │   │   containing a JSON document).                                                       │
│   335 │   │                                                                                      │
│   336 │   │   """                                                                                │
│ > 337 │   │   obj, end = self.raw_decode(s, idx=_w(s, 0).end())                                  │
│   338 │   │   end = _w(s, end).end()                                                             │
│   339 │   │   if end != len(s):                                                                  │
│   340 │   │   │   raise JSONDecodeError("Extra data", s, end)                                    │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\json\decoder.py:355 in raw_decode       │
│                                                                                                  │
│   352 │   │   try:                                                                               │
│   353 │   │   │   obj, end = self.scan_once(s, idx)                                              │
│   354 │   │   except StopIteration as err:                                                       │
│ > 355 │   │   │   raise JSONDecodeError("Expecting value", s, err.value) from None               │
│   356 │   │   return obj, end                                                                    │
│   357                                                                                            │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Most tracks so far could download, but also happens with other tracks.

Command Used

rip search tidal track "All of me"

Debug Traceback

[11:54:49] DEBUG    Executing SELECT EXISTS(SELECT 1 FROM downloads WHERE id=?)                                                                                                                          db.py:108
⠋ Resolving URLs...           DEBUG    {'id': 21977343, 'title': 'All of Me', 'duration': 270, 'replayGain': -9.3, 'peak': 1.0, 'allowStreaming': True, 'streamReady': True, 'adSupportedStreamReady': True, 'djReady':  tidal.py:104
                    True, 'stemReady': False, 'streamStartDate': '2013-08-30T00:00:00.000+0000', 'premiumStreamingOnly': False, 'trackNumber': 6, 'volumeNumber': 1, 'version': None, 'popularity':
                    74, 'copyright': '(P) 2013 Getting Out Our Dreams and Columbia Records, a Division of Sony Music Entertainment', 'bpm': 126, 'url': 'http://www.tidal.com/track/21977343',
                    'isrc': 'USSM11303954', 'editable': False, 'explicit': False, 'audioQuality': 'LOSSLESS', 'audioModes': ['STEREO'], 'mediaMetadata': {'tags': ['LOSSLESS', 'HIRES_LOSSLESS']},
                    'artist': {'id': 490, 'name': 'John Legend', 'type': 'MAIN', 'picture': 'dbf17b28-b207-471a-b97d-34d94a339a41'}, 'artists': [{'id': 490, 'name': 'John Legend', 'type': 'MAIN',
                    'picture': 'dbf17b28-b207-471a-b97d-34d94a339a41'}], 'album': {'id': 21977337, 'title': 'Love In The Future (Expanded Edition)', 'cover': 'f1508275-3f24-4084-99aa-58ac09f5ceeb',
                    'vibrantColor': '#cc5b61', 'videoCover': None}, 'mixes': {'TRACK_MIX': '001fef1c9225987a0d24c67c15315b'}}
⠴ Resolving URLs...           DEBUG    {'trackId': 21977343, 'assetPresentation': 'FULL', 'audioMode': 'STEREO', 'audioQuality': 'HI_RES_LOSSLESS', 'manifestMimeType': 'application/dash+xml', 'manifestHash':          tidal.py:137
                    'f+iBmzVQKij4MFSVr21ZH3aad5nCJRA7+717fV/RpNo=', 'manifest':
                    'PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48TVBEIHhtbG5zPSJ1cm46bXBlZzpkYXNoOnNjaGVtYTptcGQ6MjAxMSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5j
                    ZSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOmNlbmM9InVybjptcGVnOmNlbmM6MjAxMyIgeHNpOnNjaGVtYUxvY2F0aW9uPSJ1cm46bXBlZzpkYXNoOnNjaGVtYTptcGQ6MjAxMSBEQVNIL
                    U1QRC54c2QiIHByb2ZpbGVzPSJ1cm46bXBlZzpkYXNoOnByb2ZpbGU6aXNvZmYtbWFpbjoyMDExIiB0eXBlPSJzdGF0aWMiIG1pbkJ1ZmZlclRpbWU9IlBUMy45OTNTIiBtZWRpYVByZXNlbnRhdGlvbkR1cmF0aW9uPSJQVDRNMjkuNT
                    U2UyI+PFBlcmlvZCBpZD0iMCI+PEFkYXB0YXRpb25TZXQgaWQ9IjAiIGNvbnRlbnRUeXBlPSJhdWRpbyIgbWltZVR5cGU9ImF1ZGlvL21wNCIgc2VnbWVudEFsaWdubWVudD0idHJ1ZSI+PFJlcHJlc2VudGF0aW9uIGlkPSIwIiBjb2R
                    lY3M9ImZsYWMiIGJhbmR3aWR0aD0iMTUxMDQzMSIgYXVkaW9TYW1wbGluZ1JhdGU9IjQ0MTAwIj48U2VnbWVudFRlbXBsYXRlIHRpbWVzY2FsZT0iNDQxMDAiIGluaXRpYWxpemF0aW9uPSJodHRwczovL3NwLWFkLWZhLmF1ZGlvLnRp
                    ZGFsLmNvbS9tZWRpYXRyYWNrcy9HaXNJQXhJbk1qQTJaRFZrTVdNek1EWTROakF5TXpSaFlXRTJaalpqTkRnMU1UazBZbVpmTmpJdWJYQTBJaUFkQUFDQVFDQUNLaEFVaDBRdzhjTkhDZEhhdUhFUElQdlhNZ1VOQUFDZ1FRLzAubXA0P
                    3Rva2VuPTE3MzgxNTE2ODl+TDIxbFpHbGhkSEpoWTJ0ekwwZHBjMGxCZUVsdVRXcEJNbHBFVm10TlYwMTZUVVJaTkU1cVFYbE5lbEpvV1ZkRk1scHFXbXBPUkdjeFRWUnJNRmx0V21aT2FrbDFZbGhCTUVscFFXUkJRVU5CVVVOQlEwdG
                    9RVlZvTUZGM09HTk9TRU5rU0dGMVNFVlFTVkIyV0UxblZVNUJRVU5uVVZFdktuNDNZVFF4WmpkaE1HRmtOakEwWWpnek9EQmlNamhsWmpVeU1qazBOelUzTkdJM01UZ3lZakpqIiBtZWRpYT0iaHR0cHM6Ly9zcC1hZC1mYS5hdWRpby5
                    0aWRhbC5jb20vbWVkaWF0cmFja3MvR2lzSUF4SW5NakEyWkRWa01XTXpNRFk0TmpBeU16UmhZV0UyWmpaak5EZzFNVGswWW1aZk5qSXViWEEwSWlBZEFBQ0FRQ0FDS2hBVWgwUXc4Y05IQ2RIYXVIRVBJUHZYTWdVTkFBQ2dRUS8kTnVt
                    YmVyJC5tcDQ/dG9rZW49MTczODE1MTY4OX5MMjFsWkdsaGRISmhZMnR6TDBkcGMwbEJlRWx1VFdwQk1scEVWbXROVjAxNlRVUlpORTVxUVhsTmVsSm9XVmRGTWxwcVdtcE9SR2N4VFZSck1GbHRXbVpPYWtsMVlsaEJNRWxwUVdSQlFVT
                    kJVVU5CUTB0b1FWVm9NRkYzT0dOT1NFTmtTR0YxU0VWUVNWQjJXRTFuVlU1QlFVTm5VVkV2S240M1lUUXhaamRoTUdGa05qQTBZamd6T0RCaU1qaGxaalV5TWprME56VTNOR0kzTVRneVlqSmoiIHN0YXJ0TnVtYmVyPSIxIj48U2VnbW
                    VudFRpbWVsaW5lPjxTIGQ9IjE3NjEyOCIgcj0iNjYiLz48UyBkPSI4Njg4NiIvPjwvU2VnbWVudFRpbWVsaW5lPjwvU2VnbWVudFRlbXBsYXRlPjwvUmVwcmVzZW50YXRpb24+PC9BZGFwdGF0aW9uU2V0PjwvUGVyaW9kPjwvTVBEPg=
                    =', 'albumReplayGain': -9.3, 'albumPeakAmplitude': 1.0, 'trackReplayGain': -8.71, 'trackPeakAmplitude': 1.0, 'bitDepth': 24, 'sampleRate': 44100}
[11:54:50] DEBUG    Removing dirs {'D:\\Filebot\\streamrip\\downloads\\__artwork'}                                                                                                                   artwork.py:19
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ in _run_module_as_main:198                                                                       │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │   alter_argv = False                                                                         │ │
│ │         code = <code object <module> at 0x000002AB27886140, file                             │ │
│ │                "C:\Users\trj\AppData\Local\Programs\Python\Python311\Scripts\rip.exe\__main… │ │
│ │                line 1>                                                                       │ │
│ │ main_globals = {                                                                             │ │
│ │                │   '__name__': '__main__',                                                   │ │
│ │                │   '__doc__': None,                                                          │ │
│ │                │   '__package__': '',                                                        │ │
│ │                │   '__loader__': <zipimporter object                                         │ │
│ │                "C:\Users\trj\AppData\Local\Programs\Python\Python311\Scripts\rip.exe\">,     │ │
│ │                │   '__spec__': ModuleSpec(name='__main__', loader=<zipimporter object        │ │
│ │                "C:\Users\trj\AppData\Local\Programs\Python\Python311\Scripts\rip.exe\">,     │ │
│ │                origin='C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts… │ │
│ │                │   '__annotations__': {},                                                    │ │
│ │                │   '__builtins__': <module 'builtins' (built-in)>,                           │ │
│ │                │   '__file__':                                                               │ │
│ │                'C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts\\rip.e… │ │
│ │                │   '__cached__':                                                             │ │
│ │                'C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts\\rip.e… │ │
│ │                │   're': <module 're' from                                                   │ │
│ │                'C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\re\\__ini… │ │
│ │                │   ... +2                                                                    │ │
│ │                }                                                                             │ │
│ │     mod_name = '__main__'                                                                    │ │
│ │     mod_spec = ModuleSpec(name='__main__', loader=<zipimporter object                        │ │
│ │                "C:\Users\trj\AppData\Local\Programs\Python\Python311\Scripts\rip.exe\">,     │ │
│ │                origin='C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts… │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ in _run_code:88                                                                                  │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │       cached = 'C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts\\rip.e… │ │
│ │         code = <code object <module> at 0x000002AB27886140, file                             │ │
│ │                "C:\Users\trj\AppData\Local\Programs\Python\Python311\Scripts\rip.exe\__main… │ │
│ │                line 1>                                                                       │ │
│ │        fname = 'C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts\\rip.e… │ │
│ │ init_globals = None                                                                          │ │
│ │       loader = <zipimporter object                                                           │ │
│ │                "C:\Users\trj\AppData\Local\Programs\Python\Python311\Scripts\rip.exe\">      │ │
│ │     mod_name = '__main__'                                                                    │ │
│ │     mod_spec = ModuleSpec(name='__main__', loader=<zipimporter object                        │ │
│ │                "C:\Users\trj\AppData\Local\Programs\Python\Python311\Scripts\rip.exe\">,     │ │
│ │                origin='C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts… │ │
│ │     pkg_name = ''                                                                            │ │
│ │  run_globals = {                                                                             │ │
│ │                │   '__name__': '__main__',                                                   │ │
│ │                │   '__doc__': None,                                                          │ │
│ │                │   '__package__': '',                                                        │ │
│ │                │   '__loader__': <zipimporter object                                         │ │
│ │                "C:\Users\trj\AppData\Local\Programs\Python\Python311\Scripts\rip.exe\">,     │ │
│ │                │   '__spec__': ModuleSpec(name='__main__', loader=<zipimporter object        │ │
│ │                "C:\Users\trj\AppData\Local\Programs\Python\Python311\Scripts\rip.exe\">,     │ │
│ │                origin='C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts… │ │
│ │                │   '__annotations__': {},                                                    │ │
│ │                │   '__builtins__': <module 'builtins' (built-in)>,                           │ │
│ │                │   '__file__':                                                               │ │
│ │                'C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts\\rip.e… │ │
│ │                │   '__cached__':                                                             │ │
│ │                'C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Scripts\\rip.e… │ │
│ │                │   're': <module 're' from                                                   │ │
│ │                'C:\\Users\\trj\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\re\\__ini… │ │
│ │                │   ... +2                                                                    │ │
│ │                }                                                                             │ │
│ │  script_name = None                                                                          │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                                  │
│ in <module>:7                                                                                    │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py:1161 in     │
│ __call__                                                                                         │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py:1082 in     │
│ main                                                                                             │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py:1697 in     │
│ invoke                                                                                           │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py:1443 in     │
│ invoke                                                                                           │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py:788 in      │
│ invoke                                                                                           │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\decorators.py:33 in │
│ new_func                                                                                         │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\streamrip\rip\cli.py:28   │
│ in wrapper                                                                                       │
│                                                                                                  │
│    25 def coro(f):                                                                               │
│    26 │   @wraps(f)                                                                              │
│    27 │   def wrapper(*args, **kwargs):                                                          │
│ >  28 │   │   return asyncio.run(f(*args, **kwargs))                                             │
│    29 │                                                                                          │
│    30 │   return wrapper                                                                         │
│    31                                                                                            │
│                                                                                                  │
│ ┌─────────────────────────── locals ────────────────────────────┐                                │
│ │   args = (<click.core.Context object at 0x000002AB27DA6410>,) │                                │
│ │ kwargs = {                                                    │                                │
│ │          │   'source': 'tidal',                               │                                │
│ │          │   'media_type': 'track',                           │                                │
│ │          │   'query': 'All of me',                            │                                │
│ │          │   'first': False,                                  │                                │
│ │          │   'output_file': None,                             │                                │
│ │          │   'num_results': 100                               │                                │
│ │          }                                                    │                                │
│ └───────────────────────────────────────────────────────────────┘                                │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py:190 in run           │
│                                                                                                  │
│   187 │   │   │   "asyncio.run() cannot be called from a running event loop")                    │
│   188 │                                                                                          │
│   189 │   with Runner(debug=debug) as runner:                                                    │
│ > 190 │   │   return runner.run(main)                                                            │
│   191                                                                                            │
│   192                                                                                            │
│   193 def _cancel_all_tasks(loop):                                                               │
│                                                                                                  │
│ ┌──────────────────────────── locals ────────────────────────────┐                               │
│ │  debug = None                                                  │                               │
│ │   main = <coroutine object search at 0x000002AB2A217880>       │                               │
│ │ runner = <asyncio.runners.Runner object at 0x000002AB2A67BC90> │                               │
│ └────────────────────────────────────────────────────────────────┘                               │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py:118 in run           │
│                                                                                                  │
│   115 │   │                                                                                      │
│   116 │   │   self._interrupt_count = 0                                                          │
│   117 │   │   try:                                                                               │
│ > 118 │   │   │   return self._loop.run_until_complete(task)                                     │
│   119 │   │   except exceptions.CancelledError:                                                  │
│   120 │   │   │   if self._interrupt_count > 0:                                                  │
│   121 │   │   │   │   uncancel = getattr(task, "uncancel", None)                                 │
│                                                                                                  │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │        context = <_contextvars.Context object at 0x000002AB2A67A500>                         │ │
│ │           coro = <coroutine object search at 0x000002AB2A217880>                             │ │
│ │           self = <asyncio.runners.Runner object at 0x000002AB2A67BC90>                       │ │
│ │ sigint_handler = functools.partial(<bound method Runner._on_sigint of                        │ │
│ │                  <asyncio.runners.Runner object at 0x000002AB2A67BC90>>, main_task=<Task     │ │
│ │                  finished name='Task-1' coro=<search() done, defined at                      │ │
│ │                  C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\str… │ │
│ │                  exception=JSONDecodeError('Expecting value: line 1 column 1 (char 0)')>)    │ │
│ │           task = <Task finished name='Task-1' coro=<search() done, defined at                │ │
│ │                  C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\str… │ │
│ │                  exception=JSONDecodeError('Expecting value: line 1 column 1 (char 0)')>     │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py:654 in           │
│ run_until_complete                                                                               │
│                                                                                                  │
│    651 │   │   if not future.done():                                                             │
│    652 │   │   │   raise RuntimeError('Event loop stopped before Future completed.')             │
│    653 │   │                                                                                     │
│ >  654 │   │   return future.result()                                                            │
│    655 │                                                                                         │
│    656 │   def stop(self):                                                                       │
│    657 │   │   """Stop running the event loop.                                                   │
│                                                                                                  │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │   future = <Task finished name='Task-1' coro=<search() done, defined at                      │ │
│ │            C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\streamrip… │ │
│ │            exception=JSONDecodeError('Expecting value: line 1 column 1 (char 0)')>           │ │
│ │ new_task = False                                                                             │ │
│ │     self = <ProactorEventLoop running=False closed=True debug=False>                         │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\streamrip\rip\cli.py:372  │
│ in search                                                                                        │
│                                                                                                  │
│   369 │   │   │   │   )                                                                          │
│   370 │   │   │   else:                                                                          │
│   371 │   │   │   │   await main.search_interactive(source, media_type, query)                   │
│ > 372 │   │   │   await main.resolve()                                                           │
│   373 │   │   │   await main.rip()                                                               │
│   374                                                                                            │
│   375                                                                                            │
│                                                                                                  │
│ ┌─────────────────────────────── locals ───────────────────────────────┐                         │
│ │         cfg = <streamrip.config.Config object at 0x000002AB29BE6710> │                         │
│ │         ctx = <click.core.Context object at 0x000002AB27DA6410>      │                         │
│ │       first = False                                                  │                         │
│ │        main = <streamrip.rip.main.Main object at 0x000002AB2A679A10> │                         │
│ │  media_type = 'track'                                                │                         │
│ │ num_results = 100                                                    │                         │
│ │ output_file = None                                                   │                         │
│ │       query = 'All of me'                                            │                         │
│ │      source = 'tidal'                                                │                         │
│ └──────────────────────────────────────────────────────────────────────┘                         │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\streamrip\rip\main.py:157 │
│ in resolve                                                                                       │
│                                                                                                  │
│   154 │   │   with console.status("Resolving URLs...", spinner="dots"):                          │
│   155 │   │   │   coros = [p.resolve() for p in self.pending]                                    │
│   156 │   │   │   new_media: list[Media] = [                                                     │
│ > 157 │   │   │   │   m for m in await asyncio.gather(*coros) if m is not None                   │
│   158 │   │   │   ]                                                                              │
│   159 │   │                                                                                      │
│   160 │   │   self.media.extend(new_media)                                                       │
│                                                                                                  │
│ ┌───────────────────────────────── locals ─────────────────────────────────┐                     │
│ │ coros = [<coroutine object PendingSingle.resolve at 0x000002AB2A342260>] │                     │
│ │  self = <streamrip.rip.main.Main object at 0x000002AB2A679A10>           │                     │
│ └──────────────────────────────────────────────────────────────────────────┘                     │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\streamrip\media\track.py: │
│ 185 in resolve                                                                                   │
│                                                                                                  │
│   182 │   │                                                                                      │
│   183 │   │   os.makedirs(folder, exist_ok=True)                                                 │
│   184 │   │                                                                                      │
│ > 185 │   │   embedded_cover_path, downloadable = await asyncio.gather(                          │
│   186 │   │   │   self._download_cover(album.covers, folder),                                    │
│   187 │   │   │   self.client.get_downloadable(self.id, quality),                                │
│   188 │   │   )                                                                                  │
│                                                                                                  │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │   album = AlbumMetadata(                                                                     │ │
│ │           │   info=AlbumInfo(                                                                │ │
│ │           │   │   id='21977343',                                                             │ │
│ │           │   │   quality=2,                                                                 │ │
│ │           │   │   container='MP4',                                                           │ │
│ │           │   │   label=None,                                                                │ │
│ │           │   │   explicit=False,                                                            │ │
│ │           │   │   sampling_rate=44100,                                                       │ │
│ │           │   │   bit_depth=16,                                                              │ │
│ │           │   │   booklets=None                                                              │ │
│ │           │   ),                                                                             │ │
│ │           │   album='Love In The Future (Expanded Edition)',                                 │ │
│ │           │   albumartist='John Legend',                                                     │ │
│ │           │   year='2013',                                                                   │ │
│ │           │   genre=[],                                                                      │ │
│ │           │   covers=Covers(('original',                                                     │ │
│ │           'https://resources.tidal.com/images/f1508275/3f24/4084/99aa/58ac09f5ceeb/1280x128… │ │
│ │           'D:\\Filebot\\streamrip\\downloads\\cover.jpg')                                    │ │
│ │           ('large',                                                                          │ │
│ │           'https://resources.tidal.com/images/f1508275/3f24/4084/99aa/58ac09f5ceeb/640x640.… │ │
│ │           'D:\\Filebot\\streamrip\\downloads\\__artwork\\cover-4880630190446832370.jpg')     │ │
│ │           ('small',                                                                          │ │
│ │           'https://resources.tidal.com/images/f1508275/3f24/4084/99aa/58ac09f5ceeb/320x320.… │ │
│ │           None)                                                                              │ │
│ │           ('thumbnail',                                                                      │ │
│ │           'https://resources.tidal.com/images/f1508275/3f24/4084/99aa/58ac09f5ceeb/160x160.… │ │
│ │           None)),                                                                            │ │
│ │           │   tracktotal=1,                                                                  │ │
│ │           │   disctotal=1,                                                                   │ │
│ │           │   albumcomposer=None,                                                            │ │
│ │           │   comment=None,                                                                  │ │
│ │           │   compilation=None,                                                              │ │
│ │           │   copyright='(P) 2013 Getting Out Our Dreams and Columbia Records, a Division of │ │
│ │           Sony Music E'+12,                                                                  │ │
│ │           │   date='2013-08-30T00:00:00.000+0000',                                           │ │
│ │           │   description=None,                                                              │ │
│ │           │   encoder=None,                                                                  │ │
│ │           │   grouping=None,                                                                 │ │
│ │           │   lyrics=None,                                                                   │ │
│ │           │   purchase_date=None                                                             │ │
│ │           )                                                                                  │ │
│ │  config = ConfigData(                                                                        │ │
│ │           │   toml={'downloads': {'folder': 'D:\\Filebot\\streamrip\\downloads',             │ │
│ │           'source_subdirectories': False, 'concurrency': True, 'max_connections': 6,         │ │
│ │           'requests_per_minute': 60}, 'qobuz': {'quality': 3, 'download_booklets': False,    │ │
│ │           'use_auth_token': False, 'email_or_userid': '', 'password_or_token': '', 'app_id': │ │
│ │           '', 'secrets': []}, 'tidal': {'quality': 3, 'download_videos': False, 'user_id':   │ │
│ │           169818634, 'country_code': 'AT', 'access_token':                                   │ │
│ │           'eyJraWQiOiJ2OU1GbFhqWSIsImFsZyI6IkVTMjU2In0.eyJ0eXBlIjoibzJfYWNjZXNzIiwidWlkIjox… │ │
│ │           'refresh_token':                                                                   │ │
│ │           'eyJraWQiOiJoUzFKYTdVMCIsImFsZyI6IkVTNTEyIn0.eyJ0eXBlIjoibzJfcmVmcmVzaCIsInVpZCI6… │ │
│ │           'token_expiry': 1738501308.7026207}, 'deezer': {'quality': 2, 'arl': '',           │ │
│ │           'use_deezloader': True, 'deezloader_warnings': True}, 'soundcloud': {'quality': 0, │ │
│ │           'client_id': '', 'app_version': ''}, 'youtube': {'quality': 0, 'download_videos':  │ │
│ │           False, 'video_downloads_folder':                                                   │ │
│ │           'C:\\Users\\trj\\StreamripDownloads\\YouTubeVideos'}, 'database':                  │ │
│ │           {'downloads_enabled': True, 'downloads_path':                                      │ │
│ │           'C:\\Users\\trj\\AppData\\Roaming\\streamrip\\downloads.db',                       │ │
│ │           'failed_downloads_enabled': True, 'failed_downloads_path':                         │ │
│ │           'C:\\Users\\trj\\AppData\\Roaming\\streamrip\\failed_downloads.db'}, 'conversion': │ │
│ │           {'enabled': False, 'codec': 'ALAC', 'sampling_rate': 48000, 'bit_depth': 24,       │ │
│ │           'lossy_bitrate': 320}, 'qobuz_filters': {'extras': False, 'repeats': False,        │ │
│ │           'non_albums': False, 'features': False, 'non_studio_albums': False,                │ │
│ │           'non_remaster': False}, 'artwork': {'embed': True, 'embed_size': 'large',          │ │
│ │           'embed_max_width': -1, 'save_artwork': True, 'saved_max_width': -1}, 'metadata':   │ │
│ │           {'set_playlist_to_album': True, 'renumber_playlist_tracks': True, 'exclude': []},  │ │
│ │           'filepaths': {'add_singles_to_folder': False, 'folder_format': '{albumartist} -    │ │
│ │           {title} ({year}) [{container}] [{bit_depth}B-{sampling_rate}kHz]', 'track_format': │ │
│ │           '{tracknumber:02}. {artist} - {title}{explicit}', 'restrict_characters': False,    │ │
│ │           'truncate_to': 120}, 'lastfm': {'source': 'qobuz', 'fallback_source': ''}, 'cli':  │ │
│ │           {'text_output': True, 'progress_bars': True, 'max_search_results': 100}, 'misc':   │ │
│ │           {'version': '2.0.3', 'check_for_updates': True}},                                  │ │
│ │           │   downloads=DownloadsConfig(                                                     │ │
│ │           │   │   folder='D:\\Filebot\\streamrip\\downloads',                                │ │
│ │           │   │   source_subdirectories=False,                                               │ │
│ │           │   │   concurrency=True,                                                          │ │
│ │           │   │   max_connections=6,                                                         │ │
│ │           │   │   requests_per_minute=60                                                     │ │
│ │           │   ),                                                                             │ │
│ │           │   qobuz=QobuzConfig(                                                             │ │
│ │           │   │   use_auth_token=False,                                                      │ │
│ │           │   │   email_or_userid='',                                                        │ │
│ │           │   │   password_or_token='',                                                      │ │
│ │           │   │   app_id='',                                                                 │ │
│ │           │   │   quality=3,                                                                 │ │
│ │           │   │   download_booklets=False,                                                   │ │
│ │           │   │   secrets=[]                                                                 │ │
│ │           │   ),                                                                             │ │
│ │           │   tidal=TidalConfig(                                                             │ │
│ │           │   │   user_id=169818634,                                                         │ │
│ │           │   │   country_code='AT',                                                         │ │
│ │           │   │                                                                              │ │
│ │           access_token='eyJraWQiOiJ2OU1GbFhqWSIsImFsZyI6IkVTMjU2In0.eyJ0eXBlIjoibzJfYWNjZXN… │ │
│ │           │   │                                                                              │ │
│ │           refresh_token='eyJraWQiOiJoUzFKYTdVMCIsImFsZyI6IkVTNTEyIn0.eyJ0eXBlIjoibzJfcmVmcm… │ │
│ │           │   │   token_expiry=1738501308.7026207,                                           │ │
│ │           │   │   quality=3,                                                                 │ │
│ │           │   │   download_videos=False                                                      │ │
│ │           │   ),                                                                             │ │
│ │           │   deezer=DeezerConfig(                                                           │ │
│ │           │   │   arl='',                                                                    │ │
│ │           │   │   quality=2,                                                                 │ │
│ │           │   │   use_deezloader=True,                                                       │ │
│ │           │   │   deezloader_warnings=True                                                   │ │
│ │           │   ),                                                                             │ │
│ │           │   soundcloud=SoundcloudConfig(client_id='', app_version='', quality=0),          │ │
│ │           │   youtube=YoutubeConfig(                                                         │ │
│ │           │   │                                                                              │ │
│ │           video_downloads_folder='C:\\Users\\trj\\StreamripDownloads\\YouTubeVideos',        │ │
│ │           │   │   quality=0,                                                                 │ │
│ │           │   │   download_videos=False                                                      │ │
│ │           │   ),                                                                             │ │
│ │           │   lastfm=LastFmConfig(source='qobuz', fallback_source=''),                       │ │
│ │           │   filepaths=FilepathsConfig(                                                     │ │
│ │           │   │   add_singles_to_folder=False,                                               │ │
│ │           │   │   folder_format='{albumartist} - {title} ({year}) [{container}]              │ │
│ │           [{bit_depth}B-{sampling_rate}kHz]',                                                │ │
│ │           │   │   track_format='{tracknumber:02}. {artist} - {title}{explicit}',             │ │
│ │           │   │   restrict_characters=False,                                                 │ │
│ │           │   │   truncate_to=120                                                            │ │
│ │           │   ),                                                                             │ │
│ │           │   artwork=ArtworkConfig(                                                         │ │
│ │           │   │   embed=True,                                                                │ │
│ │           │   │   embed_size='large',                                                        │ │
│ │           │   │   embed_max_width=-1,                                                        │ │
│ │           │   │   save_artwork=True,                                                         │ │
│ │           │   │   saved_max_width=-1                                                         │ │
│ │           │   ),                                                                             │ │
│ │           │   metadata=MetadataConfig(                                                       │ │
│ │           │   │   set_playlist_to_album=True,                                                │ │
│ │           │   │   renumber_playlist_tracks=True,                                             │ │
│ │           │   │   exclude=[]                                                                 │ │
│ │           │   ),                                                                             │ │
│ │           │   qobuz_filters=QobuzDiscographyFilterConfig(                                    │ │
│ │           │   │   extras=False,                                                              │ │
│ │           │   │   repeats=False,                                                             │ │
│ │           │   │   non_albums=False,                                                          │ │
│ │           │   │   features=False,                                                            │ │
│ │           │   │   non_studio_albums=False,                                                   │ │
│ │           │   │   non_remaster=False                                                         │ │
│ │           │   ),                                                                             │ │
│ │           │   cli=CliConfig(text_output=True, progress_bars=True, max_search_results=100),   │ │
│ │           │   database=DatabaseConfig(                                                       │ │
│ │           │   │   downloads_enabled=True,                                                    │ │
│ │           │   │                                                                              │ │
│ │           downloads_path='C:\\Users\\trj\\AppData\\Roaming\\streamrip\\downloads.db',        │ │
│ │           │   │   failed_downloads_enabled=True,                                             │ │
│ │           │   │                                                                              │ │
│ │           failed_downloads_path='C:\\Users\\trj\\AppData\\Roaming\\streamrip\\failed_downlo… │ │
│ │           │   ),                                                                             │ │
│ │           │   conversion=ConversionConfig(                                                   │ │
│ │           │   │   enabled=False,                                                             │ │
│ │           │   │   codec='ALAC',                                                              │ │
│ │           │   │   sampling_rate=48000,                                                       │ │
│ │           │   │   bit_depth=24,                                                              │ │
│ │           │   │   lossy_bitrate=320                                                          │ │
│ │           │   ),                                                                             │ │
│ │           │   misc=MiscConfig(version='2.0.3', check_for_updates=True),                      │ │
│ │           │   _modified=False                                                                │ │
│ │           )                                                                                  │ │
│ │  folder = 'D:\\Filebot\\streamrip\\downloads'                                                │ │
│ │    meta = TrackMetadata(                                                                     │ │
│ │           │   info=TrackInfo(                                                                │ │
│ │           │   │   id='21977343',                                                             │ │
│ │           │   │   quality=2,                                                                 │ │
│ │           │   │   bit_depth=16,                                                              │ │
│ │           │   │   explicit=False,                                                            │ │
│ │           │   │   sampling_rate=44100,                                                       │ │
│ │           │   │   work=None                                                                  │ │
│ │           │   ),                                                                             │ │
│ │           │   title='All of Me',                                                             │ │
│ │           │   album=AlbumMetadata(                                                           │ │
│ │           │   │   info=AlbumInfo(                                                            │ │
│ │           │   │   │   id='21977343',                                                         │ │
│ │           │   │   │   quality=2,                                                             │ │
│ │           │   │   │   container='MP4',                                                       │ │
│ │           │   │   │   label=None,                                                            │ │
│ │           │   │   │   explicit=False,                                                        │ │
│ │           │   │   │   sampling_rate=44100,                                                   │ │
│ │           │   │   │   bit_depth=16,                                                          │ │
│ │           │   │   │   booklets=None                                                          │ │
│ │           │   │   ),                                                                         │ │
│ │           │   │   album='Love In The Future (Expanded Edition)',                             │ │
│ │           │   │   albumartist='John Legend',                                                 │ │
│ │           │   │   year='2013',                                                               │ │
│ │           │   │   genre=[],                                                                  │ │
│ │           │   │   covers=Covers(('original',                                                 │ │
│ │           'https://resources.tidal.com/images/f1508275/3f24/4084/99aa/58ac09f5ceeb/1280x128… │ │
│ │           'D:\\Filebot\\streamrip\\downloads\\cover.jpg')                                    │ │
│ │           ('large',                                                                          │ │
│ │           'https://resources.tidal.com/images/f1508275/3f24/4084/99aa/58ac09f5ceeb/640x640.… │ │
│ │           'D:\\Filebot\\streamrip\\downloads\\__artwork\\cover-4880630190446832370.jpg')     │ │
│ │           ('small',                                                                          │ │
│ │           'https://resources.tidal.com/images/f1508275/3f24/4084/99aa/58ac09f5ceeb/320x320.… │ │
│ │           None)                                                                              │ │
│ │           ('thumbnail',                                                                      │ │
│ │           'https://resources.tidal.com/images/f1508275/3f24/4084/99aa/58ac09f5ceeb/160x160.… │ │
│ │           None)),                                                                            │ │
│ │           │   │   tracktotal=1,                                                              │ │
│ │           │   │   disctotal=1,                                                               │ │
│ │           │   │   albumcomposer=None,                                                        │ │
│ │           │   │   comment=None,                                                              │ │
│ │           │   │   compilation=None,                                                          │ │
│ │           │   │   copyright='(P) 2013 Getting Out Our Dreams and Columbia Records, a         │ │
│ │           Division of Sony Music E'+12,                                                      │ │
│ │           │   │   date='2013-08-30T00:00:00.000+0000',                                       │ │
│ │           │   │   description=None,                                                          │ │
│ │           │   │   encoder=None,                                                              │ │
│ │           │   │   grouping=None,                                                             │ │
│ │           │   │   lyrics=None,                                                               │ │
│ │           │   │   purchase_date=None                                                         │ │
│ │           │   ),                                                                             │ │
│ │           │   artist='John Legend',                                                          │ │
│ │           │   tracknumber=6,                                                                 │ │
│ │           │   discnumber=1,                                                                  │ │
│ │           │   composer=None,                                                                 │ │
│ │           │   isrc='USSM11303954'                                                            │ │
│ │           )                                                                                  │ │
│ │  parent = 'D:\\Filebot\\streamrip\\downloads'                                                │ │
│ │ quality = 3                                                                                  │ │
│ │    resp = {                                                                                  │ │
│ │           │   'id': 21977343,                                                                │ │
│ │           │   'title': 'All of Me',                                                          │ │
│ │           │   'duration': 270,                                                               │ │
│ │           │   'replayGain': -9.3,                                                            │ │
│ │           │   'peak': 1.0,                                                                   │ │
│ │           │   'allowStreaming': True,                                                        │ │
│ │           │   'streamReady': True,                                                           │ │
│ │           │   'adSupportedStreamReady': True,                                                │ │
│ │           │   'djReady': True,                                                               │ │
│ │           │   'stemReady': False,                                                            │ │
│ │           │   ... +19                                                                        │ │
│ │           }                                                                                  │ │
│ │    self = PendingSingle(                                                                     │ │
│ │           │   id='21977343',                                                                 │ │
│ │           │   client=<streamrip.client.tidal.TidalClient object at 0x000002AB2A6794D0>,      │ │
│ │           │   config=<streamrip.config.Config object at 0x000002AB29BE6710>,                 │ │
│ │           │   db=Database(                                                                   │ │
│ │           │   │   downloads=<streamrip.db.Downloads object at 0x000002AB2A5D4A50>,           │ │
│ │           │   │   failed=<streamrip.db.Failed object at 0x000002AB2A5D4910>                  │ │
│ │           │   )                                                                              │ │
│ │           )                                                                                  │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\site-packages\streamrip\client\tidal.py │
│ :139 in get_downloadable                                                                         │
│                                                                                                  │
│   136 │   │   )                                                                                  │
│   137 │   │   logger.debug(resp)                                                                 │
│   138 │   │   try:                                                                               │
│ > 139 │   │   │   manifest = json.loads(base64.b64decode(resp["manifest"]).decode("utf-8"))      │
│   140 │   │   except KeyError:                                                                   │
│   141 │   │   │   raise Exception(resp["userMessage"])                                           │
│   142                                                                                            │
│                                                                                                  │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │   params = {                                                                                 │ │
│ │            │   'audioquality': 'HI_RES',                                                     │ │
│ │            │   'playbackmode': 'STREAM',                                                     │ │
│ │            │   'assetpresentation': 'FULL',                                                  │ │
│ │            │   'countryCode': 'AT',                                                          │ │
│ │            │   'limit': 100                                                                  │ │
│ │            }                                                                                 │ │
│ │  quality = 3                                                                                 │ │
│ │     resp = {                                                                                 │ │
│ │            │   'trackId': 21977343,                                                          │ │
│ │            │   'assetPresentation': 'FULL',                                                  │ │
│ │            │   'audioMode': 'STEREO',                                                        │ │
│ │            │   'audioQuality': 'HI_RES_LOSSLESS',                                            │ │
│ │            │   'manifestMimeType': 'application/dash+xml',                                   │ │
│ │            │   'manifestHash': 'f+iBmzVQKij4MFSVr21ZH3aad5nCJRA7+717fV/RpNo=',               │ │
│ │            │   'manifest':                                                                   │ │
│ │            'PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48TVBEIHhtbG5zPSJ1cm46bXBlZzp… │ │
│ │            │   'albumReplayGain': -9.3,                                                      │ │
│ │            │   'albumPeakAmplitude': 1.0,                                                    │ │
│ │            │   'trackReplayGain': -8.71,                                                     │ │
│ │            │   ... +3                                                                        │ │
│ │            }                                                                                 │ │
│ │     self = <streamrip.client.tidal.TidalClient object at 0x000002AB2A6794D0>                 │ │
│ │ track_id = '21977343'                                                                        │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\json\__init__.py:346 in loads           │
│                                                                                                  │
│   343 │   if (cls is None and object_hook is None and                                            │
│   344 │   │   │   parse_int is None and parse_float is None and                                  │
│   345 │   │   │   parse_constant is None and object_pairs_hook is None and not kw):              │
│ > 346 │   │   return _default_decoder.decode(s)                                                  │
│   347 │   if cls is None:                                                                        │
│   348 │   │   cls = JSONDecoder                                                                  │
│   349 │   if object_hook is not None:                                                            │
│                                                                                                  │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │               cls = None                                                                     │ │
│ │                kw = {}                                                                       │ │
│ │       object_hook = None                                                                     │ │
│ │ object_pairs_hook = None                                                                     │ │
│ │    parse_constant = None                                                                     │ │
│ │       parse_float = None                                                                     │ │
│ │         parse_int = None                                                                     │ │
│ │                 s = '<?xml version=\'1.0\' encoding=\'UTF-8\'?><MPD                          │ │
│ │                     xmlns="urn:mpeg:dash:schema:mpd:2011"'+1511                              │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\json\decoder.py:337 in decode           │
│                                                                                                  │
│   334 │   │   containing a JSON document).                                                       │
│   335 │   │                                                                                      │
│   336 │   │   """                                                                                │
│ > 337 │   │   obj, end = self.raw_decode(s, idx=_w(s, 0).end())                                  │
│   338 │   │   end = _w(s, end).end()                                                             │
│   339 │   │   if end != len(s):                                                                  │
│   340 │   │   │   raise JSONDecodeError("Extra data", s, end)                                    │
│                                                                                                  │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │   _w = <built-in method match of re.Pattern object at 0x000002AB28D78C70>                    │ │
│ │    s = '<?xml version=\'1.0\' encoding=\'UTF-8\'?><MPD                                       │ │
│ │        xmlns="urn:mpeg:dash:schema:mpd:2011"'+1511                                           │ │
│ │ self = <json.decoder.JSONDecoder object at 0x000002AB28D8C310>                               │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\json\decoder.py:355 in raw_decode       │
│                                                                                                  │
│   352 │   │   try:                                                                               │
│   353 │   │   │   obj, end = self.scan_once(s, idx)                                              │
│   354 │   │   except StopIteration as err:                                                       │
│ > 355 │   │   │   raise JSONDecodeError("Expecting value", s, err.value) from None               │
│   356 │   │   return obj, end                                                                    │
│   357                                                                                            │
│                                                                                                  │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │  idx = 0                                                                                     │ │
│ │    s = '<?xml version=\'1.0\' encoding=\'UTF-8\'?><MPD                                       │ │
│ │        xmlns="urn:mpeg:dash:schema:mpd:2011"'+1511                                           │ │
│ │ self = <json.decoder.JSONDecoder object at 0x000002AB28D8C310>                               │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Config File

vanilla

Operating System

Windows 10 Pro 22H2

streamrip version

rip, version 2.0.5

Screenshots and recordings

No response

Additional context

No response

@morgenstern72 morgenstern72 added the bug Something isn't working label Jan 29, 2025
@morgenstern72
Copy link
Author

Another example, wehre some tracks are downloaded, but then it crashes


C:\Windows\system32>rip search tidal artist "Sirgun Kaur"
─────────────────────────────────────────────────────────────────── Downloading Mantraspheric: Aad Guray Nameh, For Pamela, The Cosmic Gift... ───────────────────────────────────────────────────────────────────
Track 1 ---------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------- 36.8% • 3.1 MB/s • 0:00:10
Track 2 ------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------- 21.3% • 3.1 MB/s • 0:00:18
Track 1 ------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------- 52.0% • 3.1 MB/s • 0:00:05
Track 2 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- 93.9% • 3.1 MB/s • 0:00:01
Track 3 ------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------- 24.7% • 3.1 MB/s • 0:00:15
Track 4 --- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2.3%  • 2.0 MB/s • 0:00:15
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ in _run_module_as_main:198                                                                       │
│ in _run_code:88                                                                                  │
│                                                                                                  │
│                                     ... 23 frames hidden ...                                     │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\json\decoder.py:337 in decode           │
│                                                                                                  │
│   334 │   │   containing a JSON document).                                                       │
│   335 │   │                                                                                      │
│   336 │   │   """                                                                                │
│ > 337 │   │   obj, end = self.raw_decode(s, idx=_w(s, 0).end())                                  │
│   338 │   │   end = _w(s, end).end()                                                             │
│   339 │   │   if end != len(s):                                                                  │
│   340 │   │   │   raise JSONDecodeError("Extra data", s, end)                                    │
│                                                                                                  │
│ C:\Users\trj\AppData\Local\Programs\Python\Python311\Lib\json\decoder.py:355 in raw_decode       │
│                                                                                                  │
│   352 │   │   try:                                                                               │
│   353 │   │   │   obj, end = self.scan_once(s, idx)                                              │
│   354 │   │   except StopIteration as err:                                                       │
│ > 355 │   │   │   raise JSONDecodeError("Expecting value", s, err.value) from None               │
│   356 │   │   return obj, end                                                                    │
│   357                                                                                            │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
sys:1: RuntimeWarning: coroutine 'Artist._download_async.<locals>._rip' was never awaited

@ppamorim
Copy link

I have the same issue.

@wilsonnkwan
Copy link

Same issue

@ppamorim
Copy link

ppamorim commented Feb 5, 2025

Same issue

Use the parameter -q 2 like rip -q 2 url "$URL", this will force rip to use the API v2.

@morgenstern72
Copy link
Author

Same issue

Use the parameter -q 2 like rip -q 2 url "$URL", this will force rip to use the API v2.

Thank you, both my examples work with this paramater:
rip -q 2 search tidal artist "Sirgun Kaur" and
rip -q 2 search tidal track "All of me"

Is it possible to modify the config so this parameter is used by default?

@morgenstern72
Copy link
Author

Just for information, since you used $URL in the example, I also tested this parameter with playlist download, but it does not resolve the issue there: #795

@Jonathan1559
Copy link

Jonathan1559 commented Feb 15, 2025

Same issue

Use the parameter -q 2 like rip -q 2 url "$URL", this will force rip to use the API v2.

-q stands for quality. And the problem is occuring, when you try to download a song, which is available in max-quality from tidal.
With -q 2 you downgrade the quality to 16/44.1

You can modify the default value with rip config open -> go to the tidal section -> enter quality = 2

@girlmaya
Copy link

You can modify the default value with rip config open -> go to the tidal section -> enter quality = 2

Or make a new python venv and then pip3 install git+https://github.com/nathom/streamrip.git@dev, now it will get -q 2 if it fails to get -q 3

@wilsonnkwan
Copy link

I understand that the folks here have been suggesting using a lower quality rip as an alternative, I also used this too. However, in order to solve this at the root cause, we need to determine why some music, despite offering a Q 4 level at we cant rip at Q 3/4 but have to down to 2. There are two scenarios, either there is no Q 3 and above and hence the rip should have a warning to say that unfortunately there is no Q 3 and above and exit the program or there is Q 3 and above but the current programming cannot find that Q 3 and above and hence unable to proceed.

I am nonetheless grateful to the folks here for suggesting Q 2 and below. Thank you very much

@morgenstern72
Copy link
Author

I understand that the folks here have been suggesting using a lower quality rip as an alternative, I also used this too. However, in order to solve this at the root cause, we need to determine why some music, despite offering a Q 4 level at we cant rip at Q 3/4 but have to down to 2. There are two scenarios, either there is no Q 3 and above and hence the rip should have a warning to say that unfortunately there is no Q 3 and above and exit the program or there is Q 3 and above but the current programming cannot find that Q 3 and above and hence unable to proceed.

I am nonetheless grateful to the folks here for suggesting Q 2 and below. Thank you very much

Wouldn't it make more sense that streamrip falls back to q2 if q3/4 is not available instead of exiting/crashing? Now I have to rip all songs with a lower quality which is of course not the best solution.

@morgenstern72
Copy link
Author

pip3 install git+https://github.com/nathom/streamrip.git@dev

Im already using the dev version. Is the problem fixed in a newer build?
I tried "pip3 install git+https://github.com/nathom/streamrip.git@dev --upgrade" but im not sure if that worked. it still tells me "rip, version 2.0.5"

@girlmaya
Copy link

girlmaya commented Feb 21, 2025

im not sure if that worked. it still tells me "rip, version 2.0.5"

I'm not a python wizard but did you try making a new venv?

@morgenstern72
Copy link
Author

im not sure if that worked. it still tells me "rip, version 2.0.5"

I'm not a python wizard but did you try making a new venv?

I have no experience with venv. I understand it's a virtual environment that allows to have different versions at the same time, but I don't see how that would help me in this case?

@girlmaya
Copy link

I have no experience with venv.

Here, take a look at this: https://docs.python.org/3/library/venv.html

@morgenstern72
Copy link
Author

I have no experience with venv.

Here, take a look at this: https://docs.python.org/3/library/venv.html

Yes, I know it's a virtual environment for python. But why would that help me with my case? I don't need two version of python or streamrip

@kyrregjerstad
Copy link
Contributor

I've created this pull request #814 to address this issue where the entire download process stops when a single track fails. This PR modifies the behavior to continue downloading the remaining tracks even after encountering an error with one track. The implementation now attempts to download all requested tracks, logging errors for the problematic ones while successfully completing the others.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

6 participants