github spotiflacapp/SpotiFLAC-Mobile v5.1.0
SpotiFLAC-Mobile v5.1.0

3 hours ago

New Features

  • library: Expand audio format and ReplayGain filters
  • player: Warn when muted and allow manual resume
  • native: Add cancellable data workers and streamed file hashing
  • playback: Automate mute and headphone playback controls
  • player: Show mixing status beside audio quality
  • automix: Add configurable duration and transition effects
  • lyrics: Add staggered spring motion to visible rows
  • build: Require Discord in production and keep Lite opt-in
  • settings: Default to built-in playback and word-synced lyrics
  • network: Add SMB and WebDAV libraries with streaming and uploads
  • statistics: Show cover artwork and artists for top tracks
  • mornye: Restore liquid glass with continuous draggable navigation
  • discord: Add opt-in mobile rich presence with track artwork
  • extensions: Support personal account forms and direct downloads
  • playback: Add local listening statistics and annual recap
  • library: Show recent releases from favorite artists
  • library: Add batch playlist and queue actions
  • library: Filter albums with missing tracks

Bug Fixes

  • repo: Retry initialization before adding a registry
  • storage: Preserve extension encryption keys on read failures
  • extensions: Retain packages with unreadable settings
  • downloads: Finalize album ReplayGain after history is saved
  • downloads: Preserve actual provider audio format
  • lyrics: Treat placeholder zero timestamps as unsynced
  • library: Retry transient SQLite locks before scan transactions
  • riverpod: Remove public notifier getters
  • queue: Merge startup additions before persistence and processing
  • library: Stage native scans before owner SQLite publication
  • cache: Prune detached projections under source writer barrier
  • backup: Publish native restores through owning SQLite connection
  • sqlite: Isolate native staging from live database handles
  • queue: Preserve restored downloads during startup flush
  • mornye: Show provider checkmark spacing only when selected
  • mornye: Use glass for download queue confirmations
  • settings: Retain pending preferences during asynchronous loading
  • recents: Preserve early edits during history loading
  • logs: Retain polling ownership across restart and clear
  • network: Close request-owned HTTP clients reliably
  • backup: Close archive outputs when extraction fails
  • android: Release temporary media on failed SAF operations
  • playlists: Prevent overlapping picker submissions
  • network: Discard stale folder browsing responses
  • downloads: Recover queue ownership after setup failures
  • playlists: Serialize collection changes and isolate domain models
  • history: Serialize mutations and preserve newer file metadata
  • lyrics: Hold current line highlight until the next lead
  • history: Preserve bulk deletion failure handling
  • library: Distinguish unavailable storage from missing files
  • player: Retire deleted sources and stale SAF copies
  • library: Remove deleted files from both library indexes
  • downloads: Preserve filenames after decryption and conversion
  • glass: Refract navbar icons through the held lens
  • glass: Swell navbar glass without resizing icons
  • library: Serialize scan admission and retain reconnect requests
  • artwork: Promptly dispose failed video decoders
  • home: Protect fresh feeds from late cache restoration
  • search: Reject pending completions after clearing results
  • library: Honor album artist filters in summary counts
  • home: Anchor track menus to their source cards
  • extensions: Use themed account option picker
  • automix: Diagnose crossfade fallback reasons
  • automix: Use themed transition effect picker
  • lyrics: Keep simultaneous singers highlighted and visible
  • extensions: Accept account forms with optional cancel actions
  • library: Expose failed scan files and reasons in app logs
  • library: Preserve album view when returning from detail screens
  • stats: Show artwork for top artists
  • mornye: Match tab highlights to the expanding glass outline
  • library: Scan remote SAF folders when root metadata is unavailable
  • library: Match SAF documents across folder tree aliases
  • mornye: Use liquid glass for Home download and album actions
  • lyrics: Grant scoped access to selected audio files
  • mornye: Use consistent animated oval switches across glass levels
  • artwork: Recover missing SAF covers after transient provider failures
  • library: Reject filename guesses from failed NAS metadata reads
  • selection: Dismiss action panels with a downward swipe
  • android: Preserve remote SAF descriptors for audio and artwork
  • playback: Refresh notification favorite and shuffle controls
  • lyrics: Preserve manual scrolling during control transitions
  • mornye: Keep lyrics scrolling stable when controls fade
  • library: Preserve folders during upgrades and load failures
  • ui: Make snackbars transient and replace stale messages
  • ios: Preserve Now Playing ownership with motion artwork
  • metadata: Recognize featured artist credits consistently
  • library: Make missing-file cleanup responsive for downloaded tracks
  • lyrics: Preserve batch track identity and report results promptly
  • album: Open track metadata from local album rows
  • history: Prevent maintenance from restoring orphan downloads
  • artwork: Preserve thumbnail aspect ratio during decoding
  • library: Restore Material playlist drag and drop
  • library: Restore search selection actions after re-enrich
  • metadata: Show re-enrich results above Library cards
  • library: Preserve SD card visibility during transient access failures
  • library: Include unindexed tracks in missing ReplayGain filter
  • download: Preserve native media workspace across cache eviction

