d32e1505c5
Forgot to include this in the previous commit (6d1709c). The new
config field's example block needs to be in the canonical yaml so
operators copying it in get the doc.
74 lines
2.8 KiB
YAML
74 lines
2.8 KiB
YAML
# Minstrel example configuration.
|
|
# Every field is optional; defaults shown below match Default() in internal/config.
|
|
# Each setting can be overridden at runtime via SMARTMUSIC_* environment variables
|
|
# (see internal/config/config.go for the full list).
|
|
|
|
server:
|
|
address: ":4533"
|
|
|
|
storage:
|
|
# On-disk root for cached runtime artifacts (currently playlist cover
|
|
# collages under <data_dir>/playlist_covers/). Default: "./data" relative
|
|
# to the working directory. Production deployments should set an absolute
|
|
# path on persistent storage.
|
|
# Env: SMARTMUSIC_STORAGE_DATA_DIR
|
|
data_dir: "./data"
|
|
|
|
database:
|
|
# Postgres connection string, e.g. postgres://minstrel:minstrel@localhost:5432/minstrel?sslmode=disable
|
|
url: ""
|
|
|
|
log:
|
|
level: "info" # debug | info | warn | error
|
|
format: "text" # text | json
|
|
|
|
auth:
|
|
# One-shot admin bootstrap. Applied only when the users table is empty.
|
|
# Set username to enable; leave password blank to have the server generate
|
|
# one and log it to stderr on first start.
|
|
# Env: SMARTMUSIC_AUTH_ADMIN_USERNAME, SMARTMUSIC_AUTH_ADMIN_PASSWORD
|
|
admin_bootstrap:
|
|
username: ""
|
|
password: ""
|
|
|
|
library:
|
|
# Filesystem roots to scan for music. Each path is walked recursively.
|
|
# Env: SMARTMUSIC_LIBRARY_SCAN_PATHS (colon-separated, PATH-style)
|
|
scan_paths: []
|
|
# Kick off a scan on server startup. Env: SMARTMUSIC_LIBRARY_SCAN_ON_STARTUP
|
|
scan_on_startup: false
|
|
|
|
subsonic:
|
|
# Gate for the legacy `p=` plaintext password parameter on /rest/*.
|
|
# Leave disabled unless a specific client requires it — Minstrel prefers
|
|
# apiKey (OpenSubsonic) and falls back to u+t+s token auth.
|
|
# Env: SMARTMUSIC_SUBSONIC_ALLOW_PLAINTEXT_PASSWORD
|
|
allow_plaintext_password: false
|
|
|
|
events:
|
|
# Idle gap (minutes) between play_events that closes a play_session and
|
|
# starts a new one. Spec §6.
|
|
session_timeout_minutes: 30
|
|
# Skip rule (spec §6): a play counts as a SKIP if completion ratio is below
|
|
# this threshold AND duration played (ms) is below the next threshold.
|
|
skip_max_completion_ratio: 0.5
|
|
skip_max_duration_played_ms: 30000
|
|
|
|
recommendation:
|
|
# Base score every candidate gets before adjustments. Spec §6.
|
|
base_weight: 1.0
|
|
# Bonus for tracks the user has liked (general_likes).
|
|
like_boost: 2.0
|
|
# Multiplier on recency_decay (1.0 for tracks ≥ 30 days stale, 0 for fresh).
|
|
recency_weight: 1.0
|
|
# Penalty multiplier on skip_ratio (skips/plays); 1.0 = full penalty.
|
|
skip_penalty: 1.0
|
|
# ± random jitter applied to every candidate; breaks ties without dominating.
|
|
jitter_magnitude: 0.1
|
|
# Hard-suppression window: tracks played within this many hours never appear.
|
|
recently_played_hours: 1
|
|
# Default radio size when ?limit= is not specified.
|
|
radio_size: 50
|
|
# Maximum allowed ?limit= (server caps to this regardless).
|
|
radio_size_max: 200
|