github lokal-music/lokal v12.1.0
Release v12.1.0

2 hours ago

Release Banner

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 LYRICS and UNSYNCEDLYRICS tags from Mornye/lrc.red. They contain line-synced LRC such as [00:14.486]v1:And I'll share blame. The player shows the v1: marker as sung text.

    Fix

    • Parse v1:, v2: and other bounded vN: 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: and v2: 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.
  • 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.pkg from 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 $mediaThumbnail WebGL 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]

Don't miss a new lokal release

NewReleases is sending notifications on new releases.