Files
Collin Kasbergen 52b7c93b0f Update README.md
2026-07-22 13:47:42 +02:00

3.9 KiB

📻 Navi.FM

Turn your Navidrome library into an intelligent, 24/7 internet radio station.

Navi.FM is a lightweight, all-in-one web application and streaming engine that seamlessly transforms your personal Navidrome instance into a broadcasting powerhouse.

Why Navi.FM?

If you've looked into internet radio before, you've probably stumbled across massive suites like SUB/WAVE. Those are great if you want to run a commercial radio empire, but let's be honest: you just want to stream your own meticulously curated FLAC collection without needing an IT degree.

Navi.FM takes a radically minimalistic approach. It features a modern, beautiful web frontend, a built-in Icecast server, an auto-pilot scheduling system, and an intelligent Liquidsoap engine—all neatly bundled into a single Docker container. Set it and forget it.


Features

  • Audio Intelligence: Automatically analyzes your library for BPM, musical key, and energy, allowing the engine to queue tracks that actually sound good together. No more death metal right after an acoustic lullaby (unless you're into that).
  • Auto-Pilot Scheduler: Build rules to automatically change your station's vibe based on the time of day.
  • Artist Separation: Intelligent queueing ensures you don't hear the same artist 5 times in an hour.
  • Security-First Design:
    • Built-in brute-force protection and IP rate limiting on the admin panel.
    • AES (Fernet) encryption at rest for all sensitive database credentials.
    • Automatic, cryptographically secure password generation for your Icecast stream if you're too lazy to set one yourself.
  • Gorgeous Frontend: A dynamic, glassmorphism-inspired UI with live audio visualization.

🚀 Compact Setup Guide

Navi.FM is completely containerized. All you need is Docker.

Create a docker-compose.yml file:

version: '3.8'

services:
  navifm:
    image: ghcr.io/kasbergen/navifm:latest  # Replace with your actual registry if self-hosting
    container_name: navifm
    restart: unless-stopped
    ports:
      - "8080:8080" # The Admin Panel & Web UI
    volumes:
      - ./data:/data
    environment:
      # REQUIRED
      - DATA_DIR=/data
      - TZ=Europe/Amsterdam # Critical for the auto-pilot scheduler to match your local time!
      
      # OPTIONAL
      # - ICECAST_PASSWORD=super_secret_password
      # - ENCRYPTION_KEY=your_fernet_key

Run docker compose up -d and visit http://localhost:8080 to complete the initial wizard!

2. Docker Run CLI

If you prefer the command line over YAML:

docker run -d \
  --name navifm \
  -p 8080:8080 \
  -v ./data:/data \
  -e DATA_DIR=/data \
  -e TZ=America/New_York \
  ghcr.io/kasbergen/navifm:latest

Environment Variables

Variable Required? Description
DATA_DIR Yes Must map to /data. Tells Navi.FM where to store your database.
TZ Yes Your timezone (e.g. Europe/Amsterdam). Needed so the scheduler doesn't trigger 4 hours late.
ICECAST_PASSWORD Optional Password for the Icecast audio stream. If omitted, Navi.FM generates a secure one for you.
ENCRYPTION_KEY Optional A 32-byte URL-safe base64 key used to encrypt your database. If omitted, Navi.FM securely generates one on first boot.

🎧 How it Works

  1. Setup: On first boot, you'll visit the Web UI and link your Navidrome server.
  2. Analysis: The background worker pulls 200 random tracks and runs them through an audio analyzer. (It waits patiently until at least 10 tracks are analyzed before starting the radio to prevent queue looping.)
  3. Broadcasting: The backend feeds the smartest next track into Liquidsoap, which encodes it and pumps it out to Icecast.
  4. Listening: Tune in via the web player, VLC, or any internet radio app pointing to http://your-server:8080/stream.

Made with ❤️ (and a lot of caffeine) by kasbergen.