Skip to content
Choose a tag to compare

1152dceb88ee8b6681bcf13693796676 ./
1152dceb88ee8b6681bcf13693796676 ./
006dafb9b68d78ddf9c6c7f929d7f84e ./
006dafb9b68d78ddf9c6c7f929d7f84e ./

e31f0f8856c25e23dc43287921b75473 ./
5d3cb7fa71244f389a82f7951b031fae ./

ff94d12497e07073c3394ec3b764f892 ./
4cfa7860ae89ea10db23e1c9370101ae ./

Ampache 5.4.0-release

It might have only been 10 days ago but this release has some things in it that really can't be left in develop.
The release process is becoming a lot smoother as I work on improving the ampache-administrator repo.

First up; SPEED! after creating so many new columns we've added new indexes to speed things up.
If you have a large database you'll notice a really big decrease in response times across a lot of areas.

When I mean speed I mean some queries are 152 times faster than they were a week ago!

Second, so much more fixing. You're really going to enjoy how smooth things have gotten since that initial 5.0.0!

The CLI application cleanup:sortSongs has been fixed and greatly improved with a lot of new options and abilities

You can access --help on every cli with php bin/cli --help and help for each command same way php bin/cli cleanup:sortSongs --help


  • Translation Updates May 2022
  • Search
    • Add file to album and artist search
  • CLI
    • New argument for run:updateCatalog -f|--find Find missing files and print a list of filenames
    • New argument for cleanup:sortSongs -f|--files Rename files and keep them in the current folder
    • New argument for cleanup:sortSongs -l|--limit Limit how many moves to allow before stopping
    • New argument for cleanup:sortSongs [catalogName] Name of Catalog (optional)
  • Database 540002:
    • Index title with enabled on song table to speed up searching
    • Index album table columns; catalog, album_artist, original_year, release_type, release_status, mbid, mbid_group
    • Index object_type with date in object_count table


  • Moved to php-cs-fixer 3
  • Update from tags now shows an 'Error' status if there was an issues reading the file


  • SQL for random artist with mapping
  • SQL for servers < 5.0.0 might try to insert into a missing table
  • Respect grouping for song_count searches
  • Autoplay in xbmc localplay and conform to localplay api
  • Ungrouped albums were forced into groups
  • Artists array should overwrite artist_mbid arrays that are smaller
  • Some empty globals relating to user
  • More work on the forked Jplayer playlist code when using play last
  • DAAP play urls
  • Single disk download links on group pages
  • CLI
    • cleanup:sortSongs was broken (It actually works again)
    • cleanup:sortSongs removes incomplete copied files after failure

API 5.4.0


  • advanced_search
    • Add file to album and artist search
Choose a tag to compare

4f378b4e50d6a58c9bde2e7b611c4431 ./
4f378b4e50d6a58c9bde2e7b611c4431 ./
efc96aa9dafb2789194f413526efaf69 ./
efc96aa9dafb2789194f413526efaf69 ./

cd395df55e26618ac761fc96daecf7b0 ./
f89042d0877c76a609845ed51726ae1c ./

646bff037735ad06a250d3bb75a3d1fd ./
e88a68357ef576bbab262d7c90c011ce ./

Ampache 5.3.3-release

The 5.3 branch has been getting a lot of contributor support and we're releasing another bug-fix release.

If you have trouble with upgrading make sure the check out the wiki


  • Remove duplicates and order largest to smallest for art search
  • Allow update_from_tags for a single Song from it's page
  • Search
    • Add song_title to album search
    • Add album_title and song_title to artist search
    • Add orphaned_album to song search


  • Default art_search_limit raised to 15
  • web_player shuffle improvements
    • Current selected track will become the first track and everything else shuffled below it
    • Playlist isn't automatically played so if a song was playing, it will continue to play


  • Speed up stream_playlist generation by chunking into blocks
  • Make sure there is an object_id to fill in update_530006
  • Remove song mapping on delete
  • Make sure podcast descriptions don't overfill the column
  • Clean dead total wasn't returned on completion
  • Searching for albums with '# Played' with grouping enabled with album_map
  • Adding a new xbmc localplay
  • Catalog type filter in get_top_sql
  • SubSonic
    • Fixed the query searches (Again) based on the wildcards different clients may send
    • Song discNumber was sending the MAX disk instead of the actual disk
    • getPlayQueue doesn't change back to miliseconds from seconds

API 5.3.3


  • advanced_search
    • Add song_title to album search
    • Add album_title and song_title to artist search
    • Add orphaned_album to song search


  • Api4::record_play had the user as mandatory again
  • After catalog actions; verify songs with an orphaned album which you won't be able to find in the ui
Choose a tag to compare




Ampache 5.3.2-release

Some QoL fixes here with some initial SubSonic, Search and that database column again!

We've had a lot of upgrades coming from 5.3.x so have you read up on how to upgrade?


  • Look for orphaned maps to delete.
  • Get server timezone for get_datetime (date_default_timezone_get())
  • Allow deleting played activity from the ui and count using a function (Require: 100)


  • Updated the translation gathering process a little
  • Organized the play/skip counting into it's own function
  • Update artist from tags needs to update albums first
  • SubSonic
    • Only search for song title instead of everything
    • Add starred to directory elements


  • Format on an empty album would complain in the log
  • Update from tags might not remove the old song artist
  • Migrating to a new album would leave old album maps
  • Artist search query with mapping was very slow
  • Database column check not included in 5.3.1 correctly
  • SubSonic
    • Get recently played
    • Fixed up search queries using "" (wrapping in quotes means exact search)

API 5.3.2


Choose a tag to compare



PHP8.1 Unsupported

Ampache 5.3.1-release

There were a few reports of some databases missing an important column. This release makes sure it's there.


  • Docker compose files to help create a local dev environment (read docker/ for more info)
  • Added php8.1 to composer (still considered unstable)


  • Began rework of Subsonic modules


  • Database missing rsstoken column in the user table
  • was finding lots more strings than it needed
  • Query sql with ambiguous ID
  • New song import might not map all the artists
  • Catalog query missing a comma

API 5.3.1


Choose a tag to compare

(MD5SUM 826c5a15a82dd6568de0abb6de8530cc) ./
(MD5SUM 826c5a15a82dd6568de0abb6de8530cc) ./
(MD5SUM a8ca0ac8be55e08a2fba9ab323de67cb) ./
(MD5SUM a8ca0ac8be55e08a2fba9ab323de67cb) ./

(MD5SUM 29b5111ea1daf08812626725f113553d) ./
(MD5SUM 316c23e89345fd7054ea47905734b9dd) ./

PHP8.1 Unsupported
(MD5SUM ac00ef11226fc5395de9f7e59d59669f) ./
(MD5SUM 1e6b5b0ac15d3a6a173de8c44aab608f) ./

(note removed some extra files from the original release which has changed the md5sum)

Ampache 5.3.0-release

Please take note that while I've built this release for php8.1 it is not yet officially supported as it has not been thoroughly tested.
Consider it unstable until it can be tested fully.

This cycle we have added support for multiple Album and Song artists.
This allows multiple artists to be part of a single song/album object and is created from file tags.

Check out the wiki for more information about this feature.

The old and long ignored module jPlayer has been forked into the base Ampache code.
There have been a few fixes and changes to the module to make the webplayer a lot better to use.


  • Additional xhtml templates added
  • Parse lots more WMA (ASF) file tags
  • Add play next and play last to radio station rows
  • Additional option for artist pages 'Show Artist Songs'
  • Add some missing tag options for mpc files
  • Allow manually syncing Artist name, year formed and place formed from musicbrainz (if it has an mbid)
  • Notify and allow updating Plugins when updates are available
  • You can now unhide a tag from the 'Hidden' page for Genres
    • This will delete previous merges but it will not retag your songs (update from tags to fix that)
  • Config version 61
    • Add disable_xframe_sameorigin (allow disabling "X-Frame-Options: SAMEORIGIN")
    • Disable catalog_verify_by_time by default
  • Database 530016:
    • Create artist_map table and fill it with data
    • Create album_map table and fill it with data
    • Use song_count & artist_count using album_map
    • Drop id column from catalog_map table and alter object_type charset and collation
    • Alter album_map table charset and engine to MyISAM if engine set
    • Alter artist_map table charset and engine to MyISAM if engine set
    • Make sure object_count table has all the correct primary artist/album rows
    • Convert basic text columns into utf8 to reduce index sizes
    • Remove user_activity columns that are useless
    • Delete duplicate rows on object_count
    • Compact mbid columns back to 36 characters
    • Compact some user columns
    • enum object_count.count_type
    • Index data on object_count
    • Use a unique index on object_count
    • Compact cache_object_count, cache_object_count_run columns
    • Add show_album_artist and show_artist preferences to show/hide Sidebar Browse menu links
  • search:
    • Add songrating to album search (My Rating (Song))
    • Add songrating (My Rating (Song)) and albumrating (My Rating (Album)) to artist search
    • Allow empty/null searches for all mbid searches
    • Allow empty/null searches for label searches
    • Add song_count to album and artist search
    • Add album_count to artist search
    • Add myplayedartist (Played by Me (Artist)) to album search
    • Add song_artist to album search
    • Add alias album_artist to album search for artist searches
    • Add recent_added to album search


  • Clean up artists with a duplicate MBID (Use the lowest artist id)
  • Delete cached recommendations instead of trying to update (Really slow)
  • Artist::check uses MBID on lookups as well as name
  • update_from_tags: Only update counts, tags and garbage collect after changes found
  • Use albums instead of songs for catalog verify actions
  • Expand search sidebar menu and collapse information without cookies
  • Moved all the extended functions into the forked jplayer module
  • Instead of skipping duplicate songs on import, disable them
  • jPlayer (Webplayer):
    • Shuffle now follows the currently playing track (If playing)
    • Shuffle also does not track the old playlist so you can't undo a shuffle
  • Subsonic:
    • Check for art instead of always sending an art attribute


  • search:
    • removed mbid group sql from possible_duplicate and possible_duplicate_album


  • VaInfo time for size/playtime_seconds
  • Tag arrays for Mbid and Artists lookup
  • Deleted item tables would not record some deletions
  • Updating the artist name would always migrate data when not required
  • Artist::check would always create and artist object with readonly set
  • Genres would not update the parent (Song->Album->Artist) whan using update from tags
  • Random sql that uses search rules
  • Use configured Ampache temp directory in Seafile catalog
  • Prepare media before update from tags (Seafile needs to download the file first)
  • Seafile catalog checks for a local file before downloading it again
  • Delete custom_metadata when removed from the object
  • Artist Garbage Collection was way too slow
  • Album and Artist count value sql
  • Don't remove Genre tags when they have been merged (hidden) into a different tag
  • Don't delete merged (hidden) Genres from the tag table
  • Album song_artist_count not calculated correctly
  • Grouping with mbid_group was missing making some albums not possible to view
  • Display and hide of artist columns in some pages based on count
  • Clean and verify would count totals based on all items instead of item type
  • Missing strings from xhtml templates
  • Album grouping for getAlbumSuite with null values
  • Set ratings for all album disks (if grouping enabled) for ratings and flags
  • Issues when you don't have an album artist tag
  • Correctly set null values on library_item edits
  • Search for song art might have sent a Song object
  • Fix missing preference on musicbrainz plugin
  • Disable/enable catalog
  • jPlayer (Webplayer):
    • Fixed moving items in the playlist
    • Fixed adding after the current playing track
    • Fixed logic behind the index and order between the HTML and the JS lists
  • Search:
    • played search for album and artist was including your user in the results
    • other_user artist search sql
  • Subsonic:
    • Artist was missing starred status

