jmzx

Small, single-purpose apps for cataloguing, playing, sampling and publishing a music library, with Nostr as the shared layer. Plus a couple of tools built along the way.

desktop: Tauri · mobile: Capacitor · web: React

the n-suite

SUITE.md ↗

A music collection lives in local files and on shelves. The n-suite keeps them in one catalogue, plays them, checks them and cuts samples from them. It then publishes the parts worth sharing to Nostr, where any reader can pick them up without an account. Events travel over ordinary Nostr relays, with a shared hub relay for discovery. The long-term aim is collaboration: samples as shared building blocks, from sample to track to release, published and discussed over Nostr.

ndisc publishes releases & feed notesrelaysnview · glmps read releases, nplay reads the feed
ntree · nsmpl publish clips & samplesrelay.fizx.ukheard on smpl
ndisccatalogue · publisher

The hub. It catalogues physical and digital releases in one library, importing folders of audio files and Discogs collection exports, and helps you find and merge duplicates. It fills in details from Discogs, writes tags back to files, and is the only app that publishes releases to Nostr.

desktopbetarepo ↗
nviewmobile viewer

The catalogue in your pocket. It reads the releases, labels and feed that ndisc publishes, straight from Nostr relays. It's a viewer, not an editor: reactions are signed by a remote signer (NIP-46), so your nsec never touches the phone.

androidiosbetarepo ↗
nplayplayer

A local music and video player for the library ndisc catalogues. Audio runs on a native engine rather than in the web view. It has a collection tree and a sortable table, playlists, BPM, a spectrum visualiser and a library health check. It also follows ndisc's feed.

desktopbetarepo ↗
ntreequality bench

A technician's bench for a FLAC library. A spectral scan catches files that claim to be lossless but were made from lossy sources. Around that sit a clip sampler with web-ready Opus copies, a filtered mirror-tree builder and a clip feed published to Nostr.

desktopstablerepo ↗
nsmplsample decks

A two-deck sample tool: loop regions, trim, fade and gain, and a two-deck mix bounce. BPM is set from a bar count and shared with the rest of the suite. Finished samples publish to Nostr and turn up on smpl.

desktopbetasmpl ↗repo ↗
nchatprivate messages

A small private messenger, not a social client: no feed, no timeline, only the keys you name. Messages are gift-wrapped (NIP-17): relays can see who a message is for, but not who sent it or exactly when.

desktopbetarepo ↗
npingRelay connectivity tester: timed connect and subscribe, NIP-11 relay info, and the exact errors.repo ↗
ncoverGTK4 colour picker (screen picking on X11) that grew into a cover and label artwork tool.repo ↗

on the web

The publishing loop closes in the browser. glmps is the web reader for the releases ndisc publishes, and its correct rendering is the proof that a release reads back correctly. glmps and the sample site smpl each run in two themes, one per sister site.

glmps.fizx.uk

The release reader in the fizx theme.

glmps.upleb.uk

The same reader in the upleb theme.

smpl.fizx.uk

Listen to the audio published to the hub relay: nsmpl samples, ntree clips and notes with audio attached.

smpl.upleb.uk

The same sample site in the upleb theme.

tools

Built to answer questions that kept coming up while making everything above.

gtrackrepo health

A read-only tracker for the git checkouts under the folders you point it at, showing what state things are actually in. It flags version numbers that have drifted apart, unpushed work, stale lock files that silently block writes, and remotes that are unreachable, deleted or not tied to one account. It also shows each repo's latest tag.

desktopbetarepo ↗
psyncdrive sync

Proton ships no Drive client for Linux (as of September 2026). psync is a window over a drive-sync script. For each synced folder it shows files that exist only here, only on Drive or at different sizes, when it was last compared, and what Pull or Push will do before you run it.

linuxearly