Performance

  • downloads: Index queued positions for scheduling
  • downloads: Stop queue selection when slots fill
  • downloads: Index progress notification candidates
  • downloads: Reuse committed queue snapshots
  • downloads: Retain queue indexes between item removals
  • downloads: Check album ReplayGain readiness in one pass
  • downloads: Batch queue failures when folder access is lost
  • downloads: Enqueue selected playlists in one update
  • downloads: Batch queue cancellation and progress cleanup
  • downloads: Batch cancellation resets for retry
  • collections: Delete selected playlists in one transaction
  • downloads: Enqueue Wishlist selections in one update
  • collections: Remove selected tracks in one transaction
  • network: Prepare large SMB listings off the UI thread
  • library: Buffer network scan output with bounded writes
  • lyrics: Short-circuit content availability checks
  • collections: Batch Love All updates and persistence
  • collections: Stage large playlist additions off the UI thread
  • collections: Split native chunks without per-line async events
  • library: Load bounded browse pages without rereading prefixes
  • backup: Stream encoded collections without cloning model graphs
  • queue: Bound SQLite transfers and move large codecs off UI
  • collections: Hydrate native snapshots on bounded workers
  • collections: Isolate action and track row rebuilds
  • collections: Reuse membership indexes for metadata changes
  • library: Rank playlist search pages on bounded workers
  • cache: Batch cover maintenance on Rust workers
  • collections: Restore backups on Rust SQLite workers
  • backup: Stream ZIP archives on Rust workers
  • mornye: Prepare overlay GPU pipeline before first opening
  • mornye: Compose overlay glass into one backdrop pass
  • mornye: Streamline download source and quality picker
  • extensions: Decode provider responses outside the UI isolate
  • backup: Stream history backup codecs and restore transactions natively
  • library: Index scans and snapshots with native SQLite workers
  • playlists: Import CSV and export M3U through native workers
  • metadata: Parse lyrics and encode ID3 artwork in native workers
  • audio: Analyze AutoMix grids and spectral cutoffs natively
  • theme: Extract cover palettes with native quantization
  • nas: Process listings, artwork caches, and upload recovery natively
  • player: Avoid redundant lyric paints and background sampling
  • stats: Ignore playback position-only changes
  • widgets: Skip unchanged playback state updates
  • network: Reduce directory listing and connection allocations
  • library: Simplify unfiltered album queries
  • android: Trim platform assets and release Dart symbols
  • android: Reduce release APK size
  • downloads: Bound scheduler waiters and prevent overlapping retries
  • glass: Cull selection masks outside the moving lens
  • glass: Omit collapsed navbar backdrop layers
  • ui: Retain marquee content while scrolling
  • player: Reuse artwork decodes across Mornye transitions
  • artwork: Reuse decoded covers and preserve in-flight cache writes
  • library: Defer local providers while the feature is disabled
  • autoplay: Index listening history and reuse normalized metadata
  • library: Coalesce availability probes and reject stale indexes
  • search: Reduce tab switching lag
  • widget: Publish artwork only for installed consumers
  • theme: Resolve artwork cache identities asynchronously
  • logging: Batch UI updates and gate native log copies
  • analysis: Bound disk cache and protect active bundles
  • network: Share artwork by content hash
  • playback: Resolve paths lazily and batch history cleanup
  • library: Scan SAF CUE audio through live descriptors
  • hires: Analyze every channel in one audio decode pass
  • cover: Avoid copying originals rejected by cache budget
  • usb: Reuse PCM buffers and respect native ring capacity
  • isrc: Bound retained indexes and stream FLAC comments
  • extensions: Pass metadata values without internal JSON round trips
  • bridge: Bound metadata cache and persisted JSON bytes
  • audio: Reuse media session worker and bound metadata retention
  • media: Shrink FFmpeg while preserving HTTPS motion artwork
  • details: Load local albums with skeletons and bound artwork decoding

Refactoring

  • player: Isolate session writes and content URI cache ownership
  • albums: Share immutable track and disc ordering
  • downloads: Normalize completion audio and share album ReplayGain
  • extensions: Separate domain models from provider state
  • downloads: Extract completion audio and upload staging
  • downloads: Separate metadata resolution and embedding
  • downloads: Isolate typed results and audio finalization
  • android: Isolate native download history persistence
  • metadata: Separate file save persistence from editor
  • logging: Isolate native log transport
  • library: Isolate schema, row mapping and queue queries
  • ffmpeg: Split media operations and safely publish outputs
  • metadata: Separate editor state, autofill and artwork ownership
  • player: Isolate routes, layouts and reactive controls
  • player: Separate metadata state and lyrics rendering
  • playback: Own configuration and dependencies per runtime
  • downloads: Separate persistence, progress and feedback
  • network: Place range reader implementations before tests
  • metadata: Remove unused fallback parameter
  • ios: Remove unreachable legacy bridge routes
  • extensions: Align settings with Material and Mornye
  • metadata: Flatten track actions and remove similar songs

Documentation

  • audio: Record metadata cache retention rules

Testing

  • progress: Keep batch tests after production helpers
  • downloads: Measure selectors after queue removals
  • network: Read complete fixture requests on BSD
  • native: Verify private data routes through app channels
  • sqlite: Exercise private files and exclusive transactions
  • native: Verify data workers through Android and iOS channels
  • providers: Keep notifier fixture counters private
  • glass: Capture native Mornye poses and layer counts
  • performance: Benchmark Mornye on iOS and Android emulators
  • Align settings and support title expectations

Chores

  • Update AltStore source to v5.0.7 by @github-actions[bot]
  • git: Ignore vendored Android build outputs
  • Provision pinned Discord SDK for Android and iOS
  • Remove Pages workflow without site sources
  • network: Keep JSON dependency scoped to tests
  • release: Bump build number to 160
  • release: Bump app version to 5.1.0
  • analyzer: Exclude vendored Android audio plugin
  • release: Bump app version to 5.0.8

Full Changelog: v5.0.7...v5.1.0


Downloads

Android

  • arm64: SpotiFLAC-v5.1.0-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v5.1.0-arm32.apk (older devices)
  • *.apk.idsig: V4 signatures for adb install --incremental only; normal installs do not need them

iOS

  • iOS: SpotiFLAC-v5.1.0-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.