github lokal-music/desktop v14.1.2
Release v14.1.2

latest releases: v14.1.4, v14.1.3
3 hours ago

Release Banner

Merge pull request #736 from lokal-music/release/v14.1.2


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

  • feat(desktop): port LastWave playback and independently timed background lyrics (#735)

    Details

    Investigation: what actually made Mobile work

    Supporting vocals: Mobile's working implementation reads FLAC VORBIS_COMMENT directly, preserving separately stored [bg:] enhanced-LRC blocks, merges them with lead lyrics, and renders each backing singer on its own timeline beneath the currently focused lead. Desktop already parsed [bg:] when present in the same text field, but its metadata extraction could lose separately stored fields; its renderer also painted backing voices permanently under the lead row they were originally attached to.

    LastWave: Desktop already supports an optional per-add-on HMAC signing key, search and direct HTTP playback. What blocked many LastWave streams was assuming manifest: 'dash' always means adaptive transport and handling only direct URL replies. Mobile handles LastWave's protocol defaults, nested stream payloads, actual static MPD audio and per-track hybrid-v1 byte range/CENC plans.

    Ported behavior

    Supporting vocals

    • Add bounded, metadata-only FLAC Vorbis comments reader (electron/lyrics/flacVorbis.js), merging independent [bg:] fields into the lead's source without duplicating backing events.
    • Use the reader for the actual local-lyrics provider, even when music-metadata flattens or omits those fields. Preserve sidecar and private Lokal lyric priority; merge vocals onto those timelines rather than replacing precise lead timings.
    • Mark older cached FLAC lyrics for one new supporting-vocal rescan.
    • Animate the background singer under the currently focused row of LyricsPanel with an independently timed selector; preserve per-word karaoke timing and smooth opacity/height motion. This same component is used in the fullscreen and side lyrics views.

    LastWave

    • Keep existing per-addon HMAC signing. Search, manifest, stream and download request headers stay scoped to the configured add-on, not every add-on.
    • Support nested data/stream replies, optional direct FLAC URLs even with default format/manifest: dash, and single retry on HTTP 502/503 stream minting.
    • Parse bounded, unencrypted static audio MPDs with SegmentTemplate and SegmentTimeline, fetch declared media segments, stage a local seekable fMP4 file.
    • Stage hybrid-v1 CDN byte ranges and decrypt declared AES-CTR/CENC samples locally with Node crypto; validate host, offsets, sizes, scheme and content key; never forward keys to the React renderer or logs. Keep DRM/unknown protections rejected.
    • The existing electron/online/sources.js file-response path serves the resulting local media with HTTP Range support.

    Regression / CI coverage

    • FLAC Vorbis comment fixture with separately stored lead and 16-style [bg:] fields, actual bounded FLAC read and timed overlap across a lead change.
    • Real HTTP-addon install/stream mock preserving default LastWave DASH labels with a progressive FLAC URL.
    • Inline/base64/remote MPD recognition, static DASH staging and rejected dynamic/DRM/unsafe manifests.
    • Clear hybrid range validation/assembly, encrypted hybrid sample fixture with AES-CTR/CENC decryption.
    • New PR-triggered GitHub workflow runs these + the existing HTTP signing and enhanced-LRC tests and compiles the React/Vite lyrics view.

    Scope and verification

    Playback transport is implemented for direct, supported static-DASH and supported hybrid-v1 renditions. The existing Save to library downloader currently requests a direct URL and has not yet been adapted to take staged MPD/hybrid files; leave download capability unclaimed until that flow is implemented.

    GitHub Actions tests were added but have not been claimed as passing until workflow results arrive. Runtime playback/visual verification on desktop is still necessary, particularly real-world LastWave CENC variants.

    Summary by CodeRabbit

    • New Features
      • Lyrics can now include backing vocals embedded in FLAC files, alongside sidecar and online lyrics.
      • Timed backing vocals follow playback and remain visible across lead-vocal transitions.
      • LastWave playback now supports eligible DASH and hybrid audio streams.
    • Improvements
      • Backing vocals are merged without duplicating existing lines or replacing online lead-lyric timing.
      • Embedded lyric selection retains available translations, and FLAC lyrics remain available when other metadata cannot be loaded.
      • Staged playback media is cleaned up after playback becomes idle.

Contributors: @CHEYCKIT

Full Changelog: v14.1.1...v14.1.2


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-14.1.2-arm64-mac.zip: [FB355E29501A77911E9D745647B098D30DBEB968B7CDB52EDC046A0AB63E5A18]
Lokal-14.1.2-arm64-mac.zip.blockmap: [F283D524867C1AECBF04AE0DD0AA05706CD8DB2E7F26D4414BE3F4C02D3A6A17]
Lokal-14.1.2-arm64.AppImage: [BEF04F3ED93915BC88CC060C29C23EF7D377E47BDBAAE3BC7249D71C96D4C80B]
Lokal-14.1.2-arm64.dmg: [A2D3C740CBED1624E4295355C67F759BCFE4ACF6C2E21E58FB5AAED53B48051A]
Lokal-14.1.2-arm64.dmg.blockmap: [6C5B647E134D0E05D96689AF8FA9A51269A090F5F0C4F8AC681A3619E41B2B37]
Lokal-14.1.2-mac.zip: [6D29F5918DC35C7D60B089991545B11B2A84B2D0832CE266FDDD1D60FA6FB676]
Lokal-14.1.2-mac.zip.blockmap: [E0FED62A730737E8C38D1B89CFA2A8F91EE12792D70A00E2423882129898E5AE]
Lokal-14.1.2.AppImage: [17F10A62DF7725E15A1EB24DB37B4801E1816EE87B439A381BB8444A239B122D]
Lokal-14.1.2.dmg: [AF2E14AD80085D8153C075D564CB68FB670FF04A818A7E988A4DD066399A1773]
Lokal-14.1.2.dmg.blockmap: [45AE1BFC99D4209D1EE55EF06B5F1A24C202E309710789AF5395C8627351818B]
Lokal-14.1.2.exe: [D243F6144CBF92596FBA96BC1FD1CB5FDA92CC5AF3A39C58157E0DB9D83CB09E]
Lokal-Setup-14.1.2.exe: [77E69A743978BA3AAFA2F14E8DF33B3F214EC94CD0CDB0B58E2F406DB0C543A7]
Lokal-Setup-14.1.2.exe.blockmap: [7584FAA72C5652FCBE9EB08D1CF9F33BEF9FCCBD8CB34E45DBE60D7E2FD22C94]
builder-debug.yml: [0CF258D71A1CB72B8F3C1D03A2505E1209D20D2FECEBDEF7302800F5FCAEC0B5]
latest-linux-arm64.yml: [E29E00F8A3A591E75034815F55A61F792C201BA56A4A2421196CD94DA27EF008]
latest-linux.yml: [4D0EE14F0284B4FAB611708D2F137DBF3C8DA7C2E36ED0EBA8736986EC576FDD]
latest-mac.yml: [2CC374A73D111B49F271245E030595360494B375EF4867C70E04D18A7CABC1CA]
latest.yml: [9DA1DAA74AFE0FA709BC1FB40FFAF11266B7B28D20B9BA61BF44CDD68133B80F]
lokal-music_14.1.2_amd64.deb: [687261CFD936B5D758855707C24C3F11E59B4049608EB58E833553980277A1BF]
lokal-music_14.1.2_arm64.deb: [AC09ECA36C12587EA709BD9DDECDD8E34FAD0F80390731FDFAF00C98FE1FA08D]

Don't miss a new desktop release

NewReleases is sending notifications on new releases.