github spotiflacapp/SpotiFLAC-Mobile v4.8.5
SpotiFLAC-Mobile v4.8.5

4 hours ago

New Features

  • settings: Reveal nested search results
  • settings: Search nested options
  • metadata: Show current cover dimensions
  • metadata: Add embedded cover resize options
  • navigation: Add go to album actions
  • player: Polish actions and synced lyrics
  • settings: Polish search and navigation layout
  • settings: Add searchable settings index
  • collections: Unify selection-aware screens
  • l10n: Localize settings search
  • details: Add adaptive cover palettes
  • theme: Add shared design tokens
  • album: Batch download selected tracks
  • metadata: Choose extension for online autofill
  • library: Add quality label display modes
  • library: Highlight high-bitrate quality badges
  • library: Show a trailing fade on the filter chips row
  • library: Playlists filter view and configurable default view
  • player: Animate track changes and open queue with a swipe up
  • tutorial: Fit pages on short viewports and fix page indicator visibility
  • setup: Make language list scrollability obvious and center step content
  • tablet: Cap wide-layout margins at 80dp so content uses the screen
  • appearance: Manual toggle to force backdrop blur on lower device tiers
  • queue: Long-press menu with move up/down for queued items
  • metadata: Show average bitrate for lossless files in the track screen
  • library: Add missing-ISRC metadata filter
  • android: Home-screen download queue widget
  • metadata: Manual MusicBrainz lookup in the tag editor
  • player: Add repeat off/all/one modes
  • queue: Offer one-tap retry when connectivity returns
  • ux: Unify added-to-queue snackbars and add fetch retry
  • library: ISRC duplicate detection beyond FLAC with review sheet
  • track: Add Open on... platform links sheet
  • l10n: Merge Crowdin updates, enable Korean at 98%
  • library: M3U8 playlist import and export
  • library: M3U8 playlist import and export
  • player: Restore playback session after process death
  • queue: Add download-next action on queued items
  • extensions: Verify decentralized package integrity
  • audio: Use VHQ settings for SoXR resampling

Bug Fixes

  • ci: Align APK targets with supported ABIs
  • search: Expose go to album for sparse tracks
  • database: Make playback session migration idempotent
  • metadata: Keep header details legible in light theme
  • player: Refresh lyrics after automatic track changes
  • metadata: Preserve WAV and AIFF tags
  • analysis: Guard unsupported AC-4 codec
  • lyrics: Reject empty embedded payloads
  • metadata: Support extension custom search
  • analysis: Detect full-band spectral cutoff
  • ui: Refine track action spacing
  • ui: Align track play button hitboxes
  • player: Restore lyrics after cold start
  • session: Enforce provider retry modes
  • session: Block challenged session generations
  • session: Honor canonical gateway error contracts
  • session: Coordinate verification across parallel downloads
  • selection: Keep modal sheets above selection bar
  • player: Restore playback position reliably
  • download: Make picker drag dismissal natural
  • player: Preserve audio quality across track changes
  • a11y: Improve compact control readability
  • android: Stop forcing display mode at startup
  • download: Suffix only colliding quality variants
  • metadata: Fetch maximum cover for online autofill
  • metadata: Verify maximum cover candidates
  • storage: Recover from unwritable download folders
  • ui: Sanitize user-facing errors
  • analysis: Detect effective spectral cutoff
  • library: Retain history during active downloads
  • metadata: Dismiss autofill preview and surface feedback
  • album: Overlay selection bar above navbar
  • metadata: Align source picker with edit sheet
  • analysis: Isolate metrics from active downloads
  • download: Always alert for verification pauses
  • download: Reject mismatched provider tracks
  • download: Honor explicitly selected provider
  • extensions: Serialize verification callbacks
  • library: Retain cached rows across refresh
  • library: Backfill local audio bitrates
  • library: Keep rows visible during refresh
  • library: Persist lossless bitrate metadata
  • download: Swap local track variant actions
  • home: Keep search visible during provider changes
  • library: Retain records when deletion fails
  • download: Complete quality variants reliably
  • audio: Wait for complete analyzer metrics
  • library: Keep track count readable next to filter actions
  • store: Center add-repository state and keep submit button above keyboard
  • download: Restore fast SQL-only duplicate check so huge playlists queue again
  • queue: Keep cancelled downloads retryable across every cancel path and app restarts
  • queue: Give completion-bridge cells swipe navigation into the library list
  • extensions: Anchor URL handler patterns to the host
  • extensions: Enforce minAppVersion and requiredRuntimeFeatures on load
  • extensions: Isolate invalid registry checksums
  • reenrich: Preserve release identity in batch actions
  • verification: Recover signed-session bootstrap failures
  • reenrich: Allow correcting stale release metadata
  • download: Avoid unsafe automatic range resume
  • config: Refresh announcements and remote content
  • ci: Download pinned Gradle for native tests
  • ci: Install Android 37 platform package

