Skip to main content

Preferences

Understanding Ampache Preferences

One thing that isn't very easy to understand are all the extra options, preferences and ways of setting things up on your server.

This page explains how preferences work, where each one lives, who is allowed to change it, and lists every preference Ampache ships with.

There are 3 major types of preference:

  • System Preferences - the server-wide defaults, edited by an admin
  • User Preferences - each user's own copy of those values
  • Config Preferences - settings in config/ampache.cfg.php that are not editable from the web interface

How a preference is stored

Every preference exists twice in the database and understanding that is the key to everything else on this page.

  • The preference table holds one row per preference: its name, description, access level, type, category and subcategory. There is exactly one row per preference for the whole server.
  • The user_preference table holds the value, one row per user per preference.

The special user id -1 is the system user. Its user_preference rows are the server defaults, and that is what you are editing on the Server Config pages.

From there the value a user gets is decided in one of two ways:

  • Preferences in the System category always read the value from user -1. A user's own row is ignored, which is why those settings are the same for everybody and why the System page has no Apply to All column.
  • Every other preference reads the user's own row. When a user has no row yet — a new account, or a preference added by an upgrade — the value is copied from user -1 at that moment and then belongs to the user.

That copy happens once. Changing a server default later does not reach users who already have a value; use Apply to All for that.

Finding preferences in the interface

Your own preferences are under the Preferences tab in the sidebar.

Preferences sidebar

Server preferences are under the Admin tab, in the Server Config section. Note the extra System entry that does not appear on the user list.

Server Config sidebar

Both lists are built from the preference categories, so a plugin that adds preferences appears under Plugins automatically.

User Preferences

A user editing their own preferences sees two columns: the preference and its value.

User preferences

A user only gets an input for a preference whose access level they meet. Anything above their level is still shown, but as read-only text — Enabled/Disabled for a boolean, ****** for a password or api key, and the plain value for everything else.

Admins can edit another user's preferences from Admin -> Browse Users -> Preferences, which is the same page pointed at a different user id.

System Preferences

System preferences are the defaults for the server and for CLI actions, and they are copied to a new user when the account is created (excluding the System and Plugins categories, which are never copied).

When an admin edits them through Server Config, two extra columns appear.

Server preferences

  • Apply to All - tick the box and the value you are saving is written to every existing user, overwriting whatever they had. Use this to reset a preference across your server.
  • Access Level - the minimum user level allowed to change this preference. A user below it sees the value but cannot edit it.

Neither column appears on the System page, because those preferences have no per-user value to apply or restrict.

The Streaming page is a good example of a category that is mostly per-user with an admin-only pair at the top.

Server streaming preferences

Config Preferences

Config preferences are set in the config file in the Ampache install folder, config/ampache.cfg.php.

They cover the things that must not be editable from a browser: database credentials, file and folder locations, transcoding commands, auth methods, caching and logging. They apply to the whole server and there is no per-user copy.

See Basic Configuration for the config file itself, and Config changes for what Ampache8 added, removed and changed.

A few settings exist in both places and the database preference wins. encode_target, encode_video_target, encode_player_webplayer_target, encode_player_api_target, max_bit_rate and min_bit_rate used to be config-only; in Ampache8 they are per-user preferences and the config values are read once on upgrade to seed the default.

Access levels

There are five access levels. They are the same levels used for user accounts, so "this preference needs User" means an account at User or above may change it.

LevelValueMeaning
Guest5Read only access, generally an unregistered or restricted account
User25A standard user; can change their own settings and stream
Content Manager50Some additional settings not open to normal users
Catalog Manager75Everything except user management
Admin100Everything

A preference listed below as Default (0) has no restriction at all and can be changed by anyone, including a guest.

You can reset every preference's access level in one move from the CLI:

php bin/cli admin:updatePreferenceAccessLevel --level admin -e

The accepted levels are guest, user, content_manager, manager and admin, each of which sets every preference to that level, plus default, which restores the per-preference levels listed in the tables below. Like admin:resetPreferences it is a dry run without -e.

Setting everything to admin is the usual way to lock down a shared or public server; default is how you undo it.

Presets

Rather than setting a user's preferences one at a time, you can apply a whole preset:

php bin/cli admin:resetPreferences some-user --preset default -e

Like most CLI commands this is a dry run without -e.

