Skip to content

Releases: pacholoamit/songstress-releases

v0.29.0

Choose a tag to compare

@pacholoamit pacholoamit released this 16 Jul 18:55

0.29.0 (2026-07-16)

Features

  • analytics: people-scoped breakdowns, assignable colors, insight cards (24c4b71)
  • native: portable download paths — survive reinstalls and restores (163ce8e)
  • native: pull-to-refresh on home, playlists, and library (2c24595)
  • reel: 60fps phone-scale capture; Wrapped sharing is video-only everywhere (9471f6d)
  • wrapped: live reel progress on tiles, pick-a-range generate, render coalescing (6bba078)
  • wrapped: share gates on the finished reel; brand logos; genres search; no stale reels (4b94947)

Bug Fixes

  • analytics: presence text clipped through cards; feed wraps; picker spacing (7f04772)
  • analytics: roster Map poisoned the persisted query cache (3e7e834)
  • app: re-point downloads index after iOS container relocation (8214793)
  • desktop: windows-safe pnpm spawn in sourcemap upload (#53) (ee28ade)
  • native: drop play-button spinner; progress shimmer is the loading signal (abb3584)
  • player: skip past dead tracks instead of cascading, probe dead loads (44ce388)
  • reel: motion capture survives hung requests instead of failing the job (14f09c4)
  • worker: merge (library,relpath) scan conflicts instead of aborting (1cd72db)

Running the desktop app

macOS — builds are Developer ID-signed and notarized: move Songstress.app to Applications and double-click. No Gatekeeper workarounds needed.

Windows — installers aren't signed yet: when SmartScreen shows "Windows protected your PC", click More info → Run anyway. Or unblock the installer from PowerShell first:

Unblock-File "$env:USERPROFILE\Downloads\Songstress_0.29.0_x64-setup.exe"

Linux — make the AppImage executable:

chmod +x Songstress_0.29.0_amd64.AppImage

After the first launch, in-app auto-updates keep you current without repeating any of this.

v0.27.0

Choose a tag to compare

@pacholoamit pacholoamit released this 13 Jul 10:37

0.27.0 (2026-07-13)

Features

  • account: Navidrome as a managed connected account; profile-tile menu inside the card (22ab8c5)
  • auth: quick-switch profiles, split-screen login, change-server escape (96c290c)
  • native: in-app QR scanner pairs a device from the sign-in screen (6f2751b)
  • native: token-only QR + login polish (39fcbd3)
  • pb: invite-link route returns the link for UI display (560ac2d)
  • web: add-user = email+name+avatar, invite link in UI, Navidrome invisible in Users (4b70972)
  • web: members can download from search — acquire buttons ride /library/add (8951e1d)
  • worker: Navidrome login names are the Songstress email (a383bf5)
  • wrapped: cover-art tiles + Share as video (reels) on web & native (1d3e198)
  • wrapped: delete + regenerate a Wrapped (web, desktop, native) (e296a6a)
  • wrapped: server-rendered 9:16 reel + per-Wrapped soundtrack (schema 34) (82fc224)

Bug Fixes

  • users: invite link only for unactivated users; nd-link blocks only the connection account (e568c6f)
  • web: drop stale set-up-directly copy from add-user dialog (f424e74)

Running the desktop app (unsigned builds)

These builds aren't code-signed with an Apple or Microsoft certificate yet, so the OS blocks or warns on first launch. One-time fixes:

macOS — these bundles are only ad-hoc signed, so Gatekeeper shows "Songstress is damaged and can't be opened. You should move it to the Trash." on first launch. It is not actually damaged — that's Gatekeeper reacting to the download-quarantine flag on an unsigned app. Move Songstress.app to Applications, then clear the flag from Terminal:

xattr -cr /Applications/Songstress.app

Then double-click to open. Note: on recent macOS the right-click → Open trick does not clear the "damaged" error — you must run the command above.

Windows — when SmartScreen shows "Windows protected your PC", click More info → Run anyway. Or unblock the installer from PowerShell first:

Unblock-File "$env:USERPROFILE\Downloads\Songstress_0.27.0_x64-setup.exe"

Linux — make the AppImage executable:

chmod +x Songstress_0.27.0_amd64.AppImage

After the first launch, in-app auto-updates keep you current without repeating any of this.

v0.26.1

Choose a tag to compare

@pacholoamit pacholoamit released this 13 Jul 06:41

0.26.1 (2026-07-13)

Bug Fixes

  • link: surface nd-link refusal reasons — admin-account, taken, bad creds (a514475)

Running the desktop app (unsigned builds)

These builds aren't code-signed with an Apple or Microsoft certificate yet, so the OS blocks or warns on first launch. One-time fixes:

macOS — these bundles are only ad-hoc signed, so Gatekeeper shows "Songstress is damaged and can't be opened. You should move it to the Trash." on first launch. It is not actually damaged — that's Gatekeeper reacting to the download-quarantine flag on an unsigned app. Move Songstress.app to Applications, then clear the flag from Terminal:

xattr -cr /Applications/Songstress.app

Then double-click to open. Note: on recent macOS the right-click → Open trick does not clear the "damaged" error — you must run the command above.

Windows — when SmartScreen shows "Windows protected your PC", click More info → Run anyway. Or unblock the installer from PowerShell first:

Unblock-File "$env:USERPROFILE\Downloads\Songstress_0.26.1_x64-setup.exe"

Linux — make the AppImage executable:

chmod +x Songstress_0.26.1_amd64.AppImage

After the first launch, in-app auto-updates keep you current without repeating any of this.

v0.26.0

Choose a tag to compare

@pacholoamit pacholoamit released this 13 Jul 06:07

0.26.0 (2026-07-13)

Features

  • native: link existing Navidrome account from Settings ▸ Account (e783057)
  • pb: /api/songstress/nd-link — verified adoption of existing ND accounts (618cf20)
  • pb: nd_user_link job type (schema 33) (7156a7b)
  • web: link existing Navidrome account — Account card + UserDialog advanced, useJobWatch (4c31436)
  • worker: nd_user_link job — adopt existing Navidrome accounts (1b5b12a)
  • worker: update_user syncs email (3e19c3b)

Running the desktop app (unsigned builds)

These builds aren't code-signed with an Apple or Microsoft certificate yet, so the OS blocks or warns on first launch. One-time fixes:

macOS — these bundles are only ad-hoc signed, so Gatekeeper shows "Songstress is damaged and can't be opened. You should move it to the Trash." on first launch. It is not actually damaged — that's Gatekeeper reacting to the download-quarantine flag on an unsigned app. Move Songstress.app to Applications, then clear the flag from Terminal:

xattr -cr /Applications/Songstress.app

Then double-click to open. Note: on recent macOS the right-click → Open trick does not clear the "damaged" error — you must run the command above.

Windows — when SmartScreen shows "Windows protected your PC", click More info → Run anyway. Or unblock the installer from PowerShell first:

Unblock-File "$env:USERPROFILE\Downloads\Songstress_0.26.0_x64-setup.exe"

Linux — make the AppImage executable:

chmod +x Songstress_0.26.0_amd64.AppImage

After the first launch, in-app auto-updates keep you current without repeating any of this.

v0.25.1

Choose a tag to compare

@pacholoamit pacholoamit released this 13 Jul 03:43

0.25.1 (2026-07-13)

Bug Fixes

  • auth: keep sessions alive until logout (schema 32) (301d947)
  • discovery: send auth on /ext proxy calls — restore YT Music/Apple Music/MusicBrainz search (81c302a)

Running the desktop app (unsigned builds)

These builds aren't code-signed with an Apple or Microsoft certificate yet, so the OS blocks or warns on first launch. One-time fixes:

macOS — these bundles are only ad-hoc signed, so Gatekeeper shows "Songstress is damaged and can't be opened. You should move it to the Trash." on first launch. It is not actually damaged — that's Gatekeeper reacting to the download-quarantine flag on an unsigned app. Move Songstress.app to Applications, then clear the flag from Terminal:

xattr -cr /Applications/Songstress.app

Then double-click to open. Note: on recent macOS the right-click → Open trick does not clear the "damaged" error — you must run the command above.

Windows — when SmartScreen shows "Windows protected your PC", click More info → Run anyway. Or unblock the installer from PowerShell first:

Unblock-File "$env:USERPROFILE\Downloads\Songstress_0.25.1_x64-setup.exe"

Linux — make the AppImage executable:

chmod +x Songstress_0.25.1_amd64.AppImage

After the first launch, in-app auto-updates keep you current without repeating any of this.

v0.25.0

Choose a tag to compare

@pacholoamit pacholoamit released this 12 Jul 23:25

Highlights

One playback session per user (Songstress Connect v2). Your queue is now canonical across web, desktop, and native — open any device and it auto-mirrors what's playing (even when paused). Exactly one device plays audio at a time; tap any device in Devices to move playback to it. Existing remote control (play/pause/next/seek, device transfer) is unchanged; transfer is now deterministic (no more sleep race) and shuffle/repeat order survives the move. Additive schema-31 collection; old clients keep working during a mixed-version window.

Playback never breaks after ~1 hour. Fixed the media-token expiry that made playlists skip tracks until unplayable and blanked cover art on long sessions — tokens now re-mint into the upcoming queue without touching the current stream. Slow-network next-track shows a buffering spinner and auto-continues instead of a fake "paused". The mini-player buffering spinner is now centered.

Library enrichment, watchable. New Acquisition → Enrichment tab: a live table (Lyrics / Metadata / Art per track) that flips as tracks are fetched, one "Enrich now" button (scans then enriches), and cumulative counters. "Metadata missing" now counts only the supplemental tags enrichment can actually fill, so the number drops as you go.

Wrapped, shareable like Spotify. Public Wrapped pages now render cover art (scoped, per-share-token proxy) and unfurl with Open Graph tags when pasted anywhere. First-class social sharing (share sheet + X/Facebook/WhatsApp/Telegram/copy-link/download); "Your Wrapped" moved above the top lists.

Acquisition Services counts Soulseek + YouTube Music. They were silently uncounted (keyed by per-download detail); now they show their real numbers — no backfill needed.

Connections polish. Last.fm connect returns you to the URL you started from; the Public URL setting moved from SSO to Connections (where it belongs — it powers Spotify connect, invites, and QR pairing).

Upgrade: update the server image to v0.25.0 (schema 30→31 migrates automatically; the worker waits for it). The Wrapped cover-art and unified-session features need the server deployed to take effect.

0.25.0 (2026-07-12)

Features

  • enrich: three-dimension inventory + live per-track progress channel (da141a2)
  • native: single Enrich-now button + compact live progress (5dbbe61)
  • playback: add playback_session collection (schema 31) (3af1b2d)
  • playback: dual-write the canonical session from the active instance (e07e393)
  • playback: session-driven mirror state machine (ACTIVE/MIRROR/DETACHED) (af0ffe1)
  • playback: transfer rewire — transfer-on-tap, queue_saved_at handshake, adoptSession (Phase 4) (8f90557)
  • stats: surface Your Wrapped above the top-lists row (web) (c98153d)
  • web: Enrichment tab with live per-track table + counters (1a34ad9)
  • wrapped: first-class social sharing (a09e9db)

Bug Fixes

  • acquisition: count Soulseek + YouTube Music acquisitions in provider tallies (d607a5b)
  • app: re-token the preloaded-next audio buffer on rotation (efc068d)
  • connect: return Last.fm OAuth to the origin the user started from (a2cce26)
  • enrich: address review — upgrade-path crash guard, ruff, dead scan_first, counter double-count (a0b54e1)
  • native: center the mini-player buffering spinner (2903db8)
  • playback: adopt session shuffle/repeat on transfer, session-aware device tap, transfer reentrancy guard (e35f6eb)
  • playback: keep legacy audibly-playing auto-follow as a back-compat fallback (2f4396c)
  • playback: resolve dual-claim livelock + broaden legacy auto-follow fallback (aece6bb)
  • player: re-mint expired mt= tokens so playback survives past ~1h (349a6b1)
  • wrapped: harden art-route auth check and OG origin (security review) (2b4629a)
  • wrapped: render public cover art and unfurl shared links (bbbb157)

Running the desktop app (unsigned builds)

These builds aren't code-signed with an Apple or Microsoft certificate yet, so the OS blocks or warns on first launch. One-time fixes:

macOS — these bundles are only ad-hoc signed, so Gatekeeper shows "Songstress is damaged and can't be opened. You should move it to the Trash." on first launch. It is not actually damaged — that's Gatekeeper reacting to the download-quarantine flag on an unsigned app. Move Songstress.app to Applications, then clear the flag from Terminal:

xattr -cr /Applications/Songstress.app

Then double-click to open. Note: on recent macOS the right-click → Open trick does not clear the "damaged" error — you must run the command above.

Windows — when SmartScreen shows "Windows protected your PC", click More info → Run anyway. Or unblock the installer from PowerShell first:

Unblock-File "$env:USERPROFILE\Downloads\Songstress_0.25.0_x64-setup.exe"

Linux — make the AppImage executable:

chmod +x Songstress_0.25.0_amd64.AppImage

After the first launch, in-app auto-updates keep you current without repeating any of this.

v0.24.0

Choose a tag to compare

@pacholoamit pacholoamit released this 12 Jul 15:38

Highlights

Multi-user, for real. Spotify, Last.fm, and ListenBrainz are now connected per user in Settings → Account (the admin Connections tab keeps only global services + app credentials). Scrobbling now actually submits — every listen fans out to each listener's own Last.fm/ListenBrainz. Members can add songs to the library (rate-limited), track them in a new My additions view, and get their own notifications. Existing accounts and usernames migrate automatically (schema 30).

Play from search. Tap Play on any Spotify / Apple Music / Tidal result: a 30-second preview starts instantly while the full track downloads through your acquisition ladder, then playback upgrades seamlessly to the full song — and it joins your library, attributed to you.

The playback golden rule. Shuffle, song radio, and quality/network changes no longer interrupt playback. ⚠️ Behavior change: shuffle is now Apple-Music-style — your played history stays in place and only upcoming tracks shuffle; turning shuffle off restores order. Slow networks now show a buffering spinner and auto-continue instead of a fake "paused".

Stats, redesigned + shareable. Compact listening clock, real charts, Wrapped tiles — and Spotify-Wrapped-style share cards (iOS share sheet / PNG download / desktop Save dialog), plus public Wrapped links.

Device pairing & versions. Pair your phone by scanning a QR from Settings → Account. Every About shows app + server versions with a subtle drift banner.

Library enrichment & storage. The worker can fill missing lyrics/tags/art for songs already in your library (absent fields only, never overwrites), and Library settings shows per-volume disk bars with per-user usage.

Also: SSO panel redesigned as accordions with provider logos, SMTP-less invites print a one-time link to server logs, invite flows hardened against OAuth CSRF, and fixes for the blank iOS connection sheet and clipped settings cards.

Upgrade note: update the server image to v0.24.0 (schema 30 migrates automatically; the worker waits for it). Older apps keep working against the new server; the new apps show empty states for new features until the server updates.

0.24.0 (2026-07-12)

Bug Fixes

  • final-review wave — compose teardown bail, my-additions type filter, per-user sp_dc hint (8aa2452)
  • native: storage screen tolerates pre-0.24 servers without the /storage route (6d4a505)

Chores


Running the desktop app (unsigned builds)

These builds aren't code-signed with an Apple or Microsoft certificate yet, so the OS blocks or warns on first launch. One-time fixes:

macOS — these bundles are only ad-hoc signed, so Gatekeeper shows "Songstress is damaged and can't be opened. You should move it to the Trash." on first launch. It is not actually damaged — that's Gatekeeper reacting to the download-quarantine flag on an unsigned app. Move Songstress.app to Applications, then clear the flag from Terminal:

xattr -cr /Applications/Songstress.app

Then double-click to open. Note: on recent macOS the right-click → Open trick does not clear the "damaged" error — you must run the command above.

Windows — when SmartScreen shows "Windows protected your PC", click More info → Run anyway. Or unblock the installer from PowerShell first:

Unblock-File "$env:USERPROFILE\Downloads\Songstress_0.24.0_x64-setup.exe"

Linux — make the AppImage executable:

chmod +x Songstress_0.24.0_amd64.AppImage

After the first launch, in-app auto-updates keep you current without repeating any of this.

v0.23.1

Choose a tag to compare

@pacholoamit pacholoamit released this 12 Jul 14:55

0.23.1 (2026-07-12)

Bug Fixes

  • pb: derive useAuth state from the store snapshot (202813e)

Running the desktop app (unsigned builds)

These builds aren't code-signed with an Apple or Microsoft certificate yet, so the OS blocks or warns on first launch. One-time fixes:

macOS — these bundles are only ad-hoc signed, so Gatekeeper shows "Songstress is damaged and can't be opened. You should move it to the Trash." on first launch. It is not actually damaged — that's Gatekeeper reacting to the download-quarantine flag on an unsigned app. Move Songstress.app to Applications, then clear the flag from Terminal:

xattr -cr /Applications/Songstress.app

Then double-click to open. Note: on recent macOS the right-click → Open trick does not clear the "damaged" error — you must run the command above.

Windows — when SmartScreen shows "Windows protected your PC", click More info → Run anyway. Or unblock the installer from PowerShell first:

Unblock-File "$env:USERPROFILE\Downloads\Songstress_0.23.1_x64-setup.exe"

Linux — make the AppImage executable:

chmod +x Songstress_0.23.1_amd64.AppImage

After the first launch, in-app auto-updates keep you current without repeating any of this.

v0.23.0

Choose a tag to compare

@pacholoamit pacholoamit released this 11 Jul 16:46

0.23.0 (2026-07-11)

Features

  • auth: make email the only sign-in identity (3eafdca)

Bug Fixes

  • nd: bind coverArtUrl/streamUrl so detached callers don't crash (806c304)

Running the desktop app (unsigned builds)

These builds aren't code-signed with an Apple or Microsoft certificate yet, so the OS blocks or warns on first launch. One-time fixes:

macOS — these bundles are only ad-hoc signed, so Gatekeeper shows "Songstress is damaged and can't be opened. You should move it to the Trash." on first launch. It is not actually damaged — that's Gatekeeper reacting to the download-quarantine flag on an unsigned app. Move Songstress.app to Applications, then clear the flag from Terminal:

xattr -cr /Applications/Songstress.app

Then double-click to open. Note: on recent macOS the right-click → Open trick does not clear the "damaged" error — you must run the command above.

Windows — when SmartScreen shows "Windows protected your PC", click More info → Run anyway. Or unblock the installer from PowerShell first:

Unblock-File "$env:USERPROFILE\Downloads\Songstress_0.23.0_x64-setup.exe"

Linux — make the AppImage executable:

chmod +x Songstress_0.23.0_amd64.AppImage

After the first launch, in-app auto-updates keep you current without repeating any of this.

v0.22.0

Choose a tag to compare

@pacholoamit pacholoamit released this 11 Jul 15:42

0.22.0 (2026-07-11)

⚠ BREAKING CHANGES

  • all API reads/writes and /nd, /ext, /maint now require an authenticated Songstress user; existing single-user deployments must set an admin (env pair or the create-admin screen) and clients must sign in.
  • pb: set app URL only from env or explicit admin action, never request headers (security)
  • cli: move the songstress CLI to the public songstress-releases repo
  • deploy: retire the all-in-one image
  • deployment now uses a single ghcr.io/pacholoamit/songstress image instead of separate songstress-pocketbase and songstress-worker images. Switch your compose to the new all-in-one service (see compose.yaml) and pull the new image; the schema migrates automatically on boot.

Features

  • acquisition: Advanced engine knobs card; autoeq_sync job meta (b55c15a)
  • acquisition: apple-style hero stat cards with trend pills and glow sparklines (f7fc293)
  • acquisition: flat source ladder w/ health dots + per-source tallies (schema 24) (1f1b102)
  • acquisition: flat source ladder w/ health dots + per-source tallies (schema 24) (b51f7ba)
  • acquisition: full spotiflac config — quality ladder, format gates, lyrics/enrich providers, filename template, 12-source roster, tidal import (schema 23) (6f17e62)
  • acquisition: live 'Downloading to library' section on the Acquisitions tab (6f9ec21)
  • acquisition: provider ladders w/ brand marks, nested sources, schema-skew guards, true lyrics priority + settings traceability tests (83d808b)
  • acquisition: rename "Lossless Sync" to "Acquisition" + add downloads & sweep status (4b05a55)
  • acquisition: sparkline stat tiles + apple-esque overview with recent activity (96ff751)
  • acquisition: spotiflac settings ui — inline sources with quality tags, quality ladder, formats, lyrics/enrich, filename templates; tidal import; native settings sync (95f6ae3)
  • acquisition: surface provider health-check failure reasons (af8a772)
  • activity: heartbeat-driven worker status banner + connection error strip; connections Save disabled until dirty (b2e90f0)
  • add merge_preflight job type (schema 22) (7bb480e)
  • Add Serena project configuration file and gitignore files (4fa1bb9)
  • all-in-one image, server-side setup, library + device UX (a71738f)
  • app: admin Public URL setting + invite-link warning when unset (c030b45)
  • app: artwork-derived background washes on detail pages (605281d)
  • app: backfill-track-ids card on the Merge page (schema 25) (ace0d37)
  • app: badge in-library search results instead of hiding them (7dd4feb)
  • app: carry mbid/isrc/duration through acquire payloads (0bcf541)
  • app: client logs + metrics with a Settings - Clients dashboard (a62f3c0)
  • app: connect-your-services promos on Home (ef48cb3)
  • app: consolidate Overview into one lossy+acquisitions table (559034d)
  • app: desktop client download parity + artwork-cache ports & adapters (5822c3e)
  • app: desktop downloads that persist + Downloads page + playlist download/reverse (abf775b)
  • app: in-app artist search for "Find on…" and tidy native detail headers (d9422af)
  • app: login + first-admin onboarding, auth gate, role-gated navigation and account settings (9effed6)
  • app: Manage Users — accounts, roles, Navidrome provisioning, SSO providers, wrapped cadence (1030dd9)
  • app: Merge dashboard on web, desktop, and mobile (92a94bc)
  • app: refine quality badges into Apple-style tier wordmarks (f6cf197)
  • app: restructure Upgrades into Manage - Lossless Sync (0413bc5)
  • app: rich-text artist bios and album notes (ae52f9e)
  • app: Songstress Connect protocol + shared executor/controller (54ca392)
  • app: split playlists search from external playlist import (a2e6beb)
  • app: Stats section and animated Wrapped story with public share page (6f55d09)
  • app: tap-to-navigate from the player + Find on Spotify / Apple Music (7ca2872)
  • app: vinyl record now-playing artwork (311d6a2)
  • app: wire Stats, Wrapped, public share, and Users routes (20e35cd)
  • auth: unified Navidrome identity — auto-provision by default, sync username+password (2907ee8)
  • auto-sync playlists on first import (2de1aac)
  • blazing-fast library browse/search, Spotify auth+limit fixes, trigger rework, player upgrades (e6b6b83)
  • brand: redesign app icon to a beamed-sixteenths note (5b0a0d4)
  • cli: compose/env generator — pinned templates, golden-tested matrix (922741f)
  • client: auth store, instance discovery, media-token plumbing, auth-aware server validation (49dc1bf)
  • cli: host preflight — docker/compose, RAM, AVX2, WSL, ports (d35cff6)
  • cli: install command — huh wizard, --yes flags, --dry-run, execute engine (7f287c6)
  • cli: scaffold songstress CLI — module, theme, banner, version (e1ff694)
  • cli: version manifest, secret generation, lock file (b3df060)
  • compose: add sibling-Navidrome and all-in-one overlays (821da31)
  • connect: devices + player_commands collections, executor mounts (5cfabc5)
  • connections: retire the AudioMuse connection (a390a0d)
  • connections: surface Last.fm + ListenBrainz as f...
Read more