ebb-earl-co / tidal-wave Goto Github PK
View Code? Open in Web Editor NEWWaving at the TIDAL music service
License: Apache License 2.0
Waving at the TIDAL music service
License: Apache License 2.0
Case in point, Queen: https://listen.tidal.com/artist/8992
Is there a way to get a ui on termux like tidal-dl yet?
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
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'
pyapp binary artifact is still not building, even after hotfix...
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.
Thanks
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
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.
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
It seems to be rather poor practice offering release artifacts, and, in 2024, not to sign them!
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...
There must be a GitHub action that automatically creates checksums of artifacts! (The most popular one only has 8 stars!?)
At the very least
BLAKE3
is the future (?)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?
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
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?
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.
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.
Thanks
am I doing something wrong? How do I get the 8 or 12 channels?
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
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:
Not sure if this is an limitation of the API or this app, but if you try to download a playlist it will only grab the first 100 items.
Where do I enter it?
Hi,
I used this command tidal-wave https://tidal.com/browse/track/330931239 --audio-format hires to download the tracks in hi-res, as the track is availabe from tidal in 24bit / 96 khz. And it got download fine.
But when I check the downloaded file in spectrum analyzer it shows nothing above 20 khz
& when I check it with tool from this website https://losslessaudiochecker.com/ it shows the file is upsampled
Any views on this
I have logged in TIDAL desktop app & using FIDDLER EVERYWHERE to capture HTTPS traffic. And I am able to get my ACCESS TOKEN mentioned from https://login.tidal.com/oauth2/me
But I am getting error in program execution. Have attached text file with all errors. Or can you tell how to get ACCESS TOKEN
Thanks
Hi-Res Error.txt
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.
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
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:
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.
When adding the --no-extra-files
flag in version 2024.2.1, it was overlooked that, in artist.py, the artist.Artist.get_albums()
method failed to pass the no_extra_flags
variable into album.Album.get_album()
that is called inside.
Hi,
As earlier this bug was fixed due to ALBUM ID length. But now on latest release 2024.1.8
Again this error came
tidal-wave https://tidal.com/browse/track/42298 --audio-format atmos
2024-01-11:18:12:22,451 CRITICAL [main.py:70] Cannot parse 'https://tidal.com/browse/track/42298' as a TIDAL album, artist, mix, playlist, track, or video URL
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
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.
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
tidal-wave https://tidal.com/browse/album/67006305 --audio-format hires --loglevel debug
Error log is attached for further details.
Thanks
Error_Log.txt
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.
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?
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
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.
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
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,
.github/workflows/pyinstaller-*.yaml
to cache compiled FFmpeg, version of Python3 (after 2024.4.1, Python 3.12 and FFmpeg 7)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.
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
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.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.