Recent releases.
Highlights from recent shipped versions. The current build is v0.4.22. The full release feed lives on GitHub; the in-app Release history dialog (Settings → About → Release history) reads the same JSON directly.
-
Scan diagnostics for stalled rescans
Every library scan now writes a timestamped log to disk that survives a crash. If a rescan ever stalls or drops albums, Settings → Library → Health → Reveal scan log opens the folder holding it, so the exact point the scan stopped (and the memory it was using) is captured instead of lost.
-
Click a genre, get every album in it
Genres are clickable wherever they appear now. Click one in the Stats page’s Top genres list, or from the genre dropdown next to the search box, and the album grid filters to just that genre. Clicking a genre on an album page already worked this way; the Stats list and the dropdown now match it.
Every jump counts as a navigation step, so your Back button returns you to exactly where you were and Forward brings the filtered view back. Pick “Jazz” from Stats, look around, hit Back, and you land right back on the Stats page you left.
-
Long artist bios open collapsed
A long biography on the artist page now always opens truncated, with a Read more link to expand it and Read less to collapse it back. The expanded state is tracked per artist, so opening a different artist starts fresh instead of inheriting whatever the last one was set to.
-
Free users land on an artist’s Albums
On the free tier, opening an artist page now starts on the Albums tab instead of the Pro-only Bio tab, so you land on something you can use right away. Pro users still open on Bio.
-
Artist bios link even more of what you own
The Bio tab’s in-app linking got better at catching album mentions written as possessives. When a paragraph says something like “Wayne Shorter’s Night Dreamer” or lists several of an artist’s records in a row, the scanner treats the possessive as an attribution and looks each title up in that artist’s own catalog, so a common album name stops matching the wrong record.
Also fixed a parsing bug where a handful of artists’ birthplace field leaked raw wiki markup into the header bio line.
-
Fresh installs land in dark mode and the archive aesthetic
New installs now open in the archive aesthetic with dark mode by default. Anyone who has already picked a theme or a mode keeps their choice; only the fresh-install fallback changed.
Contributing-artist chips on the album page take one click to the artist page now. The dropdown between “Their albums” and “Songs they play on” is gone; every click lands on the artist’s Bio tab, and Albums, Contributions, and Similar Artists sit one click away from there.
-
Edit dialog no longer flickers in packaged builds; new Account & Pro Help page
The Edit album and Edit track dialogs no longer visibly flicker on packaged builds. The backdrop used a translucent black plus a 3px blur, and in production Electron Chromium re-composited the blur every frame while the audio visualizer canvas redrew behind it. On some GPUs that produced a visible visible/invisible flicker on the dialog itself. Replaced with a solid scrim that gives the same visual separation without touching the blur compositor path.
A new Account & Pro tab in the in-app Help section covers what Pro unlocks today (Subsonic server, Stereo & TV DLNA server, the Bio tab on artist pages, Library Health background scheduler), how to enter a key, where the license lives on disk, removing or re-checking it, and the Buy Pro flow. Every “Settings → Account” reference is a real link that jumps straight to the Account pane.
-
Similar Artists tab, Bio width matches Help, and a visualizer style cycler
Similar artists move out of the Bio tab into their own Similar Artists tab at the end of the artist page tab strip. The tab renders the artists as a responsive grid of name-only capsules, same shape as the collaborator cards. In-library names show in the foreground color; out-of-library names stay dimmed, so you can scan which of an artist’s neighbours you already own at a glance.
The Bio tab’s body width now matches the Help page exactly. Both surfaces measure the right edge of the Help tab strip and cap the bio prose and top-tracks list to that same width. The vinyl-and-magnifier brand watermark from Help is carried over to the artist page as well, sitting faintly in the right gutter behind the tab strip.
The expanded visualizer overlay picked up a Prev / current-style / Next pill along the bottom edge. Cycle through the eight built-in styles (Theme, Rainbow, Polar, Pulse rings, Oscilloscope, VU meters, Wormhole, Nebula) without opening Settings. The picked style persists through the same tweak the Settings tile picker writes to, so the choice sticks across album navigations and app restarts.
-
Bio tab: from ship-ready to solid
Between v0.3.68 and v0.3.75 the Bio tab on artist pages went from a first ship to a polished surface. Rough consolidation of what landed across those releases:
- Bio is now the default tab when you open any artist page. Albums, Collaborators, and Contributions sit to the right and switch in the usual way.
- The Pro-gate banner on the Bio tab links straight to Settings → Account with one click.
- Any artist or album mentioned in the bio that you already own becomes a clickable in-app link the first time it appears (wiki-style, subsequent mentions stay plain text). Names you don’t own remain as text.
- Album-title matching is case-insensitive, so “Places and Spaces” in prose links to your library’s “Places And Spaces”. Single-word album titles are dropped from the scanner because they false-match too easily.
- Hyphens and apostrophes inside names no longer count as token boundaries, so an artist named “Jamal” in your library no longer false-matches inside “Abu-Jamal”.
- A built-in stoplist skips common single-word band names that overlap with place names or ordinary nouns (Chicago, Boston, Kansas, Air, Cake, Hole, Pink, Yes, Cream, Queen, and so on), so bios about the city of Chicago no longer link to the band.
- Album mentions written in a different naming convention than your library (“Part Two (Return of the Ankh)” vs. your files’ “Part Two – Return of the Ankh”, “Part One” vs. “Part 1”) link via a normalized fingerprint match. The scanner also augments its match list with the artist’s canonical album catalog from Last.fm, and titles that don’t fingerprint to a library entry open as external Last.fm links to the album page.
- The bio’s opening paren is trimmed to just the dates; birthplace and place of death are dropped. A Read less link collapses the bio back to the preview after expanding, and the Read more / Read less state persists across artist navigations and app restarts.
- Trailing discography sections at the end of bios are stripped when present, without chopping into the prose above. Wikipedia-style footnote markers are stripped too.
- The artist-header bio line (b. / d. / city) now resolves for solo-named artists whose Wikipedia article sits at the plain title rather than the disambiguated
Name_(musician)slug. D’Angelo, Madonna, and Sade land the same way Prince already did, and D’Angelo picks up the Oct 14, 2025 death record MusicBrainz has. - Per-album checkboxes in Edit metadata let you force-link a single-word or noisy title into the bio scanner, or force-skip a title that reads as a TV show or common phrase.
-
Bio tab on artist pages, with playable top tracks
Artist pages now have a Bio tab next to Collaborators. It pulls the artist’s biography from Last.fm, their top ten tracks with play counts, and a list of similar artists. The bio opens with the artist’s name in bold ahead of the birth/death paren, and is broken into paragraphs every few sentences so it reads as prose. Tracks from that top-ten list that already live in your library render bright and clickable: click one and it queues in place. Tracks Last.fm lists that you don’t own stay dimmed. Similar-artist names you already own jump straight to their library page; names you don’t own open in an in-app sheet so you can keep wandering Last.fm’s artist graph without leaving WPT. When Last.fm has no photo of the artist, the header thumbnail shows one of your own album covers instead of an initial-letter placeholder. Every artist’s bundle is cached locally for a week so re-opening is instant.
Last.fm scrobbling is now part of the Pro tier. Existing scrobble authorizations stay intact if a license lapses. Scrobbling pauses until a current key is pasted in Settings → Account, and the offline queue is preserved.
-
Release notes inside the app now render as paragraphs, not a monospace blob
The auto-update modal that pops in when a new version is available and the Release history dialog under Settings → About both used to fall back to a monospace
<pre>block whenever the notes for a release didn’t start each line with a bullet character. Since the v0.3.61 release-notes rewrite turned every prior release body into flowing paragraphs separated by blank lines, that fallback is exactly what was firing for every entry in the dialog and every fresh update popup. Both renderers now detect blank-line-separated paragraphs, render each one as a real<p>, and keep the inline**bold**/*italic*/`code`markdown that the source bodies use. Bold call-outs sit in the foreground color; italics and body text in the dimmer reading color;codespans get a small sunken background. The bullet-style format still renders as the existing “Side A · What’s new” track-numbered list if any future release body uses that shape. -
Split-album track loading, Import-torrent reveal, Synthesizer icon redrawn
The Split album dialog no longer collapses every track to a 0:00.1 length when you load an EAC log or CUE sheet before the MP3 has finished decoding. A 71-minute MP3 takes several seconds to decode in the browser; if you clicked Load track list during that window, the duration was still 0 and the per-row clamp pinned every Start to 0:00.0 and every End to startMs + 100 ms. The result looked like an off-by-one row shift, with each track’s End matching the next track’s Start in the source file and Track 1 reading 0:00.1 long. The loader now skips the duration clamp when the audio is still loading, so the parsed Start and Length come through as written and you can edit before playback is ready.
Clicking a finished download in the Import torrent table now opens File Explorer with the downloaded folder (or single file) selected, instead of just opening the parent Downloads folder and leaving you to hunt for it.
The Synthesizer instrument icon has been redrawn from a 3/4-perspective source so it reads as a stage synth on a stand instead of the front-facing panel silhouette shipped in 0.3.60. The keyboard, music rest, body outline, and stand all read at icon scale, in cream on dark and dark on cream themes alike.
-
Synthesizer instrument icon is now actually a synthesizer
The Synthesizer icon used to render as a featureless black slab on artist cards and album pages — the source file was a photograph wrapped in an SVG envelope with the wrong alpha, so the on-screen mask painted the whole silhouette as one solid blob. Replaced with a public-domain vector silhouette of a Roland-style synth panel (control knobs across the top, keyboard across the bottom) and clamped the render width so it doesn’t dominate the row next to the piano and vibraphone. Recognizable as a synth now, sits proportionally with its neighbours.
-
Editing the album-level Contributing artists field no longer blanket-overwrites every track
The Contributing artists row in the Edit album dialog used to take whatever you left in the box and slam it onto every track on the album as the same flat list. So if Al McKibbon played bass on tracks 1-3 and Eddie Duran played guitar on tracks 4-10, the album field showed both names (the union), and removing Al would set every track’s artists to [Cal Tjader, Eddie Duran] — tracks 1-3 lost Al but also gained Eddie wrongly, tracks 4-10 saw no change but the per-track distinction was already destroyed. Now the field behaves as a delta editor instead. Remove a name and the change is applied only to the tracks that actually had that name; add a name and it lands on every track. Per-track lineups stay intact. The same delta also drives the ID3 / FLAC / m4a file-tag write — each track’s file now gets only its own artist string, not the album-level union — so VLC and other tag-reading players keep showing the right lineup per song.
-
WMA → FLAC and WMA → MP3 conversion, and the converter pane is reorganized
Windows Media Audio (.wma) files can now be converted to either FLAC or MP3. Settings → Tools opens a renamed Convert audio formats pane with a three-direction toggle at the top: Lossless → MP3 (the existing FLAC / APE / CUE-split path, unchanged), WMA → FLAC, and WMA → MP3. Each direction has its own scan-the-library and pick-from-anywhere buttons, its own row list with pagination, its own stop control, its own summary. The Quality preset shows for MP3 outputs (Lossless → MP3 and WMA → MP3) and hides for FLAC, where there’s no bitrate to pick — ffmpeg writes lossless FLAC at compression_level 8. The Output folder and Overwrite-existing settings are shared across all three directions. Tags carry through end-to-end on every path: title, artist, album, year, embedded cover. Same ffmpeg binary, downloaded once on first use; the toggle disables while any batch is mid-flight because two ffmpeg runs in parallel would just thrash each other.
The converter pane now renders directly inside the Tools section instead of being wrapped in the narrow label-and-control Field used for one-line settings. That gives the direction toggle, settings card, action buttons, and row list the full pane width to breathe — the Output folder row in particular now shows the full path inline with Choose and Clear buttons sitting alongside, instead of being cropped to a placeholder + button stub.
The Import torrent panel’s transfer table now caps at about ten rows of height and scrolls inside its own box, with the column header pinned. A long history of finished downloads used to push the rest of the pane straight off the bottom; active downloads still sort to the top so they stay visible without scrolling.
In-app Help gains a dedicated Convert WMA tab walking through both WMA directions and the lossy-vs-lossless source nuance for each. The Settings tab’s Tools paragraph now describes all three directions with cross-links to each converter’s deep-dive section.
-
Mini-player stays clean — no more toast notifications floating over it
The slide-in toast stack (download finished, sync saved, clip exported, “you’re on the latest version” and friends) is now hidden while the window is in mini-player mode. Sticky toasts like Finished downloading: Art Blakey were sitting on top of the compact transport and covering the now-playing line; in a 360-pixel-tall window there was nowhere else for them to go. They come back the moment you leave mini-mode.
-
In-app Help page catches up with the last twenty releases
New Phone tab in Help. A dedicated help section for the Stream / Browse files / Transfer trio that the topbar phone icon opens. Covers the embedded Subsonic server (enable, port, username, password, URLs for LAN vs Tailscale), OpenSubsonic and contributing-artist rendering, playlists, cover-art lookup rules, the live request log, system-tray behavior when the server is running, Symfonium / DSub / Ultrasonic setup walkthrough, and Android Auto. The legacy Sync section’s stale “mobile access is on the roadmap” paragraph is replaced with a pointer to the new tab.
Account, Scrobbling, Extensions in Settings help. The Settings help tab now lists the Account category (Pro license entry, validated against LemonSqueezy), Scrobbling (Last.fm credentials and the scrobble-on-play toggle), and Extensions (FolderPusher and companion-app detection), alongside the existing Library / Playback / Look / Tools / System groupings.
Artist pages and bios documented. The Discovery help tab gains an Artist pages paragraph (bio, born / died dates and birthplace, instrument icons, albums-led and appears-on splits, the personnel rail) and a Where bios come from paragraph (MusicBrainz primary, Wikipedia _(musician)_-disambiguated fallback, throttled at one per second, persisted across rescans and sync exports). Both shipped between v0.3.34 and v0.3.46 but had been undocumented.
Tools section catches up. Settings help now reflects that Tools is Convert FLAC + Cut MP3 + Import torrent, not just Convert FLAC.
-
Contributing artists now show in Symfonium and other Subsonic phone clients
The WPT Subsonic server now declares
openSubsonic: truein every response envelope and ships the OpenSubsonicartists/displayArtistfields on every song and album entry. Symfonium reads those when the flag is set, so a track tagged with multiple credited artists (e.g. Common feat. John Legend) renders all of them in the song list, and each name is tappable to navigate to that artist’s page.Contributing artists who don’t have a folder of their own in your library now still get a navigable artist page on the phone. The snapshot indexes every artist credit (folder + sideman + featured guest) into an album-id list, so when you tap John Coltrane in a Miles Davis row, Symfonium can ask
getArtist?id=ar:john%20coltraneand the server returns every Davis-as-leader album where Coltrane shows up, not just Coltrane-as-leader sessions.Same fix flows through
search3,getAlbumList2,getAlbum, andgetMusicDirectory, so the OpenSubsonic fields are present wherever the client reads album or song entries. -
Convert CUE + APE rips, and APE files on their own, to MP3
APE alongside FLAC. Settings → Tools → Convert FLAC now handles Monkey’s Audio (.ape) files as a first-class input. The library scanner button reads Find FLAC / APE in library; the file picker reads Pick FLAC / APE files…. Same bitrate, overwrite, and output-folder options. ffmpeg decodes APE natively in the bundled build, no extra binary download.
CUE sheets, the classic full-disc rip shape. A new Pick CUE files… button. Pick one or more .cue files (the .ape / .flac / .wav source must sit next to the cue), choose an output folder (or Cancel to land next to the source), and each cue gets split into one tagged MP3 per track. Title, artist, album, album_artist, and track number tags carry through from the cue; output filenames follow the
NN - Title.mp3pattern. A live log shows each cue’s status (splitting / done / failed) and lets you click any output filename to reveal it in Explorer. -
Your WPT playlists now show up on the phone
The Subsonic server’s
getPlaylistsandgetPlaylistendpoints were returning empty lists, so phone clients (Symfonium, DSub) reported “no playlist content to import” when you tried to pull playlists across. Both endpoints are now wired through to your live WPT playlists. Static playlists carry their track order across as-is; smart playlists evaluate their rules at push time so the phone sees the same membership the WPT renderer just rendered (a smart rule like “loved tracks added in the last 30 days” stays in sync as you love new tracks and the snapshot re-pushes).Playlist track order and song counts on the phone match what’s in WPT, including playlists that mix multiple albums or pull tracks from outside your scanned library.
-
Cover art now loads for every album whose path contains an &, comma, slash, or apostrophe
The Subsonic album and song IDs were being put into JSON responses unencoded. Symfonium (and probably other clients) drop those raw IDs into URLs without re-encoding them. When the ID contained a
&— “Earth, Wind & Fire / All ‘n All” being the example that finally surfaced this — the URL parser treated the&as a query-string separator and the server saw a truncated ID likeal:Earth, Wind, looked it up, came back empty, and returned 404 even though the album was right there and the cover file was on disk.IDs are now URL-encoded at snapshot build, and the server tolerates both the encoded and decoded form on the way back in (via lookup maps keyed by the decoded post-prefix portion). Album cover requests like
getCoverArt?id=al:Earth%2C%20Wind%20%26%20Fire/...resolve correctly regardless of whether the client re-encoded the ID or not. Same fix lands forgetAlbum,getArtist,getMusicDirectory, andstream, so a track titled something like “Steel & Glass” or stored under “Mary J. Blige / What’s the 411?” plays correctly instead of 404’ing in the middle of the queue. -
Phone clients now find album covers stored under any reasonable name
The Subsonic server’s cover lookup used to try nine specific filenames (
cover.jpg,folder.png,front.jpegand a few variants). Anything else —cover.webp,album.jpg,AlbumArt.jpg, an image inside an Artwork subfolder, or any random.jpgthe scanner picked because nothing matched a standard name — came back as 404 and the phone client showed a missing cover. The server now mirrors what WPT’s own scanner does: it tries the conventional names with any image extension (jpg, jpeg, png, webp, gif, bmp, tiff, heic, heif), falls back to any image in the album folder, then walks any Artwork, Covers, Scans, Art, or Images subfolder. Resolved paths are cached in memory so repeat hits don’t re-walk the directory.Embedded-tag-only covers (no disk image at all, art lives inside the audio file’s ID3 / Vorbis tag) still come up empty on phone clients in this release. Fixing that requires shipping the renderer’s blob bytes through to the server; it’s queued for a follow-up if the disk fix doesn’t cover enough of the gap.
-
Symfonium can finally see your library
The bulk-fetch sentinel. Symfonium does its initial library sync through three
search3calls withquery=""(a literal empty-quoted-string), one each for artists, albums, and songs. The 0.3.48/0.3.49 server treated the quoted empty string as a real substring search and matched zero items, so the client showed an empty library after a successful connect.search3now strips surrounding quotes, treats the result as “match all” when empty, and returns the full library up to the count parameters the client asks for — first sync now populates artists, albums, and songs the way it should.Stubs for the rest of Symfonium’s probe list.
getBookmarks,getPlayQueue,savePlayQueue,createBookmark, anddeleteBookmarknow return empty / OK envelopes instead of “endpoint not implemented.” Symfonium hits all of these during connect; the not-implemented responses didn’t break the sync but cluttered the request log. -
Phone access is its own view now, with a live request log
New Phone view. The phone icon in the topbar opens a dedicated screen with three sections in a left rail. Stream holds the Subsonic server config and connection URLs that used to live in Settings; Browse files is the existing ASUS HTTP file browser; Transfer is where you point WPT at your Syncthing drop folder for one-tap album send. Settings → Sync now just links here.
Live request log. Every call your phone client makes to the Subsonic server lands in a table at the bottom of the Stream pane: endpoint, response time, status, client IP. When Symfonium or DSub claims an empty library after a successful connect, the log tells you which endpoints it actually hit so you know whether the problem is the server, the client, or the network. Copy the log to clipboard with one click.
Copyable URLs. The LAN and Tailscale URLs each have their own Copy button, so getting the address into a phone client is one tap on the PC instead of selecting text inside a paragraph.
Walkthrough on the same page. A collapsible Phone setup section under the URLs lays out the Symfonium / DSub / Ultrasonic steps in five lines, so you don’t have to leave the view to figure out what to type into the client.
-
Subsonic server now speaks the full request set that real clients use
v0.3.47 shipped the server with the modern endpoints (
getArtists,getArtist,getAlbum,stream,getCoverArt). Symfonium and several other clients also hit the legacy and discovery endpoints during their initial sync, and seeing “not implemented” envelopes back from those was enough to make some clients show an empty library. This release adds the missing pieces:getIndexes,getMusicDirectory,getAlbumList,getAlbumList2(with all the type values: newest, alphabeticalByName, alphabeticalByArtist, byYear, byGenre, random),search2,search3,getLicense,getUser,getPlaylists,getStarred2,getGenres, plus no-op stubs for the scrobble / star / rating endpoints that some clients send after every play.Each Subsonic request is logged in the main process console with method, endpoint, and client IP, so when a client misbehaves you can tell what it asked for and what we sent back. The v0.3.49 ship surfaces this log inside the app.
-
Stream your library to your phone, and import playlists without flipping to “All Files”
Subsonic server (Pro). Settings → Sync now has a Phone access panel. Toggle it on, set a username and password, and the app exposes your library to any Subsonic-compatible phone client (Symfonium, DSub, Ultrasonic) over LAN or Tailscale. The status line lists every reachable URL, including the Tailscale address when Tailscale is up. Closing the WPT window hides it into the system tray so the phone keeps streaming — right-click the tray icon to bring the window back or quit for real.
Import playlists uses the native picker. The button on the Playlists panel now reads Import playlists… (it has accepted M3U/M3U8 and the app’s own plain-text exports since v0.3.8, the label just hadn’t caught up). Clicking it opens the platform’s native file dialog with a properly-named filter — Playlist files (*.m3u8, *.m3u, *.tsv, *.txt) — instead of the generic “Custom Files” the HTML picker showed. M3U8s no longer require flipping to “All Files” to be visible.
Import playlists defaults to your playlists folder. The picker now opens in the folder set under Settings → Sync → Default playlists folder — the same one Export writes to. No more starting in whatever folder the OS dialog last visited.
-
Wikipedia-sourced bios now show the state code, not the full state name
Bios that resolve through Wikipedia were rendering as “Galveston, Texas” while every MusicBrainz-sourced row showed “Galveston, TX.” The Wikipedia path now translates the state to its 2-letter code and populates the same fields the formatter uses for MusicBrainz, so the bio line reads the same shape for every artist regardless of which source resolved their data.
-
The bio for common names actually appears now, with city AND state
v0.3.44 shipped the fix in code, but every cached artist record was still valid for 30 days, so the bio panel on Richard Williams (and on every artist whose lookup had previously failed or returned the wrong person) kept showing whatever was already cached — nothing changed in the UI. This release bumps the cache schema so every artist record gets re-fetched the next time you open or hover their page. Background and throttled at one request per second; a large library finishes catching up in a few minutes.
When the bio comes from Wikipedia, the location line now shows “City, State” instead of just “City.” Richard Williams now reads “Galveston, Texas” instead of “Galveston.” The trailing country segment (“U.S.”, “United Kingdom”) is dropped so the format reads the same as MusicBrainz-sourced lines.
-
Bios resolve the right person for common names, and a paused torrent really resumes after a restart
Artist bios for ambiguous names — Richard Williams the jazz trumpeter, John Williams the composer (or the classical guitarist), David Murray the saxophonist — now resolve to the right person. The fetcher checks Wikipedia’s disambiguated
Name_(musician)article first; if that exists, it’s used. Only when no disambiguated article exists does MusicBrainz get consulted. Bios that resolve through Wikipedia now ride sync exports so they reach your other PCs too.Birth and death years on artist bios show up consistently. The infobox parser couldn’t read the standard
{{Birth date|YYYY|MM|DD}}template (it stopped at the first pipe, which sits inside the template). Fixed.The Play triangle on a paused torrent now works after closing and reopening the app. Before, it did nothing across restarts because the download engine had been torn down at shutdown. It now re-adds the torrent against the source you originally pasted, verifies the partial files already on disk, and picks up where the previous run left off.
The marketing download page now shows the current app version on the release card. The constant had drifted to 0.3.32 and the Portable zip and Linux AppImage download buttons were building URLs against assets that don’t exist on the latest release, so both buttons 404’d. Both now resolve.
-
Artist bios fall back to Wikipedia when MusicBrainz can’t find the right person, and the Edit album confirm now paints on top
When MusicBrainz returns no MBID for an artist, the bio fetcher now tries the Wikipedia article directly under
Name_(musician)orName_(jazz_musician)and parses the birth/death dates and birthplace out of the infobox. Bios show up where they didn’t before.“Remove from library” inside the Edit album dialog used to ask for confirmation, but the confirmation prompt painted underneath the Edit dialog so you couldn’t see it. The confirm now sits on top where it belongs.
Marketing site rewrites: the download page now mentions Linux and lists every supported audio format, and the FAQ answers questions about Linux/macOS, Last.fm scrobbling, instrument tags, send-to-phone over Syncthing, where bios come from, smart playlists, and library sync between two PCs. The site is also 508/WCAG-AA compliant for content pages: skip link, focus rings, reduced-motion support, proper landmarks, 4.5:1 contrast on body text.
-
Viola is now a tag-able instrument
Viola sits with the other strings in Settings → Look → Instruments → Strings. Tag an artist with viola and the icon shows up on their card and album pages, and clicking it opens the Violists players page alongside Cellists, Violinists, and the rest.
-
Send-to-phone goes through Syncthing so VLC reads the tags, and Stop pauses a torrent instead of removing it
Send-to-phone now copies files into a Syncthing drop folder you configure under Settings → Sync. Files land in
{artist}/{album}/and Syncthing replicates them byte-perfectly so VLC on Android reads Artist and Album correctly. The HTTP-to-phone path that used to mangle tags is no longer used for music. If you click Send before configuring the drop folder, a toast tells you where to set it.The Stop square on a torrent row used to delete the row. It now pauses the download — the square flips to a Play triangle. Click it to resume from the same partial files. The trash can next to it still cancels and deletes. Stop-all at the top of the panel pauses everything active in one click.
Track # and Year fields in the Edit track and Edit album dialogs now reject non-digit characters as you type, so “1.5” can’t be entered and silently truncated to 1 on save. Track # caps at 3 digits, Year at 4.
Bio fetch for groups whose name overlaps a person’s first names — Little Brother the NC hip-hop group versus Little Brother Montgomery the pianist — now picks the exact-name Group from MusicBrainz instead of being overridden to the Person.
-
The phone-view lightbox plays audio, video, PDFs, and text files inline
Tapping an MP3, video, PDF, or text file in the phone view now opens it in the same overlay that images use. The prev/next arrows (or the ← → keys) page through every image, audio, video, PDF, and text file in the folder, mixed types and all, with a two-click delete on each. PDFs render inline using Chromium’s built-in viewer;
.txt,.md,.log,.json, and source-code files show in a scrollable monospace pane (capped at 1 MB so a stray log doesn’t freeze the renderer). -
The “Installing…” splash that flashes during auto-update now matches your theme
The window that appears while an auto-update is being applied used to fall back to the cream-and-burgundy archive theme every time. It now paints in the same theme and colors you were just looking at — sidebar, titlebar tint, pathbox, progress bar, hover states. Takes effect from the next update onwards: this one still flashes cream once as the old installer hands off, but every update after this one will match your live theme.
-
Code cleanup
-
A built-in browser for your phone, themed, with breadcrumbs, drag-to-upload, and a lightbox
A new phone icon in the top bar opens a built-in browser into your phone’s wireless file-transfer endpoint, themed to match the rest of the app. Breadcrumb at the top, folder/file rows below, hover-to-delete pills, drag from the desktop to upload, Upload files and Upload folder buttons for explicit picks. Alt-Left/Right or the mouse side-buttons walk the folder history the same way they do everywhere else in the app.
Tap an image and a full-bleed lightbox opens with prev/next arrows, filename/size/date, a position indicator, and a two-click delete that advances to the next image.
While files are uploading you can leave the view; a small badge on the phone icon keeps showing the live “X of N” count.
-
Artist bios fill in the city more often, and you can edit them inline
Artist pages now pull the birthplace from the Wikipedia article infobox when neither MusicBrainz nor Wikidata have it at city level. Many artists who used to show just a state now show the actual city.
If anything ever comes up wrong or too vague, hover the bio line and a small pencil appears: click it to open an inline editor with Save, Cancel, and Reset. Your edits stick, survive a re-fetch, and travel with sync exports across machines.
-
Artist bios appear within a second, and pre-fetch while you search
Artist pages now show the bio line within about a second of opening — dates land first, location fills in a moment later — instead of waiting the full three or four seconds for the whole record. Typing an artist’s name into the search box also kicks off their bio fetch in the background, so by the time you click through, the data is often already there.
-
Artist pages get a bio line
A new bio line under the stats shows birth/death dates and birthplace, fetched from MusicBrainz the moment you hover or open the page and cached locally so revisits are instant.
Bio data travels with sync exports so it survives reinstalls and moves with you across PCs, and the installer can ship a bundled bio seed so fresh installs come pre-populated for the famous artists you’ll meet first.
-
Last.fm scrobbling
Settings now has Account and Scrobbling sections. Connect your Last.fm account and the tracks you play start showing up on your profile within a minute or two. Best-effort Now Playing while a track is playing, real scrobbles when a track crosses Last.fm’s half-played threshold, automatic offline queue if your network drops.
The download page on the marketing site now says “Windows 10 / 11 · Linux” on the release card, and the Download dropdown closes when you click outside it or press Esc.
-
Installer fix
Missing module. The v0.3.31 installer was missing a packaging dependency and failed at the unpack step. This release puts every module the installer needs back in the bundle.
-
Install fix
OneDrive Desktop. The installer no longer fails when Windows has redirected your Desktop folder into OneDrive. It now asks Windows for the real Desktop path and writes the shortcut there.
-
Code Cleanup
-
Help page text reads a bit different
Same content. Shorter sentences. Fewer dashes.
-
Help page body lines up with the tab strip
Body text on the Help page used to run past the last tab, into space the tabs didn’t fill. Fixed. It now stops at the rightmost pill’s right edge, on whichever row that pill ended up.
-
In-progress torrents resume when you come back
If a torrent’s still downloading when you close the app, it’ll resume next time you launch. Partial files stay on disk. The download itself is remembered. To abandon a download instead, stop or delete it before quitting.
-
Portable install and a no-install download
The releases page now has a portable zip alongside the installer. Unzip it anywhere and run WhoPlayedThat.exe. Nothing gets written to the registry, no admin prompt to click through. Good for a USB drive, or a locked-down work machine.
Portable installs auto-update too. The app grabs the new zip, swaps files in place, then relaunches. The folder you unzipped stays put. You don’t have to redownload manually.
-
Downloads table fills the pane, with icon-row controls
The Import torrent panel now uses the full width of the settings pane instead of capping narrow. The downloads table gets the space, and the Name column especially has room for long names.
Per-row controls are now icons. A stop square (kills the download, keeps what came down). A trash can (kills it and removes the partial files). An ✕ on finished rows (removes the row from the list, leaves the downloaded files alone).
-
Roomier names in the downloads table
The downloads table was squeezing the Name column thin. Dropped the “Completed On” column to make room. Names now keep a readable minimum width, and long ones truncate with an ellipsis. The finish time still shows when you hover a finished row.
-
Download several torrents at once, in a transfer-list table that remembers your history
You can now start more than one torrent at a time. Pasting a magnet used to lock the input until that download connected. Now a download is accepted the moment its hash is known, so you can queue several back-to-back and they run in parallel.
The download view is now a table like a desktop torrent client: name, size, downloaded, status bar, down speed, ETA, peers, finished-at. Active downloads sort to the top. Click a row’s name to open its folder. A stop button next to Download kills everything in progress at once (keeping what’s already on disk). Each row has its own Cancel / Delete / Remove.
Finished and failed downloads are kept as a history that survives restarts, each with a “Completed On” time. Nothing clears automatically. Rows stay until you remove them.
-
A starting set of instrument tags, clearer stalled torrents, and album genre/year that survives a revert
The app now ships with a curated library of 476 musicians already tagged with the instruments they play. Well-known sidemen show their instrument icons without you tagging anyone by hand. A fresh install offers the library once on first launch. You can also load or reload it later from Settings → Sync → Import instrument library. New names get added automatically. Anyone you’ve already tagged differently goes through the normal conflict dialog; it never overwrites your work without asking.
A torrent that stops moving (usually parked near 100% because no connected peer holds the last pieces) now turns amber and says “Stalled” instead of showing a steady percentage that looks like progress. It keeps trying in case a seeder appears. After a few minutes the wording warns plainly that it may not finish. Keep waiting if you want, or cancel and keep whatever has already come down.
The genre and year you type in for an album now survive “Revert to tags.” File tags for those two fields are often blank or wrong, and the genre drives genre browsing. So reverting an album (usually to fix a title or artist) keeps your curated genre and year. Everything else snaps back to what the files say.
-
Help page text now uses the full width
Body text on the Help page was wrapping at a narrower reading width than the tab strip above it, which left a wide empty gap on the right. The prose now spans the full page width, lined up with the tabs. The title block keeps its narrower width.
-
On an artist page, that artist’s own name stands out in each track’s personnel line
In the Contributions and Collaborators tabs of an artist page, every track lists its full personnel. The artist whose page you’re on is now shown in bold accent colour within that line, so you can spot their seat at a glance in a long list. On George Duvivier’s page: “Art Farmer, Barry Galbraith, Charlie Persip, George Duvivier, …” Works whether the file tags store each musician separately or cram them all into one delimited field.
-
A torrent download no longer reads as “100%” before it’s actually done, and completion is detected more reliably
A download that stalls on its last pieces (common when a torrent has few or slow peers) used to round up to “100%” with a full bar while it was really stuck at, say, 99.8%, which made it look finished when it wasn’t. The percentage and bar now cap at 99% until the download actually completes, then flip to “Done.” Completion itself is now detected two ways: the download engine’s finish event, plus a steady progress check. A finished download reliably triggers the “Finished downloading” notification and the optional library scan, even if the engine’s event gets missed.
-
The “download finished” notification now stays until you dismiss it
The toast that announced a finished torrent download used to disappear after a few seconds. Easy to miss, since a download completes at an unpredictable moment and you’re rarely staring at the screen right then. It’s now a sticky in-app notification, same look as every other notification, but it stays put until you click to dismiss. Still waiting whenever you get back to the screen.
-
Torrent downloads keep running when you leave the Import pane, with a finish notification
A download no longer depends on the Import torrent pane staying open. The download list, the scan-on-finish setting, and progress tracking now live at the app level. You can switch to another view or close Settings entirely and the download keeps going. When one finishes you get a toast wherever you are in the app, and the “scan into library” step still fires. (Previously, if a download completed while you were on another screen, you missed the notification and the auto-scan didn’t run.) Come back to the pane and any in-progress download is still listed. Each download card’s destination path is now a link. Click it to open that folder in File Explorer.
-
Import a magnet link or .torrent under Settings → Tools
A new Import torrent pane downloads a magnet link or a .torrent file into a folder you choose. Paste a magnet and click Download, or pick a .torrent from disk. Either way the app asks where to save it, so nothing lands in your library by surprise. Each download shows a progress card (name, percent, size, speed, peers, file list) and a “scan into library when finished” toggle that’s on by default. Completed downloads show up in their album without a manual rescan. Download-only by design: nothing keeps seeding. The moment a download finishes the app disconnects from the swarm and leaves the files on disk. Built for sources you have rights to (live-music archives, public-domain recordings, your own backups). The torrent engine downloads on first use, like the FLAC/Cut-MP3 tooling. Help page has a new Import torrent tab.
-
Click an album’s genre to see every album in that genre
The genre in an album page’s meta line (under the title, next to the year and track count) is now a link. Click it to jump to the Albums grid scoped to that genre. Same filter as the genre pill next to the search box. Albums tagged with several genres (“Smooth Jazz; Jazz”) show each as its own clickable chip, so you can pick exactly which one to browse.
-
Only one copy of the app can run at a time
Launching the app a second time (or an auto-update relaunch that fired before the old process exited) used to spawn a second fully-independent main window: two mini players, two library scanners, duplicate file-watcher writes. The second launch now exits immediately and the existing window comes forward and gets focus. The duplication was always there. v0.3.13’s stronger mini-player pinning just made both copies visible at once because neither could fall behind the other anymore. After installing this build, close both running copies once via Task Manager. The lock prevents future duplicates but won’t dismiss copies already running.
-
The mini player reliably stays above other windows
The mini player was already supposed to be always-on-top, but on Windows it would lose its topmost flag when another topmost-class window appeared (Explorer’s drag overlay, system dialogs, certain other apps) and end up hidden behind them. The mini-player window is now pinned at the strongest always-on-top tier Windows offers, so it stays visible above everything while you work in another app. Trade-off: at this level Windows excludes the mini player from Alt+Tab on Windows 10. (Windows 11 still shows it.) You click it on screen instead of tabbing to it.
-
Cut MP3 stops asking whether to add the saved clip(s) to your library
After saving a single clip or splitting an album, the editor used to follow up with an “Add clip to library?” confirmation dialog. Removed. You get a toast naming the file(s) and the editor closes. If you want the new files scanned, save them under your library root and the normal scan triggers pick them up.
-
Cut MP3 can now open an MP3 that sits outside your library folder
The v0.3.10 Split album release was unusable on the most natural test file (the long album MP3 you just downloaded into your Downloads folder) because the audio loader returned 403 for any path outside the configured library root. Cut MP3’s file picker would let you choose any .mp3 on disk, but the editor would then refuse to load it (“Couldn’t load audio: fetch failed: HTTP 403”). The library-root gate was over-defensive for a local-first app whose renderer never loads remote content. The only thing that drives the audio handler is the user picking a file. Now any local MP3 you can read works, in either Single clip or Split album mode.
-
Cut MP3 can split a one-file album rip into per-track MP3s using an EAC log or CUE sheet
The Cut MP3 modal now has Single clip / Split album mode pills at the top. Split album is for the case where you have one long MP3 that’s really a whole CD ripped as a single file. Click Load track list… and pick the .log file Exact Audio Copy wrote next to the rip, or a .cue sheet. Both formats are auto-detected, and UTF-16-without-BOM logs (the format Windows tools often emit) are decoded correctly. The waveform splits into shaded bands, one per track, with the track number floating in each. Click a band or a row in the strip below to preview that track. Space plays just the selected track. The strip lets you nudge each track’s start and end timecodes and type a title before saving. Save N tracks… asks for a destination folder and writes one MP3 per track, named “NN Title.mp3” (zero-padded track number, falling back to “NN.mp3” if no title is set). Each output carries the album/artist/title/track tags you set. Same lossless -c copy as single-clip mode: no re-encoding, cuts land on MP3 frame boundaries.
-
Disc folders sitting directly under an artist merge into one album, with the album name from the file tags
A library laid out as Artist/Disc 1/track and Artist/Disc 2/track, with no album folder in the middle, used to show up as two separate albums named “Disc 1” and “Disc 2.” The scanner now recognizes the pattern: when every subfolder under an artist is a CD/Disc folder (Volume folders stay separate per v0.3.1), it merges them into one album whose title comes from the most-common ID3 album tag of the tracks. Disc numbers get assigned correctly from the folder names, and an artist-level cover image is picked up as the album cover.
-
Playlist import accepts more than just iTunes TSV. M3U files and plain-text exports work too
The Import iTunes playlists button now auto-detects the format of whatever file you pick: a tab-separated iTunes/Music export, an M3U/M3U8 file (with #EXTINF metadata), or a plain-text export from this app’s own “Export → Plain text.” Same picker. No UI choice to make. Round-tripping an exported playlist back into the app finally works.
Fixed encoding detection for UTF-8 .txt files without a byte-order mark. They used to be decoded as UTF-16 and produce a single garbled line that parsed to zero entries (the “Skipped: …” / “Imported 0 playlists” outcome). The reader now counts null bytes to tell UTF-16 from UTF-8 when no BOM is present.
-
Playlist drag reorders the row you actually dragged, not a neighbor
v0.3.6 worked correctly in development but moved the wrong row in the released build. A React production-vs-development render-timing difference let the wrong source index slip into the drop handler. The drag now identifies the source row by the track’s own ID via the browser’s native dataTransfer instead of any React state, so the prod build behaves like dev no matter how React batches updates underneath.
-
Drag a track past the visible edge in a long playlist and the list scrolls with you
Holding a track and pushing the cursor near the top or bottom of the playlist now auto-scrolls the list so you can drop on rows that started off-screen. Needed for the 100-track case where the drop target is dozens of rows above or below where you started. Scroll speed ramps with how close to the edge you push, so you can ease in or rip across.
-
Drag-to-reorder in playlists actually finishes the move
The v0.3.4 drag-to-reorder fix landed the drop math correctly but missed a deeper React-vs-browser timing problem. The drag would visually look right (ghost row follows the cursor, accent line on the over row), then the release would do nothing. Root cause was a stale closure: the drag handler short-circuited before calling preventDefault, so the browser silently rejected the drop. Drag tracking is now in a ref instead of state, and onDragOver always preventDefaults while drag is enabled. The drop actually finishes.
-
Playlist rows show the album artist; drag-to-reorder lands where you aim it
The artist column in a playlist now shows the album’s main artist (the name on the cover), not the full contributing-musicians list crammed into one cell. That row was unreadable for sideman-heavy albums. Now it answers “whose album is this” at a glance.
Drag-to-reorder a track in a playlist had an off-by-one bug on downward drags. The accent line at the top of the over row promised “insert above this row,” but the track actually landed one slot lower. The drop math now matches the visual indicator in both directions.
-
Help in two clicks; richer collaborator drill-in
A help (?) icon sits next to the gear in the topbar. One click to the Help page, back to return.
The Help page’s Cut MP3 section is filled in (used to render blank).
Drilling into a specific collaborator (Curtis Fuller × Freddie Hubbard, etc.) on an artist page now shows shared-track rows with the same affordances as Contributions: love, track number, rating, contributing-artists list, add-to-playlist, edit.
-
Search closes whatever page you’re on
Typing in the search box from any page (Album, Artist, Playlist, Stats, History, Sidemen, Untagged, Instrument, Settings) closes that page so search results take over. Back returns to where you were.
-
Box-set Volumes are their own albums; mini-player shows the album
Folders named
Volume 1,Vol. 2,Volume IIIare now separate albums (each Volume usually is its own release), not merged discs. Titles compose as “Parent, Volume X” so siblings are easy to tell apart. The artist comes from the file tags when the surrounding folder is really an album-name rather than an actual artist.Existing v0.3.0 box sets that were merged into one row get split automatically on the next scan. The merged shell row sweeps away.
The rescue pass during a scan now skips albums whose tracks have all been reassigned elsewhere. That was the source of a multi-second UI freeze when many albums got new ID shapes.
The player bar and mini player now display the album title and year under the artist, so the row in mini mode actually tells you what album the song is from.
-
Tag edits write back for every format
Edits to a track or album now write back to the file on disk for
.m4a,.flac,.ogg,.opus, and.aac(previously only.mp3). Adding a sideman to a FLAC track or fixing a title on an m4a actually changes the tag on disk now. Windows Explorer and other players see the edit too. -
Default playlists folder
Set a default playlists folder under Settings → System → Sync. Exporting a playlist (M3U or plain text) writes the file directly to that folder. Point it at another player’s or device’s playlists folder for one-click export.
-
Reset play statistics
A Reset play statistics button at the bottom of the Stats page clears every track’s play count, last-played time, and the whole play history in one go (after a confirmation). Music files are untouched.
-
Visualizer picker, six styles
Pick between Theme accent bars, Rainbow LED spectrum, Polar bars, Pulse rings, Oscilloscope, or VU meters from Settings → Look → Visualizers. Each tile shows a live preview.
The expanded visualizer overlay has a true OS-fullscreen button. The player bar pins to the top so playback controls stay reachable.
-
Mini-player + MP3 cut editor
A redesigned mini-player floats above other windows in the lower-left corner. Hover anywhere to reveal prev/play/next/shuffle/repeat. The red dot in the slim title bar takes you back to the full window.
An MP3 clipping editor under Settings → Tools (or press [ / ] while a track plays to stamp in/out marks at the current playhead) saves a frame-accurate snippet of any MP3. No re-encoding, no quality loss.
For everything in between: GitHub releases · Download the current build.