Merge pull request #682 from lokal-music/release/v12.5.1
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 desktop HTTP add-on fallback delays and unintended 15-minute prep window (#679)
Details
Desktop has the same automatic-playback fallback problem as mobile, including a separate backend timeout defect.
Confirmed root causes
- HTTP addon /search and /stream calls allow 10s and 15s respectively; recommendation playback checks sources sequentially and can multiply those waits.
- Renderer
playbackAvailabilitypreviously allowed alla-...addons up to 15 minutes even though this extended window is needed only by Morneye packages. - Simply timing out in the renderer would still leave Electron's HTTP requests running. The new
automaticflag propagates a bounded timeout to the real /search and /stream network operations, which abort the underlying request.
Fix
- Automatic HTTP fallback searches up to 3 eligible add-ons concurrently for metadata, then chooses playback strictly in the user's saved priority.
- Applies a shared 3-second budget per active HTTP source's search + stream preparation when alternatives exist. The same request deadline is passed through renderer API → Electron preload → IPC → source resolver → abortable HTTP request.
- Temporarily cools down an HTTP addon for 45 seconds after a transient network/timeout/HTTP 502–504 error, without changing saved settings, hiding manual retries, or skipping every source when all are unhealthy.
- Morneye packages (identified by
package: true) keep their existing extended processing/download allowance. An explicitly retried provider or only available source retains the normal lookup deadline. - No untrusted source can bypass URL/redirect validation or receive another origin's credentials.
Tests / validation
- New regression suites exercise aggregate timeout, concurrency/fallback order, HTTP 502 cooldown, recovery, only-source behavior, package isolation and direct underlying AbortSignal cancellation.
- Discovery shelf CI executes both new suites, runs backend syntax checks and compiles Vite.
- PR requires passing CI and device verification before merge. A remote HTTP 502, expired addon credentials or an endpoint that returns no playable rendition still requires provider-side correction.
Scope: automatic desktop fallback and HTTP transport. Quality tag extraction from addon stream responses and unrelated Morneye network behavior are separate from this PR.
-
Search: restore combined All source scope (#680)
Details
Changes
- Restore All alongside Local and Online in the source selector.
- In All, perform local library and online catalogue/provider searches; keep exclusive modes isolated to avoid unnecessary work.
- Retain the selected scope in preferences and update scope regression tests.
Validation
- Updated
scripts/search-source-scope.test.mjsfor the combined scope. CI has not been verified yet.
Summary by CodeRabbit
- New Features
- Added an “All” search option to search both the local library and online catalogues.
- The selected “All” search scope is now restored when returning to search.
- Search options display “Local” for library-only searches, “Online” for online-only searches, and “All” for combined searches.
-
Fix: restore full-quality local folder artwork after network cache regression (#681)
Details
Root cause
The SMB/WebDAV scanner refactor invoked
cacheFolderArtwork()for every song folder, including local disks. This converted folder.jpg/cover.png into a shared 150×150 WebP and made large desktop artwork blurry.Fix
- Keep the original full-resolution JPG/PNG/GIF/WebP path for ordinary local folders; never run them through the network thumbnail cache.
- Detect UNC shares and persist roots explicitly connected as mounted SMB/WebDAV shares so their artwork can still be cached for offline use.
- On a normal library rescan, repair existing local track DB references from
nas-folder-*.webp/.jpgback to the original image without re-parsing the audio file. - For network tracks, preserve the source image byte-for-byte alongside its 150px list thumbnail. Full cover lookup serves the original on large surfaces, with thumbnail fallback if offline.
- Add regression coverage distinguishing local paths, UNC and mounted network roots, and validating preservation of original JPG/PNG bytes.
Testing
- The
Desktop network library regressionPR workflow should validate syntax, network tests and renderer build. Physical Windows SMB/WebDAV behavior requires separate device verification.
Local folder covers are no longer downsampled by the WebDAV feature.
Summary by CodeRabbit
- Bug Fixes
- Folder artwork from network shares is now preserved in app storage, helping album covers remain available when the share is unreachable.
- Cached thumbnails can retain or recover their full-resolution cover images, and full covers can be loaded from cached artwork without rereading the track’s audio file.
- Connecting a network share now makes its folder available to the library scan; if the scan fails, the previous network folder settings are restored.
-
Add high-resolution moving covers from Apple (#678)
Details
Summary by CodeRabbit
- New Features
- Added a High-resolution Moving Covers option in Settings. When enabled, moving covers prefer 2160p when available; HEVC versions are selected only when supported by the system.
- Documentation
- Clarified how the high-resolution setting affects moving-cover quality and codec selection.
- New Features
Contributors: @CHEYCKIT, @Zachhambo
Full Changelog: v12.5.0...v12.5.1
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.5.1-arm64-mac.zip:
[F3E211E751BDC9A5F3A8B5E8F468672F31752CD44659C6B8002F8C0E55DE4E8E]
Lokal-12.5.1-arm64-mac.zip.blockmap:[8A599B695D4D718802C25279F6D4947388ADC61B0CB3540185FFD17C9BB1573D]
Lokal-12.5.1-arm64.AppImage:[356B02C04225A113C4D127467FFDBCEC6782D240BEC444E0E5E596A245E2B82B]
Lokal-12.5.1-arm64.dmg:[DFE6B8084591476E688A6F9A265E38C5130E9D34F90D1C9E10490D7F45DE3EAA]
Lokal-12.5.1-arm64.dmg.blockmap:[870E9258406D8B7F55E03D43EB5D77905A9CBA72991607436DF51B40BD456799]
Lokal-12.5.1-mac.zip:[584D062C49184B2BCC991117B29B66416C9CC0ACFFC4F01A4F3ED20880B50A22]
Lokal-12.5.1-mac.zip.blockmap:[100A5783418BB1AC6C591CCDB0EDFB3D42424BCDE0C178F9ACF205283F48EFCA]
Lokal-12.5.1.AppImage:[1F7A4242C91C4AC671ADB1A107D512E0831A093E26D11E0BCB5E574F8B66FF09]
Lokal-12.5.1.dmg:[F6A25448AE6E33FE616C55ACD074D9DC75F67BCFA4C00BFD9C4319C091567C10]
Lokal-12.5.1.dmg.blockmap:[A92CF238BC7AC7D2323810EF9C11B722A1A7E34CAD6D5942AA74861D4B518800]
Lokal-12.5.1.exe:[3EC34222990908A74E9E64AE58C73B43EEDBF994AF158BE4CE85556C8BD4D9F8]
Lokal-Setup-12.5.1.exe:[A1723E9C7A4A19F88389D793CF940934548E4203F6A4F198FC69524A9A97667B]
Lokal-Setup-12.5.1.exe.blockmap:[3FD9A063727EBAE7A13418B7EC083EF7DCC7518AB176A2C9293C614E83193D12]
builder-debug.yml:[43E115708F565EAB6E2B6D2AB447A5ADD935BDBE1062319482438BC8FA10EC19]
latest-linux-arm64.yml:[A3E54A9C557862509252E9F54194AA3B2D3624F76B5458C2526B19046F867E12]
latest-linux.yml:[A8299220201EFD39E6FFF4398C67819A808484C7B4CCE8235E83A5081376CB06]
latest-mac.yml:[38E5EA9D99521A52D810DEE1BA45051E07B15338868351C89166801699F4E5AC]
latest.yml:[4BFCA7D33A5F1A636DCB9770DAAA2211B9155CE04AB9C6B8F8B846B459DCBB76]
lokal-music_12.5.1_amd64.deb:[DC9EE76060AB1894DA151F0F23DED06D6C7902994A720D8C510FF7102E3238FB]
lokal-music_12.5.1_arm64.deb:[650CC5BC156E9772FFFE033AE75642A5DB05F4DFE78CC787A4C4886EFDC6BED3]