PresetWhat it does
systemCopies whatever the server currently has (user -1) onto that user
defaultAmpache's shipped defaults
minimalistThe defaults with download, browse_filter and show_wrapped turned off
communityThe minimalist set with share turned on and the home page panels (home_now_playing, home_recently_played, home_recently_played_all) turned off

A preset writes every preference it lists, not only the ones that differ, so applying one is a full reset of that user rather than a patch.

Categories

User and system preferences are split into six categories, which are the pages in the sidebar above:

  • Interface
  • Options
  • Playlist
  • Plugins
  • Streaming
  • System

A seventh category, internal, exists in the database but is deliberately never displayed. It holds values Ampache stores against a user that are not settings at all — the last auto-update check, the Last.FM submit challenge, the active HTTPQ instance.

Within a category, preferences are grouped by subcategory — the sub-headings you see on the page (Browse, Player, Sidebar, Transcoding, ...).

Every preference

Ampache8 ships 172 preferences. The tables below list all of them by category and subcategory, with the value a fresh install starts from and the access level required to change it.

The Type column is what the interface renders: boolean is an On/Off dropdown, integer and string are text inputs, special is a hand-built control (a theme list, a language list, a volume picker), and transcoding is an output-format picker filled from your configured encode_args_<format> keys.

Interface

The largest category — everything about how Ampache looks and what it shows you.

PreferenceDescriptionDefaultTypeAccess level
langLanguageen_USspecialAdmin
show_donateShow donate button in footer1booleanUser

Interface -> Browse

PreferenceDescriptionDefaultTypeAccess level
browse_filterShow filter box on browse1booleanUser
hide_genresHide the Genre column in browse table rows0booleanUser
hide_single_artistHide the Song Artist column for Albums with one Artist0booleanUser
libitem_browse_alphaAlphabet browsing by default for following library items (album,artist,...)(empty)stringCatalog Manager
show_licenseShow License1booleanUser
show_original_yearShow Album original year on links (if available)1booleanUser
show_played_timesShow # played0stringUser
show_playlist_usernameShow playlist owner username in titles1booleanUser
show_skipped_timesShow # skipped0booleanUser
show_subtitleShow Album subtitle on links (if available)1booleanUser
use_original_yearBrowse by Original Year for albums (falls back to Year)0booleanUser

Interface -> Cookies

These record the grid/table choice you make with the view toggle on a browse, so each browse type remembers how you last looked at it.

PreferenceDescriptionDefaultTypeAccess level
browse_album_disk_grid_viewForce Grid View on Album Disk browse0booleanUser
browse_album_grid_viewForce Grid View on Album browse0booleanUser
browse_artist_grid_viewForce Grid View on Artist browse0booleanUser
browse_live_stream_grid_viewForce Grid View on Radio Station browse0booleanUser
browse_playlist_grid_viewForce Grid View on Playlist browse0booleanUser
browse_podcast_episode_grid_viewForce Grid View on Podcast Episode browse0booleanUser
browse_podcast_grid_viewForce Grid View on Podcast browse0booleanUser
browse_song_grid_viewForce Grid View on Song browse0booleanUser
browse_video_grid_viewForce Grid View on Video browse0booleanUser

Interface -> Custom

PreferenceDescriptionDefaultTypeAccess level
custom_blankalbumCustom blank album default image(empty)stringCatalog Manager
custom_datetimeCustom datetime(empty)stringUser
custom_logoCustom URL - Logo(empty)stringUser
custom_logo_userCustom URL - Use your avatar for header logo0booleanUser
custom_timezoneCustom timezone (Override PHP date.timezone)(empty)stringUser
site_titleWebsite TitleAmpache :: For the Love of MusicstringAdmin

custom_datetime takes a PHP date format string; leave it empty for the site default. custom_timezone takes a PHP timezone name such as Australia/Sydney.

Interface -> Home

PreferenceDescriptionDefaultTypeAccess level
home_moment_albumsShow Albums of the Moment1integerUser
home_moment_videosShow Videos of the Moment0integerUser
home_now_playingShow Now Playing1integerUser
home_recently_playedShow Recently Played1integerUser
home_recently_played_allShow all media types in Recently Played1booleanUser
index_dashboard_formUse Dashboard links for the index page header0booleanUser
now_playing_per_userNow Playing filtered per user1booleanContent Manager
of_the_momentSet the amount of items Album/Video of the Moment will display6integerUser

Interface -> Library

PreferenceDescriptionDefaultTypeAccess level
album_groupAlbum - Group multiple disks1booleanUser
album_release_typeAlbum - Group per release type1booleanUser
album_release_type_sortAlbum - Group per release type sortalbum,ep,live,singlestringUser
album_sortAlbum - Default sortdefaultstringUser
external_links_bandcampShow Bandcamp search icon on library items1booleanUser
external_links_discogsShow Discogs search icon on library items1booleanUser
external_links_duckduckgoShow DuckDuckGo search icon on library items1booleanUser
external_links_googleShow Google search icon on library items1booleanUser
external_links_lastfmShow Last.fm search icon on library items1booleanUser
external_links_musicbrainzShow MusicBrainz search icon on library items1booleanUser
external_links_wikipediaShow Wikipedia search icon on library items1booleanUser
libitem_contextmenuLibrary item context menu1booleanDefault

Turning album_group off makes the album disk the browsing unit, so you browse and play individual disks instead of the whole album. API8 added album_disk methods so a client can see the same objects.

Interface -> Notification

PreferenceDescriptionDefaultTypeAccess level
browser_notifyWeb Player browser notifications1integerUser
browser_notify_timeoutWeb Player browser notifications timeout (seconds)10integerUser

Interface -> Player

PreferenceDescriptionDefaultTypeAccess level
direct_play_limitLimit direct play to maximum media count500integerUser
show_lyricsShow lyrics0booleanDefault
slideshow_timeArtist slideshow inactivity time0integerUser
song_page_titleShow current song in Web player page title1booleanUser
webplayer_confirmcloseConfirmation when closing current playing window0booleanUser
webplayer_pausetabsAuto-pause between tabs1booleanUser

direct_play_limit caps how many items a single play/add action may queue. Ampache8 resets an existing 0 (unlimited) to 500 on upgrade, because an unbounded queue on a large browse is what makes a page hang.

Interface -> Privacy

PreferenceDescriptionDefaultTypeAccess level
allow_personal_info_agentShare Recently Played information - Allow access to streaming agent1booleanUser
allow_personal_info_nowShare Now Playing information1booleanUser
allow_personal_info_recentShare Recently Played information1booleanUser
allow_personal_info_timeShare Recently Played information - Allow access to streaming date/time1booleanUser
show_wrappedEnable access to your personal "Spotify Wrapped" from your user page1booleanUser

These control what other users can see about you. Turning allow_personal_info_now off hides you from the Now Playing panel entirely; the three recent settings progressively hide the played item, the time it was played and the client that played it.

Interface -> Query

PreferenceDescriptionDefaultTypeAccess level
offset_limitOffset Limit50integerDefault
popular_thresholdPopular Threshold10integerUser
stats_thresholdStatistics Day Threshold7integerUser

offset_limit is the page size for every browse. popular_threshold is how many rows the Top/Statistics lists show. stats_threshold is how many days of play history those lists consider, so a long-running server still has new albums reaching the top.

Interface -> Sidebar

PreferenceDescriptionDefaultTypeAccess level
show_album_artistShow 'Album Artists' link in the main sidebar1booleanUser
show_artistShow 'Artists' link in the main sidebar0booleanUser
show_collectionShow 'Collections' link in the main sidebar1booleanUser
show_folderShow 'Folders' link in the main sidebar1booleanUser
sidebar_hide_browseHide the Browse menu in the sidebar0booleanUser
sidebar_hide_dashboardHide the Dashboard menu in the sidebar0booleanUser
sidebar_hide_informationHide the Information menu in the sidebar0booleanUser
sidebar_hide_playlistHide the Playlist menu in the sidebar0booleanUser
sidebar_hide_searchHide the Search menu in the sidebar0booleanUser
sidebar_hide_switcherHide sidebar switcher arrows0booleanUser
sidebar_hide_videoHide the Video menu in the sidebar0booleanUser
sidebar_lightLight sidebar by default0booleanUser
sidebar_order_browseCustom CSS Order - Browse10integerUser
sidebar_order_dashboardCustom CSS Order - Dashboard15integerUser
sidebar_order_informationCustom CSS Order - Information60integerUser
sidebar_order_playlistCustom CSS Order - Playlist30integerUser
sidebar_order_searchCustom CSS Order - Search40integerUser
sidebar_order_videoCustom CSS Order - Video20integerUser

The sidebar_order_* values are CSS flex order numbers, so a lower number sorts higher. The gaps between the defaults are there so you can slot one menu between two others without renumbering the rest.

