What's New
Added
-
Lyrics Caching: Lyrics are now cached for 24 hours to reduce API calls and improve performance
- Thread-safe cache with automatic expiration
- Cache key based on artist, track, and duration
- Log indicator shows "(cached)" when lyrics are served from cache
-
Lyrics Duration Matching: Improved lyrics accuracy with duration-based matching
- Compares track duration with lrclib.net results
- 10-second tolerance to handle version differences (radio edit, remaster, etc.)
- Prioritizes synced lyrics over plain text when duration matches
- Falls back gracefully if no duration match found
-
Deezer Cover Art Upgrade: Cover art from Deezer CDN now automatically upgraded to maximum quality
- Detects Deezer CDN URLs (
cdn-images.dzcdn.net) - Upgrades cover resolution to 1800x1800 (max available)
- Works alongside existing cover upgrade
- Detects Deezer CDN URLs (
-
Live Search for Extensions: Search-as-you-type functionality for extension search
- 800ms debounce delay to prevent excessive API calls
- Minimum 3 characters required before searching
- Concurrency control to prevent race conditions in extension runtime
- Queues pending searches if a search is already in progress
-
Russian Language Support: Added Russian (Русский) translation - 99% complete
- Translated via Crowdin community contributions
- Covers all UI elements, settings, and error messages
Fixed
-
ISRC Index Race Condition: Fixed repeated index rebuilding during parallel downloads
- Added per-directory build lock using
sync.Mapandsync.Mutex - Double-check locking pattern ensures index is built only once
- Significantly improves performance during CSV import with many tracks
- Added per-directory build lock using
-
Queue Tab Scroll Exception: Fixed Flutter rendering exception with NestedScrollView
- Disabled Material 3 stretch overscroll indicator that caused
_StretchControllerassertion - Wrapped NestedScrollView with ScrollConfiguration to prevent
setState during builderrors - Issue was especially noticeable during rapid queue updates (CSV import)
- Disabled Material 3 stretch overscroll indicator that caused
-
CSV Import: Fixed CSV export not being parsed correctly
- Added support for
Artist Name(s)header (with parentheses) - Added support for
Track URIheader for track IDs - Added
artistsandtrack_idas alternative header names - Now correctly parses "Liked Songs" and playlist exports
- Added support for
Downloads
Android
- arm64:
SpotiFLAC-v3.1.1-arm64.apk(recommended for modern devices) - arm32:
SpotiFLAC-v3.1.1-arm32.apk(older devices)
iOS
- iOS:
SpotiFLAC-v3.1.1-ios-unsigned.ipa(sideload required)
Installation
Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA