SK Music - Official Release

SK Music: The Long-Awaited release of a Kosher Music web client!

SK Music is a fast, kosher music web client (and now a desktop app)

I took the Zemer catalog from zemer-search and built a web client on top of it. It’s come a long way since the first release — it’s now at 1.1.3, with a native desktop app.

Try it: https://SKMusic.ShalomKarr.workers.dev

What it does

  • Kosher by construction — every song comes from a whitelisted artist’s catalog. Nothing outside it is ever searched, played, or recommended. It’s not filtering a bad list down; there’s nothing else in there to begin with.
  • Instant Hebrew-aware search — the entire catalog is searched on your device, and it’s transliteration-tolerant (חיים / Chaim / Hayim all find each other).
  • Gapless playback — the next song is buffered ahead and takes over the moment the current one ends. Optional crossfade too.
  • Radio — endless stations from any song, artist, album or playlist, built from what the community actually listens to.
  • Trending & charts — real listening data, with weekly movement.
  • Content filters & Parental Controls — kol isha, Chasidish, Israeli, DJ and Acapella filters, PIN-locked parental profiles, and automatic Acapella-only during Sefira and the Three Weeks.
  • Kid Zone — a hand-picked corner of the catalog, safe for little ears.
  • Playlists — build them, share them with a link, and they stay filtered by whoever’s viewing.
  • Time-synced lyrics, sleep timer, shuffle, queue editing, and deep links with rich previews.

Desktop app

There’s a native app for Windows and Linux with a system-tray mini player, media keys, background play, offline downloads, and automatic updates.

Source code

It’s open. GPL-3.0, here:

That’s a change from what I originally said — SK Music derives from zemer-search, which is GPL, so open is where it belongs. Do whatever the license permits. Commercial use is allowed; as a personal request and not a license condition, please ask me first before putting it in a paid product.

Credit

The catalog and artist whitelist come from Zemer by @ars18 and the zemer-app and zemer-search. Full credit for the catalog that makes any of this possible, and thanks for a lot of advice along the way. SK Music is an independent client with its own search engine.

Thanks also to @PleaseSmileToday for ideas and singer tagging, and to @JASK, @ys770, @flippy and @the-curious for help tagging singers.

This is not affiliated with Zemer. It’s a separate project that uses their catalog with permission.

On upkeep: I’ve been actively maintaining and shipping this, and I intend to keep going — but it’s a side project, so I can’t promise a schedule. Bugs and requests in this thread get read and they do get fixed.

– Shalom Karr

10 Likes

Added

1. Parental Controls redesign + Kid-Zone customization

  • Redesigned screen: hero with shield badge + live status pills, per-section icons, cleaner rows.
  • kid_add/kid_remove now function — a two-column “Add artists / Hide artists” manager so a parent can allow a non-Kid-Zone artist into the child’s zone or pull a Kid-Zone artist out (previously read but never written).
  • Playlists-tab listings now gated by the artist blocklist.

2. Allowlist fix + PIN autofill + analytics SQL

  • “Only these” allowlist is now definitive — an allowlisted artist plays even outside Kid Zone; loadArtists gates client-side rather than relying on the kidZone=1 server pre-filter (so an allowlisted non-kid artist actually shows).
  • PIN inputs marked autocomplete=one-time-code so the browser stops prefilling the account password.

3. OG previews, /trending on Node, Acapella Mode, recents sync

  • OG/SEO link previews — shared /song/:id (and artist/album/zemer-playlist) links unfurl with real title, artist, and cover image (via an <!--OGTAGS--> marker replaced by api.mjs + the Worker; build emits data/og.json).
  • Added the /trending route to the Node server (was Worker-only) so localhost shows the rails.
  • Acapella Mode filter — a no-login filter restricting everything to the Zemer “Acapella” playlist.
  • Recents now sync to zemer_user.recents (were device-local, hence the empty column).

4. Client ported to the DB hard-lock RPCs (the “Client still needs porting” item — done)

  • Reads via pc_get() (returns has_pin, never the hash); writes via pc_update / pc_set_pin / pc_clear_pin; unlock via pc_verify (server bcrypt + lockout). Removed client-side SHA hashing/backoff. This fixes the pin_hash/settings 403s the hard lock was causing.
  • Auth #access_token hash consumption on boot — email-confirmation/OAuth links now land you logged in (decodes the user from the JWT, strips the token from the URL).
  • Acapella now enforced at playback (renamed “Acapella mode filter”) — openSong denies a non-playlist song and playIndex skips to the next in-set track.
  • Build fix for Zemer playlists: one shared try with no retries meant a single transient failure (the 1.75 MB year-2026 detail) wiped the whole list → empty bake. Now retries + per-playlist isolation + loud logging; verified 3/3 bake.

