rafiuth / soggfy Goto Github PK
View Code? Open in Web Editor NEWSpotify ogg dumper
License: Creative Commons Zero v1.0 Universal
Spotify ogg dumper
License: Creative Commons Zero v1.0 Universal
It seems that Soggfy is picking the first one of the artists as the album artist. However album artist is an independant property on its own. Take this song for example:
https://open.spotify.com/track/4AVdIujJQitL1VliBJG7xw?si=777da3ca8f6b48bd
Here the album artist is Shankar Jaikishan but Soggfy ignores it and uses the regular artist as album artist.
{track_num} shows 1. for most songs
same as title
I assume that currently, the lyrics are written into a 'USLT' tag field, which should be fairly standard, but I noticed that other applications behave quite strange. MusicBee doesn't recognize lyrics at all, and Mp3tag reports the field as 'USLT' instead of 'UNSYNCEDLYRICS', even though it should be the same thing, according to Mp3tag documentation.
I noticed that when manually writing an 'UNSYNCEDLYRICS' tag via Mp3tag, it automatically adds an eng||
prefix (or already contains it), which is not present in the Soggfy output files, maybe it's related to this? FFprobe reports the working tag field as 'lyrics-eng' while the field in Soggfy output is only reported as 'lyrics'
For songs that already exist in a plsylist more than once, this would be great to allow duplicates. In my case, there are a lot of songs that have the same file name but are different lengths (not the same exact song), so being able to save the order in the playlist would solve that and be a nice enhancement.
For example, these two songs in my liked songs would save as:
C:\Users\Ryan\Music\Soggfy\unknown{playlist_num}. {artist_name} - {track_name}.ogg
C:\Users\Ryan\Music\Soggfy\unknown\316. 24kGoldn - DROPPED OUTTA COLLEGE.ogg
C:\Users\Ryan\Music\Soggfy\unknown\317. 24kGoldn - DROPPED OUTTA COLLEGE.ogg
add option to stop downloads without restarting app
Could be like green button ->download black button -> stopped
Why should need to wait till the end for the song be downloaded? it could better xspot don't need that
BTW i ear some ads then i use the media keys on keyboard but i have to click 2 or 3 times sometimes to skip successfully!!
After I close spotify the download button disappears.
Hi,
I'm having problems trying to download .mp3 files, they are only downloaded in .ogg and without any metadata.
If you can check if there is a problem, thanks!
There are some exclusive podcasts I'd like for offline viewing but there's no other tools I've found that seem capable. I was wondering if the method used in this tool could also be used for those.
In the README, it says that this has not been tested on premium accounts.
I downloaded one song using the program and it works, but is there any possible risk to getting banned or having Soggfy possibly detected?
This only seems to happen the first time a song is played in a session, a re-download will have the correct value.
Maybe spotify is asynchronously updating the album_track_count field?
Setup:
Currently for a lot of songs I'm getting the following error messages, mostly when scrolling through my saved songs. It also prevents me from downloading some of the files, as it only creates the folder with the lyrics file, but then is unable to recognize it somehow.
[WRN] Error while processing message from 0x1346f110: directory_iterator::directory_iterator: The directory name is invalid.: "\\?\C:\shortcuts\raid10\Music\Spotify_Downloaded\Architects\Daybreaker"
[WRN] Error while processing message from 0x1346f110: directory_iterator::directory_iterator: The directory name is invalid.: "\\?\C:\shortcuts\raid10\Music\Spotify_Downloaded\While She Sleeps\You Are We"
[WRN] Error while processing message from 0x1346f110: directory_iterator::directory_iterator: The directory name is invalid.: "\\?\C:\shortcuts\raid10\Music\Spotify_Downloaded\Carpenter Brut\Hush Sally, Hush!"
Example C:\shortcuts\raid10\Music\Spotify_Downloaded\Architects\Daybreaker
exists, Soggfy was able to create the folder, write the lyrics file, but is unable to save the track after:
$ tree Architects/
Architects/
├── Daybreaker
│ └── 9. Devil's Island.lrc
One guess I have is that it might be be the special characters in songs like Hush Sally, Hush!
, Devil's Island
. It also happens with songs with spaces in it.
Happy for any pointers!
I tried, in fear of being banned, downloading a playlist and then going offline to do the "download" in high speed. It does not work. Is there a reason for this or could it be made possible?
I let it play to the end but it will show up a "X".
I deleted my existing installation and ran Install.ps1.
But it still shows up as "Failed to create process".
Is it possible to add support for older versions? The old ui is cleaner, the title and artist columns are separated, plus the application uses less resources. Personally, I'm using 1.1.4, but if I remember correctly the last version before the redesign was 1.1.58.
I can see injector.cpp, injector.rc and injector.vsxproj tho (I'm new)
Spotify has taken down ZSpotify, i don't think it would take long before this also gets taken down.
I think being able to blacklist certain songs, albums, artists and playlist would be quite nice, maybe you don't want to download a song but listen to it at certain times and going to the download folder just for a specific song is a hassle.
This kind of plays on my previous feature request (#42), pretty much pausing downloads whenever a certain song, album, artist or playlist is being played.
On the context menu for songs, albums, artists and playlist there would be an "Add to blacklist" button. I don't know how Soggfy or even Spotify works; but my idea was to save the IDs of the selected songs, albums, artists and playlists in a JSON file (which would be accessible in the settings) and when Soggfy detected any of those, it would temporarily pause downloads so the current song doesn't get downloaded.
I am unsure how possible this really is, but I think this would be quite a nice feature to have. Maybe you're listening to a friend's playlist which has 1 or multiple songs you dislike, with this you can easily either blacklist the songs you dislike themselves or the playlist itself.
my request is to add the ability to only download lyrics without the audio file which the program already have the ability to do
p.s.: just for curiosity where does the program gets the lyrics data from is it from Spotify itself or from the lyrics provider servers
Normally the successful check mark is displayed once a song is complete. After a while, the check disappears and the tracks look like it they havent downloaded. It also used to show a checkmark even after a spotify restart. This doesn't seem to work either. If you scroll up and down the playlist you can make them disappear too.
Using latest release and latest support version of Spotify client.
Here are my settings....
I was previously using v2.2.5 and OGG but I upgraded to see if another issue I was seeing was resolved. I used to keep the files in ogg format however I found out over the weekend that some apps couldn't process the file, including ffmpeg. I have reported that as a separate issue. #27
Here is a screenshot after it has been running a while. You will see a number of missing checkmarks even though the file has been downloaded.
Some song titles contain very weird special characters or are extremely long, which is not allowed in directory or file names by the OS (Windows in my case). If the track template path in the Soggfy settings is something like {artist_name}/{album_name}{multi_disc_path}/{track_num}. {track_name}.ogg
, Soggfy will try to name the file accordingly, which will obviously not work. I found that in this case, the file will not be saved at all. (But the green checkmark next to the song will sometimes still appear.) I suggest replacing all non-latin characters with a -
or similar and limiting the file name length before saving the file.
You can skip tracks already downloaded. This is useful if all you want to do is rip anything you haven't already ripped.
If this is disabled, then all tracks will play. This is also useful when you just want to play all tracks.
However, if you wish to listen to a playlist and rip anything you already haven't already downloaded, you can't cleanly do it.
The track will download and then transcoded even if it already exists. Whilst this might not be an issue, the date of the file is overwritten making it harder to find "new" tracks but worse, if you have modified the file in some way, perhaps added additional metadata, it is lost.
Could you add another option "Overwrite downloaded tracks". Using this in combination with Skip would be very flexible.
As an example, the song Bruno Mars, Anderson .Paak, Silk Sonic - Leave The Door Open would be saved under Bruno Mars\An Evening With Silk Sonic\2. Leave The Door Open.ogg
.
Is it intentional to treat the album artist as the first artist (Bruno Mars) rather than include all of the album artists? (Bruno Mars, Anderson .Paak, Silk Sonic)
I've noticed that this behaviour comes from SpotifyOggDumper/StateManager.cpp:389 where the name of the first artist in the artists
key is taken.
Hi, I would like to try this project and was wondering whether it would be possible to port this to Linux with minimal changes - one thing I've noticed is that you refer to userprofile
which I suppose is Window's AppData
(?)
Lmk and thanks for making this!
Hi,
I tried today to inject the DLL into Spotify and the software suddenly closed.
Even when I tried to open the software using the injection exe, it closed immediately.
I think they released a software update that blocks the injection.
If I download an OGG file with no transcoding, the file seems to play everywhere however I have found a couple of apps that have trouble processing the files.
Simple example is ffmpeg.
.\ffmpeg -i source.ogg destination.ogg
The example above fails badly with the source file.
If I change the destination to an m4a file...
Whilst I am not trying to use these commands in real life, I just wanted a reproducible example because you wont have access to the tool I was trying to load the files in to. I was going to write a script just to transcode them and then I found ffmpeg failed too.
Hope that is enough information.
No, this is not a duplication of #19 .
I wanted to ask if in case the songs already exist on the computer offline, is it possible to cancel the requests to Spotify's server (because then it blocks me after some time).
The information should be stored locally on the computer, and there is no need to make a new request to the server.
Thanks.
There are certain moments where I don't want to download songs, for example when I'm listening to my Discover Weekly.
Sometimes you just want to listen to a song just to check it out and not download it and having to relaunch Spotify just for that can be annoying.
A setting or a button to pause downloads for the current session I think would be great; it would work similarly to the Private session already in Spotify.
A setting for pausing downloads whenever Private session is enabled seems like a really good idea to me, considering it's a private session why would it download the songs you're listening to? Some people might not want this, so I think this would be best if it was toggleable.
I think a setting for pausing downloads would really benefit Soggfy. Deleting files, skipping forward in a song to cancel the download or relaunching Spotify is cumbersome, so having a setting right into Soggfy to pause downloads would be less of an annoyance for the user.
Having both of the settings mentioned would, in my opinion, be the best way to go about this. Considering some people might not want to have Private sessions pause downloads and turning a setting on and off constantly can be annoying; so having an easily toggleable setting that is only enabled for the session would be really convenient.
it would be quite nice if the injector could also search the current directory for a copy of Spotify to launch+Inject into.
Knowing that Spotify likes to force-update their software to %AppData%
, that could also save some update issues.
Regarding settings (%AppData%\Soggfy
and %LocalAppData%\Spotify
), I believe they're fine to stay there.
This option would be great as it would allow users with a already-setup folder to simply copy + run.
The spotify
folder would be as it is in AppData, so it would launch Soggfy/spotify/Spotify.exe
.
I've just tried building the injector myself with the relative path, and it does work as expected.
Regarding adding both paths (.\spotify
and %AppData%\Spotify
), I wasn't sure how, sorry.
Since soggfy can be treated as a portable application, it would be nice to save files to a relative path.
When the application launches, i can enter "../Downloads" and jpg/mp4/txt/lrc files export just fine.
It does however seem like ffmpeg (might) not allow for relative paths in the file paths provided.
The Output settings I've tried are the Original OGG and MP3 320K formats, neither get saved.
Would it be possible to have soggfy resolve relative paths to full paths for just ffmpeg?
I've checked the arguments, and the only path that's not resolved is the output path.
Here's an example error I get in the log file for each song it tried to download:
[ERR] Failed to save track Various Artists - Entropy: FFmpeg exited with code 1. Check log for details.
[DBG] Requesting metadata for playback 5814f539187177b87c63290acb4db0f9...
[INF] Saving track Jim Yosef - Passion
[DBG] stream: playback_5814f539187177b87c63290acb4db0f9.dat
[DBG] [ffmpeg.exe]: ../Downloads/Jim Yosef - Passion.ogg: No such file or directory
And here's how my file structure looks like:
This issue doesn't seem all that common with the users as I can't seem to locate open or closed issues in regards to this.
Unfortunately I can't pin point where this issue started since this has been happening for quite a while, with me on Soggfy 2.2.5. I thought it was associated with me not updating the project and just procrastinated updating. Now however, even after updating the project to 2.2.8, the issue still persists.
This issue persists even with me disabling Spicetify via spicetify restore
.
Evident by the screenshot I'm on a Windows 11 PC.
[DBG] FFmpeg path: C:\ProgramData\chocolatey\bin\ffmpeg.exe
[INF] Spotify version: 1.1.83.956
[DBG] Hook created: DecodeAudioData @ 0x9bdb7b
[ERR] Failed to install hooks: Fingerprint matches 0 locations, expected 1.
Try updating Soggfy.
Here's log.txt
.
As I mentioned above, this issue doesn't seem common across devices, there might be something problematic on my end. It'd be great if I could get insights on how this is happening and even more great if there is a fix! Thanks!
When DMCA inevitably comes for this repo due to popularity rising, what will you do and what are your plans for this project?
A lot of people here seem to have found this tool recently from Reddit and other places.
I have Soggify up and running, and it's brilliant, but I'm considering your warning that an account could get banned for using it. I suspect that Spotify would notice if someone were "playing" a track at 10x speed, but if playing at normal speed is there any way that Spotify could even guess that you are reconstructing the original file as you're playing it?
If there's really no way for Spotify to see anything out of the ordinary, when you are playing (and reconstructing) at normal speed, you might just update your Notes to reflect that,
Thanks,
Drew
I have found an error in downloading a podcast episode with embedded music.
This is the episode with the problem:
https://open.spotify.com/episode/7FQE6Pm1adiCb0Zj0lfCyM?si=65886825fb72423a
The downloaded track contains only the first portion of the podcast, before it cuts to the first track of music.
There are other segments in the episode that were missed and do not appear on the download.
Other episodes have no issues.
When I do right click and open with powershell, nothing happens - a pop up of powershell opens and closes.
Song: Lamp - 雨降る夜の向こう
New track detected: spotify:track:3iqYC2gMPND9ChNmmK0mLD
Saving track spotify:track:24kobKjeJdJPXnqaf5hB93
title: Lamp - 雨降る夜の向こう
stream: playback_eea06c09848c56dee38be9d6de44099b.dat
meta: {"album":{"album_type":"album","artists":[{"external_urls":{"spotify":"https://open.spotify.com/artist/0rFHElzeddB9ymDjgpBENX"},"href":"https://api.spotify.com/v1/artists/0rFHElzeddB9ymDjgpBENX","id":"0rFHElzeddB9ymDjgpBENX","name":"Lamp","type":"artist","uri":"spotify:artist:0rFHElzeddB9ymDjgpBENX"}],"available_markets":["AD","AE","AG","AL","AM","AO","AR","AT","AU","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BN","BO","BR","BS","BT","BW","BY","BZ","CA","CD","CG","CH","CI","CL","CM","CO","CR","CV","CW","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","ES","FI","FJ","FM","FR","GA","GB","GD","GE","GH","GM","GN","GQ","GR","GT","GW","GY","HK","HN","HR","HT","HU","ID","IE","IL","IN","IQ","IS","IT","JM","JO","JP","KE","KG","KH","KI","KM","KN","KR","KW","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MG","MH","MK","ML","MN","MO","MR","MT","MU","MV","MW","MX","MY","MZ","NA","NE","NG","NI","NL","NO","NP","NR","NZ","OM","PA","PE","PG","PH","PK","PL","PS","PT","PW","PY","QA","RO","RS","RU","RW","SA","SB","SC","SE","SG","SI","SK","SL","SM","SN","SR","ST","SV","SZ","TD","TG","TH","TJ","TL","TN","TO","TR","TT","TV","TW","TZ","UA","UG","US","UY","UZ","VC","VE","VN","VU","WS","XK","ZA","ZM","ZW"],"external_urls":{"spotify":"https://open.spotify.com/album/7b55VfUk2Vpuqnac9NDREc"},"href":"https://api.spotify.com/v1/albums/7b55VfUk2Vpuqnac9NDREc","id":"7b55VfUk2Vpuqnac9NDREc","images":[{"height":640,"url":"https://i.scdn.co/image/ab67616d0000b273bbc2ac628f52cd6127e20bfa","width":640},{"height":300,"url":"https://i.scdn.co/image/ab67616d00001e02bbc2ac628f52cd6127e20bfa","width":300},{"height":64,"url":"https://i.scdn.co/image/ab67616d00004851bbc2ac628f52cd6127e20bfa","width":64}],"name":"ランプ幻想","release_date":"2008-12-03","release_date_precision":"day","total_tracks":11,"type":"album","uri":"spotify:album:7b55VfUk2Vpuqnac9NDREc"},"artists":[{"external_urls":{"spotify":"https://open.spotify.com/artist/0rFHElzeddB9ymDjgpBENX"},"href":"https://api.spotify.com/v1/artists/0rFHElzeddB9ymDjgpBENX","id":"0rFHElzeddB9ymDjgpBENX","name":"Lamp","type":"artist","uri":"spotify:artist:0rFHElzeddB9ymDjgpBENX"}],"available_markets":["AD","AE","AG","AL","AM","AO","AR","AT","AU","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BN","BO","BR","BS","BT","BW","BY","BZ","CA","CD","CG","CH","CI","CL","CM","CO","CR","CV","CW","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","ES","FI","FJ","FM","FR","GA","GB","GD","GE","GH","GM","GN","GQ","GR","GT","GW","GY","HK","HN","HR","HT","HU","ID","IE","IL","IN","IQ","IS","IT","JM","JO","JP","KE","KG","KH","KI","KM","KN","KR","KW","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MG","MH","MK","ML","MN","MO","MR","MT","MU","MV","MW","MX","MY","MZ","NA","NE","NG","NI","NL","NO","NP","NR","NZ","OM","PA","PE","PG","PH","PK","PL","PS","PT","PW","PY","QA","RO","RS","RU","RW","SA","SB","SC","SE","SG","SI","SK","SL","SM","SN","SR","ST","SV","SZ","TD","TG","TH","TJ","TL","TN","TO","TR","TT","TV","TW","TZ","UA","UG","US","UY","UZ","VC","VE","VN","VU","WS","XK","ZA","ZM","ZW"],"disc_number":1,"duration_ms":311920,"explicit":false,"external_ids":{"isrc":"JPG100800129"},"external_urls":{"spotify":"https://open.spotify.com/track/24kobKjeJdJPXnqaf5hB93"},"href":"https://api.spotify.com/v1/tracks/24kobKjeJdJPXnqaf5hB93","id":"24kobKjeJdJPXnqaf5hB93","is_local":false,"name":"雨降る夜の向こう","popularity":43,"preview_url":"https://p.scdn.co/mp3-preview/594b4b8130e08f928cffa9e69c5c516f20dffb78?cid=65b708073fc0480ea92a077233ca87bd","track_number":4,"type":"track","uri":"spotify:track:24kobKjeJdJPXnqaf5hB93"}
Failed to save track spotify:track:24kobKjeJdJPXnqaf5hB93: No mapping for the Unicode character exists in the target multi-byte code page.
Also thank you for this project! It's a real help.
Just noticed that using 1.1.77.643 and latest release (v2.2.1), the metadata is not being embedded in the ogg as it was a few days ago. Not sure if Spotify are fighting back with this or if you embed the metadata after stripping it but even the comment field is blank now.
Rebooted to be sure it wasn't just something memory resident.
Cannot locate this file in the latest build
I get the following error when I try to run install.ps1.
Rename-Item : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
In C:\Users\XXX\Desktop\Soggfy-2.3.0\Install.ps1:17 Zeichen:23
+ Rename-Item -Path $spotifyFolder.FullName -NewName "Spotify"
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Rename-Item], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.RenameItemC
ommand
As a user who has 1000s of songs, it would be nice if we could hide songs that we have already downloaded, only showing those missing or with colliding names. The setting of course should be off by default but when enabled should skip (and hide) songs that are already downloaded in the playlist. Showing the number of downloaded tracks next to the duration when enabled could be a way to indicate how many are hidden.
I need the play next feature and I found a spicetify addon which adds it. But I also need to save all the songs I listen to locally so I also need Soggfy. So does soggfy work with spicetify?
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.