A desktop music player built with Electron that streams audio from YouTube Music. Clean UI, no accounts, no ads.
Warning
The app is still constantly being worked on and may contain a few bugs or experimental features, use at your own discretion.
- Search — Find songs, artists, and albums via YouTube Music
- Playback — Stream audio directly with play/pause, seek, skip, volume
- Queue — View and manage upcoming tracks, drag reorder
- Smart Queue — Auto-fills with similar songs when the queue runs out
- Shuffle & Repeat — Shuffle queue, repeat one or all
- Playlists — Create, rename, delete, and add/remove tracks. Custom or auto-generated covers. Drag & drop songs into sidebar playlists
- Liked Songs — Heart any track to save it
- Synced Lyrics — Spotify-like synced lyrics from multi-source
- Artist Pages — Top songs, discography, monthly audience, fans also like, and live performances
- Follow Artists — Follow artists and see their recent releases on the home page
- Music Videos — Watch music videos in-app
- Discord Rich Presence — Show what you're listening to on Discord
- Cloud Sync — Sign in with email to sync your library across devices
- Themes — Built-in color themes
- Keyboard Shortcuts — Full keyboard control (see below)
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
You'll need Node.js (v18+) and yt-dlp installed on your system.
# Clone the repo
git clone https://github.com/nyakuoff/Snowify.git
cd snowify
# Install dependencies
npm install
# Run
npm start| Dependency | Purpose |
|---|---|
| Electron | Desktop app shell |
| ytmusic-api | YouTube Music search, artist & album data |
| yt-dlp | Extracts audio stream URLs (must be in PATH) |
| synclyrics | Synced lyrics from Musixmatch, LrcLib, Netease |
| Firebase | Authentication & cloud sync |
| Key | Action |
|---|---|
Space |
Play / Pause |
← / → |
Seek backward / forward 5s |
Ctrl+← / Ctrl+→ |
Previous / Next track |
↑ / ↓ |
Volume up / down |
/ |
Focus search |
- Electron — Desktop framework
- ytmusic-api — YouTube Music metadata
- yt-dlp — Audio stream extraction
- synclyrics — Synced lyrics (Musixmatch, LrcLib, Netease)
- Firebase — Auth & Firestore cloud sync
- Discord RPC — Rich presence integration
- Outdated
This app is for personal and educational use only. It streams content from publicly available sources. I am not responsible for how anyone chooses to use it.
If you find bugs, have ideas, or want to clean something up, feel free to open an issue or a PR. All skill levels welcome.
Snowify supports multiple languages through JSON translation files in src/locales/. To contribute a translation:
-
Copy the English file — Duplicate
src/locales/en.jsonand rename it to your language's ISO 639-1 code (e.g.nl.jsonfor Dutch). -
Translate the values — Each file is a flat
"key": "value"JSON object. Translate only the values, never the keys. Keep any{{placeholder}}variables intact:"home.greeting.morning": "Goedemorgen", "queue.trackCount": "{{count}} nummers"
-
Register the language — Add the new language code to the
SUPPORTEDarray insrc/renderer/i18n.jsadd a<option>for it in the language selector insrc/renderer/index.htmland add it to the supported languages in the README. -
Open a PR — Submit your translation file along with the registration changes.
Currently supported: English, Spanish, Portuguese, French, German, Japanese, Korean, Chinese, Italian, Turkish, Russian, Hindi.
Note
AI Disclaimer: Parts of this project were assisted or written by AI. If that's something you're not comfortable with, no hard feelings, I understand and I don't force anyone to use it. The code may have flaws. If you spot something that could be better, contributions are very welcome. I'm still learning and would appreciate the help.






