SpotiFlyer
Kotlin Multiplatform Music Downloader, Supports Spotify / Gaana / Youtube Music / Jio Saavn / SoundCloud.
Top Related Projects
Spotify Downloader and alternative of Spotdl(python) tool made in NodeJS based on youtube-dl
Spotify for the terminal written in Rust 🚀
Open Source Spotify client library
Quick Overview
SpotiFlyer is an open-source, multi-platform music downloader that supports various streaming services including Spotify, YouTube, Gaana, and more. It allows users to download and convert music from these platforms into MP3 format, providing a seamless experience across desktop and mobile devices.
Pros
- Multi-platform support (Android, iOS, Desktop)
- Wide range of supported music streaming services
- User-friendly interface with material design
- Actively maintained and regularly updated
Cons
- Potential legal concerns regarding music downloading
- Dependency on third-party services for some functionality
- May require manual build process for some platforms
- Limited documentation for advanced usage
Code Examples
As SpotiFlyer is primarily an application rather than a code library, specific code examples are not applicable. However, here are some relevant code-related aspects:
// Example of how SpotiFlyer uses Kotlin Multiplatform for cross-platform development
expect class PlatformSpecificClass {
fun platformSpecificFunction()
}
actual class PlatformSpecificClass {
actual fun platformSpecificFunction() {
// Platform-specific implementation
}
}
// Example of how SpotiFlyer handles download requests
fun downloadTrack(track: Track) {
viewModelScope.launch {
downloadRepository.downloadTrack(track)
}
}
// Example of how SpotiFlyer uses Compose for UI
@Composable
fun TrackItem(track: Track, onDownloadClick: () -> Unit) {
Row(
modifier = Modifier.fillMaxWidth().padding(8.dp),
verticalAlignment = Alignment.CenterVertically
) {
// Track details and download button
}
}
Getting Started
To use SpotiFlyer:
- Clone the repository:
git clone https://github.com/Shabinder/SpotiFlyer.git
- Open the project in Android Studio or IntelliJ IDEA
- Build and run the project for your desired platform (Android, iOS, or Desktop)
- For mobile devices, you can also download the APK from the releases page
- Launch the app and start downloading music from supported platforms
Note: Ensure you have the necessary development tools and SDKs installed for your target platform.
Competitor Comparisons
Spotify Downloader and alternative of Spotdl(python) tool made in NodeJS based on youtube-dl
Pros of spotify-dl
- Written in Python, which may be more familiar to some developers
- Supports downloading entire playlists and albums
- Includes a progress bar for download tracking
Cons of spotify-dl
- Less actively maintained (last commit over a year ago)
- Fewer features compared to SpotiFlyer
- Limited platform support (primarily command-line based)
Code Comparison
SpotiFlyer (Kotlin):
suspend fun downloadTracks(tracks: List<Track>) = withContext(Dispatchers.IO) {
tracks.forEach { track ->
val audioInfo = youtubeMusic.getAudioInfo(track)
downloadAudio(audioInfo, track)
}
}
spotify-dl (Python):
def download_tracks(tracks):
for track in tracks:
audio_info = youtube_music.get_audio_info(track)
download_audio(audio_info, track)
Both projects aim to download music from Spotify, but SpotiFlyer offers a more comprehensive solution with cross-platform support and a graphical user interface. It's also more actively maintained and provides additional features like metadata editing. spotify-dl, while simpler, may be easier to set up for users familiar with Python and command-line tools.
Spotify for the terminal written in Rust 🚀
Pros of spotify-tui
- Terminal-based interface, ideal for users who prefer command-line tools
- Lightweight and efficient, consuming fewer system resources
- Customizable keybindings for improved workflow
Cons of spotify-tui
- Limited to Spotify playback control and browsing, no download functionality
- Requires Spotify Premium account for full functionality
- Steeper learning curve for users unfamiliar with terminal interfaces
Code Comparison
spotify-tui (Rust):
pub fn play_track(spotify: &Spotify, track_id: &str) -> Result<()> {
let track_uri = format!("spotify:track:{}", track_id);
spotify.start_playback(None, None, Some(vec![track_uri]), None, None)
}
SpotiFlyer (Kotlin):
suspend fun downloadTrack(track: Track) {
val audioFile = youtubeDownloader.downloadAudio(track.youtubeLink)
audioFile.writeID3Tags(track.metadata)
audioFile.moveToMusicFolder()
}
The code snippets highlight the different focus of each project: spotify-tui emphasizes playback control, while SpotiFlyer focuses on downloading and managing audio files. spotify-tui uses Rust for efficient performance, while SpotiFlyer employs Kotlin for cross-platform development.
Open Source Spotify client library
Pros of librespot
- Written in Rust, offering better performance and memory safety
- More comprehensive Spotify API implementation, including playback functionality
- Actively maintained with regular updates and contributions
Cons of librespot
- More complex to set up and use for end-users
- Primarily focused on streaming, lacking direct download capabilities
- Requires more technical knowledge to integrate into other projects
Code Comparison
SpotiFlyer (Kotlin):
suspend fun downloadTrack(track: Track) {
val audioFile = youtubeDownloader.downloadAudio(track.name)
audioFile.saveToDevice()
}
librespot (Rust):
fn play_track(&mut self, track_id: TrackId) -> Result<(), Error> {
let audio_key = self.session.audio_key().request(track_id)?;
let encrypted_file = self.session.cdn().get_file(track_id)?;
self.player.play(decrypt(encrypted_file, audio_key))?;
Ok(())
}
SpotiFlyer is designed for easy track downloading, while librespot focuses on streaming implementation. librespot offers more comprehensive Spotify integration but requires more technical expertise. SpotiFlyer provides a simpler solution for users primarily interested in downloading tracks.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
We will from now on publish PLUGINS for Soundbound, which users can install explicitly on their own responsibility (disclaimer).
Soundbound - Get Now!
Please refer above for latest updates.
- Spotiflyer itself won't be getting any more updates, We all thank you for your support and hope to see you in Soundbound Telegram Community.
SpotiFlyer
- Kotlin Multiplatform Music Downloader ,supports Spotify, Youtube, Gaana, Jio-Saavn and SoundCloud.
Supports- Playlist, Albums, Tracks. (If You know Any Source for Episodes/Podcasts create an Issue sharing It.)
Currently running on:
- Android (Jetpack Compose)
- Desktop (Compose for Desktop) β
- Web (Kotlin/JS + React Wrapper) β
- (WIP) IOS SOON (SWIFTUI)
Encourage this repo by giving it a Starâ .
SpotiFlyer is an App(Written in Kotlin), which aims to work as:
- Downloads: Albums, Tracks and Playlists,etc
- Save your Data ,by not Streaming your Fav Songs Online again & again(Just Download Them!)
- No ADS!
- Works straight out of the box and does not require you to generate or mess with your API keys (already included).
Supported Platforms:
- Spotify
- Gaana
- Youtube
- Youtube Music
- Jio-Saavn
- SoundCloud
- (more coming soon)
ð» Install
Platform | Download | Status |
---|---|---|
Android | â Stable | |
Windows | â Stable | |
Windows-JAR | â Stable | |
MacOS-JAR | â Stable | |
Linux-DEB | â Stable | |
Linux-JAR | â Stable | |
Web | â ï¸ Beta |
- To run the
jar
version, you need JAVA installed. - MacOs DMG is not notarized and signed using a certificate , so Use jar in mac for now.
Want to Contribute ðââï¸?
Want to contribute? Great! All contributions are welcome, from code to documentation to graphics to design suggestions to bug reports. Please use GitHub to its fullest-- contribute Pull Requests, contribute tutorials or other wiki content-- whatever you have to offer, we can use it!
- For Translations , read Contributing.md
Please Donate to support me and my work!
Want to discuss? ð¬
Have any questions, doubts or want to present your opinions, views? You're always welcome. You can start discussions.
Todos ð
- Write Tests.
- Support for Podcasts/Episodes and Shows.
- Build a Media Player into this app. #113
Note
The availability of YouTube Music / JioSaavn in your country is important for this app to work. The reason behind this is, we use YouTube Music / JioSaavn to filter out our search results and get the desired song downloaded from Youtube Music OR other providers we may use(like Jio Saavn). To check if YouTube Music is available in your country, visit YouTube Music.
I am hosting a server for WEB APP on my own personal device , so expect some downtimes, If you have a server available and would like to share , open an issue or ping me wherever you can get a hold of me.
Permissions Info:
- NETWORK- (INTERNET, ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE): to access the online streaming services, and Confirm Network Connectivity.
- STORAGE- READ_STORAGE_PERMISSION, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, MANAGE_EXTERNAL_STORAGE): to save Downloaded Media Files.
- QUERY_ALL_PACKAGES- in order to check if Youtube Music, Spotify, Gaana, JioSaavn, etc apps are installed and if they are, user can directly open them.
- REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: User Allows App to Run in Background at runtime in Permission Dialog.
- Wake Lock: Don't let Wifi/Internet Sleep in screen off / dozing state when Songs are being downloaded.
- Foreground Service: Service responsible to download and save songs to storage even after app is exited/background.
- NOTE: Analytics and Crashlytics are OPT-IN (Disabled by Default) and are Self-Hosted.
License
GPL-3.0 License This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Free Software, Hell Yeah!
Credits
-
Some Logos are Based on Logos by Freepik.
Disclaimer
Downloading copyright songs may be illegal in your country. This tool is for educational purposes only and was created only to show how Music Platform's Apis like Spotify's API can be exploited to download music. Please support the artists by buying their music.
Top Related Projects
Spotify Downloader and alternative of Spotdl(python) tool made in NodeJS based on youtube-dl
Spotify for the terminal written in Rust 🚀
Open Source Spotify client library
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot