Skip to content

v0.3.21 — Maintenance

Choose a tag to compare

@aroundmyroom aroundmyroom released this 10 Aug 16:36
· 4 commits to main since this release

Velvet v0.3.21 — Maintenance

Waveform reliability improvements, visualizer graceful fallback, Subsonic large-queue position fix, and deterministic album sort order.

Waveform — reliability and performance

  • New cache format. Waveform cache files are regenerated on first boot with an improved internal format. Old files are cleaned up automatically — no manual action needed.
  • Eliminated redundant redraws. The waveform animation loop now skips frames where the playhead pixel hasn't moved, reducing GPU wake-ups during normal playback. Rendering resumes immediately on any seek.
  • Seek-while-paused now repaints. Seeking on a paused track previously left the waveform showing the old playhead position until play resumed. The progress bar updates immediately.
  • Fixed empty bars at the tail of short files — the downsampling window now always covers at least one sample.

Visualizer — graceful error recovery

If WebGL2 is unavailable (unsupported GPU, browser flag, or driver restriction), the visualizer now shuts down cleanly instead of throwing an unhandled exception. A toast message informs you — "Visualizer unavailable — your browser or GPU may not support WebGL2" — and playback is never affected.

Subsonic — large-queue position loss fixed

Fixed: resuming a large queue (1000+ tracks) from a Subsonic client always restarted from track 1. The HTTP query string parser silently drops parameters past a certain limit; with a long id list the current track and position parameters were discarded before we could read them. These scalars are now read directly from the raw URL, bypassing the limit entirely. The same fix applies to createPlaylist and updatePlaylist with large song lists.

Albums — deterministic sort order

Fixed: same-year albums for an artist could appear in a different order on each page load. The SQL query used ORDER BY year DESC with no tiebreaker, leaving within-year ordering to the database engine — which can vary by query plan. Albums sharing a year are now sorted consistently A→Z (case-insensitive).