Merge pull request #604 from lokal-music/release/v12.1.0
Changelog
Windows builds: free code signing provided by SignPath.io, certificate by SignPath Foundation (code signing policy).
FYI:
Lokal is 100% local; the library, history, anything in database, or any info that is used for API's such as yt-dlp, LRCLIB, is NOT seen by us.
What's Changed
-
fix(lyrics): normalize Mornye/LRC voice prefixes and repair cached lyrics (#603)
Details
Reproduction
The supplied RAYE – Call On Me.flac has Vorbis
LYRICSandUNSYNCEDLYRICStags from Mornye/lrc.red. They contain line-synced LRC such as[00:14.486]v1:And I'll share blame. The player shows thev1:marker as sung text.Fix
- Parse
v1:,v2:and other boundedvN:prefixes as vocal-agent metadata (anchored only to the beginning of a lyric). - Support line-synced, enhanced/word-synced, karaoke and plain LRC without deleting real word timestamps or removing literal mentions of
v1:mid-line. - Preserve voice attribution for two-voice layout/duet handling.
- Automatically repair previously cached lyrics (including pinned/local songs) on read and persist corrected lines and duet metadata; existing installations no longer need manual cache clearing.
- Do not invent per-word timestamps. This FLAC's lyrics only identify line starts. Genuine word-by-word highlighting requires real enhanced lyrics from a source with word timestamps, e.g. via the existing Prioritize syllable lyrics option.
Regression coverage
Added
npm run test:lyrics-voice-prefix: sampled Mornye/lrc.red format, timestamp preservation, multi-voice handling, enhanced LRC, karaoke, FLAC Vorbis-tag extraction, and cached-row migration.Verification
Inspected the supplied FLAC's actual embedded metadata using FFprobe/metaflac. Source-level regression tests are committed but not yet executed in an installed project environment; run the new test command and desktop smoke checks before merging.
Summary by CodeRabbit
- Bug Fixes
- Removed leading voice markers such as
v1:andv2:from lyric text while preserving timing and voice information where available. - Corrected previously cached lyrics with these markers when they are read, while retaining timing and pinned status.
- Avoided treating standalone voice markers as sung words or timestamps. Ordinary mentions of these markers remain unchanged.
- Removed leading voice markers such as
- Parse
-
feat(desktop): selectable fullscreen turntable scene with live cover art (#602)
Details
Fullscreen vinyl player — original Wallpaper Engine scene
This draft PR integrates the actual wallpaper from the supplied reference: Vinyl Record Player (for MusicBee), Workshop item 2873513347, by pupsi.
Implementation
- Appearance → Now Playing → Fullscreen Artwork: Album Cover / Rotating CD / Turntable, preserving legacy CD preferences.
- Loads the user's original
scene.pkgfrom Steam libraries, including secondary Steam drives, or through manual file selection. It checks the Workshop item identity, caps package size, and reads files asynchronously. - Mounts the original scene through WebWallGL 3.0.0; no reinterpretation, substitute SVG, or copied Wallpaper Engine textures are included in Lokal.
- Album artwork is passed as the scene's own
$mediaThumbnailWebGL texture, not laid over the 3D scene at guessed DOM coordinates. Lokal's DB-validated full-resolution cover lookup supplies local artwork; the pre-existing bounded HTTPS image-fetch helper supplies online artwork. Both are converted to data URLs to avoid renderer CORS restrictions. - Scene gets current title, artist, album, duration, elapsed position and playback state. The original animations control record and tonearm behavior. Changing tracks or updating existing covers updates the media texture without remounting.
- Turntable mode suspends Moving Cover and Canvas (including video in hidden side panels) without changing the global preference. The existing fullscreen controls, seek, lyrics/queue, etc. remain available.
- Honors the native device resolution for high-DPI fullscreen and destroys WebGL resources on exit/failure.
Tests
- GitHub Actions runs Electron syntax checks,
test:fullscreen-appearance, local Workshop path/provenance tests, and Vite compilation. - Temporary official SteamCMD download probe was run but Steam's service returned an app-info timeout before the wallpaper could download (not a determination of Workshop item availability). The temporary workflow was removed afterward.
Still required before merge
A real desktop run with Workshop item 2873513347 installed. Compare source and Lokal frame-by-frame (lighting, blur, record speed, tonearm, album position), inspect playback and track switching, confirm full-resolution artwork in both modes (local and streamed), assess CPU/GPU usage and 16:9/ultrawide monitors. Source-level/build tests do not establish pixel-identical rendering.
This remains a draft pending that visual/runtime validation. Workshop assets stay on the end user's computer and are not redistributed.
Contributors: @CHEYCKIT
Full Changelog: v12.0.6...v12.1.0
Setup
See README.md for full setup instructions.
macOS: this build is ad-hoc signed, not notarized (no Developer ID certificate is configured). The first time, right-click Lokal in Applications and choose Open, or run xattr -dr com.apple.quarantine /Applications/Lokal.app.
Binary Checksums (SHA-256)
Lokal-12.1.0-arm64-mac.zip:
[71CACE1DFB09E787B6666829E8B312987491DDBC463C7A3553297FD7E1B753E2]
Lokal-12.1.0-arm64-mac.zip.blockmap:[D4673069475071E2D1B173FC38EF50A9F6EC48C3761A67B02DD2CBADF90C0F54]
Lokal-12.1.0-arm64.AppImage:[55917AB93C524EDFFE4DA92ADB0BA98FF94401DE3C7F06FEACA38317A7FBC03A]
Lokal-12.1.0-arm64.dmg:[34233AB306BEDBAC8A75964D4BF1A23D9023D18B9BCC348715D270A0820A4907]
Lokal-12.1.0-arm64.dmg.blockmap:[E82681A3AA527120508F6395C5CE9B351BA7A7E3A878E03FBF7B0D0BC48532B9]
Lokal-12.1.0-mac.zip:[7467D589E8B0E61E2AA8AD8303EB50CC2988F3DB64467785827FEA38F05F7451]
Lokal-12.1.0-mac.zip.blockmap:[E6B842047023361C757819D08CB4EE72520035428A1DEB050DE08A29E7DDABD5]
Lokal-12.1.0.AppImage:[CE6EB0D3EDBC2AC36F808D43885335CA09BF2038C06A124481D0C9FCE7F66BDA]
Lokal-12.1.0.dmg:[63713C6825861D3D3DB0D2D5E72C1096BE5DE56CD7051BE937EBCE829461875F]
Lokal-12.1.0.dmg.blockmap:[2912AB49D83F5122A6D061E8E0104646BAEDEE4F37B25C7A5B599F167DD94E87]
Lokal-12.1.0.exe:[E9BD9256E2B88642A819AB5036DA7F59C40AE1AEF045ABD0AAFCC1654530C510]
Lokal-Setup-12.1.0.exe:[6F3ABD1EA0486BBB5DE14B8EE8DA0F20A8EBBA6D0DDA32225BA78A157265BF3B]
Lokal-Setup-12.1.0.exe.blockmap:[D21445E1C95188F075DF48D2C1D7EA9D4E8A68E9181DA46D1BB35FB2AFE1032B]
builder-debug.yml:[DF22F2DC61B265CA72BBE7D0461ABCBA1940335B9CAADE4BD9D7A73ECABB5138]
latest-linux-arm64.yml:[B9A91732E3E143BB558B3E767E07E9409E43F4389CDE63ADAA78813A8BAE30D0]
latest-linux.yml:[BDB9DC326F595108FDD47CC3724A48BB600B8FAE898BD9D409F5B62DE58E1841]
latest-mac.yml:[BAEBB291A98DAAB3AB1E0104FEF2BDC714FB698E142637E77DDAEEF45314551D]
latest.yml:[C9AA45BE7355763FE08E3FD14ECC5BB24BAAD47A77CD41E8467854E45FD6BA96]
lokal-music_12.1.0_amd64.deb:[DB18A6669B2B424CE508E35334EC694B8BED24D257B7143FDD452CDB80B06805]
lokal-music_12.1.0_arm64.deb:[BEBE87794998D7CB78D5D96FE26AB2011B9124D50FE1E56FBB6CD327CB2EAF44]