The Folders link also needs the folder tables to have been scanned; the Collections link appears as soon as the preference is on.

Interface -> Theme

PreferenceDescriptionDefaultTypeAccess level
mini_playerLock this user into the mini player interface0booleanAdmin
theme_colorTheme colordarkspecialDefault
theme_nameThemerebornspecialDefault
topmenuTop menu0booleanUser
ui_fixedFix header position on compatible themes0booleanUser

theme_name is read from the themes/ directory, so a theme you drop in appears here — see Themes. mini_player is a display lock, not an access control; the user's access level still decides what data they can reach.

Options

Feature switches and API behaviour.

PreferenceDescriptionDefaultTypeAccess level
bookmark_latestOnly keep the latest media bookmark0booleanUser
notify_emailAllow E-mail notifications0booleanUser

Options -> Api

PreferenceDescriptionDefaultTypeAccess level
api_always_downloadForce API streams to download. (Enable scrobble in your client to record stats)0booleanUser
api_enable_3Allow Ampache API3 responses1booleanUser
api_enable_4Allow Ampache API4 responses1booleanUser
api_enable_5Allow Ampache API5 responses1booleanUser
api_enable_6Allow Ampache API6 responses1booleanUser
api_enable_8Allow Ampache API8 responses1booleanUser
api_force_versionForce a specific API response no matter what version you send0specialUser
api_hidden_playlistsHide playlists in Subsonic and API clients that start with this string(empty)stringUser
api_hide_dupe_searchesHide smartlists that match playlist names in Subsonic and API clients0booleanUser
subsonic_always_downloadForce Subsonic streams to download. (Enable scrobble in your client to record stats)0booleanUser
subsonic_force_album_artistForce Album Artist for Subsonic API responses0booleanUser
subsonic_legacyEnable legacy Subsonic API responses for compatibility issues0booleanUser
subsonic_single_user_dataUse single user data for Subsonic API responses1booleanUser

Ampache serves API versions 3, 4, 5, 6 and 8 at the same time. Turning one off does not reject the client — the request rolls forward to the next enabled version. api_force_version overrides the version the client asks for entirely, which is the setting to reach for when a client is pinned to an old version and misbehaving. See the API documentation for what each version answers.

subsonic_legacy reverts you to plain Subsonic 1.16.1 responses without OpenSubsonic fields or extensions. Ampache8 turns it off for every user on upgrade so everyone starts on OpenSubsonic.

Options -> Feature

PreferenceDescriptionDefaultTypeAccess level
allow_democratic_playbackAllow Democratic Play0booleanAdmin
allow_stream_playbackAllow Streaming1booleanAdmin
allow_videoAllow Video Features0integerCatalog Manager
downloadAllow Downloads1booleanAdmin
geolocationAllow Geolocation0integerUser
shareAllow Share0booleanAdmin

download covers single-item downloads; whole album/artist/playlist zips also need allow_zip_download in the config file.

Options -> Localplay

PreferenceDescriptionDefaultTypeAccess level
allow_localplay_playbackAllow Localplay Play0booleanAdmin
localplay_controllerLocalplay Type0specialAdmin
localplay_levelLocalplay Access0specialAdmin

localplay_controller lists the Localplay modules enabled under Admin -> Modules. See Localplay.

Options -> Upload

PreferenceDescriptionDefaultTypeAccess level
upload_catalogDestination catalog-1integerAdmin

-1 means no catalog has been chosen, so uploads are effectively off until you pick one. The rest of the upload settings are under System -> Upload; see Upload Catalogs.

Playlist

PreferenceDescriptionDefaultTypeAccess level
demo_clear_sessionsDemocratic - Clear votes for expired user sessions0booleanUser
extended_playlist_linksShow extended links for playlist media0booleanUser
playlist_methodPlaylist MethoddefaultstringDefault
playlist_typePlaylist Typem3uspecialAdmin
show_playlist_media_parentShow Artist column on playlist media rows0booleanUser
unique_playlistOnly add unique items to playlists0booleanUser

Playlist Type is the file format Ampache generates on play — M3U, Simple M3U, PLS, ASX, XSPF or RAM. Different clients prefer different ones. It has no effect on Democratic or Localplay playback.

Playlist Method controls what Play and Add do:

  • default - add to the existing playlist and leave it alone
  • send - send the playlist to the client each time something is added (not recommended for MPD)
  • send_clear - as send, but clear the playlist afterwards
  • clear - only send on the Play button, then clear

