Merge pull request #621 from lokal-music/release/v12.2.4
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(downloads): preserve full-resolution addon artwork (#617) (#618)
Details
Low-resolution artwork repair and download fix
Addresses #617 and extends the fix to previously downloaded tracks.
New downloads
- Evaluate same-image CDN variants using real image dimensions, with a capped 5 MiB response stream, total timeout, and fallback.
- When source metadata is known, replace existing small embedded artwork only if the new original is substantially larger; preserve decent and user-selected covers.
- Restore original
knownTagsOfsource metadata validation.
Existing downloads (new opt-in feature)
- Settings → Library → Maintenance → Refresh Low-Quality Covers.
- Reads actual embedded-image dimensions and repairs covers below 640 px only when the exact original addon cover URL survives in that download's history, and the library row matches its recorded addon provider.
- Re-downloads and embeds a demonstrably larger rendition, refreshes Lokal's artwork thumbnail, keeps the audio and playlists intact.
- Protects non-generated artwork pointers; skips unmeasurable images, expired source URLs, unavailable files and already-good covers. No fuzzy title searches or automatic background modifications.
- Cancellable with progress (checked / upgraded / skipped / failed). Files with lost download provenance are safely skipped.
Tests and review fixes
- Adds pixel-quality selection, streamed byte caps, addon metadata validation, repair eligibility and unknown-cover tests.
- Reviewed source URL and UI-status handling; Electron JavaScript syntax parsed successfully.
- Device-level validation and complete Node/Electron test suites have not been run here. Merge only after testing on affected downloaded files and checking PR CI.
-
fix(lyrics): support Unicode scripts in local lyrics search (#616) (#619)
Details
Issue
Fixes #616. Local library lyric search previously removed all characters outside
[a-z0-9]in both Electron and the web server. Two-character Chinese/Japanese queries were also rejected by the three-character minimum.Implementation
- Centralize both backends on
electron/lyrics/librarySearch.jsto eliminate duplicated, divergent implementations. - Use Unicode-aware normalization (NFKC, lowercasing, Unicode letters/numbers/combining marks) without stripping Hindi matras, Punjabi vowel signs, Han characters, or Kana.
- Permit two-codepoint non-ASCII searches, retaining the previous three-character minimum for Latin/ASCII.
- Preserve bounded SQL prefilter, existing relevance ranking, local-only scope and snippets. Search multiple Unicode case forms where SQLite's
LOWER()does not case-fold Cyrillic/Greek. - Use codepoint-aware snippet slicing so text is not cut through surrogate pairs.
- Add tests for Chinese, Japanese, Hindi/Devanagari, Punjabi/Gurmukhi, Cyrillic uppercase, and existing Latin matches, including word-timed lyric lines.
Validation
JavaScript files parse; a direct check of shared matching logic succeeded for the requested scripts. Complete Node/Electron tests and platform integration have not yet been run. This searches locally cached lyrics; online lyric providers have their own search capabilities and are not changed.
No schema change or reindex required.
- Centralize both backends on
-
fix(desktop): match Unicode lyrics across CJK separators and emoji (#620)
Details
Context
Companion to lokal-music/lokal-mobile#266 review follow-up. Desktop has a separate local lyrics-search implementation.
Changes
- Preserve Unicode symbols (including emoji bases) during local lyric normalization, preventing variation-selector-only false positives.
- Keep existing NFKC canonical/compatibility normalization; avoid introducing a redundant dependency.
- Match CJK lyric phrases across punctuation/spacing while preserving other-script word boundaries.
- Expand SQLite raw-lyrics candidate patterns with NFD forms and CJK inter-character wildcards; without this, JavaScript normalization alone would not recover candidates filtered out by SQL.
- Add regression cases for raw SQL candidate matching, decomposed Japanese lyrics, and emoji.
Validation
Executed the existing and added Unicode lyrics regression suite through a JavaScript harness: 8/8 tests passed. Full desktop build and actual SQLite/Electron integration not run in this environment.
Contributors: @CHEYCKIT
Full Changelog: v12.2.3...v12.2.4
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.2.4-arm64-mac.zip:
[FBC3E21433575BC6D6552BFE94E692CCF298DDD7B84A0904F78A192539EF9B84]
Lokal-12.2.4-arm64-mac.zip.blockmap:[4556EE5A3EC66EF9212B6D0E28A8884B69178F3E520413BA9DF83D623A274ABC]
Lokal-12.2.4-arm64.AppImage:[DC7FA51DCADCB885D6AC59A754427040C00C32B4CAE6BE8BC3960649CDDAB0E4]
Lokal-12.2.4-arm64.dmg:[AC0A7D9E577F511DB727ED1C28064E57236F2A219D067E2FFE1496B8DFE6DD28]
Lokal-12.2.4-arm64.dmg.blockmap:[6DD95F54FC7226780C3F8F0DBE163A13EA893257E9D0B3095AB5AAD86C765CE7]
Lokal-12.2.4-mac.zip:[1F39DD266966CE479306BC4622D79C0816D6612611F4D36415E37CB7A87DC79E]
Lokal-12.2.4-mac.zip.blockmap:[0919154E44881FDC2ECF53460A4F7872A929C67240877A16DB2F0C82A88ED2E0]
Lokal-12.2.4.AppImage:[EF684992F99C67024E53A114205D9EABB87F8DFDEA6EB1A6A66ACC009A504639]
Lokal-12.2.4.dmg:[0F82E6EA1684D5D6AA583CACE0FF16EFE7F44AB56F9BAC642EF044698E502ADA]
Lokal-12.2.4.dmg.blockmap:[84098D99E6AA0C461218929171F346888FD510A07E30E847E3729E8E156480F3]
Lokal-12.2.4.exe:[3AB6F93061641724741FE852570DEFDB98898E102DEDC4C67869B75732674C6C]
Lokal-Setup-12.2.4.exe:[A6801860A262BDD13986D19DAE6DE09952593052B5B5B9D9A5666CBB2260B6DA]
Lokal-Setup-12.2.4.exe.blockmap:[8FED8E85E43023CF9322767357080C635FB48678A9021299840B5172C0250AAE]
builder-debug.yml:[D20BAED41EAC727CAA9D5843817261140FBBD2613510EE703938109D0F444A29]
latest-linux-arm64.yml:[D697325A3C640786082D4FC899148E764F8EAE48E4399544EFD12224185E0282]
latest-linux.yml:[EAAAB3D1BE8D9D4B1116782B2C9E8D914F8DA39850471C7C9F2A187D17DA4F2D]
latest-mac.yml:[0DFE79BBD019D5DE4A4A6C56DC3FD08822184C4ABC0AEC7C5F3ADAA85FD12D0F]
latest.yml:[787D08234DF23FD583A96CBBD6717C72136840E0E2B2F7E01FBEA77A5A562C30]
lokal-music_12.2.4_amd64.deb:[76FA51B3C0E1BEA735D018F63BF8F0A2DADD0687639430E6889AD6F067127CA3]
lokal-music_12.2.4_arm64.deb:[C451083F05B9284B9CB4663D19D1B4279866FFC1B5804CEC99EF8A5CA1AD1EF1]