Performance

  • metadata: Avoid SAF copies during quality probes
  • android: Skip unused download widget work
  • ui: Scope scan rebuilds, aspect-bound MediaQuery, lazy duplicate list
  • history: Coalesce index bumps and batch per-row exists lookups
  • metadata: Cache MusicBrainz ISRC lookups in the finalize path
  • go: Cut redundant signed-session writes, progress-callback churn, tombstone growth
  • assets: Instance GoogleSansFlex to the wght axis only

Refactoring

  • ui: Standardize error and empty states
  • extensions: Share extension rows
  • settings: Unify settings components
  • selection: Share bottom bar behavior
  • library: Unify track cards
  • ui: Standardize modal sheets
  • ui: Unify sliver page headers
  • metadata: Split cover cache, display helpers, and options menu into part files
  • extensions: Split manifest models and provider-priority logic into part files
  • library: Split row models and queue union SQL into part files
  • analysis: Split models, info card, and spectrogram into part files
  • android: Split replaygain journal, snapshots, and network policy out of DownloadService
  • android: Split media, ffmpeg, and SAF publish helpers out of NativeDownloadFinalizer
  • go: Split per-format scanners and incremental scan out of library_scan.go
  • go: Split result/overlay helpers and output builders out of extension_fallback.go
  • go: Split deezer models, cache upkeep, and browse endpoints out of deezer.go
  • go: Split lyrics provider config, LRC codec, and search matching out of lyrics.go
  • queue: Fold duplicated final-embed blocks into one helper
  • queue: Decompose single-item god-method into _DownloadRun pipeline class
  • queue: Move single-item download pipeline into a part file
  • android: Split SAF scan and URI IO helpers out of MainActivity
  • artist: Split section builders and dialogs into a part file
  • go: Split package validation and VM lifecycle out of extension_manager.go
  • history: Split models and startup maintenance into part files
  • home: Split explore, recent, import, and search-results into part files
  • queue: Split progress, verification, and connectivity into part files
  • go: Split Ogg parsing and cover-art extraction out of audio_metadata.go
  • go: Split M4A/MP4 tagging out of metadata.go
  • Consolidate lyrics builders, cancel registries, and priority plumbing
  • go: Consolidate duplicated track maps, selectors, and small helpers
  • dart: Consolidate duplicated lookup, filename, and search-provider helpers
  • ffmpeg: Remove dead conversion cluster and speculative decryption fields
  • library: Drop unwired DB pagination providers
  • Remove orphaned bridge, database, and queue helpers
  • bridge: Remove dead cross-layer platform bridge methods
  • ios: Isolate and test extension callbacks
  • android: Extract native finalization policies
  • dart: Extract queue search and media policies

Documentation

  • release: Add 4.8.5 changelog
  • extensions: Document the .sflx package suffix
  • extensions: Document file download recovery options
  • extensions: Add current development guide

Styling

  • settings: Restore connected group layout
  • dart: Apply repository formatting
  • go: Apply Go 1.26 formatting

Testing

  • ui: Cover search and player action consistency
  • ui: Cover shared design system contracts
  • go: Close output handle before cleanup

Dependencies

  • deps: Update Flutter and Go dependencies
  • deps: Update FFmpeg and notifications

Chores

  • Update AltStore source to v4.8.0 by @github-actions[bot]
  • release: Bump version to 4.8.5
  • repo: Improve contributor experience
  • release: Bump version to 4.8.1
  • analysis: Enable unreachable_from_main lint
  • about: Credit blackgold8282 (Korean) and BrandQc (French) as translators
  • altstore: Describe extension-based providers instead of Amazon

Full Changelog: v4.8.0...v4.8.5


Downloads

Android

  • arm64: SpotiFLAC-v4.8.5-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.8.5-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.8.5-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

Don't miss a new SpotiFLAC-Mobile release

NewReleases is sending notifications on new releases.