In progress: expanding Acapella mode so the Artists list shows only artists with an Acapella song, artist pages show only their Acapella songs, and Trending/Kid-Zone are filtered to Acapella too.

SK Music also now has a logo

SK Music 1.0.0 — the desktop app is real, and the player got serious

Big update since my last post — this one’s earned a version number: SK Music 1.0.0 is out, on the web and as a native Windows desktop app.

Playback

  • Gapless playback — the next song is buffered and primed while the current one plays, and takes over the instant it ends. No more silence between tracks; album listening finally feels right.
  • Radio — a real “what plays next” engine, powered by what the whole community actually listens to (huge thank you to @ars18 — this rides the Zemer server’s co-listening data). Start a station from any song, artist, album, or playlist, hit Radio mode on Home for an endless trending mix, and when your queue runs out, Autoplay keeps going with similar songs — already fetched before the last song ends, so there’s no pause.
  • Hit Play with nothing queued? It resumes your last song where you left off (if it was in the last 20 minutes), otherwise it starts the trending mix.

The desktop app (Windows)

  • A mini player — a small always-on-top card with art, title, play/pause/next/previous, like, and a clickable seek bar. It appears automatically when you minimize or switch away from the app while music plays, and gets out of the way when you come back. Fully keyboard-drivable when focused (Space, arrows, L to like, Esc to close).
  • The tray is a real remote — now playing with a live icon badge, an Up Next menu showing your queue, Like, Start radio, and all the settings. Right-clicking inside the app or on the taskbar button gives you the same controls.
  • Start with Windows (opens hidden to the tray), optional track-change notifications, and it survives laptop sleep without wedging playback.
  • Auto-updates — Check for updates opens a proper dialog showing your version and download progress; it also checks daily on its own and installs on your next restart, never mid-song.

Catalog & discovery

  • Real release dates — Latest Releases and New Songs now come from a live releases feed, so new albums show up in actual release order.
  • A–Z jump strip on the Artists page (1,600+ artists got a lot easier to browse) and much faster-loading artist images.
  • Better back-button behavior, cold-start recommendations for new listeners, and a proper feature list on the About page.

Everything else you’d expect is unchanged and non-negotiable: whitelisted catalog only, all the content filters (kol isha on by default, Chasidish/Israeli/DJ/Acapella), PIN-locked parental controls, Kid Zone, and automatic Acapella-only during Sefira and the Three Weeks.

Links:

– Shalom Karr

6 Likes

Feedback, bugs, comments, and suggestions here please

SK Music: Bugs, Comments, And Feedback - JTech Forums

SK Music 1.0.2 — polish, reliability, and a big under-the-hood hardening pass

Since 1.0.0 dropped, two updates landed (1.0.1 and 1.0.2). Both auto-update — open the desktop app, tray → Check for updates, and it’ll pull the latest. Here’s everything that changed.

Playback fixes

  • Skipping is instant now. Hitting Next used to sometimes freeze for a couple seconds while it re-loaded the track — even though the app had already buffered it ahead. It now hands straight off to the pre-loaded track, so skips are as seamless as the automatic song-to-song transitions.
  • Seeking is reliable. Clicking/dragging the progress bar occasionally got ignored by YouTube’s player; it now confirms the jump landed and retries if not.
  • No more accidental un-pause. Pausing right as a song ended could restart playback — fixed.
  • Background playback no longer under-counts your listening (matters for the trending charts).

Mini player upgrades

  • Repeat-one button — loop the current song right from the mini player.
  • Click-to-seek on its progress bar.
  • Keyboard controls when it’s focused: Space to play/pause, arrows to skip, L to like, Esc to close.
  • Left-clicking the tray icon now pops open the mini player and the menu together.

Your account, done right

  • Likes and history now merge properly on login. If you liked songs signed-out and also have likes saved to your account, you now get both — it’s a true merge, nothing gets overwritten or lost, and logging in on multiple devices won’t duplicate or drop anything.

Hardening (the invisible but important stuff)

A full security + reliability audit tightened a lot of edges: stronger content-filter enforcement on the trending/new-releases rows (so nothing outside the whitelist can slip through even from upstream data), fixes to a couple of rare desktop freezes, faster update checks, and the mini player now recovers itself if it ever ends up off-screen after a monitor change.

Get it

As always, everything stays kosher by construction — whitelisted catalog, all the content filters, parental controls, Kid Zone, and Sefira/Three-Weeks Acapella mode, untouched. Keep the bug reports and ideas coming :folded_hands:

5 Likes

SK Music 1.1.0 is here — a big feature update

Since the last release, SK Music picked up a whole batch of things a lot of you asked for. Here’s everything that’s new (web + desktop app):

Playback

  • Shuffle mode — a proper persistent shuffle toggle in Now Playing.
  • Sleep timer — stop after 15/30/45/60 minutes, or at the end of the current song.
  • Queue editor — drag to reorder your Up Next, with per-song Play next and Remove.
  • Crossfade — optional smooth fade between songs (3/6/9/12 seconds). Off by default. - like you know how a lot of songs have three seconds of silence at the end. I added cross fade for that where you can set it that it fades out the first song and starts the second song a few seconds before it actually ends so that there’s no silence in between.
  • Synced lyrics — a Lyrics tab in Now Playing that follows along line-by-line, and you can tap a line to jump there.

Library & sharing

  • Playlists — create your own playlists that sync across all your devices when you’re signed in.
  • Follow artists — follow your favorites and their newest releases show up on your For You page.
  • Share a song — send any song to a friend.
  • Offline downloads (desktop app) — save a song’s audio and play it from your device, even offline.

Discovery

  • Search history & saved searches — get back to what you were looking for.
  • Per-song radio + a “Fans also like” shelf on artist pages.
  • Better For You — “Artists you’ve been playing” and new releases from artists you follow.

Content quality

  • Report a problem on any song, right from its menu.
  • Tagging progress — a card in your Library showing catalog-tagging coverage, with a way for signed-in users to help out.

Accounts

  • Your likes and play history now merge with your account when you sign in instead of overwriting — nothing gets lost.

Desktop app polish (1.1.1)

  • The mini player is now multi-monitor smart — on multiple screens it won’t pop up just because you clicked another display or dragged the window; it shows when you minimize. On a single screen it still appears when you switch to another app.
  • The tray menu now says “Start radio” when nothing’s playing (and starts a mix), instead of the confusing “Start radio from this song.”
1 Like

SK Music smaller update V 1.1.2 - playlist sharing + polish

Share your playlists

  • Open any of your playlists and hit Share to make it public or private.
  • Once it’s public, grab a link (Copy link / Send link) and send it to a friend — they can open and play the whole playlist without even needing an account. It still respects each person’s own content filters.

Smarter playlists

  • No accidental duplicates — if a song’s already in a playlist, the Add-to-playlist menu now greys it out and shows “✓ Added,” so you can’t add the same song twice by mistake.
  • Creating, renaming, and deleting playlists now use a nice in-app dialog instead of the clunky browser pop-up.

Clearer downloads (desktop app)

  • The download button now clearly shows downloading → saved → failed. If a download fails it turns red and tells you why — just click it to retry.

Enjoy, and keep the requests coming! :musical_notes:

SK Music Desktop 1.1.3 is out

Two rounds of fixes since 1.1.1, most of them from feedback in this thread.

Links actually work now

This was the big one. Inside the desktop app, every off-site link — the GitHub link, the links to this forum, the license, the Tampermonkey links on the add-on page — did nothing at all when you clicked them. Not an error, just silence.

The reason is a bit funny: a native app window has no tabs, so a link marked “open in a new tab” had nowhere to go, and letting it open in place would have replaced SK Music itself with GitHub. So it swallowed the click. Off-site links now open in your normal browser, where they belong. SK Music’s own pages still open in the app, and Google sign-in deliberately stays inside the app window — it has to come back to SK Music carrying your session.

Updates are on the About page

“Check for updates” used to live only in the tray menu, which is a fair place to miss. It’s now on the About page with your installed version next to it. The tray item is still there if you prefer it.

And it now actually answers you. Previously it could open the update window and just sit there without ever saying whether an update existed — three different timing problems could each swallow the result. It now remembers the outcome of every check, so you always get a verdict.

How to get it

If you’re on 1.1.2, it’ll update itself — the app checks on launch and daily, downloads in the background, and installs when you quit, so it never interrupts playback. You can also force it from About → Check for updates. If you’re on 1.1.1 or older, grab the installer from Releases:

Windows, and Linux (.deb / AppImage).

A tip while we’re here

If you’re seeing a lot of acapella in Trending and Radio right now — that’s the Three Weeks backlog still sitting in the charts. Settings → Acapella → Hide clears it out everywhere at once: Trending, Radio, Home, For You and search. No sign-in needed. It also knows the calendar, so it’ll switch itself back to Acapella-only for next Sefira and the Three Weeks, then return to Hide afterwards. Set it once and forget it.