unique_playlist also decides whether a collection may hold the same object twice — collections deliberately reuse this preference rather than adding one of their own.

Plugins

PreferenceDescriptionDefaultTypeAccess level
lastfm_grant_linkLast.FM Grant URL(empty)stringUser

This category is mostly not in the table above, because it is filled at runtime by whatever plugins are installed. Enable a plugin under Admin -> Modules -> Manage Plugins and its preferences appear here for each user who activates it.

Plugin preferences are never copied from the system user to a new account — a plugin's settings belong to the user who turned it on.

The full list of plugins and their options is on the Plugins and Plugin Options pages.

Streaming

PreferenceDescriptionDefaultTypeAccess level
play_typePlayback Typeweb_playerspecialUser
stream_beautiful_urlEnable URL Rewriting0booleanAdmin

Playback Type is the single most important streaming preference and also appears as the dropdown in the site header. It decides what Ampache does with the media you play: the embedded Web Player, a raw stream, Localplay, Democratic play or a download.

stream_beautiful_url switches play urls from ?ssid=...&oid=280 to /ssid/.../oid/280. It needs your webserver rewrite rules in place — see Rewrite Rules.

Streaming -> Player

PreferenceDescriptionDefaultTypeAccess level
broadcast_by_defaultBroadcast web player by default0booleanUser
broadcast_privateRequire a session to listen to my broadcasts1booleanUser
jp_volumeDefault webplayer volume0.8specialUser
webplayer_removeplayedRemove tracks before the current playlist item in the webplayer when played0specialUser

Streaming -> Transcoding

PreferenceDescriptionDefaultTypeAccess level
encode_player_api_targetTranscode output format - API (overrides default)(empty)transcodingUser
encode_player_webplayer_targetTranscode output format - Web Player (overrides default)(empty)transcodingUser
encode_targetTranscode output format - Audio Default(empty)transcodingUser
encode_video_targetTranscode output format - Video Default(empty)transcodingUser
max_bit_rateMaximum transcode bitrate for dynamic downsampling in bps (0 = disabled)0integerUser
min_bit_rateMinimum transcode bitrate for dynamic downsampling in bps8000integerUser
rate_limitDownload Rate Limit8192integerAdmin
transcodeAllow TranscodingdefaultstringUser
transcode_bitrateTranscode bitrate - Default128000integerUser
transcode_bitrate_apiTranscode bitrate - API (overrides default)0integerUser
transcode_bitrate_webplayerTranscode bitrate - Web Player (overrides default)0integerUser

Every bitrate here is in bits per second, not kilobits. Ampache8 changed the unit and migrated existing values, so 128000 is 128kbps. rate_limit is the exception and stays in KB/s.

The *_target pickers only offer formats you have an encode_args_<format> line for in the config file. transcode accepts default (transcode when the format is not directly playable), always or never.

A player override left at 0/None falls back to the matching default. See Transcoding for the config side.

System

Admin-only, server-wide settings. These have no per-user value: every user reads the value stored against the system user, which is why the System page has no Apply to All or Access Level column.

PreferenceDescriptionDefaultTypeAccess level
demo_use_searchDemocratic - Use smartlists for base playlist0booleanAdmin
force_http_playForce HTTP playback regardless of port0booleanAdmin
lock_songsLock Songs0booleanAdmin

lock_songs stops two users streaming the same song at the same moment — a "shared pile of CDs" simulation, off by default.

System -> Backend

PreferenceDescriptionDefaultTypeAccess level
daap_backendUse DAAP backend0booleanAdmin
daap_passDAAP backend password(empty)stringAdmin
perpetual_api_sessionAPI sessions do not expire0booleanAdmin
subsonic_backendUse Subsonic backend1booleanAdmin
upnp_backendUse UPnP backend0booleanAdmin
webdav_backendUse WebDAV backend0booleanAdmin

Each backend is a separate protocol served from its own web root directory, and all of them need webserver rewrite rules. If a Subsonic client gets a 404 from every request, that is almost always the cause rather than this preference.

perpetual_api_session keeps API sessions alive indefinitely. It is convenient for a client that cannot re-authenticate, and it is a security trade-off — the session never expires on its own.

System -> Catalog

PreferenceDescriptionDefaultTypeAccess level
catalog_check_duplicateCheck library item at import time and disable duplicates0booleanAdmin
cron_cacheCache computed SQL data (eg. media hits stats) using a cron0booleanAdmin
cron_cache_live_countAdd live plays to the cached count for accurate stats (Require: Cron Cache)0booleanAdmin

