Giter Club home page Giter Club logo

tidal-wave's People

Contributors

dependabot[bot] avatar ebb-earl-co avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

tidal-wave's Issues

Gui on termux

Is there a way to get a ui on termux like tidal-dl yet?

Settings help

Hello, I got everything installed but cannot change the default music quality or directory. What is the command I need for this to change it to hires please

Album Not Getting Download

Hi,

I have latest updated tidal-wave release 2024.1.9. But when I try to download this album. It gives this error message.

tidal-wave https://tidal.com/browse/album/228912245

2024-01-16:18:51:43,165 INFO [models.py:544] TIDAL album ID parsed from input: 228912245
2024-01-16:18:51:43,971 INFO [requesting.py:89] Requesting from TIDAL API: albums/228912245
2024-01-16:18:51:44,693 WARNING [requesting.py:96] 404 Client Error: not found for TIDAL API endpoint albums/228912245
2024-01-16:18:51:44,693 INFO [requesting.py:89] Requesting from TIDAL API: albums/228912245/items
2024-01-16:18:51:45,309 WARNING [requesting.py:96] 404 Client Error: not found for TIDAL API endpoint albums/228912245/items
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/ubuntu/.local/lib/python3.10/site-packages/tidal_wave/main.py:91 in main │
│ │
│ 88 │ │ │ raise typer.Exit(code=0) │
│ 89 │ │ elif isinstance(tidal_resource, TidalAlbum): │
│ 90 │ │ │ album = Album(album_id=tidal_resource.tidal_id) │
│ ❱ 91 │ │ │ album.get( │
│ 92 │ │ │ │ session=session, audio_format=audio_format, out_dir=output_directory │
│ 93 │ │ │ ) │
│ 94 │
│ │
│ ╭───────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │ album = Album(album_id=228912245) │ │
│ │ audio_format = <AudioFormat.lossless: 'Lossless'> │ │
│ │ include_eps_singles = False │ │
│ │ logger = <Logger tidal_wave.main (INFO)> │ │
│ │ loglevel = <LogLevel.info: 'INFO'> │ │
│ │ output_directory = PosixPath('/home/ubuntu/Music') │ │
│ │ s = <requests.sessions.Session object at 0xffffb050ee90> │ │
│ │ session = <requests.sessions.Session object at 0xffffb050ee90> │ │
│ │ tidal_resource = TidalAlbum(url='https://tidal.com/browse/album/228912245') │ │
│ │ tidal_url = 'https://tidal.com/browse/album/228912245' │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/ubuntu/.local/lib/python3.10/site-packages/tidal_wave/album.py:142 in get │
│ │
│ 139 │ │ │ self.metadata = metadata │
│ 140 │ │ │
│ 141 │ │ self.get_items(session) │
│ ❱ 142 │ │ self.save_cover_image(session, out_dir) │
│ 143 │ │ self.get_review(session) │
│ 144 │ │ self.get_tracks(session, audio_format, out_dir) │
│ 145 │
│ │
│ ╭────────────────────────────── locals ───────────────────────────────╮ │
│ │ audio_format = <AudioFormat.lossless: 'Lossless'> │ │
│ │ metadata = None │ │
│ │ out_dir = PosixPath('/home/ubuntu/Music') │ │
│ │ self = Album(album_id=228912245) │ │
│ │ session = <requests.sessions.Session object at 0xffffb050ee90> │ │
│ ╰─────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/ubuntu/.local/lib/python3.10/site-packages/tidal_wave/album.py:80 in save_cover_image │
│ │
│ 77 │ │ utils.download_cover_image() function. If successful, │
│ 78 │ │ then self.album_cover_saved takes the value True""" │
│ 79 │ │ if self.album_dir is None: │
│ ❱ 80 │ │ │ self.set_dir(out_dir=out_dir) │
│ 81 │ │ self.cover_path: Path = self.album_dir / "cover.jpg" │
│ 82 │ │ if not self.cover_path.exists(): │
│ 83 │ │ │ download_cover_image( │
│ │
│ ╭──────────────────────────── locals ────────────────────────────╮ │
│ │ out_dir = PosixPath('/home/ubuntu/Music') │ │
│ │ self = Album(album_id=228912245) │ │
│ │ session = <requests.sessions.Session object at 0xffffb050ee90> │ │
│ ╰────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/ubuntu/.local/lib/python3.10/site-packages/tidal_wave/album.py:60 in set_dir │
│ │
│ 57 │ │ """This method populates self.album_dir as a sub-subdirectory of │
│ 58 │ │ out_dir: its parent directory is the name of the (main) artist of │
│ 59 │ │ the album""" │
│ ❱ 60 │ │ artist_substring: str = self.metadata.artist.name.replace("..", "") │
│ 61 │ │ album_substring: str = ( │
│ 62 │ │ │ f"{self.metadata.name.replace('..', '')} " │
│ 63 │ │ │ f"[{self.metadata.id}] [{self.metadata.release_date.year}]" │
│ │
│ ╭───────────────── locals ──────────────────╮ │
│ │ out_dir = PosixPath('/home/ubuntu/Music') │ │
│ │ self = Album(album_id=228912245) │ │
│ ╰───────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: 'NoneType' object has no attribute 'artist'

No Content In 360 Reality Audio Files

Hi,

I am using latest release of binary, but when I am trying to download the 360 reality audio albums. Programs works fine but the files are in size of 0 KB

Here is the output form program execution :

tidal-wave https://tidal.com/browse/album/335517461 --audio-format 360
2024-01-05:07:56:21,304 INFO [models.py:551] TIDAL album ID parsed from input: 335517461
For which of Android [a] or Windows [w] would you like to provide an API token?: a
2024-01-05:07:56:22,431 INFO [login.py:148] Loading TIDAL access token from '/home/ubuntu/.config/tidal-wave/android-tidal.token'
2024-01-05:07:56:23,105 INFO [login.py:171] Access token is valid: saving to /home/ubuntu/.config/tidal-wave/android-tidal.token
2024-01-05:07:56:23,105 INFO [requesting.py:89] Requesting from TIDAL API: albums/335517461
2024-01-05:07:56:23,576 INFO [requesting.py:89] Requesting from TIDAL API: albums/335517461/items
2024-01-05:07:56:24,483 INFO [requesting.py:89] Requesting from TIDAL API: albums/335517461/review
2024-01-05:07:56:24,780 WARNING [requesting.py:96] 404 Client Error: not found for TIDAL API endpoint albums/335517461/review
2024-01-05:07:56:24,780 INFO [requesting.py:89] Requesting from TIDAL API: tracks/335517462/credits
2024-01-05:07:56:25,095 INFO [requesting.py:89] Requesting from TIDAL API: tracks/335517462/playbackinfopostpaywall
2024-01-05:07:56:25,417 INFO [requesting.py:89] Requesting from TIDAL API: tracks/335517462/lyrics
2024-01-05:07:56:25,766 WARNING [requesting.py:96] 404 Client Error: not found for TIDAL API endpoint tracks/335517462/lyrics
2024-01-05:07:56:25,855 INFO [requesting.py:89] Requesting from TIDAL API: artists/4360568/bio
2024-01-05:07:56:26,202 INFO [track.py:213] Writing artist bio for artist 4360568 to '/home/ubuntu/Music/Wizkid/S2 [335517461] [2023]/Wizkid-bio.json
2024-01-05:07:56:26,203 INFO [requesting.py:89] Requesting from TIDAL API: artists/3943632/bio
2024-01-05:07:56:26,511 INFO [track.py:213] Writing artist bio for artist 3943632 to '/home/ubuntu/Music/Wizkid/S2 [335517461] [2023]/Wande Coal-bio.json
2024-01-05:07:56:26,511 INFO [track.py:238] Writing track 335517462 to '/home/ubuntu/Music/Wizkid/S2 [335517461] [2023]/01 - Ololufe (feat. Wande Coal) [360].mka'
2024-01-05:07:57:13,081 INFO [track.py:284] Track 335517462 written to '/home/ubuntu/Music/Wizkid/S2 [335517461] [2023]/01 - Ololufe (feat. Wande Coal) [360].mka'

For reference here I have attached link of file downloaded by program. As the file was not uploading here.

https://we.tl/t-ggBdTbrEHf

Thanks

Not Able To Install Program

Hi Dev,

I am trying to install tidal-wave program on windows 10 based PC using this command python -m pip install tidal-wave. But facing below error.

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))': /simple/tidal-wave/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))': /simple/tidal-wave/ WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))': /simple/tidal-wave/ WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))': /simple/tidal-wave/ WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))': /simple/tidal-wave/

ERROR: Could not find a version that satisfies the requirement tidal-wave (from versions: none) ERROR: No matching distribution found for tidal-wave

Track number and total tracks tags on fLaC files are wrong

Instead of the correct fLaC file metadata tags

  • TRACKNUMBER
  • TRACKTOTAL
  • DISC
  • DISCTOTAL

, the lower-case version of the above are currently being written. These incorrect values are not picked up by Jellyfin, and probably won't be picked up automatically by other music server software, either.

Possible To Increase Download Speeds

Hi Dev,

As right now I have installed latest release of tidal-wave on windows based PC & using it. I use windows device access token to download hi-res lossless audio.

What I have experienced is slow download speeds which I never crossing 1.5 MB/s where as I have internet connection of bandwidth 80 MB/s.

Just a suggestion if it is possible to increase download speeds will be very helpful.

Thanks

Checksums and GPG Signing for Release Artifacts

Issue 1: Cryptographically Signing Release Artifacts

It seems to be rather poor practice offering release artifacts, and, in 2024, not to sign them!

Options To Solve the Issue

Consideration

I already use GnuPG to sign all of my commits, so it would be natural to use that same signing key for this project's release artifacts...

Issue 2: Providing Checksums of Release Artifacts

There must be a GitHub action that automatically creates checksums of artifacts! (The most popular one only has 8 stars!?)

Options to Solve the Issue

At the very least

Consideration

How difficult would it be to roll my own GitHub actions workflow that checksums and signs release artifacts, then adds new release artifacts containing the signatures of the binaries as well as a CHECKSUMS text file?

I get error

Hi,

Thanks for your app. I get an error when I try to use it.

Pablo

xx@MacBook-Pro ~ % tidal-wave --audio-format 'HiRes' https://tidal.com/browse/playlist/70bcff2a-ec53-4956-b349-267d9a0cf116
2024-01-18:14:45:14,965 INFO [models.py:621] TIDAL playlist ID parsed from input: 70bcff2a-ec53-4956-b349-267d9a0cf116
For which of Android [a] or Windows [w] would you like to provide an API token?: w
2024-01-18:14:45:17,876 INFO [requesting.py:89] Requesting from TIDAL API: playlists/70bcff2a-ec53-4956-b349-267d9a0cf116
2024-01-18:14:45:18,132 INFO [playlist.py:351] Requesting from TIDAL API: playlists/70bcff2a-ec53-4956-b349-267d9a0cf116/items
2024-01-18:14:45:18,398 INFO [requesting.py:89] Requesting from TIDAL API: albums/3489559
2024-01-18:14:45:18,465 INFO [requesting.py:89] Requesting from TIDAL API: tracks/10827167/credits
2024-01-18:14:45:18,531 INFO [requesting.py:89] Requesting from TIDAL API: tracks/10827167/playbackinfopostpaywall
Traceback (most recent call last):

File "/opt/homebrew/bin/tidal-wave", line 8, in
sys.exit(app())
^^^^^

File "/opt/homebrew/lib/python3.11/site-packages/tidal_wave/main.py", line 116, in main
playlist.get(

File "/opt/homebrew/lib/python3.11/site-packages/tidal_wave/playlist.py", line 317, in get
_get_items = self.get_items(session, audio_format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/opt/homebrew/lib/python3.11/site-packages/tidal_wave/playlist.py", line 105, in get_items
track.get(

File "/opt/homebrew/lib/python3.11/site-packages/tidal_wave/track.py", line 519, in get
self.set_manifest()

File "/opt/homebrew/lib/python3.11/site-packages/tidal_wave/track.py", line 87, in set_manifest
self.manifest: Manifest = manifester(self.stream)
^^^^^^^^^^^^^^^^^^^^^^^

File "/opt/homebrew/lib/python3.11/site-packages/tidal_wave/dash.py", line 137, in manifester
raise TidalManifestException(

tidal_wave.dash.TidalManifestException: Manifest for track 10827167, audio mode STEREO is encrypted

Argument Completion in Powershell

Hi,
i tried to setup the completion in PowerShell 7.4.1, but I didn't manage to make it work. I'm using the tidal-wave_py311_pyapp.exe, I don't have Python installed on my system.
As it is, the code cannot work, of course, as the command called in scriptblock to extract the information is python -m tidal-wave.
I suppose that the environment variables there are just for debugging purpose. But there is a typo in one of them, as it has two spaces in it's name: $Env:_PYTHON _M TIDAL_WAVE_COMPLETE.
Is it possible to have this working with tidal-wave_py311_pyapp.exe, or it has to be used only on systems with installed Python?

Won't download the music if no cover image found

When i tried to download a song, it refused to download cause no album cover is found:
tidal-wave https://tidal.com/browse/album/118613014 --audio-format hires --loglevel warning --no-extra-files

Output log:

2024-04-07:00:03:00,724 WARNING  [album.py:182] No cover image was returned from TIDAL API for album 118613014
Traceback (most recent call last):

  File "<frozen runpy>", line 198, in _run_module_as_main

  File "<frozen runpy>", line 88, in _run_code

  File "C:\Python312\Scripts\tidal-wave.exe\__main__.py", line 7, in <module>
    sys.exit(app())
             ^^^^^

  File "C:\Python312\Lib\site-packages\tidal_wave\main.py", line 108, in main
    album.get(

  File "C:\Python312\Lib\site-packages\tidal_wave\album.py", line 191, in get
    self.cover_path.unlink()
    ^^^^^^^^^^^^^^^

AttributeError: 'Album' object has no attribute 'cover_path'

Hope someone fix this.

Download Issue

Hi Dev,

I have installed tidal-wave latest binary by using this command python -m pip install tidal-wave[all] on windows 10 based PC. I tried to download this album https://tidal.com/browse/album/323681

Album totally has 21 tracks out of which 19 tracks got successfully downloaded. But when it program tries to download the tracks no - 20 & 21. A very long program crash error log comes in terminal.

So, I have uninstalled the tidal-wave & installed using below command python.exe -m pip install https://github.com/ebb-earl-co/tidal-wave/archive/trunk.zip. But issue remain same.

Have attached error in text file for ready ref.

Tidal_Error_Log.txt

Thanks

cannot login with a hifi plus account

cannot login with a hifi plus account. when i copy and paste the activation link into a browser i get the following message : FileNotFoundError: [WinError 2] The system cannot find the file specified. please help

GNU/Linux aarch64 Release Artifacts

Up until this point, the only ARM64/aarch64 (TODO: figure out which is the "correct" term) offering for tidal-wave is an OCI (read: Docker) image built for both x86 64-bit and ARM 64-bit. It would be nice to "complete the set" insofar as having QEMU or similar in the GitHub Actions workflow to compile FFmpeg, use pyinstaller to create a release artifact.

Candidates:

Unknown FFmpeg error

Hi,
I use a statically linked almost latest full FFmpeg build and tidal-wave on Windows:

c:\Data\Software\Audio\tidal-wave>ffmpeg.exe -version
ffmpeg version 2024-01-24-git-00b288da73-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil      58. 36.101 / 58. 36.101
libavcodec     60. 38.100 / 60. 38.100
libavformat    60. 20.100 / 60. 20.100
libavdevice    60.  4.100 / 60.  4.100
libavfilter     9. 17.100 /  9. 17.100
libswscale      7.  6.100 /  7.  6.100
libswresample   4. 13.100 /  4. 13.100
libpostproc    57.  4.100 / 57.  4.100

I was trying to download the following album in HiRes. It goes well up to the track no. 17, and then it fails with the following:

Traceback (most recent call last):

  File "<frozen runpy>", line 198, in _run_module_as_main

  File "<frozen runpy>", line 88, in _run_code

  File "C:\Users\ivanp\AppData\Local\pyapp\data\tidal-wave\4771670979927837872\2024.1.12\Lib\site-packages\tidal_wave\__main__.py", line 3, in <module>
    app()

  File "C:\Users\ivanp\AppData\Local\pyapp\data\tidal-wave\4771670979927837872\2024.1.12\Lib\site-packages\tidal_wave\main.py", line 82, in main
    track.get(

  File "C:\Users\ivanp\AppData\Local\pyapp\data\tidal-wave\4771670979927837872\2024.1.12\Lib\site-packages\tidal_wave\track.py", line 568, in get
    if self.download(session, out_dir) is None:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "C:\Users\ivanp\AppData\Local\pyapp\data\tidal-wave\4771670979927837872\2024.1.12\Lib\site-packages\tidal_wave\track.py", line 328, in download
    outfile: Optional[Path] = self.download_urls(
                              ^^^^^^^^^^^^^^^^^^^

  File "C:\Users\ivanp\AppData\Local\pyapp\data\tidal-wave\4771670979927837872\2024.1.12\Lib\site-packages\tidal_wave\track.py", line 311, in download_urls
    ).run()
      ^^^^^

  File "C:\Users\ivanp\AppData\Local\pyapp\data\tidal-wave\4771670979927837872\2024.1.12\Lib\site-packages\ffmpeg\_run.py", line 325, in run
    raise Error('ffmpeg', out, err)

ffmpeg._run.Error: ffmpeg error (see stderr output for detail)

After that I was experimenting only with that track. The command used to download the track was:

c:\Data\Software\Audio\tidal-wave>tidal-wave_2024.1.12_py311_pyapp.exe --audio-format HiRes --loglevel debug https://tidal.com/browse/track/253102500 .\

It also fails with the same error whne I use the absolute path, like c:\1
I'm not sure how to capture the stderr, so I don't kow what is FFmpeg complaining about.

Need Help

Hi Dev,

I use this script to download ALAC, ATMOS, PLAYLIST from apple music https://github.com/zhaarey/apple-music-alac-atmos-downloader

But the script does not download selective track from album. Let assume if we have a album which has 10 tracks & I want to get only track no - 04. Here is the url from which I want to download track no - 04 https://music.apple.com/in/album/bajenge/1736449575?i=1736450031

So, I hope u can help on this if possible.

Thanks

Incorrect FLAC and M4A 'Title' Metadata Tag when Title of Track Has Special Characters

In order to avoid writing audio or video files to disk with illegal characters (especially on Windows), a number of characters are replaced. This should only affect the file name on disk, not the metadata tag (TITLE for FLAC; \xa9nam for M4A), however this seems not to be the case.

For example, the song/album with the title "02:07" (as in, a time of day) is incorrectly specifying the track's title metadata:
image

Input #0, flac, from '01 - 02:07 [CD].flac':
  Metadata:
    ALBUM           : 02:07
    album_artist    : Joep Beving;Maarten Vos
    REPLAYGAIN_ALBUM_PEAK: 0.893829
    REPLAYGAIN_ALBUM_GAIN: -0.47
    ARTIST          : Joep Beving;Maarten Vos
    ARTISTS         : Joep Beving;Maarten Vos
    BARCODE         : 840427243532
    COPYRIGHT       : Sonderling BV & Maarten Vos Music, under exclusive license to LEITER
    DATE            : 2024-05-31
    ISRC            : DEXN82434865
    MEDIA           : Digital Media
    TITLE           : 02 -07
    REPLAYGAIN_TRACK_PEAK: 0.893829
    REPLAYGAIN_TRACK_GAIN: -0.47
    COMPOSER        : Joep Beving;Maarten Vos
    PRODUCER        : Joep Beving;Maarten Vos
    COMMENT         : http://www.tidal.com/track/361515597
    DISCTOTAL       : 1
    DISC            : 1
    TRACKTOTAL      : 1
    track           : 1
  Duration: 00:03:20.76, start: 0.000000, bitrate: 561 kb/s
  Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    Side data:
      replaygain: track gain - -0.470000, track peak - 0.000021, album gain - -0.470000, album peak - 0.000021, 
  Stream #0:1: Video: mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 1280x1280 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn (attached pic)
    Metadata:
      comment         : Cover (front)
      title           : Album Cover

Notice that the ALBUM metadata value is unaffected; it's the TITLE value that is incorrect.

Special characters in filenames

The windows filesystem does not support certain characters like quotes. If songs contain these characters then the program stops and throws error OSError[Errno 22]. In some instances the quotes are removed but other times they are not.

Here's one song example which causes this error
https://tidal.com/track/233202975?u

Windows Token Hotfix

On Windows 10 I have had issues recently with inputting the token when requesting a HiRes track.

Quick fix I found to work is replacing line 195 in login.py to access_token: Optional[str] = None if _token is None else _token.get("access_token").

This, as far as I'm aware, will fix the issue of 'AttributeError: 'NoneType' object has no attribute 'get''.

Fixing this leads to issue #88. Sadly haven't found a fix for this yet.

Not Able To Download In Hi-Res FLAC

I am using latest binary of tidal-wave. Have downloaded many hi-res FLAC tracks / albums using access token from android device. There was no issue faced.

But when I try to download this album error comes. I have used below command to download the album & included --loglevel option to debug. Log shows that URL is invalid but when I open the same URL in browser they are opening.

tidal-wave https://tidal.com/browse/album/66390838 --audio-format hires --loglevel debug

image

tidal-wave https://tidal.com/browse/album/67006305 --audio-format hires --loglevel debug

image

Error log is attached for further details.

Thanks
Error_Log.txt

Windows Does Not Accept Colon ":" in File Names

A good number of playlists on TIDAL from the TIDAL staff or similar "official" playlists contain a colon ":" in the playlist name. Windows does not accept these as valid file names, so make sure to swap out colons for " - " in file names.

Error after one file is downloaded

I have tried to download an album in Atmos format using Windows pyapp container. But after getting the first audio file is sucessfully written, it exits with the following:

d:\Software\Tidal-dl>tidal-wave_2024.1.10_py311_pyapp.exe --audio-format Atmos https://listen.tidal.com/album/205605624
2024-01-19:16:01:28,526 INFO     [models.py:544] TIDAL album ID parsed from input: 205605624
2024-01-19:16:01:29,717 INFO     [requesting.py:89] Requesting from TIDAL API: albums/205605624
2024-01-19:16:01:30,298 INFO     [requesting.py:89] Requesting from TIDAL API: albums/205605624/items
2024-01-19:16:01:33,020 INFO     [requesting.py:89] Requesting from TIDAL API: albums/205605624/review
2024-01-19:16:01:33,347 INFO     [requesting.py:89] Requesting from TIDAL API: tracks/205605625/credits
2024-01-19:16:01:33,624 INFO     [requesting.py:89] Requesting from TIDAL API: tracks/205605625/playbackinfopostpaywall
2024-01-19:16:01:33,903 INFO     [requesting.py:89] Requesting from TIDAL API: tracks/205605625/lyrics
2024-01-19:16:01:34,626 WARNING  [requesting.py:96] 404 Client Error: not found for TIDAL API endpoint tracks/205605625/lyrics
2024-01-19:16:01:34,763 INFO     [utils.py:85] Wrote artist image JPEG for Artist(id=946, name='Megadeth', type='MAIN') to 'C:\Users\705631\Music\Megadeth\Rust In Peace [205605624] [1990]\Megadeth.jpg'
2024-01-19:16:01:34,764 INFO     [requesting.py:89] Requesting from TIDAL API: artists/946/bio
2024-01-19:16:01:35,067 INFO     [track.py:213] Writing artist bio for artist 946 to 'C:\Users\705631\Music\Megadeth\Rust In Peace [205605624] [1990]\Megadeth-bio.json
2024-01-19:16:01:35,071 INFO     [track.py:245] Writing track 205605625 to 'C:\Users\705631\Music\Megadeth\Rust In Peace [205605624] [1990]\01 - Holy Wars...The Punishment Due [A].m4a'
2024-01-19:16:01:41,186 INFO     [track.py:286] Track 205605625 written to 'C:\Users\705631\Music\Megadeth\Rust In Peace [205605624] [1990]\01 - Holy Wars...The Punishment Due [A].m4a'
Traceback (most recent call last):

  File "<frozen runpy>", line 198, in _run_module_as_main

  File "<frozen runpy>", line 88, in _run_code

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\__main__.py", line 3, in <module>
    app()

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\main.py", line 91, in main
    album.get(

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\album.py", line 148, in get
    self.get_tracks(session, audio_format, out_dir)

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\album.py", line 101, in get_tracks
    track_files_value: Optional[str] = track.get(
                                       ^^^^^^^^^^

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\track.py", line 549, in get
    self.set_tags()

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\track.py", line 449, in set_tags
    subprocess.run(cmd)

  File "C:\Users\705631\AppData\Local\pyapp\cache\distributions\_9785110593903059623\python\Lib\subprocess.py", line 548, in run
    with Popen(*popenargs, **kwargs) as process:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "C:\Users\705631\AppData\Local\pyapp\cache\distributions\_9785110593903059623\python\Lib\subprocess.py", line 1026, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,

  File "C:\Users\705631\AppData\Local\pyapp\cache\distributions\_9785110593903059623\python\Lib\subprocess.py", line 1538, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

FileNotFoundError: [WinError 2] The system cannot find the file specified

The same happens if I try with one track from the same album. The track is downloaded properly:

d:\Software\Tidal-dl>tidal-wave_2024.1.10_py311_pyapp.exe --audio-format Atmos https://tidal.com/browse/track/205605626
2024-01-19:16:05:31,257 INFO     [models.py:599] TIDAL track ID parsed from input: 205605626
2024-01-19:16:05:32,059 INFO     [requesting.py:89] Requesting from TIDAL API: tracks/205605626
2024-01-19:16:05:32,672 INFO     [requesting.py:89] Requesting from TIDAL API: albums/205605624
2024-01-19:16:05:32,723 INFO     [requesting.py:89] Requesting from TIDAL API: tracks/205605626/credits
2024-01-19:16:05:33,392 INFO     [requesting.py:89] Requesting from TIDAL API: tracks/205605626/playbackinfopostpaywall
2024-01-19:16:05:34,126 INFO     [requesting.py:89] Requesting from TIDAL API: tracks/205605626/lyrics
2024-01-19:16:05:34,434 WARNING  [requesting.py:96] 404 Client Error: not found for TIDAL API endpoint tracks/205605626/lyrics
2024-01-19:16:05:35,115 INFO     [track.py:245] Writing track 205605626 to 'C:\Users\705631\Music\Megadeth\Rust In Peace [205605624] [1990]\02 - Hangar 18 [A].m4a'
2024-01-19:16:06:34,302 INFO     [track.py:286] Track 205605626 written to 'C:\Users\705631\Music\Megadeth\Rust In Peace [205605624] [1990]\02 - Hangar 18 [A].m4a'
Traceback (most recent call last):

  File "<frozen runpy>", line 198, in _run_module_as_main

  File "<frozen runpy>", line 88, in _run_code

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\__main__.py", line 3, in <module>
    app()

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\main.py", line 82, in main
    track.get(

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\track.py", line 549, in get
    self.set_tags()

  File "C:\Users\705631\AppData\Local\pyapp\data\tidal-wave\9785110593903059623\2024.1.10\Lib\site-packages\tidal_wave\track.py", line 449, in set_tags
    subprocess.run(cmd)

  File "C:\Users\705631\AppData\Local\pyapp\cache\distributions\_9785110593903059623\python\Lib\subprocess.py", line 548, in run
    with Popen(*popenargs, **kwargs) as process:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "C:\Users\705631\AppData\Local\pyapp\cache\distributions\_9785110593903059623\python\Lib\subprocess.py", line 1026, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,

  File "C:\Users\705631\AppData\Local\pyapp\cache\distributions\_9785110593903059623\python\Lib\subprocess.py", line 1538, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

FileNotFoundError: [WinError 2] The system cannot find the file specified

What could be the problem here?

Not Able To Download Album

Hi,

I am trying to download album by using below command in hires format. But it is giving error as mentioned below. I have installed latest binary release.

tidal-wave https://tidal.com/browse/album/52623 --audio-format hires
2024-01-04:17:47:02,006 CRITICAL [main.py:73] Cannot parse 'https://tidal.com/browse/album/52623' as a TIDAL track, album, playlist, or video URL

tidal-wave https://tidal.com/browse/album/95299 --audio-format hires
2024-01-04:17:53:57,043 CRITICAL [main.py:73] Cannot parse 'https://tidal.com/browse/album/95299' as a TIDAL track, album, playlist, or video URL

tidal-wave https://tidal.com/browse/album/15214 --audio-format hires
2024-01-04:17:58:42,657 CRITICAL [main.py:73] Cannot parse 'https://tidal.com/browse/album/15214' as a TIDAL track, album, playlist, or video URL

tidal-wave https://tidal.com/browse/album/502190 --audio-format hires
2024-01-04:18:08:29,294 CRITICAL [main.py:73] Cannot parse 'https://tidal.com/browse/album/502190' as a TIDAL track, album, playlist, or video URL

tidal-wave https://tidal.com/browse/album/497153 --audio-format hires
2024-01-04:18:09:18,181 CRITICAL [main.py:73] Cannot parse 'https://tidal.com/browse/album/497153' as a TIDAL track, album, playlist, or video URL

tidal-wave https://tidal.com/browse/album/495511 --audio-format hires
2024-01-04:18:10:06,387 CRITICAL [main.py:73] Cannot parse 'https://tidal.com/browse/album/495511' as a TIDAL track, album, playlist, or video URL

tidal-wave https://tidal.com/browse/album/496714 --audio-format hires
2024-01-04:18:20:26,503 CRITICAL [main.py:73] Cannot parse 'https://tidal.com/browse/album/496714' as a TIDAL track, album, playlist, or video URL

Thanks

Fix Playlist and Mix Length Limitation

As it stands, all TIDAL API requests that involve a limit parameter are capped at 100. This is because I am loath to attack the complexity that is pagination; i.e. requesting for the same resource if there are more than limit elements in either a playlist's track list, or a mix's track list, or even an album's track list.

Expected a manifest for Dolby Atmos, MQA, or Sony 360 Reality Audio for track 340798732

Hi,

i got my token using the Windows Desktop App and Fiddler Everywhere.
Since the token is accepted, and some metadata files are downloaded I suspect this being a bug.
I use the docker-container and created the windows-token file and enter the token I got from fiddler.
Trying to download any music, i get this error:

2024-03-01:12:29:43,702 INFO     [requesting.py:91] Requesting from TIDAL API: albums/340798731
2024-03-01:12:29:44,007 INFO     [requesting.py:91] Requesting from TIDAL API: albums/340798731/items
2024-03-01:12:29:44,214 INFO     [requesting.py:91] Requesting from TIDAL API: albums/340798731/review
2024-03-01:12:29:44,352 WARNING  [requesting.py:98] 404 Client Error: not found for TIDAL API endpoint albums/340798731/review
2024-03-01:12:29:44,352 INFO     [requesting.py:91] Requesting from TIDAL API: albums/340798731/credits
2024-03-01:12:29:44,392 INFO     [requesting.py:91] Requesting from TIDAL API: tracks/340798732/credits
2024-03-01:12:29:44,542 INFO     [requesting.py:91] Requesting from TIDAL API: tracks/340798732/playbackinfopostpaywall
Traceback (most recent call last):

  File "<frozen runpy>", line 198, in _run_module_as_main

  File "<frozen runpy>", line 88, in _run_code

  File "/home/debian/tidal_wave/__main__.py", line 3, in <module>
    app()

  File "/home/debian/tidal_wave/main.py", line 108, in main
    album.get(

  File "/home/debian/tidal_wave/album.py", line 195, in get
    self.get_tracks(session, audio_format, out_dir, no_extra_files)

  File "/home/debian/tidal_wave/album.py", line 129, in get_tracks
    track_files_value: Optional[str] = track.get(
                                       ^^^^^^^^^^

  File "/home/debian/tidal_wave/track.py", line 592, in get
    self.set_manifest()

  File "/home/debian/tidal_wave/track.py", line 113, in set_manifest
    self.manifest: Manifest = manifester(self.stream)
                              ^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/debian/tidal_wave/dash.py", line 176, in manifester
    raise TidalManifestException(

tidal_wave.dash.TidalManifestException: Expected a manifest for Dolby Atmos, MQA, or Sony 360 Reality Audio for track 340798732

Standardize GitHub Actions around PyInstaller

Now that I have figured out how to compile FFmpeg on Windows, PyInstaller will be the tool used to create release objects. To this end,

  1. Deprecate (only include in the next release) the PyApp binaries
  2. Revamp .github/workflows/pyinstaller-*.yaml to cache compiled FFmpeg, version of Python3 (after 2024.4.1, Python 3.12 and FFmpeg 7)
  3. Rewrite README.md and BUILDME.md with the new instructions and references

Dolby Atmos Does Not Downloads

Hi Dev,

I am using tidal-wave latest release & tried downloading this track in DOLBY ATMOS format. But unfortunately, it does not gets downloaded. Here is the url of track https://tidal.com/browse/track/295322685?u

Command I have used to download is tidal-wave https://tidal.com/browse/track/295322685?u --audio-format atmos

Error log :-

2024-04-02:04:02:12,099 INFO [models.py:668] TIDAL track ID parsed from input: 295322685 2024-04-02:04:02:12,729 INFO [requesting.py:95] Requesting from TIDAL API: tracks/295322685 2024-04-02:04:02:13,773 INFO [requesting.py:95] Requesting from TIDAL API: albums/295322684 2024-04-02:04:02:14,794 INFO [requesting.py:95] Requesting from TIDAL API: tracks/295322685/credits 2024-04-02:04:02:15,817 INFO [requesting.py:95] Requesting from TIDAL API: tracks/295322685/playbackinfopostpaywall 2024-04-02:04:02:16,177 WARNING [requesting.py:107] 401 Client Error: Unauthorized for TIDAL API endpoint tracks/295322685/playbackinfopostpaywall

To make sure this track is in DOLBY ATMOS, I tried same track with HIRES audio format & here below have attached the terminal output. It means track is in ``DOLBY ATMOS` format.

2024-04-02:04:01:59,933 INFO [models.py:668] TIDAL track ID parsed from input: 295322685 2024-04-02:04:01:59,934 INFO [login.py:151] Loading TIDAL access token from 'C:\Users\Rajesh Sahoo\AppData\Local\tidal-wave\android-tidal.token' 2024-04-02:04:02:00,812 INFO [login.py:175] Access token is valid: saving to 'C:\Users\Rajesh Sahoo\AppData\Local\tidal-wave\android-tidal.token' 2024-04-02:04:02:00,814 INFO [requesting.py:95] Requesting from TIDAL API: tracks/295322685 2024-04-02:04:02:01,688 WARNING [track.py:681] Track 295322685 is only available in Dolby Atmos format. Downloading of track will not continue.

Not Able To Update On Ubuntu

Hi,

As latest update is 2024.1.4. But when give pip install tidal-wave==2024.1.4 command on terminal. It gives below mentioned error.

pip install tidal-wave==2024.1.4

Defaulting to user installation because normal site-packages is not writeable

ERROR: Could not find a version that satisfies the requirement tidal-wave==2024.1.4 (from versions: 2023.12.0, 2023.12.2, 2023.12.3, 2023.12.4, 2023.12.5, 2023.12.6, 2023.12.7, 2023.12.8, 2023.12.9, 2023.12.10, 2023.12.11, 2023.12.12, 2023.12.13, 2024.1.1, 2024.1.2, 2024.1.3)

ERROR: No matching distribution found for tidal-wave==2024.1.4

Video Metadata Tags

As videos are most likely always going to be H.264 + AAC stereo .mp4 files from TIDAL, the metadata around this is pretty well established. I am using as my guide:

There is the mp4v2 tool, but mutagen handles all the tags so far, and adding another binary would be silly. So, read the above guides and implement as many of the tags as possible from the (limited) TIDAL API endpoints for music videos.

License of Binaries & FFmpeg Usage

The Dockerfile in the repository root builds FFmpeg from source using its latest snapshot. The documentation is clear that this means that the Docker image should be licensed with the LGPL, and that documentation about it should be included in the release notes/documentation of the source code, as well as a copy of the source code.

How do I go about doing this correctly? Create a Git submodule for the project tracking FFmpeg? Any guidance here would be much appreciated.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.