Skip to content

Configuration reference

To apply a change, see change the configuration. Settings not listed here, such as download concurrency, retry delays, and timeouts, are described in the commented config.example.toml.

KeyWhereWhat it is
adminsconfig.tomlBot administrators, such as telegram:123456789
library.music_dirconfig.tomlWritable folder for the bot’s music, as the bot sees it
navidrome.urlconfig.tomlNavidrome address the bot can reach
navidrome.userconfig.tomlNavidrome administrator login
BOT_TOKEN.envTelegram bot token
SECRET_KEY.envBase64 32-byte encryption key, from openssl rand -base64 32
NAVIDROME_PASSWORD.envPassword of navidrome.user
DB_DSN.envPostgres connection string; the deployment’s Compose file sets it
POSTGRES_PASSWORD.envDatabase password for the deployment sample
TELEGRAM_API_ID, TELEGRAM_API_HASH.envCredentials of the local Telegram Bot API
KeyIn the new-server deploymentWhat it is
telegram.bot_api_urlhttp://telegram-bot-api:8081Local Bot API address; empty means Telegram’s cloud API
library.music_dir/musicThe bot’s music folder
library.navidrome_music_dir/musicThe same folder as Navidrome sees it
navidrome.urlhttp://navidrome:4533Address the bot uses for Navidrome’s API
navidrome.public_urlhttps://music.example.comAddress for players and listening links

Keep existing libraries outside the managed folders shared, users, and .beatstash. All three must be on one filesystem, and Navidrome must be able to read the files the bot creates.

Uploads work without public_url, but listening links need it. The bot turns links off when it is localhost, a private IP address, or a name that only resolves locally. See HTTPS.

admins lists the bot’s administrators. This role is separate from Navidrome’s administrator. At startup, the listed accounts get the role, and accounts removed from the list lose it.

admin_contact, such as @your_username, is shown to strangers who open the bot, so they know whom to ask for an invite or more space.

quota.default is each participant’s personal quota and quota.shared is the shared library’s. Use values such as 10GB or 500MB; an empty string means unlimited. Values set in Admin > Quotas override these, and Admin > Users sets limits for individual people.

KeyDefaultWhat it does
telegram.storage_chat_id0Private channel for preparing audio files; see storage chat
telegram.fill_storage_chattrueUpload to the storage chat in the background instead of on request
KeyDefaultWhat it does
navidrome.attach_interval1hRefresh records of existing libraries; 0 turns existing libraries off
navidrome.access_ttl30sHow long the bot trusts what Navidrome said an account can see; 0 asks every time
library.reconcile_interval1hPick up files changed by hand in the managed folders
library.enrich_interval1hLook up missing genres and labels again, retrying services that didn’t answer
navidrome.song_interval1mMatch new tracks to Navidrome songs; 0 matches only on request
zvuk.sync_interval6hCheck imported Zvuk collections for changes
KeyDefaultWhat it does
invites.ttl168hHow long an invite link works
navidrome.listen_link_ttl720hHow long a listening link works
navidrome.listen_link_downloadabletrueLet listening links download files

Raising download concurrency for a streaming service makes the account more likely to be throttled. By default the bot pauses between downloads and downloads one track at a time per Zvuk account.