Changelog

Every release of Petrichor, newest first. Pulled automatically from GitHub Releases.

v1.7.0

View on GitHub

Internet Radio, Crossfade & ReplayGain, AirPlay 2, redesigned Library and Discover, custom playlist artworks, and up to 4x lower CPU usage

Important

This is the last release to support macOS 14 (Sonoma) and Intel Macs. v1.7.x will continue to receive point fixes on macOS 14 and Intel when necessary, but the next major release will require macOS 15 or later and Apple Silicon.

Features

  • Add support for Internet Radio with manual HLS stations, popular stations from radio-browser.info, and station collections (#352, fixes #100)
  • Add AirPlay 2 support to play music on compatible devices (#363, fixes #112)
  • Add Crossfade between tracks, configurable in Settings > General > Playback (#347, fixes #266)
  • Add ReplayGain volume normalization with gain source and preamp selection (#348, fixes #102)
  • Redesign Discover with Featured, Recently Played, and Most Loved & Played sections (#350)
  • Redesign Library tab into a 3-column layout, and allow pinning any entity type to the Home sidebar (#356)
  • Add support for using a custom local or online image as artwork for artists and playlists (#359)
  • Add support for negative operators (is not, does not contain, does not start with, does not end with) and regular expressions in Smart Playlists (#358)
  • Group tracks by album when viewed under Artist, Album Artist, and Composer, with per-group sorting and play controls (#371, fixes #90, #95, #99)
  • Add disc number sections for tracks within multi-disc albums (#369, fixes #120)
  • Show the full list of supported audio formats in a grouped popover, reachable from Settings > Library (#346, fixes #211)
  • Add Mini Player action to the menubar dropdown (#365)
  • Revamp the onboarding experience for new users (#353)

Enhancements

  • Remove SFBAudioEngine and make CrescendoKit the default (and only) media engine for playback and metadata extraction (#343)
    • Note: this drops playback support for the MOD, IT, S3M, and XM tracker formats, and adds a large number of new formats in return. See the updated list in the README or the in-app formats popover.
    • Thanks to Stephen Booth for building and maintaining SFBAudioEngine all these years.
  • Reduce CPU usage during playback by up to 4 times, idle to ~0% CPU when nothing is playing, and automatically engage macOS App Nap when eligible (#364, fixes #274)
  • Speed up app launch by rewriting state management and restoration (#353)
  • Adapt playback queue management and Now Playing publishing to Crescendo APIs (#344)
  • Add Years to the Discover carousels alongside albums, artists, genres, and playlists (#373)
  • Allow toggling off Internet Radio and artist info refreshing, and make artist info fetching fail-safe (#366)
  • Give Genre, Year, Decade, and Folder entities their own distinct procedural artwork, and animate dominant artwork colours on first load (#356)
  • Harden database integrity against invalid album years, make track and orphan cleanup atomic and scalable, and clear dangling pins and entities (#372)
  • Hide scrollbars in the lyrics view for a cleaner, more immersive look (#340) (Thanks @akkva!)

Fixes

  • Fix the track Go-to menu incorrectly splitting artist names containing separators like & or / (#338, fixes #337)
  • Fix tracks occasionally showing incorrect artwork (#368, fixes #357)
  • Fix bilingual lyrics highlighting for lines sharing the same timestamp (#342) (Thanks @akkva!)
  • Prevent the track details sidebar from shrinking past a minimum width while resizing (#367, fixes #355)
  • Fix a regression where advancing tracks could behave incorrectly, plus assorted UI polish across the app (#356, #374)

Others

  • Consolidate all post-v1.6.1 database migrations into a single migration for a clean schema ledger (#372)
  • Add a preflight check for missing API keys when building the installer (#334)
  • Isolate debug builds with a distinct app icon and debug configuration for --dev installers (#341)
  • Run release checks on pull requests in CI (#366)
  • Replace .aspectRatio(contentMode: .fill) with .scaledToFill() to clear SwiftLint violations (#362)
  • Update Sparkle to 2.9.6, refresh the README and Acknowledgements, and bump the build version (#374)

Full Changelog

v1.6.0

View on GitHub

A new playback engine, Mini Player & Immersive mode, smart playlists, localization support, Siri shortcuts, enhanced UI, and a lot more.

Features

  • Integrate Crescendo, a new playback backend built using modern AVFoundation APIs, enabling gapless playback, spatial audio support, and better-sounding stereo width.
    • Note: It’s currently in beta and opt-in, and will become the default in the next release (#304)
  • Add Mini Player with embedded play queue and lyrics (#307)
  • Add Immersive mode with embedded play queue and lyrics (#309)
  • Add support for creating smart playlists with configurable rules (#310)
  • Add support for merging duplicate artists, albums, and composers (#312)
  • Add Automation API for Shortcuts, Spotlight, and Siri (#313)
  • Add support for in-app Problem Reporting (#322)
  • Add customization options for appearance and playback visuals (#314)
  • Add support for pinning folders to Home sidebar (#315)
  • Add support for localization (#305)
  • Add Simplified Chinese (zh-Hans) localization (#318) (Thanks @akkva!)
  • Add Animated sync lyrics during playback (#291) (Thanks @hemingtsai!)
  • Update Player bar to show track format, refine playback controls (#306)

Fixes

  • Fix blank title/artist/album for tracks with empty string metadata tags (#284) (Thanks @hatute!)
  • Prevent compilation albums from showing fragmented (#287)
  • Improve library refresh to be concurrency-safe to prevent crashes (#297)
  • Improve lyrics parsing for CRLF files and non-UTF-8 encodings (#303)
  • Fix app crash on macOS 14, other UI updates (#308)
  • Fix reordering of sidebar items not working reliably (#311)
  • Fix library categories not showing tracks for β€œUnknown” items (#317)
  • Improve playback controls legibility & performance (#319)
  • Fix various issues across the app following the feature changes (#316)
  • A lot of small bug fixes and UI polish.

Others

  • Update Dependencies (#299)
  • Remove dead code and clear all SwiftLint warnings (#301)

Full Changelog

v1.5.2

View on GitHub

Fixes

  • Fix tracks not showing correctly on item select in Library tab (#263)
  • Fix library optimization stalling on Intel Macs when upgrading from v1.4.x to v1.5.x (#268)
  • Prevent high-res track album art from causing memory overload (#278)
  • Improve compilation album parsing to prevent album fragmentation (#279)
  • Prevent CJK artist names from crashing the app during library scan (#281)
  • Prevent potential hang risk while viewing a playlist (#282)

Others

  • Refactor EntityGridView for better performance & memory usage (#269)
  • Include hardware info in diagnostic snapshot & restructure properties (#270)

Full Changelog

v1.5.1

View on GitHub

Fixes

  • Fix inconsistency of tracks for pinned items between Library and Home (#250)
  • Fix album art appearing blurry in Albums & Artists view (#255)
  • Fix Playlist track playback state not reflecting instantly (#257)
  • Fix global sort order not applying on pinned items (#259)
  • Prevent manual artist image download to exceed size limit (#261)
  • Speed up folders list animation in Settings (#262)

Full Changelog

v1.5.0

View on GitHub

Artist images, reordering sidebar items, colorized views, & big performance improvements

Features

  • Add support for fetching and showing artist image & bio (#225)
  • Allow reordering sidebar items in Home and Playlists (#224)
  • Add ability to manually reorder tracks within playlists (#227)
  • Improve Artists matching by using known artists database (#232)
  • Show album art based color gradients across views (#222)
  • Refresh Playlist, Artist, and Album detail view UX on macOS 26 (#231)
  • Update UX of pinned library categories like Genre, Decade and Years, in Home sidebar (#235)
  • Consolidate Library settings within its own tab (#239)
  • Update icon used for Genre (#241)
  • Use HEIC format to store album art in database, resulting in 50% smaller database size (#217)

Fixes

  • Fix potential app crash during periodic library refresh (#236)
  • Ensure renaming playlist also updates its pinned version in Home sidebar (#237)
  • Fix various issues around playlists import/export (#234)
  • Ensure playlist cover art doesn’t have repeating artwork (#230)
  • Improve tracks list scroll performance (#228)
  • Improve library scanning performance (#233)
  • Improve tab switching performance and occasional glitches (#240)
  • Optimize rendering & scroll performance of sidebar list views (#243)
  • Update views stack to cleanup unnecessary nesting (#223)

Others

  • Add background db migrations support (#216)
  • Update Dependencies (#219)
  • Add app diagnosis snapshot to log file (#238)

Full Changelog

v1.4.0

View on GitHub

Last.fm scrobble, automatic lyrics download, & several other enhancements

Features

  • Support for Last.fm scrobbling (#181)
  • Download track lyrics automatically from the internet (#189)
  • Perform library scan in the background to make app ready for use quickly on first run (#188)
  • Sort Albums by β€œDate added” (#174)
  • Refresh Discover tracks manually when needed (#173)

Fixes

  • Update lyrics when playing track changes (#172)
  • Update Top 25 Most Played smart playlist behaviour (#175)
  • Show track’s own album art when album info is missing (#178)
  • Prevent audio distortion when EQ is enabled (#180)
  • Fix context menu closing during playback (#183, #185) (Thanks @chaim-chv!)
  • Improve library folder removal UX (#190)

Full Changelog

v1.3.0

View on GitHub

Lyrics, playlist export/import, & tracks multi-select

Features

  • View lyrics of a playing track when lyrics are available as embedded or external .lrc/.srt file (#144)
  • Export/import M3U playlists (#147)
  • Multi-select tracks in the list to do bulk operations (#141)
  • Show favorites within the track list and allow for sorting by favorites (#145)
  • Sort tracks by date added (#144)
  • Force refresh library folders by doing Cmd + Click to rescan complete metadata (#143)
  • Add File menu to expose library and playlist actions (#150)
  • Update app icon with new design to be fully adaptive in macOS Tahoe (#151)

Fixes

  • 8129223 Fix repeat all when playback queue ends, update button tooltip (#140)
  • 62d5be4 Normalize rating field to handle ID3v2 POPM ratings (#149)
  • 3c7fa2c Update media playback framework to handle MP3 files efficiently (#136)

Full Changelog

v1.2.2

View on GitHub

Fixes

⚠️ This is a hotfix on 1.2.1 to prevent app crash on folder refresh.

  • Major improvements to library scanning, resulting in fast and accurate population of the library when folders are added
    • Note: It is highly recommended that you refresh your library folders after this upgrade, in case some data is still not showing, remove and re-add folders.
  • Improve Track Detail view text alignment and formatting
  • Update Play Count and Last Played info of a track only when track playback has finished
  • Make the playback toggle keyboard shortcut reliable

Full Changelog

v1.2.0

View on GitHub

More Audio Formats & Equalizer

Features

  • Support for 20+ audio file formats including Ogg Vorbis, Opus, Monkey’s Audio, Musepack, WavPack, and DSD. Note: Be sure to refresh your library folders.
  • 10-band parametric equalizer with 23 presets, preamp control, and stereo widening effect
  • Show lossless file format information in Track Detail view
  • Improved volume control UX
  • Enhanced library maintenance and database optimization tools

Fixes

  • ab06542 Prevent loading full library data into memory when updating playlists
  • a1c8af1 Fix Now Playing state to correctly sync in Control Center

Full Changelog

v1.1.4

View on GitHub

Fixes

  • 1a59c2f Prevent reusing album art for same album names from different artists (#128)
  • b1ccfe4 Ensure file existence is validated during playback buffering (#127)
  • 95d0350 Remove porter stemming in library search to improve searching with unicode characters (#125, #109)
  • 88d7b12 Fix playback progress timer drifting
  • c464556 Remove last scan status info from settings

Full Changelog

v1.1.3

View on GitHub

Fixes

  • 371778d Improved track number extraction logic (#111, thanks @Veemo-wt)
  • 2ecda99 Bypass track and disc number fields for key matching (#111)
  • 4dbcde4 Fix library searching for CJK locales (#109)
  • 690f3fb Handle playback & transition to high bitrate files correctly (#110, #113)
  • dbc507e Prevent playback progress timer from going out of sync (#118)
  • edd80d9 Skip folders from auto-removal if they’re not accessible (#117)
  • f85f3f8 Fix track completion to prevent rapid skipping between tracks (#121)
  • 243d74a Follow-up fix for playback progress timer restoration (#118)

Full Changelog

v1.1.2

View on GitHub

Fixes

This is an important bugfix release that addresses app crashing in certain situations.

  • d6ec482 Handle tracks queue completion gracefully to prevent crashes (#107)
  • 151bd7d Load track data in chunks instead of full load to prevent memory overload (#108)
  • fe5b876 Restore player from hibernation correctly to prevent AV Engine crash (#107)
  • 1667b0d Show artist in Albums view when album artist is missing (#98)

Others

  • ad0dd47 Upgrade GRDB to 7.8.0

Full Changelog

v1.1.1

View on GitHub

Features

  • b3f6503 Show album artist in albums view, add sorting by year support (#98)
  • 7efe6ad Make settings tab buttons adaptive based on macOS version
  • 2f0cc32 Use AVAudioEngine-based audio playback system
  • cc70e34 Add database optimization user action in settings
  • af597de Add Help menu item icons in macOS Tahoe

Fixes

  • 307255a Load app tabs only on select to prevent full library load on launch
  • e03c741 Fix Go to feature to handle special characters in entity name
  • 682218d Make table customization storage/restoration to be reliable (#97)
  • a323dad Fix notification tray positioning in macOS Tahoe
  • 440436c Update player state restore logging, refine settings UI

Others

  • 64f3f65 Upgrade GRDB
  • 3b5db87 Remove unused NSTableView-based Table
  • 371e170 Update GitHub Actions config to use macOS Tahoe

Full Changelog

v1.1.0

View on GitHub

Features

  • Simplified design refresh for macOS 26 Tahoe, including adaptive app icon support
  • Wallpaper-based app tinting, menu icons (only in Tahoe), and additional column types support in the tracks list
  • Performance optimizations across tracks list, play queue list, and album/artist views for faster scrolling

Fixes

  • 95ce816 Ensure app registers to menubar on first launch
  • 19ec9f2 Fix grammar on setting options
  • 366e743 Handle special characters in library search efficiently
  • f00711e Debounce library search to prevent rapid db queries
  • 7b76390 Make text color switching reliable on app color mode change

Others

  • 8c34531 Upgraded Sparkle to v2.8.0

Full Changelog

v1.0.0

View on GitHub

πŸŽ‰ First Stable Release is Here! πŸŽ‰

After months of testing across 8 builds (4 alphas and 4 betas), Petrichor reaches its first stable release, incorporating a lot bug fixes via internal testing and community feedback!

Features

  • 55cea42 Add modifiers to arrow-key Playback shortcuts

Fixes

  • bbc921c Fix Settings sheet height & Library settings contents placement
  • 16537ec Simplify view computation to have better performance
  • c7a93fb Fix entity playback when layout is changed to table
  • eabc86f Remember column widths in Table view

Full Changelog