Ctrl K
ComunidadGuías…

config/ampache.cfg.php.dist

Rama develop · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
;#<?php exit(); ?>##
;#########################################################
; General Config                                         #
;#########################################################

; This value is used to detect if this config file is up to date
; this is compared against a constant called CONFIG_VERSION
; that is located in src/Config/Init/InitializationHandlerConfig.php
config_version = 102

; Defines the default timezone used by the date functions
; Uses the same strings as the default date.timezone (https://php.net/date.timezone)
; If not set fallback to date_default_timezone_get() (https://www.php.net/manual/en/function.date-default-timezone-get.php)
; EXAMPLE VALUES: "UTC", "Europe/London", "America/Los_Angeles" (https://www.php.net/manual/en/timezones.php)
; DEFAULT: "UTC"
;date_timezone = "UTC"

; Disable colors for cli output to have better reading on white-on-black terminal
; You  can temporarily disable all color output by settin NO_COLOR env var to 1
; Example : NO_COLOR=1 bin/cli show:version
; DEFAULT: false
;cli_no_color = "false"

;#########################################################
; Auto Update                                            #
;#########################################################

; Allow you to hard code a default git branch for Ampache
; If you set this value the inbuilt updater will use this branch for updates.
; POSSIBLE VALUES: master develop patch6 release6
; DEFAULT: none
;github_force_branch = "develop"

; This value allows to override the composer binary path to distinguish between multiple composer versions
; Either a binary name in $PATH as well as a fully qualified path is possible
; DEFAULT: composer
;composer_binary_path = "composer"

; By default Ampache doesn't install dev packages using the --no-dev parameter
; disable this setting to install dev packages (e.g. composer install --prefer-dist --no-interaction)
; DEFAULT: "true"
composer_no_dev = "true"

; This value allows to override the npm binary path to distinguish between multiple npm versions
; Either a binary name in $PATH as well as a fully qualified path is possible
; DEFAULT: npm
;npm_binary_path = "npm"

; We sometimes need to talk and will show a warning to admin users
; Enable this setting if you don't want to see warnings (When we enable them)
; DEFAULT: "false"
;hide_ampache_messages = "true"

;#########################################################
; Path Vars                                              #
;#########################################################

; The public http host of your server.
; If not set, retrieved automatically from client request.
; This setting is required for WebSocket server
; DEFAULT: none
;http_host = "localhost"

; The public http port of your server.
; If not set, retrieved automatically from client request.
; DEFAULT: none
;http_port = 80

; The public path to your Ampache install
; Do not put a trailing / on this path
; For example if your site is located at http://localhost
; than you do not need to enter anything for the web_path
; if it is located at http://localhost/music you need to
; set web_path to /music
; DEFAULT: none
;web_path = ""

; The local http url of your server.
; This is used to access the server from within the
; same host where ampache is running.
; For example, if the ampache server is not
; directly accessed via the public domain but via a reverse
; proxy, local_web_path would need to be changed
; to a localhost URL.
; If not set, retrieved automatically from server information.
; DEFAULT: none
;local_web_path = "http://localhost/ampache"

; The Ampache base URL is determined from web requests.
; When using CLI actions you don't send a web request meaning
; it can't be determined. This setting allows you to set a
; fallback when the base url can't be determined. Do not put a
; trailing slash or this will not work.
; DEFAULT: none
;fallback_url = "https://example.ampache.dev"

;#########################################################
; Database                                               #
;#########################################################

; Hostname of your database
; For socket authentication, set the path to socket file (e.g. /var/run/mysqld/mysqld.sock)
; DEFAULT: localhost
database_hostname = "localhost"

; Port to use when connecting to your database
; DEFAULT: none
;database_port = 3306

; Name of your Ampache database
; DEFAULT: none
database_name = "ampache"

; Username for your Ampache database
; DEFAULT: none
database_username = "username"

; Password for your Ampache database, this can not be blank
; this is a 'forced' security precaution, the default value
; will not work (except if using socket authentication)
; DEFAULT: none
database_password = "password"

; Set a default charset for your database
; Don't change this unless you understand how to BACKUP and RESTORE a database!
; DEFAULT: "utf8mb4"
;database_charset = "utf8mb4"

; Set a default collation for your database
; Don't change this unless you understand how to BACKUP and RESTORE a database!
;
; There are a ton of options but you'll probably want one of these.
; "utf8_unicode_ci" = Regular unicode (3 bytes per character)
; "utf8mb4_unicode_ci" = 4 bytes per character
; "utf8mb4_unicode_520_ci" = Supports more characters and is based on UCA 5.2.0 weight keys
;   http://www.unicode.org/Public/UCA/5.2.0/allkeys.txt
; DEFAULT: "utf8mb4_unicode_ci"
;database_collation = "utf8mb4_unicode_ci"

; Set a default table engine for your database
; Don't change this unless you understand how to BACKUP and RESTORE a database!
; DEFAULT: "InnoDB"
;database_engine = "InnoDB"

;#########################################################
; Session and Security                                   #
;#########################################################

; Cryptographic secret
; This MUST BE changed with your own secret key. Ampache-specific, just pick any random string you want.
secret_key = "abcdefghijklmnoprqstuvwyz0123456"

; Length that a session will last expressed in seconds. Default is
; one hour.
; DEFAULT: 3600
session_length = 3600

; Length that the session for a single streaming instance will last
; the default is two hours. With some clients, and long songs this can
; cause playback to stop, increase this value if you experience that
; DEFAULT: 7200
stream_length = 7200

; Live streams, remote/subsonic catalog tracks and previews are streamed back to the browser
; through this server (rather than a redirect), so the web player sees a same-origin stream it
; can route through Web Audio. This holds a php process open for as long as playback lasts, which
; some hosting providers kill after a few minutes. Set to false to always redirect the client to
; the remote url directly instead if your host does this (streams over 2-3 minutes cut off).
; DEFAULT: true
stream_proxy = "true"

; This length defines how long a 'remember me' session and cookie will
; last, the default is 86400, same as length. It is up to the administrator
; of the box to increase this, for reference 86400 = 1 day,
; 604800 = 1 week, and 2419200 = 1 month
; DEFAULT: 604800
remember_length = 604800

; Name of the Session/Cookie that will sent to the browser
; If you are using session_cookiesecure add the prefix __Secure-
; to restrict cookie access to HTTPS only (e.g. "__Secure-ampache")
; (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie-namecookie-value)
; DEFAULT: "ampache"
session_name = "ampache"

; Lifetime of the Cookie, 0 == Forever (until browser close), otherwise in terms of seconds
; If you want cookies to last past a browser close set this to a value in seconds.
; DEFAULT: 0
session_cookielife = 0

; Create cookies with the "secure" flag.
; Set to 1 (true) if you are running a secure site (HTTPS).
; DEFAULT: 0
session_cookiesecure = 0

; Auth Methods
; This defines which auth methods Auth will attempt to use and in which order.
; If auto_create isn't enabled the user must exist locally.
; Separate the values with a comma and do not add spaces between them.
; "http" trusts the server-set REMOTE_USER variable as an already-authenticated identity, with no
; password check. Only enable it behind a web server or reverse proxy that performs real authentication
; (mod_auth*, an SSO module) and guarantees no client request header can set REMOTE_USER itself.
; DEFAULT: mysql
; VALUES: mysql,ldap,http,pam,external,oidc
auth_methods = "mysql"

; External authentication
; This sets the helper used for external authentication.  It should conform to
; the interface used by mod_authnz_external
; DEFAULT: none
;external_authenticator = "/usr/sbin/pwauth"

; Automatic local password updating
; Determines whether successful authentication against an external source
; will result in an update to the password stored in the database.
; A locally stored password is needed for API access.
; DEFAULT: "false"
;auth_password_save = "true"

; Log out redirection target
; Defaults to our own login.php, but we can override it here if, for instance,
; we want to redirect to an SSO provider instead.
;logout_redirect = "http://sso.example.com/logout"

; Use Access List
; Toggle this on if you want Ampache to pay attention to the access list
; and only allow streaming/downloading/api-rpc from known hosts api-rpc
; will not work without this on.
; NOTE: Default Behavior is DENY FROM ALL
; DEFAULT: "true"
access_control = "true"

; Require Session
; If this is set to true Ampache will make sure that the URL passed when
; attempting to retrieve a song contains a valid Session ID This prevents
; others from guessing URL's. This setting is ignored if you have use_auth
; disabled.
; DEFAULT: "true"
require_session = "true"

; Webplayer Access Level
; Set a minimum access level required to access the webplayer.
; When a user does not meet the access requirements then you
; are blocked from using the webplayer.
; NOTE: This setting is ignored if you disable use_auth
; POSSIBLE VALUES: guest, user, content_manager, manager, admin
; DEFAULT: "user"
webplayer_level = "user"

; Require LocalNet Session
; If this is set to true then Ampache will require that a valid session
; is passed even on hosts defined in the Local Network ACL. This setting
; has no effect if access_control is not enabled
; DEFAULT: "true"
require_localnet_session = "true"

; Multiple Logins
; Added by Vlet 07/25/07
; When this setting is enabled a user may only be logged in from a single
; IP address at any one time, this is to prevent sharing of accounts
; DEFAULT: "false"
;prevent_multiple_logins = "true"

; Allow Embedding Ampache in Frames
; Whether a browser should be allowed to render a page in a <frame>, <iframe>, <embed> or <object>.
; This is used to avoid click-jacking attacks, by ensuring that their content is not embedded into other sites.
; By default Ampache pages can only be displayed in a frame on the same origin as the page itself.
; DEFAULT: "false"
;disable_xframe_sameorigin = "true"

; Add an API Key to the account when a new user is created
; API Keys allow a user to access the Ampache API and Subsonic API's without your password.
; https://https://ampache.org/api/#api-key
; DEFAULT: "true"
user_create_apikey = "true"

; Add a STREAMTOKEN to the account when a new user is created
; Streamtoken's allow a user to play without having a valid session (links do not expire)
; https://ampache.org/docs/old-information/ampache6-details#allow-permalink-user-streams
; DEFAULT: "true"
user_create_streamtoken = "true"

;#########################################################
; Metadata                                               #
;#########################################################

; This determines the tag order for all cataloged
; music. If none of the listed tags are found then
; Ampache will randomly use whatever was found.
; POSSIBLE VALUES: ape asf avi id3v1 id3v2 lyrics3 matroska mpeg quicktime riff
;     vorbiscomment
; DEFAULT: vorbiscomment id3v2 id3v1 quicktime matroska ape asf avi mpeg riff
getid3_tag_order = "vorbiscomment,id3v2,id3v1,quicktime,matroska,ape,asf,avi,mpeg,riff"

; This determines whether we try to autodetect the encoding for id3v2 tags.
; May break valid tags.
; DEFAULT: "false"
;getid3_detect_id3v2_encoding = "true"

; This determines the order in which metadata sources are used (and in the
; case of plugins, checked)
; POSSIBLE VALUES (builtins): filename and getID3
; POSSIBLE VALUES (plugins): MusicBrainz,TheAudioDb, plus any others you've installed.
; DEFAULT: getID3 filename
metadata_order = "getID3,filename"

; This determines the order in which metadata sources are used (and in the
; case of plugins, checked) for video files
; POSSIBLE VALUES (builtins): filename and getID3
; DEFAULT: "filename,getID3"
metadata_order_video = "filename,getID3"

; This determines if extended metadata grabbed from external services should be deferred.
; If enabled, extended metadata is retrieved when browsing the library item.
; If disabled, extended metadata is retrieved at catalog update.
; Today, only Artist information (summary, place formed, ...) can be deferred.
; DEFAULT: "true"
deferred_ext_metadata = "true"

; Some taggers use delimiters other than \0 for fields
; This list specifies possible delimiters additional to \0
; This setting takes a regex pattern. TODO: explain that this is not just for genres until we can replace this safely
; DEFAULT: "[/]{2}|[/\\|,;]" (Split on "//", "_", "/", "\", "|", "," and ";")
additional_genre_delimiters = "[/]{2}|[_/\\|,;]"

; Split Artist and Album Artist tags by regex; keeping the first result.
; Some clients add a \\ to their tags to support multiple artists. Ampache assumes that these tags are a single name.
; The string must not have spaces around the delimiter to allow for bands who use \\ in their name.
; NOTE: This is usually a single string tag so it's not enabled by default. The final regex is '/[^ ]\\\\[^ ]/'
; DEFAULT: "\\\\"
;split_artist_regex = "\\\\"

; Enable importing custom metadata from files.
; This will need a bit of time during the import. So you may want to disable this
; if you have troubles with huge databases.
; DEFAULT: "false"
;enable_custom_metadata = "true"

;#########################################################
; File Tags                                             #
;#########################################################

; This determines if we write metadata to files when modifying metadata, or only keep them in Ampache (the default).
; DEFAULT: "false"
;write_tags = "true"

;#########################################################
; Catalog                                                #
;#########################################################

; File Pattern
; This defines which file types Ampache will attempt to catalog
; You can specify any file extension you want in here separating them with a |
; DEFAULT: mp3|mpc|m4p|m4a|aac|ogg|oga|wav|aif|aiff|rm|wma|asf|flac|opus|spx|ra|ape|shn|wv
catalog_file_pattern = "mp3|mpc|m4p|m4a|aac|ogg|oga|wav|aif|aiff|rm|wma|asf|flac|opus|spx|ra|ape|shn|wv"

; Video Pattern
; This defines which video file types Ampache will attempt to catalog
; You can specify any file extension you want in here separating them with
; a | but Ampache may not be able to parse them
; DEAFULT: avi|mpg|mpeg|flv|m4v|mp4|webm|mkv|wmv|ogv|mov|divx|m2ts
catalog_video_pattern = "avi|mpg|mpeg|flv|m4v|mp4|webm|mkv|wmv|ogv|mov|divx|m2ts"

; Playlist Pattern
; This defines which playlist types Ampache will attempt to catalog
; You can specify any file extension you want in here separating them with
; a | but Ampache may not be able to parse them
; DEFAULT: m3u|m3u8|pls|asx|xspf
catalog_playlist_pattern = "m3u|m3u8|pls|asx|xspf"

; Prefix Pattern
; This defines which prefix Ampache will ignore when importing tags from
; your music. You may add any prefix you want separating them with a |
; DEFAULT: The|An|A|Die|Das|Ein|Eine|Les|Le|La
catalog_prefix_pattern = "The|An|A|Die|Das|Ein|Eine|Les|Le|La"

; Album Grouping Fields
; NOT RECOMMENDED. Which fields must agree for two songs to land on the same album row (`catalog` is
; always matched separately - an album is always scoped to its catalog and this can't be turned off).
; Drop a field to merge more loosely, e.g. remove barcode/catalog_number/version to stop different
; pressings of the same release from splitting into separate albums. You can even drop `name` or `year`
; if you really want to - nothing here stops you from choosing a value that merges albums you didn't
; mean to merge, so choose carefully.
; A dropped field is never stored on the album row at all (it's written as NULL, not kept from whichever
; song was scanned first), so any album it merges together loses that value entirely - with no UI
; indication, only a log warning on each such match.
; This is server-wide, not a user preference: it changes what rows get created during a scan, so it can't be
; a per-viewer setting. It only affects albums scanned/re-verified after the change; existing rows keep
; whatever grouping they were created with until their tags are re-read.
; POSSIBLE VALUES: name, year, prefix, mbid, mbid_group, album_artist, release_type, release_status, original_year, barcode, catalog_number, version
; DEFAULT: name,year,prefix,mbid,mbid_group,album_artist,release_type,release_status,original_year,barcode,catalog_number,version
;album_grouping_fields = "name,year,prefix,mbid,mbid_group,album_artist,release_type,release_status,original_year,barcode,catalog_number,version"

; List Header Alphabetical String Pattern
; This defines the string used in the list header when you check "Alphabet"
; in browse pages. Each character will be split into single items
; and will be applied as a regex to title of the objects being displayed.
; NOTE: '#' (Digits or Punctuation) and '*' (All results) are added separately
; DEFAULT: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
;alpha_string_pattern = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

; Ignore Pattern
; Ignore files that match this pattern
; You can specify any file extension you want in here separating them with a |
; DEFAULT: None
;catalog_ignore_pattern = "\(HTOA\)"

; Catalog disable
; This defines if catalog can be disabled without removing database entries
; WARNING: this increase sensibly sql requests and slow down Ampache a lot
; DEFAULT: "false"
;catalog_disable = "true"

; Deleted item history retention (days)
; How long to keep the deleted_song/deleted_video/deleted_podcast_episode archives
; (used to answer the API's deleted_* methods) before garbage collection prunes them.
; DEFAULT: 0 (keep the history forever)
;deleted_history_days = 365

; Catalog filter
; This defines if catalog can be filtered per user.
; The filters are set in the catalog management pages.
; WARNING: this increase sensibly sql requests and slow down Ampache a lot
; DEFAULT: "false"
;catalog_filter = "true"

; Delete from disk
; This determines if catalog manager users can delete media from disk.
; DEFAULT: "false"
;delete_from_disk = "true"

; Catalog verify by time
; Only verify the files that have been modified since the last verify.
; For large catalogs the verify process can be terribly long so this will help
; speed things up by checking modification date using filemtime() before loading
; DEFAULT: "false"
;catalog_verify_by_time = "true"

; Catalog verify by album groups
; Ampache will verify songs individually by default. If you enable this setting
; We will update each album instead of just the individual songs.
; DEFAULT: "false"
;catalog_verify_by_album = "true"

; Catalog clean empty directories
; When enabled, Clean also removes an empty directory from disk, not just its database row.
; DEFAULT: "false"
;catalog_clean_empty_dirs = "true"

;#########################################################
; Program Settings                                       #
;#########################################################

; Downsample Remote
; When enabled, any users who are not coming from a defined 'network' ACL
; will be automatically downsampled. ('transcoding' will be set to 'required')
; regardless of their preferences. This requires access_control to be enabled.
; NOTE:
;  * Local network users will disable all transcoding when enabled
;  * If transcode is set to 'never' this setting will be ignored
; DEFAULT: "false"
;downsample_remote = "true"

; Track User IPs
; If this is enabled Ampache will log the IP of every completed login
; it will store user, ip and time at one row per login. The results are
; displayed in Admin --> Users
; DEFAULT: "false"
;track_user_ip = "true"

; User IP Cardinality
; This defines how many days worth of IP history Ampache will track
; As it is one row per login on high volume sites you will want to
; clear it every now and then.
; DEFAULT: 42 days
;user_ip_cardinality = "42"

; Display this message on the Login page
; DEFAULT: ""
;login_message = "For the Love of Music"

; Allow Zip Download
; This setting allows/disallows using zlib to zip up an entire
; playlist/album for download. Even if this is turned on you will
; still need to enabled downloading for the specific user you
; want to be able to use this function
; DEFAULT: "false"
;allow_zip_download = "true"

; Allow Zip Types
; This setting allows/disallows zip download of specific object types
; If empty, all supported object types can be zipped.
; Otherwise, only the given object list can be zipped.
; POSSIBLE VALUES: artist, album, album_disk, playlist, search, song, tmp_playlist, video
; DEFAULT: none (every supported type)
;allow_zip_types = "album, album_disk"

; Art Zip Add
; This settings allows/disallows to include Album Art to the Zip
; If 'album_art_preferred_filename' exists this is included
; DEFAULT: "false"
;art_zip_add = "true"

; File Zip Comment
; This is an optional configuration option that adds a comment
; to your zip files, this only applies if you've got allow_zip_downloads
; DEFAULT: Ampache - Zip Batch Download
;file_zip_comment = "Ampache - Zip Batch Download"

; Waveform
; This settings tells Ampache to attempt to generate a waveform
; for each song. It requires transcode and encode_args_wav settings.
; You must also set tmp_dir_path in order for this to work
; DEFAULT: "false"
;waveform = "true"

; Waveform color
; The waveform color.
; DEFAULT: #FF0000
;waveform_color = "#FF0000"

; Waveform height
; The waveform height.
; DEFAULT: 32
;waveform_height = 32

; Waveform width
; The waveform width.
; DEFAULT: 400
;waveform_width = 400

; Waveform draw flat
; Don't print flat values on the canvas if not necessary
; NOTE: This was hardcoded to true and doesn't 'seem' to do anything
; DEFAULT: "true"
;waveform_drawflat = "false"

; Temporary Directory Path
; If Waveform is enabled this must be set to tell
; Ampache which directory to save the temporary file to.
; Do not put a trailing slash or this will not work.
; DEFAULT: "false"
;tmp_dir_path = "/tmp"

; This setting throttles a persons downloading to the specified
; bytes per second. This is not a 100% guaranteed function, and
; you should really use a server based rate limiter if you want
; to do this correctly.
; DEFAULT: off
; VALUES: any whole number (in bytes per second)
;throttle_download = 10

; This determines if a preview image should be retrieved from video files
; It requires encode_get_image transcode settings.
; DEFAULT: "false"
;generate_video_preview = "true"

; Uncomment if don't want Ampache to follow symlinks
; DEFAULT: "false"
;no_symlinks = "true"

; Use auth?
; If this is set to "true" Ampache will require a valid
; Username and password. If this is set to false then Ampache
; will not ask you for a username and password. false is only
; recommended for internal only instances
; DEFAULT: "true"
use_auth = "true"

; Default Auth Level
; If use_auth is set to false then this option is used
; to determine the permission level of the 'default' users
; NOTE: This setting only takes affect if use_auth is false
; POSSIBLE VALUES: guest, user, content_manager, manager, admin
; DEFAULT: guest
default_auth_level = "guest"

; Skip Timer Threshold
; This allows custom times to decide when a track is skipped
; Allows an integer to denote seconds, or a float to denote percentage
; POSSIBLE VALUES:
; 20 = 20 seconds.
; 0.3 = 30%
; DEFAULT: 20
;skip_timer = 20

; 5 Star Ratings
; This allows ratings for almost any object in Ampache
; It also allows users to flag objects as a favorite
; POSSIBLE VALUES: false true
; DEFAULT: "true"
ratings = "true"

; Enable filtering on browse pages for artists and albums.
; If you enable this setting the get_random and browse pages
; will remove artists and albums that are <= to that rating
; DEFAULT: "false"
;rating_browse_filter = "true"

; Set the rating that will be filtered
; e.g. 2 will filter 1 and 2 star albums and artists
; this setting must be set for the filter to work
; DEFAULT: null
;rating_browse_minimum_stars = 1

; By default Ampache assigns the rating set in files tags to
; the system user (-1). If you would like ALL file tags to be
; assigned to a specific user set their user ID here.
; DEFAULT: -1
;rating_file_tag_user = 1

; Rating Tag Compatability mode
; Lots of different players have lots of different scales for ratings
; Ampache has always kept a simple divide by 5 scale but lots of places don't
; Enable this option if your file tags are using this other scale
; DEFAULT: "false"
;rating_file_tag_compatibility = "true"

; Direct play
; This allows user to play directly a song or album
; POSSIBLE VALUES: false true
; DEFAULT: "true"
directplay = "true"

; Sociable
; This turns on / off all of the "social" features of Ampache
; default is on, but if you don't care and just want music
; turn this off to disable all social features.
; DEFAULT: "true"
sociable = "true"

; License
; This turns on / off all licensing features on Ampache
; DEFAULT: "false"
;licensing = "true"

; This options will turn on/off Demo Mode
; If Demo mode is on you can not play songs or update your catalog
; in other words.. leave this commented out
; DEFAULT: "false"
;demo_mode = "true"

; This options will turn on/off Simple User Mode
; If simple_user_mode is true you can not edit your profile or make
; changes to your account unless you are an admin
; This is for shared accounts or simple sites like the ampache demo
; DEFAULT: "false"
;simple_user_mode = "true"

; Caching
; This turns the caching mechanisms on or off. It batches the per-object lookups
; a page would otherwise repeat, which roughly halves the query count on a large
; browse, at the cost of higher memory use on very large catalogs. Set this to
; "false" if you have a big catalog and a low PHP memory limit.
; DEFAULT: "true"
;memory_cache = "false"

; Memory Limit
; This defines the "Min" memory limit for PHP if your php.ini
; has a lower value set Ampache will set it up to this. If you
; set it below 16MB getid3() will not work!
; DEFAULT: 32
;memory_limit = 32

; Album Art Preferred Filename
; Specify a filename to look for if you always give the same filename
; i.e. "folder.jpg" Ampache currently only supports jpg/gif and png
; Especially useful if you have a front and a back image in a folder
; comment out if Ampache should search for any jpg, gif or png
; DEFAULT: "folder.jpg"
;album_art_preferred_filename = "folder.jpg"

; Artist Art Preferred Filename
; Specify a filename to look for artist specific art, either in the
; same folder as your files or in the parent folder
; e.g. /mnt/music/Artist/Album/artist.jpg
;      /mnt/music/Artist/artist.jpg
; DEFAULT: "folder.jpg"
;artist_art_preferred_filename = "folder.jpg"

; Artist Art Dump Folder
; Specify a local folder to search for art using name/title to identify
; i.e. "/var/www/art/" is filled with artist images named by artist
; e.g. "Megadeth.jpg", "Judas Priest.png", "The Smashing Pumpkins.jpg"
; When enabled; gather_folder will check this folder for artist images
; DEFAULT: "false"
;artist_art_folder = "/var/www/art"

; Album Art Store on Disk
; This defines if arts should be stored on disk instead of database.
; You must also set a local_metadata_dir below. This folder should be
; a local folder that is not accessible from a browser.
; DEFAULT: "false"
;album_art_store_disk = "true"

; Local Metadata Directory
; This define a local metadata directory OUTSIDE the web path with write access.
; This is used to store heavy data if enabled (album art, waveforms, etc)
; DEFAULT: none
;local_metadata_dir = "/var/www/metadata"

; Maximal upload size
; Specify the maximal allowed upload size for images, in bytes.
; DEFAULT: 1048576
;max_upload_size = 1048576

; Album Art Minimum Width
; Specify the minimum width for arts (in pixel).
; DEFAULT: 30
album_art_min_width = 30

; Album Art Maximum Width
; Specify the maximum width for arts (in pixel).
; DEFAULT: none
;album_art_max_width = 1024

; Album Art Minimum Height
; Specify the minimum height for arts (in pixel).
; DEFAULT: 30
album_art_min_height = 30

; Album Art Maximum Height
; Specify the maximum height for arts (in pixel).
; DEFAULT: none
;album_art_max_height = 1024

; Public Images
; Disable this option to require a valid user session for viewing images.
; When enabled, images can be displayed without checking for an active session,
; bypassing `use_auth` and `require_session` settings.
; If disabled, image links will require a valid session to be accessed. A session
; cookie, an `auth` parameter, an `apiKey` or a Subsonic token all satisfy this.
; Disabling only takes effect when `use_auth` and `require_session` are both on;
; with either of them off images stay public whatever this is set to.
; Clients that cannot present a session are not sent image links at all, so the
; Subsonic albumInfo/artistInfo image urls are empty while this is disabled.
; DEFAULT: "true"
public_images = "true"

; Resize Images * Requires PHP-GD *
; Set this to true if you want Ampache to resize the Album
; art on the fly, this increases load time and CPU usage
; and also requires the PHP-GD library. This is very useful
; If you have high-quality album art and a small upload cap
; DEFAULT: "false"
;resize_images = "true"

; Upscale Images * Requires PHP-GD *
; Disable this option to prevent upscaling of images.
; By default Ampache will scale images to display size * 2
; This is useful for high DPI displays but does increase load times
; DEFAULT: "true"
;upscale_images = "false"

; Playlist Cover Art
; Set this to true if you want Ampache to generate
; cover art for playlists automatically based on
; the content.
; DEFAULT: "true"
playlist_art = "true"

; Playlist Cover Art Mosaic * Requires PHP-GD *
; When playlist_art is enabled, stitch up to nine covers from the
; playlist into a single grid image instead of picking one at random.
; Playlists with fewer than four distinct covers fall back to a single cover.
; DEFAULT: "true"
playlist_art_mosaic = "true"

; Playlist Cover Art Mosaic Fallback * Requires PHP-GD *
; Show a generated mosaic for a playlist that has no art of its own, instead of the
; blank placeholder image. The covers are picked using the playlist contents as a seed,
; so the same playlist always gets the same mosaic until its items change.
; The generated image is then stored as that playlist's art, so it is only built once.
; DEFAULT: "false"
;playlist_art_mosaic_fallback = "true"

; Statistical Graphs
; Set this to false if you don't want Ampache to generate statistical graphs on usages / users.
; The graph queries read the whole object_count table, so turning this off is worth doing on a
; large catalog if you never look at the charts.
; Charts are drawn by goat1000/svggraph, a normal (non-dev) requirement, so nothing extra to install.
; DEFAULT: "true"
statistical_graphs = "true"

; Stats Consolidation Threshold
; Number of days of detailed play history to keep in the object_count table.
; When set to a value greater than 0, the cleanup:consolidateStats CLI command
; will aggregate older rows into the object_count_summary table and move the
; detail rows to the object_count_archive table, keeping object_count small on
; long-running servers. Nothing is deleted: the archive keeps every media row
; (song, video, podcast_episode, playlist, live_stream) with its exact date,
; agent and location, for streams, skips and downloads alike. Parent rows
; (album, album_disk, artist, podcast) are not archived because
; cleanup:restoreStats regenerates them from the media rows, which resolves the
; parent that is correct now rather than a stored id that a merge or a re-tag
; may have moved. Run cleanup:restoreStats to put it all back.
; Stored counters stay exact (total/skip counts, played flags, all-time
; per-object and per-user counts, streamed data size, auto-rating plugin).
; Smart playlist / search play-history rules (Played, Played by Me, My Last
; Play/Skip, # Played/Skipped by Me, ...) also stay accurate: once consolidation
; is enabled they read object_count_summary alongside object_count.
; The following only evaluate the retained detail window after consolidation:
; period-based statistics (trending, recent, graphs, Last.fm export) which are
; windowed by design, live all-time "top" charts computed without cron_cache
; (the cron cache merges consolidated counts into its 0 threshold entries),
; browsing sorted by play count, and the "Recently Played" smart playlist rule.
; "Recently Played" is the one exception that cannot be made exact: it orders by
; individual play timestamps, and consolidation archives those older detail rows
; (into object_count_archive) rather than keeping them in object_count, so it
; only reaches back as far as your retained window until you run
; cleanup:restoreStats.
; When set to 0 (or unset) consolidation is disabled.
; DEFAULT: 0
;stats_consolidate_threshold = 730

; Art Gather Order
; Simply arrange the following in the order you would like
; Ampache to search. If you want to disable one of the search
; methods simply leave it out. DB should be left as the first
; method unless you want it to overwrite what's already in the
; database
; POSSIBLE VALUES (builtins): db tags folder spotify musicbrainz google
; POSSIBLE VALUES (plugins): TheAudioDb,Flickr
; DEFAULT: db,tags,folder,spotify,musicbrainz
art_order = "db,tags,folder,spotify,musicbrainz"

; Gather song art
; Gather song art additionally to the album art. This will add each
; image of a song into the database. If your database contains
; many songs not related to an album this should possibly be set to true.
; Otherwise for an environment that contains mainly full albums
; this should remain false to avoid multiple entries of the same image.
; You need to set show_song_art to true if you want to make the song images visible.
; DEFAULT = false
;gather_song_art = "true"

; Show song art
; Show song art instead of album art in web UI and Subsonic API.
; This will only work when gather_song_art is set to true AND when
; there is song art in the database.
; DEFAULT: "false"
;show_song_art = "true"

; Spotify Album art search filter
; Narrow the search using additional filters.
; POSSIBLE VALUES: artist,(year:1991 or year:1991-2000)
; POSSIBLE VALUES: empty string("") or commented out for no filter
; DEFAULT: none;
;spotify_art_filter = "artist"

; Art search limit
; Limit the total images returned
; DEFAULT: 15
;art_search_limit = 15

; Recommendations
; Set this to true to enable display of similar artists or albums
; while browsing. Requires Last.FM.
; DEFAULT: "false"
;show_similar = "true"

; Hide Searches from the API
; Set this to true and the get_indexes and playlists methods will not automatically include
; searches/smart lists in the results.
; Older versions of the Kodi Add-on will require this for playlists to work
; DEFAULT: "false"
;hide_search = "true"

; Allow or disallow upload scripts on the server
; Enable this if you trust your users
; DEFAULT: "false"
;allow_upload_scripts = "true"

;#########################################################
;      API keys                                          #
;#########################################################

; Last.FM API Key
; Set this to your Last.FM api key to actually use Last.FM for
; recommendations and metadata.
lastfm_api_key = "d5df942424c71b754e54ce1832505ae2"

; Last.FM API secret
; Set this to your Last.FM api secret to actually use Last.FM for
; scrobbling.
; DEFAULT: none
lastfm_api_secret = ""

; Spotify client id
; Set this to your Spotify client id to actually use Spotify for
; accessing their catalog API. (https://developer.spotify.com/dashboard/)
; NOTE: Since 2026-03-09 Spotify restricts Web API access to accounts with a
; Spotify Premium subscription. Art collection through Spotify no longer works
; with a free account; use another art source (e.g. musicbrainz) instead.
; https://developer.spotify.com/blog/2026-02-06-update-on-developer-access-and-platform-security
; DEFAULT: none
;spotify_client_id = ""

; MusicBrainz API username
; If you make a lot of requests you should use your MusicBrainz API account
; This can help with rate limiting as MusicBrainz servers limit all requests
; Your account can be created at https://musicbrainz.org/register
; DEFAULT: none
;musicbrainz_username = ""

; MusicBrainz API password
; If you make a lot of requests you should use your MusicBrainz API account
; This can help with rate limiting as MusicBrainz servers limit all requests
; Your account can be created at https://musicbrainz.org/register
; DEFAULT: none
;musicbrainz_password = ""

; Spotify client secret
; Both id and secret are required to access the spotify catalog.
; DEFAULT: none
;spotify_client_secret = ""

; Wanted
; Set this to true to enable display missing albums and the
; possibility for users to mark it as wanted.
; DEFAULT: "false"
;wanted = "true"

; Wanted types
; Set the allowed types of wanted releases (album,compilation,single,ep,live,remix,promotion,official)
; DEFAULT: album,single,ep,official
wanted_types = "album,single,ep,official"

; Wanted Auto Accept
; Mark wanted requests as accepted by default (no content manager agreement required)
; DEFAULT: "false"
;wanted_auto_accept = "true"

; Labels
; Use labels to browse artists per label membership.
; DEFAULT: "false"
;label = "true"

; Label Ignore Pattern
; Publisher tags often hold placeholder text instead of a real label, and these are neither
; created during a scan nor kept by the catalog clean up. The value is a regex, matched
; case-insensitively against the whole name, and replaces the default shown below rather than
; adding to it. Set it to a pattern that cannot match (for example "(?!)") to keep every name.
; The last branch of the default drops names holding fewer than two letters or digits, such as
; "/<" or "/v/", while leaving short real labels like "XL" and "4AD" alone.
; DEFAULT: "^\[no label\]|^not on label\b|^\[fwd:|^self[\s-]*released?\b|\(self[\s-]*released?\)|^[^\p{L}\p{N}]*[\p{L}\p{N}]?[^\p{L}\p{N}]*$"
;label_ignore_pattern = "^\[no label\]|^not on label\b"

; Broadcasts
; Allow users to broadcast music so other users can listen along in step with them.
; Needs the websocket server running as well: bin/cli run:websocket -- see docs/BROADCAST.md
; This feature requires advanced server configuration, please take a look on the wiki for more information.
; DEFAULT: "false"
;broadcast = "true"

; Live Streams
; Set this to true to enable live streams (radio) and the
; possibility for users to add new live streams.
; DEFAULT: "true"
live_stream = "true"

; Podcasts
; Set this to true to enable podcasts and the
; possibility for admins to subscribe to new podcasts.
; DEFAULT: "true"
podcast = "true"

; Web Socket address
; The address the BROWSER opens for listen-along broadcasting, so it must be reachable from the
; browser, and must use wss:// when Ampache is served over https or the browser blocks it.
; Broadcasting also needs the websocket server running: bin/cli run:websocket
; See docs/BROADCAST.md
; DEFAULT: determined automatically (wss when web_path is https, otherwise ws)
;websocket_address = "ws://localhost:8100"

; Refresh Limit
; This defines the default refresh limit in seconds for
; pages with dynamic content, such as Now Playing
; DEFAULT: 60
; Possible Values: Int > 5
refresh_limit = "60"

; Embedded Now Playing Page
; Set this to true to enable the embedded Now Playing page (now_playing.php).
; This page allows for embedding a Now Playing badge into a stream
; or status page. Use with the parameter 'user_id' to filter by a
; specific user. This page is like rss in that it doesn't require a
; login to view.
; DEFAULT: "false"
;use_now_playing_embedded = "true"

; Now Playing Refresh Limit
; This defines the refresh limit in seconds for the
; Now Playing embedded page. This (now_playing.php) is not
; part of the normal application and is designed to be
; embedded in another app, like a stream or status page.
; If this value is not valid, automatic refresh will be disabled.
; DEFAULT: -1
; Possible Values; Int > 1
;now_playing_refresh_limit = "-1"

; Now Playing Custom CSS
; This defines the custom css file for the Now Playing embedded
; page. This (now_playing.php) is not part of the normal
; application and is designed to be embedded in another app, like
; a stream or status page.
; If this value is not set, no CSS will be used. Custom CSS can
; still be applied in the other application, like OBS.
; DEFAULT: "templates/now-playing.css"
;now_playing_css_file = "templates/now-playing.css"

; Footer Statistics
; This defines whether statistics (Queries, Cache Hits, Load Time)
; are shown in the page footer.
; DEFAULT: "true"
show_footer_statistics = "true"

; RSS Feeds
; Set this to true to enable rss feeds.
; (latest albums, shouts, albums of artist, ...)
; use_rss = false (values true | false)
; DEFAULT: "false"
;use_rss = "true"

; Set the itunes:explicit flag sent in rss feeds. Podcast directories
; require the tag, Ampache has no per-item rating to fill it from.
; DEFAULT: "false"
;rss_explicit = "true"

; Serve rss feeds under /rss/{object_type}/{object_id}/{slug} instead of a
; query string. Requires the rewrite rules shipped in public/rss/.htaccess.dist
; (apache) or docs/examples/nginx-site.conf (nginx).
; DEFAULT: "false"
;rss_beautiful_url = "true"

; Send X-Robots-Tag: noindex with rss feeds. Feeds are meant to be found, and
; podcast directories skip a feed marked noindex, so this is off by default.
; Note that the shipped web server configs send X-Robots-Tag: none site wide.
; DEFAULT: "false"
;rss_noindex = "true"

; Apple sub-category advertised by podcast feeds, on top of the "Music"
; category. Valid values: Music Commentary, Music History, Music Interviews
; DEFAULT: ""
;rss_subcategory = "Music Commentary"

; This setting allows themes to overwrite PHP template files. This can be really
; dangerous. Do this only if you trust every theme in your themes/ directory.
; DEFAULT: "false"
;allow_php_themes = "true"

;#########################################################
; Debugging                                              #
;#########################################################

; Debug
; If this is enabled Ampache will write debugging information to the log file
; DEFAULT: "false"
;debug = "true"

; Debug Level
; This should always be set in conjunction with the
; debug option, it defines how prolific you want the
; debugging in Ampache to be. values are 1-5.
; 1 == Basic Errors
; 2 == Errors + Failures (login attempts etc.)
; 3 == Full Error Information
; 4 == General Information
; 5 == Full Information (cataloging progress etc.)
; DEFAULT: 5
debug_level = 5

; Path to Log File
; This defines where you want Ampache to log events to
; this will only happen if debug is turned on. Do not
; include trailing slash. You will need to make sure that
; the specified directory exists and your HTTP server has
; write access.
; DEFAULT: none
log_path = "/var/log/ampache"

; Log filename pattern
; This defines where the log file name pattern
; %name.%Y%m%d.log will create a different log file every day.
; DEFAULT: %name.%Y%m%d.log
log_filename = "%name.%Y%m%d.log"

; Log Time Format
; This defines the time format used in the log files.
; See https://www.php.net/manual/en/function.date.php for possible formats.
; DEFAULT: c (ISO 8601 date)
log_time_format = "c"

; Load the debug webplayer
; This will load the *.js player instead of the *.min.js player
; The unminified player has a lot of console.log() statements in the code.
; You can make changes and then check how the player is functioning.
; DEFAULT: "false"
;webplayer_debug = "true"

; Load Vite dev environment
; This will load the Vite dev server scripts from scripts.inc.php
; Not needed unless you're interested in Ampache JS dev
; https://vite.dev/guide/
; DEFAULT: "false"
;vite_dev = "true"

;#########################################################
; Encoding Settings                                      #
;#########################################################

; Charset of generated HTML pages
; Default of UTF-8 should work for most people
; DEFAULT: "UTF-8"
site_charset = "UTF-8"

; Locale Charset
; Local charset (mainly for file operations) if different
; from site_charset.
; This is disabled by default, enable only if needed
; (for Windows please set lc_charset to ISO8859-1)
; DEFAULT: ISO8859-1
;lc_charset = "ISO8859-1"

; Multibyte
; See http://php.net/manual/mbstring.supported-encodings.php
; If you want ID3v1 encoding detection to work, you should uncomment this line
; so that the ordering is sane.
; DEFAULT: auto
;mb_detect_order = "ASCII,UTF-8,EUC-JP,ISO-2022-JP,SJIS,JIS"

;#########################################################
; Custom actions (optional)                              #
;#########################################################

; Your custom play action title
;custom_play_action_title_0 = ""
; Your custom play action icon name (stored as /images/icon_[your_image].png)
;custom_play_action_icon_0 = ""
; Your custom action script, where:
;   - %f: the media file path
;   - %c: the excepted codec target (mp3, ogg, ...)
;   - %a: the artist name
;   - %A: the album name
;   - %t: the song title
; DEFAULT: none
;custom_play_action_run_0 = ""

; Example for Karaoke playing
;custom_play_action_title_0 = "Karaoke"
;custom_play_action_icon_0 = "microphone"
;custom_play_action_run_0 = "sox \"%f\" -p oops | ffmpeg -i pipe:0 -f %c pipe:1"

;#########################################################
; LDAP login info (optional)                             #
;#########################################################

; LDAP server URL (required)
; DEFAULT: none
;ldap_url = "ldap://localhost/"
;ldap_url = "ldaps://localhost/"

; LDAP credentials (optional)
; DEFAULT: none
;ldap_username = ""
;ldap_password = ""

; LDAP Base DN for the search (required)
; DEFAULT: none
;ldap_search_dn = "ou=People,dc=yoursubdomain,dc=yourdomain,dc=yourtld"

; LDAP objectClass (required)
; DEFAULT: none
;ldap_objectclass = "posixAccount"          ; OpenLDAP
;ldap_objectclass = "organizationalPerson"  ; Microsoft Active Directory

; LDAP filter for search (required)
; DEFAULT: none
;ldap_filter = "(uid=%v)"                   ; OpenLDAP
;ldap_filter = "(sAMAccountName=%v)"        ; Microsoft Active Directory

; Require that the user is in a specific group (optional)
; DEFAULT: none
;ldap_require_group = "cn=yourgroup,ou=yourorg,dc=yoursubdomain,dc=yourdomain,dc=yourtld"

; LDAP name field
; DEFAULT: cn
;ldap_name_field = "cn"
;ldap_name_field = "displayName"

; LDAP email field
; DEFAULT: mail
;ldap_email_field = "mail"

; LDAP avatar field
; DEFAULT: none
;ldap_avatar_field = "jpegPhoto"

; LDAP avatar mime type
; DEFAULT: image/jpeg
;ldap_avatar_mime = "image/jpeg"

; LDAP protocol version to use
; DEFAULT: 3
;ldap_protocol_version = 3

; LDAP StartTLS
; DEFAULT: "false"
;ldap_start_tls = "true"

; LDAP member attribute name.
; That's the name of the attribute of the group that will contain
; the usernames.
; DEFAULT: member
;ldap_member_attribute = "member"
;ldap_member_attribute = "memberuid"

;#########################################################
; OpenID Connect (OIDC) login info                       #
;#########################################################

; Add "oidc" to auth_methods above to enable this, e.g. auth_methods = "mysql,oidc"
; Keep "mysql" in the list as well, or local accounts (including the admin) can no
; longer log in.
;
; Users are matched to a local account by the username claim (oidc_username_claim).
; Enable auto_create to let Ampache create accounts on first login and use
; auto_user to pick the access level they are created with.
;
; Register this exact redirect uri with your identity provider (no query string,
; it needs no webserver configuration):
;
;     <your web_path>/oidc/
;
; e.g. https://music.example.com/oidc/ or https://example.com/ampache/oidc/
;
; Only one provider is supported at a time.
;
; To sign out of the provider as well as Ampache, point logout_redirect
; at the end_session_endpoint of your provider.

; Base url of the identity provider. Ampache appends
; /.well-known/openid-configuration to it to discover the endpoints.
; DEFAULT: none
;oidc_url = "https://idp.example.com/realms/ampache"

; Expected "iss" value of the id token, if it differs from oidc_url.
; DEFAULT: none (oidc_url is used)
;oidc_issuer = "https://idp.example.com/realms/ampache"

; Credentials of the client (app registration) you created at the provider.
; It has to be a confidential client using the authorization code grant with
; PKCE (S256) enabled.
; DEFAULT: none
;oidc_client_id = "ampache"
;oidc_client_secret = ""

; Comma separated list of scopes to request.
; DEFAULT: openid,profile,email
;oidc_scopes = "openid,profile,email"

; Claim holding the Ampache username. With auto_create enabled the local account
; is created with this name, so pick a claim which does not change.
; DEFAULT: preferred_username
;oidc_username_claim = "preferred_username"

; Claims copied onto the local account. Enable external_auto_update below to keep
; them in sync on every login, otherwise they only fill in empty fields.
; DEFAULT: name / email
;oidc_name_claim = "name"
;oidc_email_claim = "email"

; Optional additional claim mappings. Leave these unset to skip them.
; DEFAULT: none
;oidc_website_claim = "website"
;oidc_state_claim = ""
;oidc_city_claim = ""

; Ask the userinfo endpoint for the claims above. When this is disabled, or the
; provider has no userinfo endpoint, the verified id token claims are used.
; DEFAULT: "true"
;oidc_use_userinfo = "false"

; Text of the login button.
; DEFAULT: Sign in with OpenID Connect
;oidc_button_text = "Sign in with <PROVIDER> SSO"

; Skip the Ampache login form and go straight to the identity provider.
; Use <your web_path>/login.php?force_display=1 to reach the local form,
; which you still need for local accounts.
; DEFAULT: "false"
;oidc_auto_redirect = "true"

; Endpoints for providers which do not publish a discovery document.
; DEFAULT: none
;oidc_authorization_endpoint = ""
;oidc_token_endpoint = ""
;oidc_userinfo_endpoint = ""
;oidc_jwks_uri = ""
;oidc_end_session_endpoint = ""

; CA bundle used to verify the certificate of the identity provider.
; DEFAULT: none (the system CA store is used)
;oidc_cert_path = "/etc/ssl/certs/ca-certificates.crt"

; Disable TLS verification when talking to the identity provider.
; Never enable this outside of a development environment.
; DEFAULT: "false"
;oidc_disable_ssl_verify = "true"

;#########################################################
; Proof of work                                          #
;#########################################################

; Ampache can make a browser solve a small computational puzzle before it is
; allowed through certain endpoints. The puzzle is trivial for one visitor and
; expensive for a bot doing it thousands of times, which is what makes it worth
; having in front of registration and batch downloads.
;
; It needs JavaScript and Web Workers: a client without them cannot get through
; a protected endpoint at all. Do not protect anything you want indexed.
;
; It stops crawlers, not a determined attacker: native SHA-256 outruns the
; browser solver by orders of magnitude. Pair it with a rate limit.

; Who has to solve a challenge.
; POSSIBLE VALUES: off, guest, all
;   off   - disabled entirely, nothing is issued or checked
;   guest - only visitors who are not logged in
;   all   - everybody, logged in or not
; DEFAULT: "off"
;pow_mode = "guest"

; Which endpoints are protected, as a comma separated list of scopes.
;   register - the public registration form
;   batch    - zip downloads of an album, artist, playlist and so on
;   download - single track downloads through stream.php
; `download` is off by default and worth thinking about before enabling: it
; guards the link the interface hands out, not the file itself, which
; play/index.php still serves to anything holding a valid session. It also sits
; in front of a one click action, so every download pays the wait.
; Leave it out entirely and "register, batch" applies; set it to "" to protect
; nothing while keeping pow_mode on.
; POSSIBLE VALUES: register, batch, download
; DEFAULT: "register, batch"
;pow_protected = "register, batch"

; How hard the puzzle is, counted in leading zero bits of the hash.
; Each extra bit doubles the work. 21 is roughly two to eight seconds on a
; current desktop and noticeably longer on an old phone. Drop to 18 if your
; visitors are mostly on mobile, raise to 23 if you are being hammered.
; 26 is the ceiling and already means about a minute of solving on ordinary
; hardware, several on an old phone: treat it as a siege setting, not a default.
; Values outside 8-26 are clamped.
; DEFAULT: 21
;pow_difficulty = 21

; How long an issued challenge stays valid, in seconds. Long enough to fill in
; a registration form without rushing, short enough that a harvested challenge
; is not worth keeping. It also bounds how long a solved answer has to be
; remembered, and therefore the size of the `pow_challenge` table, which only
; ever holds answers still inside this window.
; DEFAULT: 1800
;pow_ttl = 1800

; Access level waved through when pow_mode is "all", so admins and scripted
; maintenance are not made to solve a puzzle on every download.
; POSSIBLE VALUES: 0 (nobody exempt), 25 (user), 50 (content manager),
;                  75 (manager), 100 (admin)
; DEFAULT: 0
;pow_exempt_level = 100

; Log every attempt the check blocks: which scope, why, which user if they were
; logged in, and from which address and browser. The line is timestamped by the
; logger like any other Ampache log entry.
; Off by default because a site being crawled produces one line per bot hit,
; which is most of the traffic. Turn it on to tune pow_difficulty or to find out
; who is getting caught, rather than leaving it running.
; DEFAULT: "false"
;pow_log_failures = "true"

;#########################################################
; Public Registration settings, defaults to disabled     #
;#########################################################

; This setting will silently create an Ampache account
; for anyone who can login using LDAP (or any other login
; extension). The default is to create new users as guests
; see auto_user config option if you would like to change this
; DEFAULT: "false"
;auto_create = "true"

; This setting will silently update an Ampache account's
; information for anyone who can login using LDAP
; (or any other login extension).
; DEFAULT: "false"
;external_auto_update = "true"

; This setting turns on/off public registration. It is
; recommended you leave this off, as it will allow anyone to
; sign up for an account on your server.
; REMEMBER: don't forget to set the mail from address further down in the config.
; If you don't have an email server, make sure to enable user_no_email_confirm below
; DEFAULT: "false"
;allow_public_registration = "true"

; Allow users to reset a forgotten password by email.
; Turning this off hides the "Lost Password" link AND rejects lostpassword.php as well as the
; API's lost_password action, so a stranger can't trigger reset mail to your users by posting
; to either of them directly.
; Only relevant on a server with mail enabled; without mail the feature is already off.
; DEFAULT: "false"
;allow_lost_password = "true"

; Show the "Mini player" button on the login form, which sends you to the
; cut down player at /m/ after logging in instead of the full interface.
; This only hides the button; /m/ stays reachable by url either way.
; DEFAULT: "true"
;show_mini_player = "false"

; Require Captcha Text on Image confirmation
; Turning this on requires the user to correctly
; type in the letters in the image created by Captcha
; Default is off because its very hard to detect if it failed
; to draw, or they failed to enter it.
; DEFAULT: "false"
;captcha_public_reg = "true"

; This setting turns on/off admin notification of registration.
; DEFAULT: "false"
;admin_notify_reg = "true"

; This setting determines whether the user will be created as a disabled user.
; If this is on, an administrator will need to manually enable the account
; before it's usable.
; DEFAULT: "false"
;admin_enable_required = "true"

; This setting will allow all registrants/ldap/http users
; to be auto-approved as a user. By default, they will be
; added as a guest and must be promoted by the admin.
; POSSIBLE VALUES: guest, user, admin
; DEFAULT: guest
;auto_user = "guest"

; This will display the user agreement when registering
; For agreement text, edit config/registration_agreement.php
; User will need to accept the agreement before they can register
; DEFAULT: "false"
;user_agreement = "true"

; This disable email confirmation when registering.
; DEFAULT: "false"
;user_no_email_confirm = "true"

; This will display the cookie disclaimer (EU Cookie Law)
; DEFAULT: "false"
;cookie_disclaimer = "true"

; The fields that will be shown on Registration page
; If a user wants to register.
; Username and email fields are forced.
; POSSIBLE VALUES: fullname,website,state,city
; DEFAULT: "fullname,website"
registration_display_fields = "fullname,website"

; The fields that will be mandatory
; This controls which fields are mandatory for registration.
; Username and email fields are forced mandatory.
; POSSIBLE VALUES: fullname,website,state,city
; DEFAULT: "fullname"
registration_mandatory_fields = "fullname"

; User create field validation
; Regex filters for username, fullname and website validation
; If you run a site with public registration you may  want to
; filter these fields for spam or other unwanted content.
; DEFAULT: none
;user_name_filter = "https?:\/\/"
;user_website_filter = "\[url=http"

;#########################################################
; These options control the dynamic downsampling based   #
; on current usage                                       #
; *Note* Transcoding must be enabled and working         #
;#########################################################

; NOTE: `max_bit_rate` and `min_bit_rate` have MOVED to per-user preferences
; (Preferences -> Streaming -> Transcoding). The values below are only read once,
; at upgrade time, to seed each user's default; once the preference exists the
; config value is ignored. Leave them commented out. All bitrate values are now
; expressed in bits per second (bps), NOT kilobits (e.g. 576000 = 576 kbps).

; Attempt to optimize bandwidth by dynamically lowering the bit rate of new
; streams. Since the bit rate is only adjusted at the beginning of a song, the
; actual cumulative bitrate for concurrent streams can be up to around
; double the configured value. It also only applies to streams that are
; transcoded.
; UNIT: bits per second (bps)
; DEFAULT: none
;max_bit_rate = 576000

; New dynamically downsampled streams will be denied if they are forced below
; this value.
; UNIT: bits per second (bps)
; DEFAULT: 8000
;min_bit_rate = 48000

;#########################################################
; Transcode Settings                                     #
;#########################################################

; These are commands used to transcode non-streaming
; formats to the target file type for streaming.
; This can be useful in re-encoding file types that don't stream
; very well, or if your player doesn't support some file types.
;
; 'Downsampling' will also use these commands.
;
; To state the bleeding obvious, any programs referenced in the transcode
; commands must be installed, in the web server's search path (or referenced
; by their full path), and executable by the web server.

; Input type selection
; TYPE is the extension. 'allowed' certifies that transcoding works properly for
; this input format. 'required' further forbids the direct streaming of a format
; (e.g. if you store everything in FLAC, but don't want to ever stream that.)
; transcode_TYPE = {allowed|required|false}
; DEFAULT: "false"
;;; Audio
;transcode_m4a = "allowed"
;transcode_flac = "allowed"
;transcode_mpc = "allowed"
;transcode_ogg = "allowed"
;transcode_oga = "allowed"
;transcode_opus = "allowed"
;transcode_wav = "allowed"
;transcode_wma = "allowed"
;transcode_aif = "allowed"
;transcode_aiff = "allowed"
;transcode_ape = "allowed"
;transcode_shn = "allowed"
;transcode_mp3 = "allowed"
;;; Video
;transcode_avi = "allowed"
;transcode_flv = "allowed"
;transcode_mkv = "allowed"
;transcode_mpg = "allowed"
;transcode_mpeg = "allowed"
;transcode_m4v = "allowed"
;transcode_mp4 = "allowed"
;transcode_mov = "allowed"
;transcode_wmv = "allowed"
;transcode_ogv = "allowed"
;transcode_divx = "allowed"
;transcode_m2ts = "allowed"
;transcode_webm = "allowed"

; NOTE: `encode_target`, `encode_video_target`, `encode_player_webplayer_target`
; and `encode_player_api_target` have MOVED to per-user preferences
; (Preferences -> Streaming -> Transcoding). The values below are only read once,
; at upgrade time, to seed each user's default; once the preference exists the
; config value is ignored. Leave them commented out.

; Default audio output format
; DEFAULT: none
;encode_target = "mp3"

; Default video output format
; DEFAULT: none
;encode_video_target = "webm"

; Override the default output format on a per-type basis, for example,
; to stream lossless encoded files in lossy formats.
; encode_target_TYPE = TYPE
; DEFAULT: none
;encode_target_flac = "opus"

; Override the default TYPE transcoding behavior on a per-player basis, for example,
; to stream lossless using the api and lossy using the web interface.
; transcode_player_PLAYER_TYPE = TYPE
; Valid PLAYER is: webplayer, api
; DEFAULT: none
;transcode_player_webplayer_m4a = "required"
;transcode_player_webplayer_flac = "required"
;transcode_player_webplayer_mpc = "required"

; Override the default output format on a per-player basis
; MOVED to per-user preferences (Preferences -> Streaming -> Transcoding); the
; values below only seed the default at upgrade time and are otherwise ignored.
; encode_player_PLAYER_target = TYPE
; Valid PLAYER is: webplayer, api
; DEFAULT: none
;encode_player_webplayer_target = "mp3"
;encode_player_api_target = "mp3"

; Allow clients to override transcode settings (output type, bitrate, codec ...)
; DEFAULT: "true"
transcode_player_customize = "true"

; Command configuration. Substitutions will be made as follows:
; %FILE% => filename
; %BITRATE% => target bit rate in bits per second (as chosen by the admin or
; users in the preferences, if transcode_player_customize = "true")
; %MAXBITRATE% => ceiling bit rate in bits per second, from the `maxbitrate`
; stream URL argument. Both are plain bps values, so do NOT add a `k` suffix.
; You can do fancy things like VBR, but consider whether the consequences are
; acceptable in your environment.

; Master transcode command
; transcode_cmd should be a single command that supports multiple file types,
; such as ffmpeg or avconv. It's still possible to make a configuration that's
; equivalent to the old default, but if you find that necessary you should be
; clever enough to figure out how on your own.
; DEFAULT: none
;transcode_cmd = "ffmpeg"
;transcode_cmd = "avconv"
;transcode_cmd = "/usr/bin/neatokeen"

; Transcode input file argument
transcode_input = "-i %FILE%"

; Specific transcode commands
; It shouldn't be necessary in most cases, but you can override the transcode
; command for specific source formats.  It still needs to accept the
; encoding arguments, so the easiest approach is to use your normal command as
; a clearing-house.
; transcode_cmd_TYPE = TRANSCODE_CMD
;transcode_cmd_mid = "timidity -Or -o – %FILE% | ffmpeg -f s16le -i pipe:0"

; Encoding arguments
; For each output format, you should provide the necessary arguments for
; your transcode_cmd.
; encode_args_TYPE = TRANSCODE_CMD_ARGS
encode_args_mp3 = "-vn -b:a %BITRATE% -c:a libmp3lame -f mp3 pipe:1"
encode_args_ogg = "-vn -b:a %BITRATE% -c:a libvorbis -f ogg pipe:1"
encode_args_opus = "-vn -b:a %BITRATE% -c:a libopus -compression_level 10 -f ogg pipe:1"
encode_args_m4a = "-vn -b:a %BITRATE% -c:a aac -movflags +frag_keyframe+empty_moov+default_base_moof -f mp4 pipe:1"
encode_args_wav = "-vn -b:a %BITRATE% -c:a pcm_s16le -f wav pipe:1"
encode_args_flv = "-b:a %BITRATE% -ar 44100 -ac 2 -v 0 -f flv -c:v libx264 -preset superfast -threads 0 pipe:1"
encode_args_webm = "-b:a %BITRATE% -f webm -c:v libvpx -preset superfast -threads 0 pipe:1"
encode_args_ts = "-q %QUALITY% -s %RESOLUTION% -f mpegts -c:v libx264 -c:a libmp3lame -maxrate %MAXBITRATE% -preset superfast -threads 0 pipe:1"
encode_args_ogv = "-codec:v libtheora -qscale:v 7 -codec:a libvorbis -qscale:a 5 -f ogg pipe:1"

; ReplayGain / "car" output profiles (gonic-compatible).
; These apply loudness normalization from ReplayGain tags, so the SOURCE files
; MUST be tagged with ReplayGain (use loudgain or rsgain) or the gain clauses are
; a no-op. The `_car` variants additionally resample (heavier CPU) for in-car use.
; These formats are intentionally NEVER cached (the normalization is per-source),
; so keep `cache_target` set to a plain format such as `mp3` or `opus`.
; `opus_rg`/`opus_car` cannot play on iOS (Opus-in-Ogg); `mp3_rg`/`mp3_car` are cross-platform.
encode_args_mp3_rg = "-map 0:a:0 -vn -b:a %BITRATE% -c:a libmp3lame -af \"volume=replaygain=track:replaygain_preamp=6dB:replaygain_noclip=0,alimiter=level=disabled,asidedata=mode=delete:type=REPLAYGAIN\" -metadata replaygain_album_gain= -metadata replaygain_album_peak= -metadata replaygain_track_gain= -metadata replaygain_track_peak= -metadata r128_album_gain= -metadata r128_track_gain= -ar 48000 -v 0 -f mp3 pipe:1"
encode_args_mp3_car = "-map 0:a:0 -vn -b:a %BITRATE% -c:a libmp3lame -af \"aresample=96000:resampler=soxr,volume=replaygain=track:replaygain_preamp=15dB:replaygain_noclip=0,alimiter=level=disabled,asidedata=mode=delete:type=REPLAYGAIN,aresample=48000:resampler=soxr\" -metadata replaygain_album_gain= -metadata replaygain_album_peak= -metadata replaygain_track_gain= -metadata replaygain_track_peak= -metadata r128_album_gain= -metadata r128_track_gain= -v 0 -f mp3 pipe:1"
encode_args_opus_rg = "-map 0:a:0 -vn -b:a %BITRATE% -c:a libopus -vbr on -af \"volume=replaygain=track:replaygain_preamp=6dB:replaygain_noclip=0,alimiter=level=disabled,asidedata=mode=delete:type=REPLAYGAIN\" -metadata replaygain_album_gain= -metadata replaygain_album_peak= -metadata replaygain_track_gain= -metadata replaygain_track_peak= -metadata r128_album_gain= -metadata r128_track_gain= -v 0 -f opus pipe:1"
encode_args_opus_car = "-map 0:a:0 -vn -b:a %BITRATE% -c:a libopus -vbr on -af \"aresample=96000:resampler=soxr,volume=replaygain=track:replaygain_preamp=15dB:replaygain_noclip=0,alimiter=level=disabled,asidedata=mode=delete:type=REPLAYGAIN\" -metadata replaygain_album_gain= -metadata replaygain_album_peak= -metadata replaygain_track_gain= -metadata replaygain_track_peak= -metadata r128_album_gain= -metadata r128_track_gain= -v 0 -f opus pipe:1"

; Encoding arguments to retrieve an image from a single frame
encode_get_image = "-ss %TIME% -f image2 -vframes 1 pipe:1"

; Encoding argument to encrust subtitle
encode_srt = "-vf \"subtitles='%SRTFILE%'\""

; Encode segment frame argument
encode_ss_frame = "-ss %TIME%"

; Encode segment duration argument
encode_ss_duration = "-t %DURATION%"

; Use segments for transcoding or send it all in one go.
; Useful if you are having issues streaming the full track.
; Only applies to transcoded streams; a direct file is always sent in segments.
; You can set it for all streams or a specific player
; POSSIBLE VALUES: true webplayer api
; DEFAULT: "false"
;send_full_stream = "webplayer"

;#########################################################
; Transcode Caching                                      #
;#########################################################

; These are commands used to pre-cache a file format for streaming.
; This helps avoid waiting for transcodes to finish and makes
; files immediately available to the client.

; Path to your cache folder.
; This is where the pre-transcoded files will be stored
; DEFAULT: none
;cache_path = "/tmp"

; Default audio output format
; This is what you want your cached format to be.
; This should match your 'encode_target' in Transcode Settings
; POSSIBLE VALUES: mp3 opus ogg
; DEFAULT: none
;cache_target = "mp3"

; Look in your local catalogs for these file extensions and pre-cache to the
; 'cache_path'. This could be helpful to reduce space needed on your
; web server or to make sure that clients get files quickly.
; Execute "php bin/cli run:cacheProcess" to process these files.
; DEFAULT: "false"
;cache_m4a = "true"
;cache_flac = "true"
;cache_mpc = "true"
;cache_ogg = "true"
;cache_oga = "true"
;cache_opus = "true"
;cache_wav = "true"
;cache_wma = "true"
;cache_aif = "true"
;cache_aiff = "true"
;cache_ape = "true"
;cache_shn = "true"
;cache_mp3 = "true"

; REMOTE CATALOGS ONLY
; Enabling cache_remote on remote catalogs will cache every file on the remote server
; DEFAULT: "false"
;cache_remote = "true"

;#########################################################
; Proxy Settings (optional)                              #
;#########################################################

; If Ampache is behind an http proxy, specify the hostname or IP address
; port, proxy username, and proxy password here.
; DEFAULT: not in use
;proxy_host = "192.168.0.1"
;proxy_port = "8080"
;proxy_user = ""
;proxy_pass = ""

; If Ampache is behind an https reverse proxy, force use HTTPS protocol.
; DEFAULT: "false"
;force_ssl = "true"

;#########################################################
; Mail Settings                                          #
;#########################################################

; Enable or disable email server features
; otherwise, you can reset your password
; and never receive an email with the new one
; Default: "false"
;mail_enable = "true"

; Method used to send mail
; POSSIBLE VALUES: smtp sendmail php
; DEFAULT: php
;mail_type = "php"

; Mail domain.
; DEFAULT: example.com
;mail_domain = "example.com"

; This will be combined with mail_domain and used as the source address for
; emails generated by Ampache.  For example, setting this to 'me' will set the
; sender to 'me@example.com'.
; DEFAULT: info
;mail_user = "info"

; A name to go with the email address.
; DEFAULT: Ampache
;mail_name = "Ampache"

; How strictly email addresses should be checked.
; easy does a regex match, strict actually performs some SMTP transactions
; to see if we can send to this address.
; POSSIBLE VALUES: strict easy none
; DEFAULT: strict
;mail_check = "strict"

;#########################################################
; sendmail Settings                                      #
;#########################################################

; DEFAULT: /usr/sbin/sendmail
;sendmail_path = "/usr/sbin/sendmail"

;#########################################################
; SMTP Settings                                          #
;#########################################################

; Mail server (hostname or IP address)
; DEFAULT: localhost
;mail_host = "localhost"

; SMTP port
; DEFAULT: 25
;mail_port = 25

; Secure SMTP
; POSSIBLE VALUES: ssl tls
; DEFAULT: none
;mail_secure_smtp = "tls"

; Enable SMTP authentication
; DEFAULT: "false"
;mail_auth = "true"

; SMTP username
; your mail auth username.
; DEFAULT: none
;mail_auth_user = ""

; SMTP password
; your mail auth password.
; DEFAULT: none
;mail_auth_pass = ""

;#########################################################
;   Abbreviation Filter                                  #
;#########################################################

; For file name parsing. Any unnecessary abbreviations in file names can be removed during parsing
; by adding them to the list below so that they will be removed during the parsing process.
common_abbr = "divx,xvid,dvdrip,hdtv,lol,axxo,repack,xor,pdtv,real,vtv,caph,2hd,proper,fqm,uncut,topaz,tvt,notv,fpn,fov,orenji,0tv,omicron,dsr,ws,sys,crimson,wat,hiqt,internal,brrip,boheme,vost,vostfr,fastsub,addiction,x264,LOL,720p,1080p,YIFY,evolve,fihtv,first,bokutox,bluray,tvboom,info"