Comments (13)
Can you please paste your settings.json
? Cannot re-produce this so far.
from tidal-dl-ng.
from tidal-dl-ng.
Can you reliable re-produce this error? For me it works just fine with your config. Which version of this app do you use?
Maybe it is something country specific. Anyway... Please debug this line:
tidal-dl-ng/tidal_dl_ng/download.py
Line 314 in 2559913
I need the content of track.album
.
from tidal-dl-ng.
yes i can reliably reproduce
app version is 0.7.1
im in the uk
i placed a breakpoint after the class m is defined whioch is the closest i could get
p m = <tidal_dl_ng.metadata.Metadata object at 0x7b6859263d50>
ii was being dumb track.name is "all Of Me"
track.album gives me
/home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ │
│ ng/cli.py:176 in download │
│ │
│ 173 │ │ with Live(progress_table, refresh_per_second=10): │
│ 174 │ │ │ # Download media. │
│ 175 │ │ │ if media_type in [MediaType.TRACK, MediaType.VID │
│ ❱ 176 │ │ │ │ dl.item( │
│ 177 │ │ │ │ │ media_id=item_id, │
│ 178 │ │ │ │ │ media_type=media_type, │
│ 179 │ │ │ │ │ file_template=file_template, │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ ctx = <click.core.Context object at 0x75fb7ba0b4d0> │ │
│ │ dl = <tidal_dl_ng.download.Download object at │ │
│ │ 0x75fb7bad6610> │ │
│ │ file_template = 'Tracks/{artist_name} - {track_title}' │ │
│ │ fn_logger = <tidal_dl_ng.helper.wrapper.LoggerWrapped │ │
│ │ object at 0x75fb7bac6190> │ │
│ │ item = 'https://tidal.com/browse/track/152668960' │ │
│ │ item_id = '152668960' │ │
│ │ list_urls = None │ │
│ │ media_type = <MediaType.TRACK: 'track'> │ │
│ │ progress = <rich.progress.Progress object at │ │
│ │ 0x75fb7d3d3e90> │ │
│ │ progress_table = <rich.table.Table object at 0x75fb7bad6b50> │ │
│ │ settings = <tidal_dl_ng.config.Settings object at │ │
│ │ 0x75fb7b76e190> │ │
│ │ urls = ['https://tidal.com/browse/track/152668960'] │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ │
│ ng/download.py:231 in item │
│ │
│ 228 │ │ │ with tempfile.TemporaryDirectory(ignore_cleanup_ │
│ 229 │ │ │ │ tmp_path_file = os.path.join(tmp_path_dir, s │
│ 230 │ │ │ │ # Download media. │
│ ❱ 231 │ │ │ │ tmp_path_file = self._download(media=media, │
│ 232 │ │ │ │ │
│ 233 │ │ │ │ if isinstance(media, Video) and self.setting │
│ 234 │ │ │ │ │ # Convert `*.ts` file to `*.mp4` using f │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ download_skip = False │ │
│ │ file_name_relative = 'Tracks/The Score, Travis Barker - All Of │ │
│ │ Me' │ │
│ │ file_template = 'Tracks/{artist_name} - {track_title}' │ │
│ │ manifest = 'PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0… │ │
│ │ media = <tidalapi.media.Track object at │ │
│ │ 0x75fb7bad7b50> │ │
│ │ media_id = '152668960' │ │
│ │ media_type = <MediaType.TRACK: 'track'> │ │
│ │ mime_type = 'application/dash+xml' │ │
│ │ path_file = '/home/olivia/Downloads/Tracks/The Score, │ │
│ │ Travis Barker - All Of Me.m4a' │ │
│ │ self = <tidal_dl_ng.download.Download object at │ │
│ │ 0x75fb7bad6610> │ │
│ │ stream = <tidalapi.media.Stream object at │ │
│ │ 0x75fb7bac66d0> │ │
│ │ stream_manifest = StreamManifest( │ │
│ │ │ codecs='mp4a.40.2', │ │
│ │ │ mime_type='audio/mp4', │ │
│ │ │ urls=[ │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediat… │ │
│ │ │ │ ... +32 │ │
│ │ │ ], │ │
│ │ │ file_extension='.m4a', │ │
│ │ │ encryption_type='NONE', │ │
│ │ │ encryption_key=None │ │
│ │ ) │ │
│ │ tmp_path_dir = '/tmp/tmp1h7dpi92' │ │
│ │ tmp_path_file = '/tmp/tmp1h7dpi92/87f7f750-1575-45fa-92c… │ │
│ │ video_download = True │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ │
│ ng/download.py:152 in _download │
│ │
│ 149 │ │ │
│ 150 │ │ # Write metadata to file. │
│ 151 │ │ if not isinstance(media, Video): │
│ ❱ 152 │ │ │ self.metadata_write(media, tmp_path_file_decrypt │
│ 153 │ │ │
│ 154 │ │ return tmp_path_file_decrypted │
│ 155 │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ block_size = None │ │
│ │ data = b'\x00\x00\x05\x94moof\x00\x00\x00\… │ │
│ │ f = <_io.BufferedWriter │ │
│ │ name='/tmp/tmp1h7dpi92/87f7f750-157… │ │
│ │ media = <tidalapi.media.Track object at │ │
│ │ 0x75fb7bad7b50> │ │
│ │ media_name = 'The Score, Travis Barker - All Of │ │
│ │ Me' │ │
│ │ needs_decryption = False │ │
│ │ p_task = 0 │ │
│ │ path_file = '/tmp/tmp1h7dpi92/87f7f750-1575-45f… │ │
│ │ progress_stdout = True │ │
│ │ progress_total = 42 │ │
│ │ r = <Response [200]> │ │
│ │ self = <tidal_dl_ng.download.Download │ │
│ │ object at 0x75fb7bad6610> │ │
│ │ stream_manifest = StreamManifest( │ │
│ │ │ codecs='mp4a.40.2', │ │
│ │ │ mime_type='audio/mp4', │ │
│ │ │ urls=[ │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ │ │ ... +32 │ │
│ │ │ ], │ │
│ │ │ file_extension='.m4a', │ │
│ │ │ encryption_type='NONE', │ │
│ │ │ encryption_key=None │ │
│ │ ) │ │
│ │ tmp_path_file_decrypted = '/tmp/tmp1h7dpi92/87f7f750-1575-45f… │ │
│ │ url = 'https://sp-ad-fa.audio.tidal.com/m… │ │
│ │ urls_count = 42 │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ │
│ ng/download.py:288 in metadata_write │
│ │
│ 285 │ │ │ ), │
│ 286 │ │ ) │
│ 287 │ │ breakpoint() │
│ ❱ 288 │ │ m.save() │
│ 289 │ │ │
│ 290 │ │ result = True │
│ 291 │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ copy_right = '℗ 2020 Republic Records, a division of UMG │ │
│ │ Recordings, Inc.' │ │
│ │ isrc = 'USUM72014229' │ │
│ │ lyrics = '' │ │
│ │ m = <tidal_dl_ng.metadata.Metadata object at │ │
│ │ 0x75fb7bcaad90> │ │
│ │ path_file = '/tmp/tmp1h7dpi92/87f7f750-1575-45fa-92cb-a31a… │ │
│ │ release_date = '' │ │
│ │ result = False │ │
│ │ self = <tidal_dl_ng.download.Download object at │ │
│ │ 0x75fb7bad6610> │ │
│ │ track = <tidalapi.media.Track object at 0x75fb7bad7b50> │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.11/bdb.py:90 in trace_dispatch │
│ │
│ 87 │ │ if self.quitting: │
│ 88 │ │ │ return # None │
│ 89 │ │ if event == 'line': │
│ ❱ 90 │ │ │ return self.dispatch_line(frame) │
│ 91 │ │ if event == 'call': │
│ 92 │ │ │ return self.dispatch_call(frame, arg) │
│ 93 │ │ if event == 'return': │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ arg = None │ │
│ │ event = 'line' │ │
│ │ frame = <frame at 0x75fb7b7b6430, file │ │
│ │ '/home/olivia/tidal-dl/.venv/lib/python3.11/site-pack… │ │
│ │ line 288, code metadata_write> │ │
│ │ self = <pdb.Pdb object at 0x75fb7ad5c310> │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.11/bdb.py:114 in dispatch_line │
│ │
│ 111 │ │ Return self.trace_dispatch to continue tracing in th │
│ 112 │ │ """ │
│ 113 │ │ if self.stop_here(frame) or self.break_here(frame): │
│ ❱ 114 │ │ │ self.user_line(frame) │
│ 115 │ │ │ if self.quitting: raise BdbQuit │
│ 116 │ │ return self.trace_dispatch │
│ 117 │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ frame = <frame at 0x75fb7b7b6430, file │ │
│ │ '/home/olivia/tidal-dl/.venv/lib/python3.11/site-pack… │ │
│ │ line 288, code metadata_write> │ │
│ │ self = <pdb.Pdb object at 0x75fb7ad5c310> │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.11/pdb.py:331 in user_line │
│ │
│ 328 │ │ │ │ return │
│ 329 │ │ │ self._wait_for_mainpyfile = False │
│ 330 │ │ if self.bp_commands(frame): │
│ ❱ 331 │ │ │ self.interaction(frame, None) │
│ 332 │ │
│ 333 │ def bp_commands(self, frame): │
│ 334 │ │ """Call every command that was set for the current │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ frame = <frame at 0x75fb7b7b6430, file │ │
│ │ '/home/olivia/tidal-dl/.venv/lib/python3.11/site-pack… │ │
│ │ line 288, code metadata_write> │ │
│ │ self = <pdb.Pdb object at 0x75fb7ad5c310> │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.11/pdb.py:426 in interaction │
│ │
│ 423 │ │ │ self.forget() │
│ 424 │ │ │ return │
│ 425 │ │ self.print_stack_entry(self.stack[self.curindex]) │
│ ❱ 426 │ │ self._cmdloop() │
│ 427 │ │ self.forget() │
│ 428 │ │
│ 429 │ def displayhook(self, obj): │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ frame = <frame at 0x75fb7b7b6430, file │ │
│ │ '/home/olivia/tidal-dl/.venv/lib/python3.11/site-… │ │
│ │ line 288, code metadata_write> │ │
│ │ self = <pdb.Pdb object at 0x75fb7ad5c310> │ │
│ │ traceback = None │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.11/pdb.py:391 in _cmdloop │
│ │
│ 388 │ │ │ │ # keyboard interrupts allow for an easy way │
│ 389 │ │ │ │ # the current command, so allow them during │
│ 390 │ │ │ │ self.allow_kbdint = True │
│ ❱ 391 │ │ │ │ self.cmdloop() │
│ 392 │ │ │ │ self.allow_kbdint = False │
│ 393 │ │ │ │ break │
│ 394 │ │ │ except KeyboardInterrupt: │
│ │
│ ╭───────────────── locals ──────────────────╮ │
│ │ self = <pdb.Pdb object at 0x75fb7ad5c310> │ │
│ ╰───────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.11/cmd.py:138 in cmdloop │
│ │
│ 135 │ │ │ │ │ │ else: │
│ 136 │ │ │ │ │ │ │ line = line.rstrip('\r\n') │
│ 137 │ │ │ │ line = self.precmd(line) │
│ ❱ 138 │ │ │ │ stop = self.onecmd(line) │
│ 139 │ │ │ │ stop = self.postcmd(stop, line) │
│ 140 │ │ │ self.postloop() │
│ 141 │ │ finally: │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ intro = None │ │
│ │ line = 'run print(track.album)' │ │
│ │ readline = <module 'readline' from │ │
│ │ '/usr/lib/python3.11/lib-dynload/readline.cpython-… │ │
│ │ self = <pdb.Pdb object at 0x75fb7ad5c310> │ │
│ │ stop = None │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.11/pdb.py:491 in onecmd │
│ │
│ 488 │ │ a breakpoint command list definition. │
│ 489 │ │ """ │
│ 490 │ │ if not self.commands_defining: │
│ ❱ 491 │ │ │ return cmd.Cmd.onecmd(self, line) │
│ 492 │ │ else: │
│ 493 │ │ │ return self.handle_command_def(line) │
│ 494 │
│ │
│ ╭───────────────── locals ──────────────────╮ │
│ │ line = 'run print(track.album)' │ │
│ │ self = <pdb.Pdb object at 0x75fb7ad5c310> │ │
│ ╰───────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.11/cmd.py:217 in onecmd │
│ │
│ 214 │ │ │ │ func = getattr(self, 'do_' + cmd) │
│ 215 │ │ │ except AttributeError: │
│ 216 │ │ │ │ return self.default(line) │
│ ❱ 217 │ │ │ return func(arg) │
│ 218 │ │
│ 219 │ def emptyline(self): │
│ 220 │ │ """Called when an empty line is entered in response │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ arg = 'print(track.album)' │ │
│ │ cmd = 'run' │ │
│ │ func = <bound method Pdb.do_run of <pdb.Pdb object at │ │
│ │ 0x75fb7ad5c310>> │ │
│ │ line = 'run print(track.album)' │ │
│ │ self = <pdb.Pdb object at 0x75fb7ad5c310> │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.11/pdb.py:1111 in do_run │
│ │
│ 1108 │ │ │ │ return │
│ 1109 │ │ │ sys.argv[:0] = argv0 │
│ 1110 │ │ # this is caught in the main debugger loop │
│ ❱ 1111 │ │ raise Restart │
│ 1112 │ │
│ 1113 │ do_restart = do_run │
│ 1114 │
│ │
│ ╭─────────────────────────── locals ───────────────────────────╮ │
│ │ arg = 'print(track.album)' │ │
│ │ argv0 = ['/home/olivia/tidal-dl/.venv/bin/tidal-dl-ng'] │ │
│ │ self = <pdb.Pdb object at 0x75fb7ad5c310> │ │
│ │ shlex = <module 'shlex' from '/usr/lib/python3.11/shlex.py'> │
from tidal-dl-ng.
No worries. First of all, please update to the latest release.
You did great job. Can you please insert at the following line
tidal-dl-ng/tidal_dl_ng/download.py
Line 306 in 2559913
print(vars(track))
print(vars(track.album))
Thus, it must look like this:
if lyrics:
self.lyrics_write_file(path_file + EXTENSION_LYRICS, lyrics)
print(vars(track))
print(vars(track.album))
# `None` values are not allowed.
m: Metadata = Metadata(
Please execute your command again and paste everything, which was printed out.
from tidal-dl-ng.
added the lines and updated
tidal-dl-ng dl https://tidal.com/browse/track/152668960
Let us check, if you are already logged in... Yep, looks good! You are logged in.
{'session': <tidalapi.session.Session object at 0x7915d427b110>, 'requests': <tidalapi.request.Requests object at 0x7915d427aed0>, 'album': <tidalapi.album.Album object at 0x7915d4383f50>,
'id': 152668960, 'name': 'All Of Me', 'duration': 163, 'available': True, 'tidal_release_date': datetime.datetime(2020, 8, 28, 0, 0, tzinfo=tzutc()), 'user_date_added': None, 'track_num': 2,
'volume_num': 1, 'explicit': False, 'popularity': 14, 'artist': <tidalapi.artist.Artist object at 0x7915d45da910>, 'artists': [<tidalapi.artist.Artist object at 0x7915d45d9110>,
<tidalapi.artist.Artist object at 0x7915d45d8fd0>], 'type': None, 'artist_roles': None, 'replay_gain': -10.59, 'peak': 0.999937, 'isrc': 'USUM72014229', 'copyright': '℗ 2020 Republic
Records, a division of UMG Recordings, Inc.', 'audio_quality': <Quality.hi_res: 'HI_RES'>, 'version': None, 'media_metadata_tags': ['LOSSLESS', 'MQA'], 'full_name': 'All Of Me'}
{'session': <tidalapi.session.Session object at 0x7915d427b110>, 'requests': <tidalapi.request.Requests object at 0x7915d427aed0>, 'artist': <tidalapi.artist.Artist object at
0x7915d45d9110>, 'id': 152668956, 'cover': '38201f9b-fb1e-45df-b4fa-85464bf4df6e', 'video_cover': None, 'duration': None, 'available': None, 'num_tracks': None, 'num_videos': None,
'num_volumes': None, 'copyright': None, 'version': None, 'explicit': None, 'universal_product_number': None, 'popularity': None, 'type': None, 'artists': [<tidalapi.artist.Artist object at
0x7915d45d9110>, <tidalapi.artist.Artist object at 0x7915d45d8fd0>], 'release_date': None, 'tidal_release_date': None, 'user_date_added': None}
╭─────────────────────────────────── Download Progress ───────────────────────────────────╮
│ │
│ │
│ Item 'The Score, Travis Barker - All' ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% │
│ │
│ │
╰─────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/cli.py:180 in download │
│ │
│ 177 │ │ │ if media_type in [MediaType.TRACK, MediaType.VIDEO]: │
│ 178 │ │ │ │ download_delay: bool = bool(settings.data.download_delay and urls.index( │
│ 179 │ │ │ │ │
│ ❱ 180 │ │ │ │ dl.item( │
│ 181 │ │ │ │ │ media_id=item_id, media_type=media_type, file_template=file_template │
│ 182 │ │ │ │ ) │
│ 183 │ │ │ elif media_type in [MediaType.ALBUM, MediaType.PLAYLIST, MediaType.MIX]: │
│ │
│ ╭─────────────────────────────────────── locals ───────────────────────────────────────╮ │
│ │ ctx = <click.core.Context object at 0x7915d5047550> │ │
│ │ dl = <tidal_dl_ng.download.Download object at 0x7915d45d8ed0> │ │
│ │ download_delay = False │ │
│ │ file_template = 'Tracks/{artist_name} - {track_title}' │ │
│ │ file_urls = None │ │
│ │ fn_logger = <tidal_dl_ng.helper.wrapper.LoggerWrapped object at 0x7915d47af150> │ │
│ │ item = 'https://tidal.com/browse/track/152668960' │ │
│ │ item_id = '152668960' │ │
│ │ media_type = <MediaType.TRACK: 'track'> │ │
│ │ progress = <rich.progress.Progress object at 0x7915d4299ed0> │ │
│ │ progress_table = <rich.table.Table object at 0x7915d45d9590> │ │
│ │ settings = <tidal_dl_ng.config.Settings object at 0x7915d427a0d0> │ │
│ │ urls = ['https://tidal.com/browse/track/152668960'] │ │
│ │ urls_pos_last = 0 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:233 in item │
│ │
│ 230 │ │ │ with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmp_path_dir │
│ 231 │ │ │ │ tmp_path_file = os.path.join(tmp_path_dir, str(uuid4()) + stream_manifes │
│ 232 │ │ │ │ # Download media. │
│ ❱ 233 │ │ │ │ tmp_path_file = self._download(media=media, stream_manifest=stream_manif │
│ 234 │ │ │ │ │
│ 235 │ │ │ │ if isinstance(media, Video) and self.settings.data.video_convert_mp4: │
│ 236 │ │ │ │ │ # Convert `*.ts` file to `*.mp4` using ffmpeg │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ download_delay = False │ │
│ │ download_skip = False │ │
│ │ file_name_relative = 'Tracks/The Score, Travis Barker - All Of Me' │ │
│ │ file_template = 'Tracks/{artist_name} - {track_title}' │ │
│ │ manifest = 'PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48TVBEIHhtbG5zPSJ1c… │ │
│ │ media = <tidalapi.media.Track object at 0x7915d4298410> │ │
│ │ media_id = '152668960' │ │
│ │ media_type = <MediaType.TRACK: 'track'> │ │
│ │ mime_type = 'application/dash+xml' │ │
│ │ path_file = '/home/olivia/Downloads/Tracks/The Score, Travis Barker - All Of │ │
│ │ Me.m4a' │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x7915d45d8ed0> │ │
│ │ stream = <tidalapi.media.Stream object at 0x7915d427b950> │ │
│ │ stream_manifest = StreamManifest( │ │
│ │ │ codecs='mp4a.40.2', │ │
│ │ │ mime_type='audio/mp4', │ │
│ │ │ urls=[ │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGVjYzQw… │ │
│ │ │ │ ... +32 │ │
│ │ │ ], │ │
│ │ │ file_extension='.m4a', │ │
│ │ │ encryption_type='NONE', │ │
│ │ │ encryption_key=None │ │
│ │ ) │ │
│ │ tmp_path_dir = '/tmp/tmp21psalph' │ │
│ │ tmp_path_file = '/tmp/tmp21psalph/974f3563-a4fd-4060-b6db-3526ed39c197.m4a' │ │
│ │ video_download = True │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:153 in │
│ _download │
│ │
│ 150 │ │ │
│ 151 │ │ # Write metadata to file. │
│ 152 │ │ if not isinstance(media, Video): │
│ ❱ 153 │ │ │ self.metadata_write(media, tmp_path_file_decrypted) │
│ 154 │ │ │
│ 155 │ │ return tmp_path_file_decrypted │
│ 156 │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ block_size = None │ │
│ │ data = b'\x00\x00\x05\x94moof\x00\x00\x00\x10mfhd\x00\x00\x00\x00\x00\x0… │ │
│ │ f = <_io.BufferedWriter │ │
│ │ name='/tmp/tmp21psalph/974f3563-a4fd-4060-b6db-3526ed39c197.m4a'> │ │
│ │ media = <tidalapi.media.Track object at 0x7915d4298410> │ │
│ │ media_name = 'The Score, Travis Barker - All Of Me' │ │
│ │ needs_decryption = False │ │
│ │ p_task = 0 │ │
│ │ path_file = '/tmp/tmp21psalph/974f3563-a4fd-4060-b6db-3526ed39c197.m4a' │ │
│ │ progress_stdout = True │ │
│ │ progress_total = 42 │ │
│ │ r = <Response [200]> │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x7915d45d8ed0> │ │
│ │ stream_manifest = StreamManifest( │ │
│ │ │ codecs='mp4a.40.2', │ │
│ │ │ mime_type='audio/mp4', │ │
│ │ │ urls=[ │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ │ │ ... +32 │ │
│ │ │ ], │ │
│ │ │ file_extension='.m4a', │ │
│ │ │ encryption_type='NONE', │ │
│ │ │ encryption_key=None │ │
│ │ ) │ │
│ │ tmp_path_file_decrypted = '/tmp/tmp21psalph/974f3563-a4fd-4060-b6db-3526ed39c197.m4a' │ │
│ │ url = 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzk1M2FhMmVkNGV… │ │
│ │ urls_count = 42 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:330 in │
│ metadata_write │
│ │
│ 327 │ │ │ ), │
│ 328 │ │ ) │
│ 329 │ │ │
│ ❱ 330 │ │ m.save() │
│ 331 │ │ │
│ 332 │ │ result = True │
│ 333 │
│ │
│ ╭─────────────────────────────────── locals ───────────────────────────────────╮ │
│ │ copy_right = '℗ 2020 Republic Records, a division of UMG Recordings, Inc.' │ │
│ │ isrc = 'USUM72014229' │ │
│ │ lyrics = '' │ │
│ │ m = <tidal_dl_ng.metadata.Metadata object at 0x7915d42984d0> │ │
│ │ path_file = '/tmp/tmp21psalph/974f3563-a4fd-4060-b6db-3526ed39c197.m4a' │ │
│ │ release_date = '' │ │
│ │ result = False │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x7915d45d8ed0> │ │
│ │ track = <tidalapi.media.Track object at 0x7915d4298410> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/metadata.py:97 in save │
│ │
│ 94 │ │ elif isinstance(self.m, mutagen.mp3.MP3): │
│ 95 │ │ │ self.set_mp3() │
│ 96 │ │ elif isinstance(self.m, mutagen.mp4.MP4): │
│ ❱ 97 │ │ │ self.set_mp4() │
│ 98 │ │ │
│ 99 │ │ self._cover() │
│ 100 │ │ self.m.save() │
│ │
│ ╭──────────────────────────── locals ─────────────────────────────╮ │
│ │ self = <tidal_dl_ng.metadata.Metadata object at 0x7915d42984d0> │ │
│ ╰─────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/metadata.py:134 in set_mp4 │
│ │
│ 131 │ │
│ 132 │ def set_mp4(self): │
│ 133 │ │ self.m.tags["\xa9nam"] = self.title │
│ ❱ 134 │ │ self.m.tags["\xa9alb"] = self.album │
│ 135 │ │ self.m.tags["aART"] = self.albumartist │
│ 136 │ │ self.m.tags["\xa9ART"] = ", ".join(self.artists) if self.artists else "" │
│ 137 │ │ self.m.tags["cprt"] = self.copy_right │
│ │
│ ╭──────────────────────────── locals ─────────────────────────────╮ │
│ │ self = <tidal_dl_ng.metadata.Metadata object at 0x7915d42984d0> │ │
│ ╰─────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/mutagen/mp4/__init__.py:372 in │
│ __setitem__ │
│ │
│ 369 │ def __setitem__(self, key, value): │
│ 370 │ │ if not isinstance(key, str): │
│ 371 │ │ │ raise TypeError("key has to be str") │
│ ❱ 372 │ │ self._render(key, value) │
│ 373 │ │ super(MP4Tags, self).__setitem__(key, value) │
│ 374 │ │
│ 375 │ @classmethod │
│ │
│ ╭─────────── locals ────────────╮ │
│ │ key = '©alb' │ │
│ │ self = {'©nam': 'All Of Me'} │ │
│ │ value = None │ │
│ ╰───────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/mutagen/mp4/__init__.py:388 in _render │
│ │
│ 385 │ │ │ render_func = type(self).__render_text │
│ 386 │ │ │ render_args = [] │
│ 387 │ │ │
│ ❱ 388 │ │ return render_func(self, key, value, *render_args) │
│ 389 │ │
│ 390 │ @convert_error(IOError, error) │
│ 391 │ @loadfile(writable=True) │
│ │
│ ╭───────────────────────────── locals ─────────────────────────────╮ │
│ │ atom_name = b'\xa9alb' │ │
│ │ key = '©alb' │ │
│ │ render_args = () │ │
│ │ render_func = <function MP4Tags.__render_text at 0x7915d42711c0> │ │
│ │ self = {'©nam': 'All Of Me'} │ │
│ │ value = None │ │
│ ╰──────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/mutagen/mp4/__init__.py:822 in │
│ __render_text │
│ │
│ 819 │ │ │ value = [value] │
│ 820 │ │ │
│ 821 │ │ encoded = [] │
│ ❱ 822 │ │ for v in value: │
│ 823 │ │ │ if not isinstance(v, str): │
│ 824 │ │ │ │ raise TypeError("%r not str" % v) │
│ 825 │
│ │
│ ╭───────────── locals ─────────────╮ │
│ │ encoded = [] │ │
│ │ flags = <AtomDataType.UTF8: 1> │ │
│ │ key = '©alb' │ │
│ │ self = {'©nam': 'All Of Me'} │ │
│ │ value = None │ │
│ ╰──────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: 'NoneType' object is not iterable
from tidal-dl-ng.
Great, thank you. In your case the variable track.album.name
(album name) is missing / non existing. But this cannot be. Every album has a name. Super wild phenomenon...
I basically know how to fix this for you but before I do (which is actually nonsense), can you tell:
- What TIDAL plan do you have?
- Does this error happens only with this track with other tracks from a) the same album and b) from different albums / artists?
from tidal-dl-ng.
i have a tidal hifi plus plan
same album different song:
tidal-dl-ng dl https://tidal.com/browse/track/152668957
Let us check, if you are already logged in... Yep, looks good! You are logged in.
{'session': <tidalapi.session.Session object at 0x7eb0c72cabd0>, 'requests': <tidalapi.request.Requests object at 0x7eb0c6f91a10>, 'album': <tidalapi.album.Album object at 0x7eb0c72d8190>,
'id': 152668957, 'name': 'Can You Hear Me Now', 'duration': 194, 'available': True, 'tidal_release_date': datetime.datetime(2020, 8, 28, 0, 0, tzinfo=tzutc()), 'user_date_added': None,
'track_num': 1, 'volume_num': 1, 'explicit': False, 'popularity': 15, 'artist': <tidalapi.artist.Artist object at 0x7eb0c72cb310>, 'artists': [<tidalapi.artist.Artist object at
0x7eb0c6fac790>], 'type': None, 'artist_roles': None, 'replay_gain': -10.59, 'peak': 0.999906, 'isrc': 'USUM72014838', 'copyright': '℗ 2020 Republic Records, a division of UMG Recordings,
Inc.', 'audio_quality': <Quality.hi_res: 'HI_RES'>, 'version': None, 'media_metadata_tags': ['LOSSLESS', 'MQA'], 'full_name': 'Can You Hear Me Now'}
{'session': <tidalapi.session.Session object at 0x7eb0c72cabd0>, 'requests': <tidalapi.request.Requests object at 0x7eb0c6f91a10>, 'artist': <tidalapi.artist.Artist object at
0x7eb0c6fac790>, 'id': 152668956, 'cover': '38201f9b-fb1e-45df-b4fa-85464bf4df6e', 'video_cover': None, 'duration': None, 'available': None, 'num_tracks': None, 'num_videos': None,
'num_volumes': None, 'copyright': None, 'version': None, 'explicit': None, 'universal_product_number': None, 'popularity': None, 'type': None, 'artists': [<tidalapi.artist.Artist object at
0x7eb0c6fac790>], 'release_date': None, 'tidal_release_date': None, 'user_date_added': None}
╭─────────────────────────────────── Download Progress ───────────────────────────────────╮
│ │
│ │
│ Item 'The Score - Can You Hear Me No' ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% │
│ │
│ │
╰─────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/cli.py:180 in download │
│ │
│ 177 │ │ │ if media_type in [MediaType.TRACK, MediaType.VIDEO]: │
│ 178 │ │ │ │ download_delay: bool = bool(settings.data.download_delay and urls.index( │
│ 179 │ │ │ │ │
│ ❱ 180 │ │ │ │ dl.item( │
│ 181 │ │ │ │ │ media_id=item_id, media_type=media_type, file_template=file_template │
│ 182 │ │ │ │ ) │
│ 183 │ │ │ elif media_type in [MediaType.ALBUM, MediaType.PLAYLIST, MediaType.MIX]: │
│ │
│ ╭─────────────────────────────────────── locals ───────────────────────────────────────╮ │
│ │ ctx = <click.core.Context object at 0x7eb0c730acd0> │ │
│ │ dl = <tidal_dl_ng.download.Download object at 0x7eb0c72d8f10> │ │
│ │ download_delay = False │ │
│ │ file_template = 'Tracks/{artist_name} - {track_title}' │ │
│ │ file_urls = None │ │
│ │ fn_logger = <tidal_dl_ng.helper.wrapper.LoggerWrapped object at 0x7eb0c72c8ed0> │ │
│ │ item = 'https://tidal.com/browse/track/152668957' │ │
│ │ item_id = '152668957' │ │
│ │ media_type = <MediaType.TRACK: 'track'> │ │
│ │ progress = <rich.progress.Progress object at 0x7eb0c760a090> │ │
│ │ progress_table = <rich.table.Table object at 0x7eb0c72d8690> │ │
│ │ settings = <tidal_dl_ng.config.Settings object at 0x7eb0c6f92110> │ │
│ │ urls = ['https://tidal.com/browse/track/152668957'] │ │
│ │ urls_pos_last = 0 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:233 in item │
│ │
│ 230 │ │ │ with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmp_path_dir │
│ 231 │ │ │ │ tmp_path_file = os.path.join(tmp_path_dir, str(uuid4()) + stream_manifes │
│ 232 │ │ │ │ # Download media. │
│ ❱ 233 │ │ │ │ tmp_path_file = self._download(media=media, stream_manifest=stream_manif │
│ 234 │ │ │ │ │
│ 235 │ │ │ │ if isinstance(media, Video) and self.settings.data.video_convert_mp4: │
│ 236 │ │ │ │ │ # Convert `*.ts` file to `*.mp4` using ffmpeg │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ download_delay = False │ │
│ │ download_skip = False │ │
│ │ file_name_relative = 'Tracks/The Score - Can You Hear Me Now' │ │
│ │ file_template = 'Tracks/{artist_name} - {track_title}' │ │
│ │ manifest = 'PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48TVBEIHhtbG5zPSJ1c… │ │
│ │ media = <tidalapi.media.Track object at 0x7eb0c72d8410> │ │
│ │ media_id = '152668957' │ │
│ │ media_type = <MediaType.TRACK: 'track'> │ │
│ │ mime_type = 'application/dash+xml' │ │
│ │ path_file = '/home/olivia/Downloads/Tracks/The Score - Can You Hear Me Now.m4a' │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x7eb0c72d8f10> │ │
│ │ stream = <tidalapi.media.Stream object at 0x7eb0c7760bd0> │ │
│ │ stream_manifest = StreamManifest( │ │
│ │ │ codecs='mp4a.40.2', │ │
│ │ │ mime_type='audio/mp4', │ │
│ │ │ urls=[ │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA3ZDdh… │ │
│ │ │ │ ... +40 │ │
│ │ │ ], │ │
│ │ │ file_extension='.m4a', │ │
│ │ │ encryption_type='NONE', │ │
│ │ │ encryption_key=None │ │
│ │ ) │ │
│ │ tmp_path_dir = '/tmp/tmpclrjj4l2' │ │
│ │ tmp_path_file = '/tmp/tmpclrjj4l2/89b5aa8a-1e14-4a77-958b-f10962d88bd0.m4a' │ │
│ │ video_download = True │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:153 in │
│ _download │
│ │
│ 150 │ │ │
│ 151 │ │ # Write metadata to file. │
│ 152 │ │ if not isinstance(media, Video): │
│ ❱ 153 │ │ │ self.metadata_write(media, tmp_path_file_decrypted) │
│ 154 │ │ │
│ 155 │ │ return tmp_path_file_decrypted │
│ 156 │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ block_size = None │ │
│ │ data = b'\x00\x00\x03\xfcmoof\x00\x00\x00\x10mfhd\x00\x00\x00\x00\x00\x0… │ │
│ │ f = <_io.BufferedWriter │ │
│ │ name='/tmp/tmpclrjj4l2/89b5aa8a-1e14-4a77-958b-f10962d88bd0.m4a'> │ │
│ │ media = <tidalapi.media.Track object at 0x7eb0c72d8410> │ │
│ │ media_name = 'The Score - Can You Hear Me Now' │ │
│ │ needs_decryption = False │ │
│ │ p_task = 0 │ │
│ │ path_file = '/tmp/tmpclrjj4l2/89b5aa8a-1e14-4a77-958b-f10962d88bd0.m4a' │ │
│ │ progress_stdout = True │ │
│ │ progress_total = 50 │ │
│ │ r = <Response [200]> │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x7eb0c72d8f10> │ │
│ │ stream_manifest = StreamManifest( │ │
│ │ │ codecs='mp4a.40.2', │ │
│ │ │ mime_type='audio/mp4', │ │
│ │ │ urls=[ │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ │ │ ... +40 │ │
│ │ │ ], │ │
│ │ │ file_extension='.m4a', │ │
│ │ │ encryption_type='NONE', │ │
│ │ │ encryption_key=None │ │
│ │ ) │ │
│ │ tmp_path_file_decrypted = '/tmp/tmpclrjj4l2/89b5aa8a-1e14-4a77-958b-f10962d88bd0.m4a' │ │
│ │ url = 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzE5MjZmMzkzMTA… │ │
│ │ urls_count = 50 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:330 in │
│ metadata_write │
│ │
│ 327 │ │ │ ), │
│ 328 │ │ ) │
│ 329 │ │ │
│ ❱ 330 │ │ m.save() │
│ 331 │ │ │
│ 332 │ │ result = True │
│ 333 │
│ │
│ ╭─────────────────────────────────── locals ───────────────────────────────────╮ │
│ │ copy_right = '℗ 2020 Republic Records, a division of UMG Recordings, Inc.' │ │
│ │ isrc = 'USUM72014838' │ │
│ │ lyrics = '' │ │
│ │ m = <tidal_dl_ng.metadata.Metadata object at 0x7eb0c72cb790> │ │
│ │ path_file = '/tmp/tmpclrjj4l2/89b5aa8a-1e14-4a77-958b-f10962d88bd0.m4a' │ │
│ │ release_date = '' │ │
│ │ result = False │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x7eb0c72d8f10> │ │
│ │ track = <tidalapi.media.Track object at 0x7eb0c72d8410> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/metadata.py:97 in save │
│ │
│ 94 │ │ elif isinstance(self.m, mutagen.mp3.MP3): │
│ 95 │ │ │ self.set_mp3() │
│ 96 │ │ elif isinstance(self.m, mutagen.mp4.MP4): │
│ ❱ 97 │ │ │ self.set_mp4() │
│ 98 │ │ │
│ 99 │ │ self._cover() │
│ 100 │ │ self.m.save() │
│ │
│ ╭──────────────────────────── locals ─────────────────────────────╮ │
│ │ self = <tidal_dl_ng.metadata.Metadata object at 0x7eb0c72cb790> │ │
│ ╰─────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/metadata.py:134 in set_mp4 │
│ │
│ 131 │ │
│ 132 │ def set_mp4(self): │
│ 133 │ │ self.m.tags["\xa9nam"] = self.title │
│ ❱ 134 │ │ self.m.tags["\xa9alb"] = self.album │
│ 135 │ │ self.m.tags["aART"] = self.albumartist │
│ 136 │ │ self.m.tags["\xa9ART"] = ", ".join(self.artists) if self.artists else "" │
│ 137 │ │ self.m.tags["cprt"] = self.copy_right │
│ │
│ ╭──────────────────────────── locals ─────────────────────────────╮ │
│ │ self = <tidal_dl_ng.metadata.Metadata object at 0x7eb0c72cb790> │ │
│ ╰─────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/mutagen/mp4/__init__.py:372 in │
│ __setitem__ │
│ │
│ 369 │ def __setitem__(self, key, value): │
│ 370 │ │ if not isinstance(key, str): │
│ 371 │ │ │ raise TypeError("key has to be str") │
│ ❱ 372 │ │ self._render(key, value) │
│ 373 │ │ super(MP4Tags, self).__setitem__(key, value) │
│ 374 │ │
│ 375 │ @classmethod │
│ │
│ ╭──────────────── locals ─────────────────╮ │
│ │ key = '©alb' │ │
│ │ self = {'©nam': 'Can You Hear Me Now'} │ │
│ │ value = None │ │
│ ╰─────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/mutagen/mp4/__init__.py:388 in _render │
│ │
│ 385 │ │ │ render_func = type(self).__render_text │
│ 386 │ │ │ render_args = [] │
│ 387 │ │ │
│ ❱ 388 │ │ return render_func(self, key, value, *render_args) │
│ 389 │ │
│ 390 │ @convert_error(IOError, error) │
│ 391 │ @loadfile(writable=True) │
│ │
│ ╭───────────────────────────── locals ─────────────────────────────╮ │
│ │ atom_name = b'\xa9alb' │ │
│ │ key = '©alb' │ │
│ │ render_args = () │ │
│ │ render_func = <function MP4Tags.__render_text at 0x7eb0c6f891c0> │ │
│ │ self = {'©nam': 'Can You Hear Me Now'} │ │
│ │ value = None │ │
│ ╰──────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/mutagen/mp4/__init__.py:822 in │
│ __render_text │
│ │
│ 819 │ │ │ value = [value] │
│ 820 │ │ │
│ 821 │ │ encoded = [] │
│ ❱ 822 │ │ for v in value: │
│ 823 │ │ │ if not isinstance(v, str): │
│ 824 │ │ │ │ raise TypeError("%r not str" % v) │
│ 825 │
│ │
│ ╭───────────────── locals ──────────────────╮ │
│ │ encoded = [] │ │
│ │ flags = <AtomDataType.UTF8: 1> │ │
│ │ key = '©alb' │ │
│ │ self = {'©nam': 'Can You Hear Me Now'} │ │
│ │ value = None │ │
│ ╰───────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: 'NoneType' object is not iterable
different album and artist:
tidal-dl-ng dl https://tidal.com/browse/track/175693674
Let us check, if you are already logged in... Yep, looks good! You are logged in.
{'session': <tidalapi.session.Session object at 0x75db33fcf710>, 'requests': <tidalapi.request.Requests object at 0x75db33cb12d0>, 'album': <tidalapi.album.Album object at 0x75db33fcebd0>,
'id': 175693674, 'name': 'Welcome Home, Son (Remastered)', 'duration': 287, 'available': True, 'tidal_release_date': datetime.datetime(2021, 2, 28, 0, 0, tzinfo=tzutc()), 'user_date_added':
None, 'track_num': 2, 'volume_num': 1, 'explicit': False, 'popularity': 7, 'artist': <tidalapi.artist.Artist object at 0x75db341b2ed0>, 'artists': [<tidalapi.artist.Artist object at
0x75db33fdeb50>], 'type': None, 'artist_roles': None, 'replay_gain': -9.14, 'peak': 0.977081, 'isrc': 'TCAFK2199916', 'copyright': '2019 Bear Machine', 'audio_quality':
<Quality.high_lossless: 'LOSSLESS'>, 'version': None, 'media_metadata_tags': ['LOSSLESS'], 'full_name': 'Welcome Home, Son (Remastered)'}
{'session': <tidalapi.session.Session object at 0x75db33fcf710>, 'requests': <tidalapi.request.Requests object at 0x75db33cb12d0>, 'artist': <tidalapi.artist.Artist object at
0x75db33fdeb50>, 'id': 175693670, 'cover': '3381bd47-5cd3-4881-86c4-12b63b9fa6e7', 'video_cover': None, 'duration': None, 'available': None, 'num_tracks': None, 'num_videos': None,
'num_volumes': None, 'copyright': None, 'version': None, 'explicit': None, 'universal_product_number': None, 'popularity': None, 'type': None, 'artists': [<tidalapi.artist.Artist object at
0x75db33fdeb50>], 'release_date': None, 'tidal_release_date': None, 'user_date_added': None}
╭─────────────────────────────────── Download Progress ───────────────────────────────────╮
│ │
│ │
│ Item 'Radical Face - Welcome Home, S' ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% │
│ │
│ │
╰─────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/cli.py:180 in download │
│ │
│ 177 │ │ │ if media_type in [MediaType.TRACK, MediaType.VIDEO]: │
│ 178 │ │ │ │ download_delay: bool = bool(settings.data.download_delay and urls.index( │
│ 179 │ │ │ │ │
│ ❱ 180 │ │ │ │ dl.item( │
│ 181 │ │ │ │ │ media_id=item_id, media_type=media_type, file_template=file_template │
│ 182 │ │ │ │ ) │
│ 183 │ │ │ elif media_type in [MediaType.ALBUM, MediaType.PLAYLIST, MediaType.MIX]: │
│ │
│ ╭─────────────────────────────────────── locals ───────────────────────────────────────╮ │
│ │ ctx = <click.core.Context object at 0x75db34ddee10> │ │
│ │ dl = <tidal_dl_ng.download.Download object at 0x75db33cb2750> │ │
│ │ download_delay = False │ │
│ │ file_template = 'Tracks/{artist_name} - {track_title}' │ │
│ │ file_urls = None │ │
│ │ fn_logger = <tidal_dl_ng.helper.wrapper.LoggerWrapped object at 0x75db33cb2290> │ │
│ │ item = 'https://tidal.com/browse/track/175693674' │ │
│ │ item_id = '175693674' │ │
│ │ media_type = <MediaType.TRACK: 'track'> │ │
│ │ progress = <rich.progress.Progress object at 0x75db349d89d0> │ │
│ │ progress_table = <rich.table.Table object at 0x75db33fcc0d0> │ │
│ │ settings = <tidal_dl_ng.config.Settings object at 0x75db341b3490> │ │
│ │ urls = ['https://tidal.com/browse/track/175693674'] │ │
│ │ urls_pos_last = 0 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:233 in item │
│ │
│ 230 │ │ │ with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmp_path_dir │
│ 231 │ │ │ │ tmp_path_file = os.path.join(tmp_path_dir, str(uuid4()) + stream_manifes │
│ 232 │ │ │ │ # Download media. │
│ ❱ 233 │ │ │ │ tmp_path_file = self._download(media=media, stream_manifest=stream_manif │
│ 234 │ │ │ │ │
│ 235 │ │ │ │ if isinstance(media, Video) and self.settings.data.video_convert_mp4: │
│ 236 │ │ │ │ │ # Convert `*.ts` file to `*.mp4` using ffmpeg │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ download_delay = False │ │
│ │ download_skip = False │ │
│ │ file_name_relative = 'Tracks/Radical Face - Welcome Home, Son (Remastered)' │ │
│ │ file_template = 'Tracks/{artist_name} - {track_title}' │ │
│ │ manifest = 'PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48TVBEIHhtbG5zPSJ1c… │ │
│ │ media = <tidalapi.media.Track object at 0x75db33fdc950> │ │
│ │ media_id = '175693674' │ │
│ │ media_type = <MediaType.TRACK: 'track'> │ │
│ │ mime_type = 'application/dash+xml' │ │
│ │ path_file = '/home/olivia/Downloads/Tracks/Radical Face - Welcome Home, Son │ │
│ │ (Remastered).m4a' │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x75db33cb2750> │ │
│ │ stream = <tidalapi.media.Stream object at 0x75db33cb0b10> │ │
│ │ stream_manifest = StreamManifest( │ │
│ │ │ codecs='mp4a.40.2', │ │
│ │ │ mime_type='audio/mp4', │ │
│ │ │ urls=[ │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGIxOTJj… │ │
│ │ │ │ ... +63 │ │
│ │ │ ], │ │
│ │ │ file_extension='.m4a', │ │
│ │ │ encryption_type='NONE', │ │
│ │ │ encryption_key=None │ │
│ │ ) │ │
│ │ tmp_path_dir = '/tmp/tmpdrrt8ai6' │ │
│ │ tmp_path_file = '/tmp/tmpdrrt8ai6/0add22a8-1cf1-4128-a79f-d360d5f3cb0d.m4a' │ │
│ │ video_download = True │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:153 in │
│ _download │
│ │
│ 150 │ │ │
│ 151 │ │ # Write metadata to file. │
│ 152 │ │ if not isinstance(media, Video): │
│ ❱ 153 │ │ │ self.metadata_write(media, tmp_path_file_decrypted) │
│ 154 │ │ │
│ 155 │ │ return tmp_path_file_decrypted │
│ 156 │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ block_size = None │ │
│ │ data = b'\x00\x00\x04\x8cmoof\x00\x00\x00\x10mfhd\x00\x00\x00\x00\x00\x0… │ │
│ │ f = <_io.BufferedWriter │ │
│ │ name='/tmp/tmpdrrt8ai6/0add22a8-1cf1-4128-a79f-d360d5f3cb0d.m4a'> │ │
│ │ media = <tidalapi.media.Track object at 0x75db33fdc950> │ │
│ │ media_name = 'Radical Face - Welcome Home, Son (Remastered)' │ │
│ │ needs_decryption = False │ │
│ │ p_task = 0 │ │
│ │ path_file = '/tmp/tmpdrrt8ai6/0add22a8-1cf1-4128-a79f-d360d5f3cb0d.m4a' │ │
│ │ progress_stdout = True │ │
│ │ progress_total = 73 │ │
│ │ r = <Response [200]> │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x75db33cb2750> │ │
│ │ stream_manifest = StreamManifest( │ │
│ │ │ codecs='mp4a.40.2', │ │
│ │ │ mime_type='audio/mp4', │ │
│ │ │ urls=[ │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ │ │
│ │ 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ │ │ ... +63 │ │
│ │ │ ], │ │
│ │ │ file_extension='.m4a', │ │
│ │ │ encryption_type='NONE', │ │
│ │ │ encryption_key=None │ │
│ │ ) │ │
│ │ tmp_path_file_decrypted = '/tmp/tmpdrrt8ai6/0add22a8-1cf1-4128-a79f-d360d5f3cb0d.m4a' │ │
│ │ url = 'https://sp-ad-fa.audio.tidal.com/mediatracks/GikSJzEyMGQ3ZmZjZGI… │ │
│ │ urls_count = 73 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:330 in │
│ metadata_write │
│ │
│ 327 │ │ │ ), │
│ 328 │ │ ) │
│ 329 │ │ │
│ ❱ 330 │ │ m.save() │
│ 331 │ │ │
│ 332 │ │ result = True │
│ 333 │
│ │
│ ╭────────────────────────────────── locals ──────────────────────────────────╮ │
│ │ copy_right = '2019 Bear Machine' │ │
│ │ isrc = 'TCAFK2199916' │ │
│ │ lyrics = '' │ │
│ │ m = <tidal_dl_ng.metadata.Metadata object at 0x75db35650b50> │ │
│ │ path_file = '/tmp/tmpdrrt8ai6/0add22a8-1cf1-4128-a79f-d360d5f3cb0d.m4a' │ │
│ │ release_date = '' │ │
│ │ result = False │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x75db33cb2750> │ │
│ │ track = <tidalapi.media.Track object at 0x75db33fdc950> │ │
│ ╰────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/metadata.py:97 in save │
│ │
│ 94 │ │ elif isinstance(self.m, mutagen.mp3.MP3): │
│ 95 │ │ │ self.set_mp3() │
│ 96 │ │ elif isinstance(self.m, mutagen.mp4.MP4): │
│ ❱ 97 │ │ │ self.set_mp4() │
│ 98 │ │ │
│ 99 │ │ self._cover() │
│ 100 │ │ self.m.save() │
│ │
│ ╭──────────────────────────── locals ─────────────────────────────╮ │
│ │ self = <tidal_dl_ng.metadata.Metadata object at 0x75db35650b50> │ │
│ ╰─────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/metadata.py:134 in set_mp4 │
│ │
│ 131 │ │
│ 132 │ def set_mp4(self): │
│ 133 │ │ self.m.tags["\xa9nam"] = self.title │
│ ❱ 134 │ │ self.m.tags["\xa9alb"] = self.album │
│ 135 │ │ self.m.tags["aART"] = self.albumartist │
│ 136 │ │ self.m.tags["\xa9ART"] = ", ".join(self.artists) if self.artists else "" │
│ 137 │ │ self.m.tags["cprt"] = self.copy_right │
│ │
│ ╭──────────────────────────── locals ─────────────────────────────╮ │
│ │ self = <tidal_dl_ng.metadata.Metadata object at 0x75db35650b50> │ │
│ ╰─────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/mutagen/mp4/__init__.py:372 in │
│ __setitem__ │
│ │
│ 369 │ def __setitem__(self, key, value): │
│ 370 │ │ if not isinstance(key, str): │
│ 371 │ │ │ raise TypeError("key has to be str") │
│ ❱ 372 │ │ self._render(key, value) │
│ 373 │ │ super(MP4Tags, self).__setitem__(key, value) │
│ 374 │ │
│ 375 │ @classmethod │
│ │
│ ╭────────────────────── locals ──────────────────────╮ │
│ │ key = '©alb' │ │
│ │ self = {'©nam': 'Welcome Home, Son (Remastered)'} │ │
│ │ value = None │ │
│ ╰────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/mutagen/mp4/__init__.py:388 in _render │
│ │
│ 385 │ │ │ render_func = type(self).__render_text │
│ 386 │ │ │ render_args = [] │
│ 387 │ │ │
│ ❱ 388 │ │ return render_func(self, key, value, *render_args) │
│ 389 │ │
│ 390 │ @convert_error(IOError, error) │
│ 391 │ @loadfile(writable=True) │
│ │
│ ╭───────────────────────────── locals ─────────────────────────────╮ │
│ │ atom_name = b'\xa9alb' │ │
│ │ key = '©alb' │ │
│ │ render_args = () │ │
│ │ render_func = <function MP4Tags.__render_text at 0x75db33c8d1c0> │ │
│ │ self = {'©nam': 'Welcome Home, Son (Remastered)'} │ │
│ │ value = None │ │
│ ╰──────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/mutagen/mp4/__init__.py:822 in │
│ __render_text │
│ │
│ 819 │ │ │ value = [value] │
│ 820 │ │ │
│ 821 │ │ encoded = [] │
│ ❱ 822 │ │ for v in value: │
│ 823 │ │ │ if not isinstance(v, str): │
│ 824 │ │ │ │ raise TypeError("%r not str" % v) │
│ 825 │
│ │
│ ╭─────────────────────── locals ───────────────────────╮ │
│ │ encoded = [] │ │
│ │ flags = <AtomDataType.UTF8: 1> │ │
│ │ key = '©alb' │ │
│ │ self = {'©nam': 'Welcome Home, Son (Remastered)'} │ │
│ │ value = None │ │
│ ╰──────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: 'NoneType' object is not iterable
from tidal-dl-ng.
To confirm, that my fix works I need some more information regarding album downloads. Can you please do the following?
- Add this line
vars(media)
here:tidal-dl-ng/tidal_dl_ng/download.py
Line 348 in 2e75bf4
raise MediaMissing
print(vars(media))
# Create file name and path
file_name_relative = format_path_media(file_template, media)
- Start to download an album instead of a track, for instance:
tidal-dl-ng dl https://tidal.com/browse/album/135465075
You do not need to finish the download. As soon as print(vars(media))
has printed it's output you can abort the script (CTRL + C).
- Paste the whole console output here.
from tidal-dl-ng.
Thank you I can do this tomorrow when I'm home
from tidal-dl-ng.
Okay, thanks.
from tidal-dl-ng.
tidal-dl-ng dl https://tidal.com/browse/album/135465075
Let us check, if you are already logged in... Yep, looks good! You are logged in.
{'session': <tidalapi.session.Session object at 0x7b5619e30690>, 'requests': <tidalapi.request.Requests object at 0x7b5618b023d0>, 'artist': <tidalapi.artist.Artist object at
0x7b5618e105d0>, 'id': 135465075, 'cover': 'd0ab8252-6247-405b-9742-251bb3bed01a', 'video_cover': None, 'duration': 4755, 'available': True, 'num_tracks': 14, 'num_videos': 0, 'num_volumes':
1, 'copyright': '(P) 1999 Sony Music Entertainment', 'version': None, 'explicit': False, 'universal_product_number': '886448349747', 'popularity': 21, 'type': 'ALBUM', 'artists':
[<tidalapi.artist.Artist object at 0x7b5618b01190>], 'release_date': datetime.datetime(1999, 11, 16, 0, 0), 'tidal_release_date': datetime.datetime(2020, 4, 3, 0, 0, tzinfo=tzutc()),
'user_date_added': None}
╭──────────────────────────────────────────────────────────────────────────────────── Download Progress ─────────────────────────────────────────────────────────────────────────────────────╮
│ │
│ │
│ │
│ │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/cli.py:184 in download │
│ │
│ 181 │ │ │ │ │ media_id=item_id, media_type=media_type, file_template=file_template │
│ 182 │ │ │ │ ) │
│ 183 │ │ │ elif media_type in [MediaType.ALBUM, MediaType.PLAYLIST, MediaType.MIX]: │
│ ❱ 184 │ │ │ │ dl.items( │
│ 185 │ │ │ │ │ media_id=item_id, │
│ 186 │ │ │ │ │ media_type=media_type, │
│ 187 │ │ │ │ │ file_template=file_template, │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ ctx = <click.core.Context object at 0x7b5618fe7a50> │ │
│ │ dl = <tidal_dl_ng.download.Download object at 0x7b5618dfccd0> │ │
│ │ file_template = 'Albums/{artist_name} - {album_title}/{track_num}. {artist_name} - │ │
│ │ {track_title}' │ │
│ │ file_urls = None │ │
│ │ fn_logger = <tidal_dl_ng.helper.wrapper.LoggerWrapped object at 0x7b5618dfe390> │ │
│ │ item = 'https://tidal.com/browse/album/135465075' │ │
│ │ item_id = '135465075' │ │
│ │ media_type = <MediaType.ALBUM: 'album'> │ │
│ │ progress = <rich.progress.Progress object at 0x7b5619109e90> │ │
│ │ progress_table = <rich.table.Table object at 0x7b561a193fd0> │ │
│ │ settings = <tidal_dl_ng.config.Settings object at 0x7b5618aef050> │ │
│ │ urls = ['https://tidal.com/browse/album/135465075'] │ │
│ │ urls_pos_last = 0 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/olivia/tidal-dl/.venv/lib/python3.11/site-packages/tidal_dl_ng/download.py:357 in items │
│ │
│ 354 │ │ if isinstance(media, Mix): │
│ 355 │ │ │ list_media_name = media.title[:30] │
│ 356 │ │ elif video_download: │
│ ❱ 357 │ │ │ list_media_name = media.name[:30] │
│ 358 │ │ else: │
│ 359 │ │ │ videos_include = False │
│ 360 │ │ │ list_media_name = media.name[:30] │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ download_delay = True │ │
│ │ file_name_relative = 'Albums/Toto - {album_title}/{track_num}. Toto - {track_title}' │ │
│ │ file_template = 'Albums/{artist_name} - {album_title}/{track_num}. {artist_name} - │ │
│ │ {track_title}' │ │
│ │ media = <tidalapi.album.Album object at 0x7b5618dfd110> │ │
│ │ media_id = '135465075' │ │
│ │ media_type = <MediaType.ALBUM: 'album'> │ │
│ │ self = <tidal_dl_ng.download.Download object at 0x7b5618dfccd0> │ │
│ │ video_download = True │ │
│ │ videos_include = True │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: 'NoneType' object is not subscriptable
i entered the command to download an album with the print vars media line and i got this sorry it took so long to do i also ran pip install --upgrade tidal-dl-ng just to make sure i was on latest version
from tidal-dl-ng.
Great work. This phenomenon is actually not possible to be honest. If you open the official TIDAL app it must show you the album name but the data you receive from the same API my app uses is missing the album.name
at all.
Every work around I like to implement would be suuuuper hacky. To avoid this I have started to consult the maintainer from python-tidal
(the TIDAL API library this app is relying on): tamland/python-tidal#234
Let's see, what their opinion on this is.
from tidal-dl-ng.
Related Issues (20)
- Unable to download regular Hi-Res Flac HOT 2
- Encoding compatible with iTunes PC HOT 1
- [Bug] Unable to download the following files
- [Bug] Getting Stuck after one failed download
- [Bug] Unable to download HI_RES_LOSSLESS quality HOT 2
- [Help] Is there a way to download the file as FLAC and not M4A using GUI? HOT 4
- [Help] Problem with ffmpeg on Termux HOT 4
- Get playlist track number[Feature] HOT 2
- [Feature] new 'album year' column in the search result
- [Help] Hidden command window when ffmpeg is doing it's thing?
- [Bug] Download is slow compared to tidal-dl HOT 5
- [Bug] No search result after filtering
- [Help] Problems with PermissionError: [Errno 13] Permission denied: '/usr/bin' HOT 2
- [Bug] Contributing Artists not used for Album download
- [Help] I still can't login with trying 20 minutes
- [Feature] Download 5.1 Content
- [Bug] HTTPSConnectionPool(host='sp-ad-cf.audio.tidal.com', port=443)
- [Bug] Not compatible with Python 3.12.4
- [Feature] Polishing out the program HOT 3
- [Bug] Not always showing highest available Quality on search
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tidal-dl-ng.