API 5.3.0


  • advanced_search:
    • Add songrating to album search (My Rating (Song))
    • Add songrating (My Rating (Song)) and albumrating (My Rating (Album)) to artist search
    • Allow empty/null searches for all mbid searches
    • Allow empty/null searches for label searches
    • Add song_count to album and artist search
    • Add album_count to artist search
    • Add myplayedartist (Played by Me (Artist)) to album search
    • Add song_artist to album search
    • Add alias album_artist to album search for artist searches
    • Add recent_added to album search
Choose a tag to compare

(MD5SUM 42f236ac276ad04a7f318b56f97ebe37) ./
(MD5SUM 5706b191594b2aeb3c79cf455e41dae4) ./
(MD5SUM 0d5e7f7bd5521790dc6d0939aa288599) ./
(MD5SUM 12fc960bdcb88246c9322b77a29142d9) ./
(MD5SUM f84379118fefb37bb28466f440424390) ./
(MD5SUM ce006dc612375aab47240dc3e71ea940) ./

Ampache 5.2.1-release

What a big one for a bugfix release!

A lot of work has gone into further automating API documentation and release testing. Lots of API3 and API4 issues have been fixed and so many little annoyances have been fixed after the big 5.0 transition.

note the naming for zips. php7.4 supported zips are the equivalent of the unnamed all zips.

  • ==
  • ==


  • Translation Updates Jan 2022
  • Count tables on create and delete actions
  • Set allow-plugins in composer.json
  • Improve description of rss feed to make each play more unique
  • Wait 30 minutes between catalog updates before running update_counts
  • On database connection failure, go to test.php
  • Search:
    • Added no_tag as a possible search item (song, album, artist)
    • Document the alias names of search rules (docs/
    • Add playlist and playlist_name search to artist types


  • AmpachePersonalFavorites: double the playlist title height
  • Move get_f_link from playlist/search into playlist_object
  • Make some functions that do the same thing use the same variable names
  • Don't optimize tables when doing full_service catalog updates
  • Use parameters in search queries instead of printing them into the query
  • Logout action requires a session id now to log out
  • Update mapping more often after catalog actions
  • Album check function added mbid_group to lookup
  • Support database upgrades from version 350008 (Ampache 3.5.4)
  • Remove additional 'Details' string from song/video and radio pages
  • Tag value is being extra filtered in the edit screen
  • Hide the login link when using simple_user_mode and no auth is set note this does not stop you logging in with /login.php
  • When not using auth, keep recording stats for system user plays
  • Hide username column from Recently Played when not authed as a user


  • Lowercase package names in composer
  • CLI add user
  • Demo Systemd timer files WantedBy
  • Some missing garbage collection for some tables
  • Phantom html table row in show_catalogs page
  • Grouping albums with special characters
  • Searching albums with special characters
  • Lots more PHP8 runtime errors
  • SQL for artists in catalog_map
  • Typo in url for update_all_file_tags
  • SQL error in database update 500013 (Not fatal)
  • Don't garbage_collect tags after merging
  • Create art URLs correctly when using rewrite rules and no auth
  • Respect sidebar_light preference when no cookie is present
  • Don't try to create users that already exist
  • Add/Edit catalogs in the UI missing filter_user
  • Search:
    • possible_duplicate was grouping too much together
  • Subsonic:
    • Jukeboxcontrol didn't send an index to the client

API 5.2.1


  • API5
    • The docs for errors have been extended for the type when returned


  • API5
    • Return the xml total_count of playlists based on hide_search preference


  • API5
    • Some errors were returning the value and not the parameter on error
  • API4
    • update_from_tags: type case error
    • rate: Object type to class mapping
    • flag: Object type to class mapping
    • update_art: Object type to class mapping and type case check
    • update_from_tags: Object type to class mapping
    • genre and tag function compatibility
  • API3
    • stats: incorrect getRandom call
    • rate: Object type to class mapping
    • playlist: bad escaping on the playlist id
Choose a tag to compare

(MD5SUM 1aa80adb5cdbe357c2c409dcfbce2ec2) ../
(MD5SUM 59cd948ce3f6630700544f28970daf84) ../
(MD5SUM 7901961f20e636c8465ab5d7a3558021) ../
(MD5SUM db238cb5c6580d877735e902a52aeb8c) ../

Bug in smart lists fixed up so new zips. (One day i'll have this part automated.)

(MD5SUM 54f63bf8f9c5c3d422a214f32a205930) ../
(MD5SUM 2f1551c564a13cc13a010cc489437e47) ../
(MD5SUM 5b9ebcf643653b5ef82f400f558daa19) ../
(MD5SUM 6dd17e0282222572b997855ceae4fd9c) ../

Ampache 5.2.0-release

Ampache 5.2.0 (and all future versions) now support multiple API versions.
This means that you can send your handshake with a specific version (e.g. 390001, 440001 or 5.2.0)
you will be sent API3, API4 and API5 responses in return.

To change from API3 to API5 you can send a ping with a new version parameter to update your session
(or send goodbye to log off and start again.)

API3 is not recommended for use outside of running old applications and it is recommended that you turn off API versions you don't use.

You can read up about all the API changes on


  • Get image from more tag types
  • Translation Updates Nov 2021
  • Added the ability to play random songs from a playlist with a play url
  • Update AmpacheRatingMatch.php to allow writing ratings to file tags
    • Enable 'Save ratings to file tags when changed' on the plugin page
    • write_tags must be enabled in the config file
  • Config version 59
    • Removed overwrite_tags (It doesn't do anything)
    • playlist_art now true by default
  • Database 5.2.0 Build 5:
    • Make sure preference names are always unique
    • Add ui options ('api_enable_3', 'api_enable_4', 'api_enable_5') to enable/disable specific API versions
    • Add ui option ('api_force_version') to force a specific API response (even if that version is disabled)
    • Add ui option ('show_playlist_username') Show playlist owner username in titles
    • Add ui option ('api_hidden_playlists') Hide playlists in Subsonic and API clients that start with this string
    • Add ui option ('api_hide_dupe_searches') Hide searchs in Subsonic and API clients with the same name as playlists (and both owned by you)


  • Don't try to return objects that aren't there sometimes
  • Update catalog counts before returning API data
  • Fix preferences for system and users after each update
  • Light theme hover color for sidebar
  • Changed some cookie from Strict to Lax to fix some bugs
  • Check ldap group by username instead of DN
  • Allow gathering random art from playlist contents instead of generating on page load


  • Remove AssestCache class and functions (unreliable)
  • When recording stats don't ignore based on a hardcoded gap


  • test_image function would fail without php-gd (which is optional)
  • Searching for images in files could not return the files you found
  • Get rid of that annoying space on api key text in the WebUI
  • Catalog map for artist tables
  • ratingmatch_stars value 5 wasn't setting itself
  • filter_has_var is returning false in FCGI enabled PHP
  • Allow catalog manager to manage a catalog in the WebUI
  • When using custom metadata don't overwrite managed values
  • Missing (and duplicate) preferences for users and system
  • Size 0 when reading file tags
  • Disk and totaldisks for wma files
  • Genre for quicktime/m4a files
  • login impossible with strict cookies
  • Some double scrubs of text in image links
  • Updating playlist user would only update the name and not the ID
  • garbage collection for playlist images
  • Stats when skipping songs with 0 plays
  • More PHP8 runtime errors
  • Fixed single song random playback using a play url
  • Make sure we error if php_intl module isn't found

API 5.2.0

Check out the docs for multi API support at

note JSON didn't exist for API3 so all json requests from API3 calls will revert to API5


  • Support for API3, API4 and API5 responses including PHP8 support (keeps original tag calls)
  • API5
    • playlists: add parameter show_dupes if true ignore 'api_hide_dupe_searches' setting
    • get_art: add parameter fallback if true return default art ('blankalbum.png') instead of an error
  • API4
    • playlists: add parameter show_dupes if true ignore 'api_hide_dupe_searches' setting
  • API3
    • Added genre calls as an alias to tag functions to match API4 and API5


  • Session and user id identification and errors from that
  • API5
    • playlists: sql for searches wasn't filtering
    • Art URL for searches was malformed
  • API4
    • Art URL for searches was malformed
  • API3
    • democratic: This method was broken in API3 and never worked correctly
Choose a tag to compare

NOTE The minimum supported php version (currently 7.4) will always be released as
Additional php versions will be tagged by binary name e.g.,

(MD5SUM 49e75d33c974884e66539717840d732c) ../
(MD5SUM 30c543b635d9d39720ba094a102f58d4) ../
(MD5SUM 74533247c0e3a44d2cf0fc4862d8ef58) ../
(MD5SUM 6dbd8ed37cf9e53d93fb131ced3ab27c) ../

Ampache 5.1.1-release

IMPORTANT and are versions where the /public web root has been moved and back into the project root. This version isn't a supported release method but will be tested and made available for situations where using ./public isn't possible


  • Clean cache files that aren't in the database
  • Translate random and democratic in the webplayer
  • Add transcode_flv to config
  • Add playlist, playlist_name to album searches
  • Send the user to an error page when the config wasn't written
  • Config version 58
    • Removed subsonic_stream_scrobble
  • Database 5.1.0 Build 5:
    • Add subsonic_always_download to preferences


  • Rebuild aurora.js modules from source
  • Perform waveform and cache on disk the same way
  • Move song waveforms on load if in the wrong folder
  • Make genre searches faster with a join instead of select in
  • Send a flat file path for zips when using browse/playlist


  • Podcast links on the dashboard removed (There is no link for them to go to)
  • Remove subsonic_stream_scrobble from config and make it per user (subsonic_always_download)


  • Use addslashes for translations in html5 player
  • Send the generic client name for localplay again
  • Use the set permission level for localplay access
  • Webplayer playlists would become out of order after moving/adding
  • Cache process could cache the wrong song
  • Missing user id in search
  • Grouping sql in search when not grouping albums
  • Setting Localplay instance would not update the preference
  • Advanced search (Random) wasn't working in php8
  • Fixed returning the correct objects for advanced search (Random)
  • Some objects would add transcode_to to their play url
  • Set system prefs for mb and tadb plugins
  • Updating a channel in php8
  • Get tmp_playlist by session (could get confused and never retrieve items)
  • Setting cookies and session details on remember_me sessions
  • Set the catalog parameters for seafile catalogs
  • Database updates for php8
  • Remember me session cookie error when recreating a new session
  • ampache.sql script had AUTO_INCREMENT data it didn't need
  • Subsonic
    • Get the artists for a single catalog correctly
    • Browse highest used the sql differently to the UI

API 5.1.1


  • Access to podcast_episode_delete
  • stats calls with an offest and limit
  • advanced_search calls with an offset and limit
Choose a tag to compare

NOTE The api would not send a correct version if you were using an old version string (e.g. 350001, 443001, etc)

The release has been updated to match this.

(MD5SUM b5a086bc1658d64f286718a8e428a090) ./
(MD5SUM 4bd9181da107c2bad9fafa8e9a7391e1) ./
(MD5SUM a23a2e9ba9ecae86a29d100737edd7c2) ./
(MD5SUM e75be09473a8c7d3ec3ccc5519c13636) ./

(MD5SUM f5a96e61f76c729fb82165522c537a69) ./
(MD5SUM bbe9aba543917305a07b992dacf3b3ed) ./
(MD5SUM bb05f88de33cd5363cc0f9a996d46947) ./
(MD5SUM 0043094b72ab284b57a648efe44bd0cf) ./

Ampache 5.1.0-release

GOOD NEWS PHP8 is now supported!

IMPORTANT and are versions where the /public web root has been moved and back into the project root. This version isn't a supported release method but will be tested and made available for situations where using ./public isn't possible


  • Split search items in WebUI into optgroup categories
  • Add en_AU as a locale
  • Require confirmation on enable/disable user links
  • Add f_size to video parameters
  • Record plays for live_streams and playlists in object_count
  • Add podcast to the object_count table and add missing rows
  • Store playlist art in the database
    • Show the art on the main playlist page
    • Allow reset and change of playlist art
    • Pick a random art item on reset and store
    • Add a simple continue button for these dialogs
    • Fix up display of image showaction
    • Subsonic art looks for the playlist art the same as UI
  • Check for ? in a query before trying to use parameters
  • Add the current php version to the debug page
  • Cache bust some frequently updated assets
  • Clear asset cache during AutoUpdate
  • Gather Artist recommendations on play/Stat insert
  • Add Top Tracks and Similar Songs to Artist pages
  • Extend run:updateCatalog --update to update artist name matching mbid
  • Add duplicate_mbid_group to album searches
  • Restored missing artist search to the header searchbar
  • Press enter on the list header to allow changing page number
  • Translation Update October 2021
  • Config version 57
  • NEW config options
    • allow_upload_scripts: Allow or disallow upload scripts on the server
  • Database 5.1.0 Build 4:
    • Add podcast to object_count table
    • Add podcast to cache_object_count table
    • Add live_stream to the rating table
    • Add waveforms for podcast episodes
  • PHP8 Support
    • Use array_key_exists to skip runtime errors
    • Fix undefined variables in templates
    • Errors with wanted/missing lookups and templates
    • Ajax handler updates and fixes
    • Set default and fallback values more often to avoid errors
    • Query errors would kill the whole page
    • Stop trying to read unreadable files
    • Explode key pairs when there is something to explode
    • Don't try to update preferences that don't exist
    • Errors when not logged in trying to load a session
  • NEW files
    • Test scripts:,,


  • Always update time when updating songs and videos from tags
  • Merge config 'ratings' and 'userflags' checks into ratings. (drop userflags)
  • Split search items into groups to help make it a bit clearer
  • Rearranged the list of search items
  • Simplify PlayAction code a bit and use filter_input
  • Speed up update_counts for missing object_counts
  • Enable Podcasts on new installs
  • Delete composer.lock
  • bin/cli run:updateCatalog with no options now does clean, Add, Verify and gather for all catalogs
  • Make category headers a bit nicer
  • Check for valid browse types before loading nothing
  • Browsing Genre defaults to artist
  • Skip albums that match the exact title in wanted search
  • Translate all database description strings on updates
  • Hi-res blankalbum/placeholder image (1400x1400)
  • Allow larger artist summary with a scroll. linebreak place, year formed
  • During garbage collection clean up empty strings with NULL
  • Subsonic
    • Disable stat recording on stream calls (disable subsonic_stream_scrobble in config to enable)


  • object_cnt: use total_count and total_skip instead of calculated properties
  • f_title: use f_name
  • Scrub CSS with Autorprefixer


  • SQL query error for Random Album in certain config setups
  • Album suite needed even without grouping
  • Stop scrubbing the podcast title so hard (so many &amp;'s)
  • Use total_count and total_skip columns for searches (Fixes searching with 0)
  • Can't change view limit on Android
  • Localplay instance could be 1
  • Missing add_type variable on ACL pages
  • Light theme follow button color
  • Missing CSS on list headers
  • Templates with missing variables
  • Fix Stream_Playlist::_add_urls to stop mismatched query values
  • Fix stream.php downloads not sending their url parameters to PlayAction
  • Garbage collect object_count for the possible items
  • Do not drop catalog in table podcast_episode when it doesn't exist yet
  • AAC codec from itunes doesn't provide a bitrate_mode (assume vbr)
  • bin/cli ExportPlaylistCommand had out of order args
  • bin/cli Allow database updates when out of date
  • Fix computeCache for playlists
  • Logic of SQL query to get random albums
  • Simplify the join code for some queries
  • Don't force random for smartlists when you turn it off
  • Empty release_date when updating videos
  • Chrome errors where Content-Disposition has a comma (,)
  • Remove subtitle in stream_playlist if empty
  • Fix options and bitrate selection for stream.php requests
  • Scrobbles from Song::can_scrobble
  • Default preference list
  • MusicBrainz Artist Id could have been replaced with the Album Id
  • Artists being duplicated when feat. another artist
  • Don't let a non-critical update fail DB update
  • Search for 'played' albums and artists
  • Commands loading plugins from cli might not have a user
  • Dashboard links to podcast episodes and art
  • Lots of issues in the webplayer which only supported song links
  • Clean up deleted user date from all tables
  • Waveforms for podcast episodes
  • Subsonic
    • Trim quotes (") for Subsonic searches (some clients add them)
    • Support exact (lucene) searching when using quotes (")
    • Browse by folder is fixed
    • Faster browse queries for all types
    • Fix catalog browsing and loading library

API 5.1.0


  • NEW API functions
    • Api::live_stream (get a radio stream by id)
    • Api::live_streams
  • Api::stream Added type 'podcast_episode' ('podcast' to be removed in Ampache 6)
  • Add 'time' and 'size' to all podcast_episode responses


  • live_stream objects added 'catalog' and 'site_url'
  • stats: additional type values: 'video', 'playlist', 'podcast', 'podcast_episode'


  • get_indexes: JSON didn't think live_streams was valid (it is)
  • record_play: user is optional
  • Bad xml tags in deleted functions
  • scrobble: Add song_mbid, artist_mbid, album_mbid (docs have no '_' so support both)
Choose a tag to compare

(MD5SUM d0b783e3219ce2a6b04c89d4f826bce6) ../
(MD5SUM aecf8dca7df32ea011b47e875d118d91) ./

Ampache 5.0.0-release

Ampache 5 is here and it's big!

IMPORTANT is a version where the new /public web root has been moved and back into the project root. This version isn't a supported release method but will be tested and made available for situations where using ./public isn't possible

IMPORTANT instead of using date() we are now using IntlDateFormatter and your locale to identify formats.
This means that 'custom_datetime' based on the date() format is incorrect and will look weird.
Look here for the code to change your 'custom_datetime' string [(]

This means Ampache now requires php-intl module/dll to be enabled.

IMPORTANT For new installs default database charset/collation and table engine have changed

  • Engine MyISAM => InnoDB
  • Charset utf8 => utf8mb4
  • Collation utf8_unicode_ci => utf8mb4_unicode_ci

If you want to keep utf8 make sure you set it before running updates.

  • To keep the current collation/charset update your config file
    • Set database_charset = "utf8"
    • Set database_collation = "utf8_unicode_ci"


  • Private catalogs! You can now set a public or per user catalog for your music folders
  • Cache transcoded files before a user requests them with Transcode Caching
  • Added a file
  • php-intl is now required for translation of date formats into your locale
  • Added %R (Release Status) to catalog pattern matching
  • Add ability to hide the Song Artist column for Albums with one Artist
  • Add ability to browse albums by Original Year
  • Add ability to hide the licence column on song pages
  • A helper index.php has been added to the old project root with directions to help
  • Show the country and Active status (Generated tags are assumed active) on label rows
  • Podcast_Episode show episode art for podcast mashup allow sort by date
  • Save a search or Smartlist as a regular playlist
  • New option to refresh a Playlist from Searches with the same name
  • Option to change the playlist owner when editing OR importing
  • Set "X-Frame-Options: SAMEORIGIN" on login page
  • Added the ability to export database art when local_metadata_dir is enabled
  • Save more types of thumb to the local_metadata_dir when enabled
  • Inform with a "Not Found: podcast" when you haven't created a podcast catalog
  • Added CatalogUpdate import command to the WebUI (Import = Add + playlist imports)
  • Search changes
    • Add 'possible_duplicate', 'recently_played' to song, artist and album search
    • Add 'catalog' to artist and album search
    • Add 'favorite_album', 'favorite_artist' to song search
    • Add 'release_status' to album search
    • Add 1, 5 and 10 to the Maximum Results limit
  • Database 5.0.0 Build 15:
    • Add song_count, album_count, album_group_count to artist table
    • Add release_status, addition_time, catalog, song_count, artist_count to album table
    • Add mbid, country, active to label table
    • Add total_count and total_skip to album, artist, song, video and podcast_episode tables
    • Add catalog to podcast_episode table
    • Add filter_user to catalog table
    • Add total_count, episodes to podcast table
    • Add username to playlist table
    • Create catalog_map table (map catalog location for media objects)
    • Create user_playlist table (Global play queue)
    • Create user_data table (One shot info for user actions)
    • Create deleted_song, deleted_video and deleted_podcast_episode tables for tracking deleted files
  • NEW database options
    • use_original_year: Browse by Original Year for albums (falls back to Year)
    • hide_single_artist: Hide the Song Artist column for Albums with one Artist
    • show_license: Hiding the license column in song rows
    • hide_genres: Hide the Genre column in all browse table rows
  • Config version 56
  • NEW config options
    • composer_binary_path: Override the composer binary path to distinguish between multiple composer versions
    • write_tags: Write tag changes to file (including art if available)
    • art_zip_add: Include Album Art for zip downlaods
    • catalog_filter: Allow filtering catalogs to specific users
    • catalog_verify_by_time: Only verify the files that have been modified since the last verify
    • cache_path: The folder where the pre-transcoded files will be stored
    • cache_target: Target audio format for the cache
    • cache_remote: Remote catalogs will cache every file so this is handled separately
    • catalog_ignore_pattern: Allow you to ignore audio, video and playlist files with a regex
  • NEW cli commands
    • run:moveCatalogPath: Change a Catalog path
    • run:cacheProcess: Run the cache process
    • export:databaseArt: Export all database art to local_metadata_dir


  • get_datetime(): use IntlDateFormatter to format based on locale. [(]
  • Renamed 'Tag' strings to 'Genre'
  • Changed sidebar back to browse for artist/album
  • Moved sidebar mashup pages into their own 'Dashboards' section
  • Move artist counts (song, album) to a DB column
  • Global counts are calculated after catalog changes instead of dynamically
  • Display userflag with star ratings
  • Always put year in Spotify art search if available
  • Imported playslists don't add the extension to the title
  • Visually crop images from the centre instead of resizing into a square
  • Display release year if it doesn't macth original_year. e.g. 'Back in Black (2010)'
  • Don't round the average rating to an integer
  • Replace mt_rand with random_bytes for random token generation
  • Move user bandwidth calculations out of the user format function into the user_data table
  • All localplay links use the type (e.g. mpd/upnp) as the agent to fix muti-client access
  • updateCatalog now implies add when using -i / --import by itself
  • Playlist Import checks for playlists by your user only in the UI (System for the cli)
  • Plugins: Use only https for building gravatar urls
  • Scrobble actions now check for the exact time as well (different agents or scripts would insert)
  • If you call a play url without an action we assume stream
  • Use ISO 8601 date for podcast episode pubdate display
  • Database tables default to InnoDB engine with utf8mb4 charset & collation
  • Subsonic
    • Wait a few seconds before allowing scrobbles to avoid collisions
    • Shift the last music play if gap is bigger than 5 repeated plays (over night, etc)


  • Take out the random items (except random search) from the main sidebar (use the playlist on the rightbar instead)
  • 'Find Duplicates' and related pages have been removed. Use 'Possible Duplicate' searches instead
  • 'Genre' and 'Missing Artists' removed from the top search bar
  • Take out the info icon from the song row; just click the song link
  • Take song artist out of the album edit popup
  • File tag reading for Band/Album Artist
  • Corrected album_artist collection and added missing tags to vorbis, aac and id3v2
  • Removed links from album list headers when split by release type
  • REMOVED config options
    • write_id3: Use write_tags
    • write_id3_art: Use write_tags


  • Delete duplicates from song table
  • Mashup page for podcast_episodes
  • Searching by Genre needed a query overhaul
  • Album groupings are the same everywhere when album_group is enabled
  • Unknown (Orphaned) groups all unknown files into one artist and album
  • Album groups for ratings and userflags
  • SQL queries regarding rating order and grouping of mutliple users
  • Ensure valid media is found before inserting into a playlist
  • Searching by Genre needed a lot of updates to speed up and correct
  • Bump phpmailer/phpmailer from 6.4.1 to 6.5.0 (#2957)
  • Groupings for albums and add original_year to grouping
  • Editing album titles with prefixes
  • CSS fixes for light theme
  • Shares didn't insert into object_count correctly
  • Repair missing rows in object_count after catalog updates
  • Browse / Mashup by podcast_episode
  • Sorting for a lot of browse pages that used arguments
  • Refreshing the details after editing an object didn't include browse aruments
  • Get the correct total artist_count for albums when grouped
  • Some buttons and links in the light theme needed extra CSS
  • Updated the example to stop it trying to add the same file multiple times
  • Translations could break JS with apostrophes
  • Playlist imports with an empty web_path would never work
  • Playlist imports were importing nothing
  • List preferences didn't allow null values after being set (Personal Favorites plugin)
  • When using album_art_store_disk the art lookup was hardcoded for jpg
  • Generating thumbnails wouldn't work with album_art_store_disk enabled
  • Updating config values for spotify_art_filter and art_search_limit would not keep your value
  • Delete podcasts and radio streams when deleting a catalog
  • Collect recommendation garbage correctly
  • Empty release date when updating a video would fail
  • Scrub out some link titles that can be abused by uploads
  • Subsonic
    • Support a global user playqueue with getplayqueue, saveplayqueue
    • Incorrect header being set on art requests
    • averageRating wasn't correctly cast for json
    • bookmark JSON was not correctly converted

API 5.0.0

All API code that used 'Tag' now references 'Genre' instead

This version of the API is the first semantic version. "5.0.0"


  • Add global playcount to podcast_episode and video responses
  • searches (the number of saved smartlists) added to the handshake/ping response
  • NEW API functions
    • Api::song_delete (Delete files when you are allowed to)
    • Api::user_preferences (Get your user preferences)
    • Api::user_preference (Get your preference by name)
    • Api::system_update (Check Ampache for updates and run the update if there is one.)
    • Api::system_preferences (Preferences for the system user)
    • Api::system_preference (Get a system preference by name)
    • Api::preference_create (Add a new preference to Ampache)
    • Api::preference_edit (Edit a preference value by name; optionally apply to all users)
    • Api::preference_delete (Delete a preference by name)
    • Api::labels (list your record labels)
    • Api::label (get a label by id)
    • Api::label_artists (get all artists attached to that label)
    • Api::get_bookmark (See if you've previously played the file)
    • Api::bookmarks (List all bookmarks created by your account)
    • Api::bookmark_create (Create a bookmark to allow revisting later)
    • Api::bookmark_edit (Edit a bookmark)
    • Api::bookmark_delete (Delete a bookmark by object id, type, user and client name)
    • Api::localplay_songs (Get the list of songs in your localplay instance)
    • API::deleted_songs
    • API::deleted_podcast_episodes
    • API::deleted_videos


  • The API version matches release version '5.0.0'
  • A backcompatible version (500000) is sent when using old api versions
  • handshake and ping counts now return the actual object counts for playlists
    • 'playlists' => $counts['playlist'],
    • 'searches' => $counts['search'],
    • 'playlists_searches' => $counts['playlist'] + $counts['search']
  • Renamed functions:
    • tags => genres
    • tag => genre
    • tag_artists => genre_artists
    • tag_albums => genre_albums
    • tag_songs => genre_songs
  • Don't allow duplicate podcast feeds
  • Make filter optional in shares, genre_artists, genre_albums, genre_songs (Used as a general catch all method like genres)
  • Error Codes and response structure has changed
    • 4700 Access Control not Enabled
    • 4701 Received Invalid Handshake
    • 4703 Access Denied
    • 4704 Not Found
    • 4705 Missing Method
    • 4706 Depreciated Method
    • 4710 Bad Request
    • 4742 Failed Access Check
  • stats: Removed back compat from older versions. Only 'type' is mandatory
  • Return empty objects when the request was correct but the results were empty
  • Don't transcode podcast_episodes
  • localplay
    • added 'track' parameter used by 'skip' commands to go to the playlist track (playlist starts at 1)
  • system_update: update the database if required as well
  • playlist_edit: added 'owner' as an optional parameter (Change playlist owner to the user id)
  • catalog_file: Allow comma-separate task values. (good for API inotify scripts)
  • podcast_episode object "pubdate" has been changed to ISO 8601 date (2004-02-12T15:19:21+00:00)
  • podcast object "build_date" and "sync_date" have also been changed to ISO 8601 date


  • catalog_file: Couldn't add files