cron_cache needs the cron task actually scheduled — see Cron. With it on, played counters are read from the cache and only refreshed by the cron run, so they lag until the next one; cron_cache_live_count adds the plays recorded since that run at the cost of an extra query per count.

System -> Interface

PreferenceDescriptionDefaultTypeAccess level
custom_faviconCustom URL - Favicon(empty)stringAdmin
custom_login_backgroundCustom URL - Login page background(empty)stringAdmin
custom_login_logoCustom URL - Login page logo(empty)stringAdmin
custom_text_footerCustom text footer(empty)stringAdmin
show_header_loginShow the login / registration links in the site header1booleanAdmin

These are the branding settings that must apply before anyone is logged in, which is why they are server-wide rather than per user.

System -> Metadata

PreferenceDescriptionDefaultTypeAccess level
disabled_custom_metadata_fieldsCustom metadata - Disable these fields(empty)stringAdmin
disabled_custom_metadata_fields_inputCustom metadata - Additional fields to disable(empty)stringAdmin

The first is a multi-select of fields Ampache has already seen while scanning; the second is a free-text, comma-separated list for fields it has not seen yet.

System -> Podcast

PreferenceDescriptionDefaultTypeAccess level
podcast_keep# latest episodes to keep0integerAdmin
podcast_new_download# episodes to download when new episodes are available0integerAdmin

0 in either means no limit — keep everything, download nothing automatically. See Podcasts.

System -> Share

PreferenceDescriptionDefaultTypeAccess level
share_expireShare links default expiration days (0=never)7integerAdmin

Sharing itself is switched on with share under Options -> Feature.

System -> Update

PreferenceDescriptionDefaultTypeAccess level
autoupdateCheck for Ampache updates automatically1booleanAdmin

The result of the last check is kept in the hidden internal preferences autoupdate_lastcheck, autoupdate_lastversion and autoupdate_lastversion_new.

System -> Upload

PreferenceDescriptionDefaultTypeAccess level
allow_uploadAllow user uploads0booleanAdmin
upload_access_levelUpload Access Level25specialAdmin
upload_allow_editAllow users to edit uploaded songs1booleanAdmin
upload_allow_removeAllow users to remove uploaded songs1booleanAdmin
upload_catalog_patternRename uploaded file according to catalog pattern0booleanAdmin
upload_scriptPost-upload script (current directory = upload target directory)(empty)stringAdmin
upload_subdirCreate a subdirectory per user1booleanAdmin
upload_user_artistConsider the user sender as the track's artist0booleanAdmin

Uploading needs allow_upload on and a destination catalog set in upload_catalog under Options -> Upload. See Upload Catalogs.

Internal (hidden)

Never shown in the interface. Listed here so you know what the rows in your database are.

PreferenceDescriptionDefaultType
autoupdate_lastcheckAutoUpdate last check time(empty)string
autoupdate_lastversionAutoUpdate last version from last check(empty)string
autoupdate_lastversion_newAutoUpdate last version from last check is newer(empty)boolean
httpq_activeHTTPQ Active Instance0integer
lastfm_challengeLast.FM Submit Challenge(empty)string

Preferences over the API

Preferences are readable and writable through the API, which is how a client offers a settings screen of its own.

MethodWhat it does
user_preferencesEvery preference for the authenticated user
user_preferenceOne preference for the authenticated user
system_preferencesEvery preference for the system user (admin)
system_preferenceOne preference for the system user (admin)
preference_createAdd a new preference (admin)
preference_editChange a preference value, optionally for every user (admin)
preference_deleteRemove a preference (admin)

The preferences Ampache ships with — the system list and the known plugin list — are protected from preference_delete, so a client cannot remove one by accident; only a preference you added yourself can be deleted. preference_edit takes an all parameter that behaves exactly like the Apply to All checkbox, and an admin-only default parameter that writes the system user's value instead of your own.

See the API documentation for the full parameter list.

Repairing preferences

If preferences look wrong — a missing page, a value that will not stick, a preference the interface never shows — run the database update. It re-inserts anything missing, resyncs the descriptions and removes rows that no longer belong to a preference.

php bin/cli admin:updateDatabase -e

Preference descriptions are also re-applied on every update, so a description that changed between releases is renamed on your install without a separate migration.