Files
2026-09-30 21:59:34 +02:00

2.1 KiB

Configuration reference

Everything is environment variables — no config files beyond .env sourcing.

shipper (generator machine)

Var Default Meaning
LIBRARY_DIR library ai-radio app library dir (contains index.json + genre folders)
SHIP_STAGING_DIR ship_out local dir for transcoded mp3s + playlist
SHIP_REMOTE_TARGET — (required) scp target: user@vps:/opt/airstudio/web/ai-radio/
SHIP_SSH_KEY — identity file for scp
SHIP_POLL_INTERVAL_S 60 seconds between cycles
PLAYLIST_SIZE 40 tracks in the rolling playlist
NEWNESS_BIAS 3 lower = fresher songs dominate (weight=1/(rank+bias))
MP3_BITRATE 128k transcode bitrate
STATION_NAME AI Radio ID3 album + playlist prefix

streamer (VPS)

Var Default Meaning
STREAM_WEBROOT /usr/local/share/icecast/web/ai-radio where shipped files live
ICECAST_ADDR icecast:8000 icecast host:port
ICECAST_SOURCE_PASSWORD hackme change this
ICECAST_MOUNT /ai-radio.mp3 mount point
STATION_NAME AI Radio stream name / MQTT artist
STATION_DESCRIPTION Endless AI-generated radio icecast description
MP3_BITRATE 128 kbps, used for stream pacing + icecast metadata
STREAM_PUBLIC_URL — advertised URL (MQTT payload, icecast url)
MQTT_ADDR empty = disabled host:port of the MQTT broker
MQTT_USER / MQTT_PASS — broker auth (optional)
MQTT_CLIENT_ID radio-streamer MQTT client id
MQTT_TOPIC airstudio/nowplaying now-playing topic

icecast.xml (VPS)

Three secrets must be changed from CHANGE_ME_*: source-password (matches ICECAST_SOURCE_PASSWORD), relay-password, admin-password. Admin UI: http://<vps>:8000/admin/.

Tuning cheat-sheet

  • Want the stereo to hear new songs ASAP → NEWNESS_BIAS=1, small SHIP_POLL_INTERVAL_S.
  • Want variety over freshness → NEWNESS_BIAS=10+.
  • Better sound → MP3_BITRATE=192k (also bump streamer MP3_BITRATE=192).
  • MQTT-only mode (no icecast): not supported; the stream is the product.