# Amberwave – ALL .env settings (reference). To get started, .env.example with a few lines is enough; # copy what you need from here into your .env one line at a time. Almost all of it can also be set in the app. # NEVER share the ".env" itself or put it into the update archive. # Everything commented out uses the stated default value. # ---- App --------------------------------------------------------------------- # Prefix of the container names (_app, _db, _tunnel) – change it to run a second stack next to the first # STACK_NAME=amberwave APP_NAME=Amberwave # Public address (for links in emails), e.g. https://musik.example.de APP_URL= # Name under which the Windows client shows this server when searching the home network (empty = hostname of the container) CLIENT_SERVERNAME= # Key for encrypting stored credentials (SMTP password, API keys, Cloudflare). Normally leave empty: # Amberwave generates it itself (PFAD_CACHE/.app_secret_key), shows it once at the end of setup and puts a copy # next to the backups. Your own value, e.g. with: openssl rand -hex 32 # APP_SECRET_KEY= # Time zone for date/time (emails, expiry dates, listening history) # APP_ZEITZONE=Europe/Berlin # “New version available” notice in Admin (queries the releases on GitHub, installs nothing); 0 = off # UPDATE_HINWEIS=1 # Where the versions come from (GitHub releases API of the project); empty = no query # AMBERWAVE_UPDATE_URL=https://api.github.com/repos/lfrank95/amberwave/releases # ---- Host / ports / folders ------------------------------------------------ # Folder containing app/ and docker/ from the package. Required for the stack via the Unraid interface. AMBERWAVE_ORDNER=/mnt/user/appdata/amberwave APP_PORT=9950 # User the app reads and writes as – on Unraid like Lidarr: 99 (nobody) / 100 (users) # Leave empty = Amberwave detects the user itself (owner of app data or music collection, otherwise 99:100) and remembers it. # Amberwave never runs as root. Fixed values here always win; the tunnel container reads them as well. PUID=99 PGID=100 # 0.0.0.0 = reachable across the whole LAN. If cloudflared runs directly on the host (not as a container): 127.0.0.1 # APP_BIND=0.0.0.0 # Music collection on the array (Unraid e.g. /mnt/user/musik) MUSIK_PFAD=/mnt/user/musik # rw (default) = the container CAN write in the music folder. Whether Amberwave MAY do so is a separate switch in the app # (Settings → Library & automation → Music folder, newly set up: read only) or MUSIK_SCHREIBEN=1 here. # ro = hard safety switch, music folder mounted read-only, regardless of what the app says. # MUSIK_SCHREIBEN=0 # Restart the stack after changing this (Compose Down/Up). The Cleanup section shows whether writing works. # MUSIK_MOUNT_MODUS=ro # Folder for EVERYTHING Amberwave creates itself (Unraid e.g. /mnt/cache/appdata/amberwave): containing db/ (database), # cache/ (covers, secrets) and backups/ (backups). The folders are created at startup. Not set = next to the docker-compose.yml. APPDATA_PFAD=/mnt/cache/appdata/amberwave # Backups to a DIFFERENT drive (recommended, e.g. the array); empty = /backups # SICHERUNG_PFAD=/mnt/user/appdata/amberwave/backups # Individual folders, in case it should be different – they take precedence over APPDATA_PFAD (older installations keep theirs): # DB_DATA_PFAD=/mnt/cache/appdata/amberwave/db # CACHE_PFAD=/mnt/cache/appdata/amberwave/cache # BACKUP_PFAD=/mnt/user/appdata/amberwave/backups # Move an existing installation to this scheme (on the server, as root): bash app/scripts/pfade-migrieren.sh (dry run first) # ---- Database + setup ---------------------------------------------------------- # Memory MariaDB keeps for data and indexes (passed to the db container). 512M is fine up to ~50,000 tracks; 1G or more above # DB_PUFFER=512M # Enter nothing: on first start, open http://:9950/einrichtung.php (the link is in the log of amberwave_app). # There you create the admin account; Amberwave creates the database, user and a random password itself # (changeable under “Advanced”) and remembers them in /geheimnisse/. Settings › Database shows them later. # Your own values here take precedence (older installations keep theirs): # DB_ROOT_PASSWORD= # DB_NAME=amberwave # DB_USER=amberwave # DB_PASSWORD= # How long after the container starts the setup page stays open (minutes, 0 = always). After that: docker restart amberwave_app # EINRICHTUNG_FENSTER_MINUTEN=30 # Setup code: shown in the log (the link there already contains it). Default: always required – even on the home network, because a # Docker port forward can make requests from the internet look like they come from the home network. Set your own: # EINRICHTUNGSCODE= # 1 = always ask for the code, even on the home network (default 0: no code from home-network addresses; # requests via the Docker bridge, a proxy or tunnel always need the code) # EINRICHTUNG_CODE_IMMER=0 # ---- Paths INSIDE the container (only change if you change the mounts) -- # PFAD_MUSIK=/musik # PFAD_CACHE=/cache # PFAD_BACKUPS=/backups # ---- Scanning the library ------------------------------------------------------ # File extensions that are scanned as music # SCAN_DATEITYPEN=flac,mp3,m4a,m4b,mp4,aac,ogg,oga,opus,wav,aif,aiff,wv,ape,alac,dsf,dff,wma,mka,mpc # Image files in the album folder that count as cover (without extension, order = priority) # SCAN_COVER_NAMEN=cover,folder,front,album,albumart # Folders skipped while scanning (comma-separated, part of the path) # SCAN_IGNORIEREN=@eaDir,.Trash,#recycle,.AppleDouble # Automatic scan for new/changed files every … hours (0 = manual only) # SCAN_AUTO_STUNDEN=0 # Automation after scanning (if something was new/changed), in this order: identification by sound → complete metadata # (albums → artists → artist images) → cleanup preview. Can also be toggled in the app (Settings → Library; what is saved there takes precedence). # AUTO_METADATEN=1 # AUTO_AUFRAEUM_VORSCHAU=1 # Nightly run: the same chain once a day at this hour (0–23, −1 = off) # NACHTLAUF_STUNDE=3 # Daily database backup to /datenbank: hour (−1 = off), how many daily ones to keep, # for how many additional weeks to keep one weekly backup each # SICHERUNG_STUNDE=2 # SICHERUNG_TAGE=7 # SICHERUNG_WOCHEN=4 # Edge lengths of the cover thumbnails in pixels # COVER_GROESSEN=200,300,400,600,1200 # In the files (tags and folder names during cleanup) write standard names instead of stylized spellings # (“JAŸ-Z” → “JAY-Z”). Within Amberwave itself the spelling stays as in MusicBrainz. # Can also be set via the interface. Downside: intentional stylizations like “P!nk” are normalized in the files. # KUENSTLER_STANDARDNAMEN=0 # ---- Playback / streaming ---------------------------------------------------- # Default quality for new devices: original, opus256, opus160, opus128, aac256, aac160 # STREAM_STANDARD=opus256 # “Save offline” (albums/playlists to the phone): highest quality devices may store – opus128, opus160, # opus256 (default, about 2 MB per minute) or original (Android app only; browsers stay at opus256). 0 turns the # feature off. Each device picks its own quality up to this limit. Also adjustable in Settings › Offline on devices. # OFFLINE_QUALITAET=opus256 # Maximum number of simultaneous conversions (ffmpeg processes) across all users # STREAM_MAX_UMWANDLUNGEN=8 # Path to ffmpeg in the container # FFMPEG_PFAD=ffmpeg # FFPROBE_PFAD=ffprobe # After how many percent or seconds a track counts as “listened” # GEHOERT_AB_PROZENT=50 # GEHOERT_AB_SEKUNDEN=240 # File downloads for family members (0 = off, admin may always). Also in Settings › Offline on devices. # DOWNLOADS_ERLAUBT=0 # ---- Metadata sources ------------------------------------------------------- # (MusicBrainz and fanart.tv active; translation and Lidarr to follow) # Identifier for all third-party services (MusicBrainz, AcoustID, Cover Art Archive, Deezer, fanart.tv, ListenBrainz, Cloudflare, # Let's Encrypt …): “Amberwave/ ( )” – without installation ID. Requests are only counted locally per service # (Settings › Services & keys). # DIENSTE_KONTAKT= # Contact for the operators; empty = project address on GitHub # Separate identifier only for MusicBrainz (replaces the shared one) – normally empty # MUSICBRAINZ_USER_AGENT= # MUSICBRAINZ_URL=https://musicbrainz.org/ws/2 # fanart.tv – free project key after registering on fanart.tv # FANART_API_KEY= # Artist images are fetched along with “Complete metadata” (after scanning, after each album match and at night); # FANART_ALLE_MINUTEN is no longer needed. # FANART_URL=https://webservice.fanart.tv/v3 # “Explicit” marking (E badge) per track from Deezer – public interface without a key, runs along with the # MusicBrainz match and with “Match metadata” (via barcode, ISRC, otherwise search with length check). # DEEZER_AKTIV=1 # DEEZER_URL=https://api.deezer.com # Tracks without a match are only queried again after … days # DEEZER_WIEDERHOLEN_TAGE=30 # Cover Art Archive (cover preview during the MusicBrainz match). Only change if you use your own mirror. # COVERART_URL=https://coverartarchive.org # Identify albums by sound (fingerprint → AcoustID → MusicBrainz). Free application key: # sign up at acoustid.org → “Register an application”. Can also be entered in the app under Settings. # ACOUSTID_API_KEY= # ERKENNUNG_AKTIV=1 # Accept automatically: regeln = also with the same track list across several editions (CD/vinyl/countries) choose by rules # and queue for review · eindeutig = only unambiguous cases · aus = only suggest everything # ERKENNUNG_AUTO=regeln # When AcoustID (by sound) queries automatically: anhalt = only for albums with no clues at all (no usable artist/title), # everything else is matched via the tags at MusicBrainz · gruendlich = also when the tags are not enough · aus = never automatically # (Uncertain cases are left for the “Identify by sound” button) # ERKENNUNG_MODUS=anhalt # From which match (%) an edition counts as fitting # ERKENNUNG_SCHWELLE=90 # Fingerprints computed simultaneously # ERKENNUNG_PARALLEL=2 # ACOUSTID_URL=https://api.acoustid.org/v2 # Most popular tracks per artist (ListenBrainz, open, no key); they stay valid for this many days, then are fetched again # LISTENBRAINZ_URL=https://api.listenbrainz.org # BELIEBT_TAGE=30 # Translation of English texts into German (Claude API), empty = no translation # CLAUDE_API_KEY= # Lidarr for requests # ---- Downloads (Prowlarr/Newznab + SABnzbd) – off by default, enable in the app or with USENET_AKTIV=1 ---- # USENET_AKTIV=0 # ---------------------------------------------- # Folder on the host into which SABnzbd puts the finished downloads of the music category (Unraid e.g. # /mnt/user/downloads/complete/music). Mounted in the container at PFAD_DOWNLOADS (default /downloads). # Amberwave copies from there to // and scans. DOWNLOAD_PFAD=/mnt/user/downloads/complete/music # rw (default) = Amberwave may delete the original after import; ro = source stays untouched # DOWNLOAD_MOUNT_MODUS=rw # The following values can also be set in the interface (Admin → Settings → Downloads) # PROWLARR_URL=http://192.168.1.10:9696 # PROWLARR_API_KEY= # Prowlarr categories (Newznab): 3000 = audio overall, 3010 = MP3, 3040 = lossless # PROWLARR_KATEGORIEN=3000 # SABNZBD_URL=http://192.168.1.10:8080 # SABNZBD_API_KEY= # SABNZBD_KATEGORIE=music # API path of the standard SABnzbd: /api, behind a proxy e.g. /sabnzbd/api, compatible services e.g. /api/sabnzbd # SABNZBD_API_PFAD=/api # Subfolder of DOWNLOAD_PFAD in which this client puts its downloads (empty = DOWNLOAD_PFAD itself) # SABNZBD_IMPORT_ORDNER= # Additional Newznab indexers, Prowlarr instances and SABnzbd clients: only in the interface (Settings → Downloads), # see docs/usenet-newznab.md # Subfolder in the music folder for imported downloads (sort in later via “Clean up files”) # DOWNLOAD_ZIEL=Downloads # After import: loeschen (default – delete the original only after a verified copy, requires DOWNLOAD_MOUNT_MODUS=rw) or behalten # DOWNLOAD_NACH_IMPORT=loeschen # Automatically sort imported albums into the scheme (/Artist/Year - Album) after the MusicBrainz match, without approval. # Only albums with a match; unrecognized ones stay under DOWNLOAD_ZIEL and wait for you. 0 = everything stays in DOWNLOAD_ZIEL until approved. # DOWNLOAD_EINSORTIEREN=1 # Convert WAV and AIFF losslessly to FLAC on import (audio bit-exact, verified by checksum; tags are carried over). # FLAC is smaller and can be fully tagged. 0 = copy files unchanged. # DOWNLOAD_WAV_ZU_FLAC=1 # Watchdog: if a download in SABnzbd does not change for this many minutes (progress, status, post-processing; pauses # do not count), it counts as failed and is removed from the queue – if it was at 100% or in # post-processing and the music is in the download folder, it is taken over normally. Minutes, 5–1440. # DOWNLOAD_HAENGT_MIN=30 # If a download no longer shows up in SABnzbd at all (neither queue nor history): failed after this many minutes. # DOWNLOAD_WEG_MIN=15 # Downloads as a separate item in the main menu (admins only; on the phone under “More”). 1 = on # DOWNLOAD_REITER=0 # LIDARR_URL= # LIDARR_API_KEY= # ---- Email (web.de) ---------------------------------------------------------- # Can also be maintained in the app under Settings → Email (which then takes precedence). # SMTP_HOST=smtp.web.de # SMTP_PORT=587 # SMTP_VERSCHLUESSELUNG=tls # SMTP_BENUTZER= # SMTP_PASSWORT= # SMTP_ABSENDER= # SMTP_ABSENDER_NAME=Amberwave # SMTP_TLS_PRUEFEN=1 # Days before an account expires on which the reminder is sent # MAIL_ABLAUF_TAGE=30 # ---- Accounts & security ----------------------------------------------------- # Registration: freigabe (open, admin approves) or aus # REGISTRIERUNG_MODUS=freigabe # REGISTRIERUNG_MAX_PRO_STUNDE=3 # LOGIN_MAX_FEHLVERSUCHE=5 # LOGIN_SPERRE_BASIS_SEKUNDEN=60 # LOGIN_MAX_FEHLVERSUCHE_PRO_IP_STUNDE=30 # LOGIN_MAX_FEHLVERSUCHE_PRO_NAME_STUNDE=20 # PASSWORT_RESET_MAX_PRO_IP_STUNDE=5 # PASSWORT_RESET_MAX_PRO_MAIL_STUNDE=3 # PASSWORD_RESET_GUELTIG_MINUTEN=60 # REMEMBER_ME_TAGE=30 # PASSWORT_MIN_LAENGE=8 # SITZUNG_STUNDEN=12 # Devices per user (0 = unlimited), admins unlimited by default # MAX_GERAETE_PRO_NUTZER=3 # MAX_GERAETE_ADMIN=0 # Validity of device keys for apps (e.g. a future Windows player) in days, 0 = unlimited # API_TOKEN_TAGE=365 # SICHERHEIT_CSP=1 # SICHERHEIT_HSTS=1 # IP address(es) of the tunnel/proxy whose headers (CF-Connecting-IP) are trusted, e.g. 172.17.0.11 – recommended # PROXY_IPS= # auto = trust proxy headers from private senders, but without PROXY_IPS only with a public address in them; ja/nein forces it # PROXY_VERTRAUEN=auto # ---- Sorting ------------------------------------------------------------------- # Artists are sorted by first name last name (“Michael Jackson” under M). # 1 = a leading article does not count (“The Beatles” under B), 0 = the article counts too (under T) # SORTIERUNG_OHNE_ARTIKEL=1 # Lock the interface against zooming (Ctrl+mouse wheel, Ctrl +/−, two-finger zoom, double tap) – it then always fits the window. # 0 = zooming allowed (e.g. for people who need larger text). # ZOOM_SPERREN=1 # ---- Remote control ----------------------------------------------------------- # Devices of the same account control each other (admins: all devices). For this, every open app keeps a back channel # (Server-Sent Events) to the server, which occupies a PHP process – the limit protects Apache (MaxRequestWorkers). # Beyond that, devices poll every 2 s (somewhat sluggish, but works). # FERN_AN=1 # FERN_MAX_VERBINDUNGEN=40 # Seconds without a sign of life until a device counts as offline # FERN_OFFLINE_SEKUNDEN=15 # Length of a back channel, after which the device rebuilds it (proxies/Cloudflare cut long connections) # FERN_KANAL_SEKUNDEN=30 # How often the channel checks for new commands (milliseconds) – smaller = faster, more database queries # FERN_TAKT_MS=250 # ---- Home network (automatic quality) ---------------------------------------- # At home, devices on “Automatic” get the original file, on the go a suitable Opus quality. # Networks that count as home (CIDR, comma-separated) # LOKALE_NETZE=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.0/8,fc00::/7,fe80::/10,::1/128 # Devices at home that come in through the Cloudflare Tunnel are recognized by the app by your public address. # It is detected automatically (every 15 min.); with a fixed IP you can enter it here. # HEIM_IP= # HEIM_IP_ERKENNEN=1 # HEIM_IP_URLS=https://1.1.1.1/cdn-cgi/trace,https://[2606:4700:4700::1111]/cdn-cgi/trace # Theme radios (80s, 90s …, genres) on the home page: this many songs are needed for a decade/genre to get its own button # RADIO_THEMA_MIN=25 # Artist radio: share of the artist themselves in percent (favorites first). 100 = only the artist (default); smaller = the rest are matching tracks by others (30–100) # RADIO_KUENSTLER_ANTEIL=100 # Genre radios, how strict: family radio (pop, rock …) takes songs whose strongest family it is (from RADIO_FAMILIE_MIN) or which # reach the share RADIO_FAMILIE_SICHER; single-genre radio takes album genres among the two strongest from RADIO_GENRE_MIN. # Pure representatives play first, borderline cases less often. Too few songs → automatically looser. # RADIO_FAMILIE_MIN=0.40 # RADIO_FAMILIE_SICHER=0.55 # RADIO_GENRE_MIN=0.35 # Genre families (clicking “Pop”, “Electronic” … finds the whole family): from what percentage an album counts toward the family (5–90) # GENRE_FAMILIE_SCHWELLE=25 # --- Sound analysis (acoustic similarity: sound radio, signal in radio) --- # Runs in the background with the built-in method (Python 3 + numpy in the image). Can also be toggled in the app. # KLANG_AKTIV=1 # KLANG_PYTHON=python3 # Optional extended model (Discogs-EffNet by MTG, CC BY-NC-SA 4.0 – non-commercial only). NOT included: # the admin installs it under Admin → Library → Tools with a button, the server then downloads it directly from the vendor. # KLANG_PIP_PAKET=essentia-tensorflow # KLANG_MODELL_URL=https://essentia.upf.edu/models/feature-extractors/discogs-effnet/discogs-effnet-bs64-1.pb # Style recognition (400 Discogs styles per track, refines genre families and radio) – head and labels for the model: # KLANG_STIL_URL=https://essentia.upf.edu/models/classification-heads/genre_discogs400/genre_discogs400-discogs-effnet-1.pb # KLANG_STIL_JSON_URL=https://essentia.upf.edu/models/classification-heads/genre_discogs400/genre_discogs400-discogs-effnet-1.json # KLANG_LIZENZ_URL=https://essentia.upf.edu/models/LICENSE # --- Spatial sound (upmix) --- # Package with room impulse responses for the reverb; the server downloads it on button press (Admin → System) RAUMKLANG_IR_URL=https://www.voxengo.com/files/impulses/IMreverbs.zip # Spatial sound – center (LCR via M/S) and bass management (defaults for new devices, switchable per device in the spatial sound menu): # Crossover frequency of the bass management in Hz (Linkwitz-Riley 24 dB/oct.): 60–250 in 10 Hz steps or 0 = bass stays in front, LFE empty RAUMKLANG_LFE_TRENNUNG=80 # LFE level in dB: -10 (the receiver raises the LFE by 10 dB) or 0 RAUMKLANG_LFE_PEGEL=-10 # Center share 0–100: 0 = L/R only, 50 = classic matrix (center 0 dB, front −3 dB), 100 = the whole middle in the center RAUMKLANG_CENTER_ANTEIL=50 # Rear delay for new devices in ms (0–20): Ls/Rs delayed so that nothing drifts to the back (precedence effect), adjustable per device in the effects rack # RAUMKLANG_REAR_DELAY=0 # AmberSpace strength “Wide” (sliders 0–100; intensity and level: 50 = like the preset, ±12 dB over the whole range). # Default: intensity 34 (−3.8 dB), surround level 75 (+6.0 dB), effects 26 %, width 22 %. # “Subtle” and “Intense” = Wide scaled by ∓/± PERCENT (intensity and level as amplitude, effects and width directly) # RAUMKLANG_MITTEL_INTENSITAET=34 # RAUMKLANG_MITTEL_PEGEL=75 # RAUMKLANG_MITTEL_EFFEKTE=26 # RAUMKLANG_MITTEL_BREITE=22 # RAUMKLANG_STAERKE_PROZENT=20 # Upload your own impulse responses: all users (1) or admins only (0); only an admin may ever delete # RAUMKLANG_UPLOAD_ALLE=1 # Restart the spatial sound module fresh on every track selection, every skip and every play (1 = yes, 0 = let it run through) RAUMKLANG_NEUSTART=1 # --- Direct access on the home network (like Plex) --- # Set up under Admin → System. Everything here is optional – the interface can set it just as well. # Port on which Amberwave is reachable on the home network via HTTPS (open it in the stack, NO router port forward needed) LOKAL_HTTPS_PORT=8443 # Cloudflare API token with the permission “Zone → DNS → Edit” (template “Edit zone DNS”); # for the Cloudflare Tunnel additionally “Account → Cloudflare Tunnel → Edit” CLOUDFLARE_API_TOKEN= # Cloudflare Tunnel – Amberwave sets it up under Settings › Access & network. # TUNNEL_IM_STACK=1: separate cloudflared container “tunnel” in the stack (Amberwave creates the tunnel and gives it the token) # TUNNEL_IM_STACK=0: you already have a cloudflared on the server or in the network – Amberwave only adds its rule to that # tunnel (the tunnel must be configured in the Cloudflare dashboard, not via config.yml) and you # specify in the interface how this cloudflared reaches the app (e.g. http://192.168.1.10:9950) TUNNEL_IM_STACK=1 # Public name (otherwise enter in the interface), target of the forwarding (default: in the stack http://app:80, # otherwise the home network address of the app), name of the cloudflared container in the stack, image tag # TUNNEL_HOST=musik.example.de # TUNNEL_ZIEL= # TUNNEL_CONTAINER=amberwave_tunnel # TUNNEL_IMAGE_TAG=latest # Name for direct access (points to the LAN IP via DNS) and the LAN IP of the server DIREKT_HOST= DIREKT_IP= # Optional: email for Let's Encrypt (notices before expiry in case automatic renewal fails) ACME_EMAIL= # Renew the certificate automatically (1 = yes) and how many days before expiry DIREKT_AUTO_ERNEUERN=1 DIREKT_ERNEUERN_TAGE=30 # Instead of the automatic mode, specify your own local HTTPS address (e.g. via Nginx Proxy Manager) DIREKT_URL= # --- Activity (Admin → Activity) --- # Hide paused playbacks after this many minutes AKTIVITAET_PAUSE_MINUTEN=10 # --- Loudness (EBU R128) --- # Background analysis (1 = on): measures each track and each album as a whole; the players use this to equalize volume LAUTHEIT_AKTIV=1 # Simultaneous measurements (ffmpeg, low priority). Approx. 50–100× real time per measurement. LAUTHEIT_PARALLEL=2 # Default target value in LUFS (each device can choose a different one in its profile) LAUTHEIT_ZIEL=-16 # Highest true peak after boosting in dBTP (there is no limiter – quiet tracks are only raised as far as this allows) LAUTHEIT_DECKE=-1 # --- Clean up files (Admin → Library; always preview first, then approval) --- # Scheme for folders and file names. Placeholders: {albumkuenstler} {album} {originaljahr} {jahr} {edition} {land} {format} # {katalognummer} {disc} {nr} {titel}. Text in the brackets only appears if the value is not empty: # “{ [edition]}” → “ [Special Edition]”, “{disc-}” → “2-” (only with multiple CDs). # {edition} = version name of the edition; without a name and when there are several editions: year country format. AUFRAEUMEN_ORDNER={albumkuenstler}/{jahr} - {album}{ (edition)} AUFRAEUMEN_DATEI={CD disc/}{nr} - {titel} # Allowed characters in names: windows = everything that works on Windows and over SMB (/ \ : * ? " < > | are # replaced, invisible characters removed, accents normalized, CON/AUX/NUL … defused; umlauts stay) # ascii = strictly ASCII only (ä → ae, é → e, emojis are dropped) – e.g. for car radios and old players AUFRAEUMEN_ZEICHEN=windows # Permissions for everything Amberwave creates or rewrites in the music folder (octal). Default like Unraid's “New Permissions”: # folders 777, files 666 – so that Windows (SMB) and other containers can open everything AUFRAEUMEN_RECHTE_ORDNER=777 AUFRAEUMEN_RECHTE_DATEI=666 # “CD 1” folder also for albums with only one disc (1); 0 = CD folder only for multiple discs AUFRAEUMEN_CD_IMMER=0 # sauber = old/foreign tags are removed (except AUFRAEUMEN_BEHALTEN), ergaenzen = foreign ones stay AUFRAEUMEN_TAGS=sauber AUFRAEUMEN_BEHALTEN=LYRICS,UNSYNCEDLYRICS,ISRC # (ITUNESADVISORY – the “explicit” marking – is always kept) # Write contributors (producer, composer, musicians, guests …) into the files? 0 = no (default; most players # can't do anything with them, they are still kept in Amberwave), 1 = yes AUFRAEUMEN_MITWIRKENDE=0 # What goes into the trash as junk (patterns, case-insensitive) AUFRAEUMEN_MUELL=*.nfo,*.sfv,*.m3u,*.m3u8,*.log,*.cue,*.md5,*.ffp,*.url,*.accurip,Thumbs.db,desktop.ini,.DS_Store,._* # Embed cover in the files (1 = yes) and at what size (pixels, longest side of the available step) AUFRAEUMEN_COVER=1 AUFRAEUMEN_COVER_GROESSE=1200 # Trash (folder .amberwave-papierkorb in the music folder): keep for this many days AUFRAEUMEN_PAPIERKORB_TAGE=30 # Albums from which a track was played in the last N minutes are only cleaned up by Amberwave on the next run (0 = off) AUFRAEUMEN_SCHONZEIT_MIN=10 # How long an approval is valid (hours). Whatever could not be moved by then (album was playing, scan was running) # goes back to “open” and must be approved again – nothing starts silently days later. # AUFRAEUMEN_FREIGABE_STUNDEN=12 # Length limits for names: per file/folder name in bytes (encrypted folders e.g. on Synology: 140) and for the whole # path below the music folder in characters (Windows programs manage about 260 in total). Anything too long is shortened sensibly. AUFRAEUMEN_NAME_MAX=180 AUFRAEUMEN_PFAD_MAX=200 # --- WAV export (playlist as one long file, e.g. for the mixing console) --- # Keep finished exports for this many hours, then delete automatically EXPORT_AUFHEBEN_STUNDEN=48 # At most this many exports per user (older ones are deleted on the next export) and tracks per export EXPORT_MAX_PRO_NUTZER=3 EXPORT_MAX_TITEL=500 # Split files after this many minutes (0 = automatically just under 4 GB, approx. 6 hours) EXPORT_TEIL_MAX_MINUTEN=0 # ---- Warmth (tube saturation in the player) --- # Default for new devices: aus | hauch | warm | glut WAERME_VORGABE=aus # Reference loudness of the tube: at this loudness (LUFS) Hauch/Warm/Glut sound as tuned; other tracks are driven # correspondingly harder or softer (±12 dB, auto-gain keeps the level). Higher (e.g. -14) = more tame overall, lower = stronger WAERME_BEZUG_LUFS=-18 # Tube type for new devices: ax7 (12AX7, hot) | at7 (12AT7, punch) | au7 (12AU7, smooth) | sn7 (6SN7, broad) WAERME_ROEHRE=ax7 # Tube stage topology: eintakt (lots of H2) | gegentakt (even harmonics cancel, more H3; double processing load in HQ mode) WAERME_SCHALTUNG=eintakt # ---- Tape (tape machine in the player, after the tube) --- # Default for new devices: aus | fresh | worn | old. Reference loudness as WAERME_BEZUG_LUFS (own value possible) BAND_VORGABE=aus # BAND_BEZUG_LUFS=-18 # Tape type for new devices: sm900 (modern high-output tape, lots of headroom) | 456 (the classic, saturates earlier) | sm468 (soft, saturates early at 7.5 ips) # BAND_SORTE=sm900 # Equalization standard: nab (USA, 50 µs) | ccir (Europe/IEC, 35 µs at 15 ips, 70 µs at 7.5 ips) – determines how strongly the highs are boosted before the tape # BAND_NORM=nab # ---- Import unsorted music (sorting assistant, Admin → Library → Unsorted) --- # Inbox folder relative to the music folder: put unsorted files here (nested arbitrarily). It is never scanned normally – # only the assistant identifies each file by sound (AcoustID key required), suggests albums and sorts them in after your approval. # SORTIEREN_ORDNER=_unsortiert # Staging area for new albums until they are linked to MusicBrainz and sorted into AUFRAEUMEN_ORDNER # SORTIEREN_ZWISCHEN=_sortiert # From this AcoustID match score (%) a track counts as recognized (below that: “unrecognized”, manual search possible) # SORTIEREN_SCHWELLE=80 # Preselection for duplicate files (same recording, worse quality): papierkorb | liegen # SORTIEREN_DUBLETTEN=papierkorb # ---- Effects rack: own presets (per account, on all devices) --- # Maximum number of own presets per effects device (Glow, Iron, Silk, Space, EQ, whole rack) and account # PRESETS_MAX=100 # ---- Transformer (AmberIron in the player, between tube and tape) --- # Default for new devices: aus | hauch | satt | schwer, core: nickel | stahl | eisen. Reference loudness as WAERME_BEZUG_LUFS TRAFO_VORGABE=aus # TRAFO_KERN=stahl # TRAFO_BEZUG_LUFS=-18 # ---------- Home network devices (DLNA: AV receivers, TVs, streamers) ---------- # On/off (1/0) # HEIMNETZ_AN=1 # Address at which devices on the home network reach the server. Empty = detect itself (from how the app is called on the # home network, otherwise direct access + APP_PORT). Only set if detection gets it wrong. # HEIMNETZ_URL=http://192.168.1.10:9950 # Where to search (CIDR, comma-separated). Empty = the private networks of the server address (/24). In its own Docker network # (bridge) multicast does not arrive – so Amberwave queries every address directly (unicast SSDP). # HEIMNETZ_NETZE=192.168.1.0/24 # Effects renderer for “With effects” (default: bin/aw-render in the app folder) # AW_RENDER_PFAD= # Background service for the devices exits after this many minutes without playback # HEIMNETZ_AGENT_RUHE=10 # How often the service polls the devices for status (ms) # HEIMNETZ_ABFRAGE_MS=1000 # App ID of Amberwave's own screen for Google Cast (Custom Receiver in the Google Cast SDK Developer Console, # address: /cast/empfaenger.html). Empty = Google's default receiver. # CAST_APP_ID=