Beltr

Beltr

Docker app from Beltr's Repository

Overview

CPU BUILD: runs on any server, no GPU needed. If your box has an NVIDIA card or Intel graphics, install Beltr-NVIDIA or Beltr-Intel instead: same app, much faster song processing. Beltr turns any song in your music library into a karaoke track. It separates the vocals out with a local AI model, finds synced lyrics online (or drafts them locally when no provider has the song), force-aligns them to the vocal word by word, and displays them on a TV while everyone's phone acts as a remote — scan the QR code on screen, no app to install. Everything runs on your server. Nothing about your library is uploaded. FIRST RUN: Beltr downloads about 2 GB of model weights into /cache the first time it needs them. That happens once and survives container updates as long as /cache stays mapped. Watch the container log if a first song seems to sit still — the download is what it's doing. SPEED: this is the CPU image. On a modern multi-core server, separating a 3-4 minute song takes a few minutes; most songs then get their lyrics instantly from an online lyrics database. The slow case is a song no lyrics provider knows, which falls back to local transcription and can take a couple of minutes. If your server has an NVIDIA GPU, install "Beltr-NVIDIA" instead; it is dramatically faster. An Intel processor with integrated graphics (6th gen Core onward, N100 included) or an Arc A-series card can use "Beltr-Intel". AMD GPUs are not supported in the container. LICENSE: Beltr is a one-time purchase (no subscription). Run it free for five songs, then enter your key from beltr.app in the License key field below — or drop it in a file at /config/license.key. It activates once and then works offline. Container updates and restarts do not re-activate, as long as you keep the Config path mapped; a key covers two installs. AFTER INSTALL: open the WebUI, go to Settings, and add /media as a music folder. Then open http://your-server:8477/tv on whatever screen you're singing at, and scan the QR with a phone. MICROPHONES NEED HTTPS: browsers only allow microphone access on a secure page, so singing scores and the phone-as-mic feature need Beltr behind a reverse proxy with a certificate. Everything else — queueing, playback, lyrics, stem mixing — works normally over plain http. NOTE: Beltr assumes everyone who can reach it is trusted. Set AUTH_PASSWORD to put a password on the TV and dashboard screens, but do not expose this container to the internet without a reverse proxy doing real authentication in front of it.
Beltr

Beltr for Unraid

Unraid Community Applications templates for Beltr, a self-hosted karaoke server. It takes a song from your own music library, separates the vocals out with a local AI model (UVR MDX-Net on ONNX Runtime), finds synced lyrics online or drafts them locally, force-aligns them to the vocal word by word, and puts the words on a TV while everyone's phone acts as a remote. Guests scan the QR code on screen; there is no app for them to install.

Everything runs on your server. Nothing about your library is uploaded.

beltr.app · Full Unraid guide · Reverse proxy and HTTPS · Support

Lyrics on the TV screen

Which template

Install one of the three. They share the same default paths.

Template Image Use it when
Beltr ghcr.io/casavargas/beltr:latest Any server. Separating a song takes a few minutes on a modern multi-core CPU.
Beltr-NVIDIA ghcr.io/casavargas/beltr:latest-cuda You have an NVIDIA GPU and the Unraid Nvidia-Driver plugin. Separation drops to well under a minute.
Beltr-Intel ghcr.io/casavargas/beltr:latest-openvino Your server has an Intel processor with integrated graphics (6th gen Core onward, N100 included) or an Arc A-series card, and the Unraid Intel GPU TOP plugin. An Iris Xe or Arc-class GPU separates a song in about a minute; older UHD-class iGPUs gain less.

Both GPU images fall back to the CPU if passthrough is misconfigured, so a broken setup looks slow rather than broken. Confirm the GPU was found in Settings after install.

Install

Community Applications: Apps, search Beltr, pick one of the three, set the four paths, Apply. Then open the WebUI, go to Settings, and add /media as a music folder. Beltr never scans your library until you point it at one.

Plain Docker:

docker run -d --name beltr \
  -p 8477:8477 \
  -e PUID=99 -e PGID=100 -e TZ=America/New_York \
  -v /mnt/user/appdata/beltr:/config \
  -v /mnt/user/beltr:/library \
  -v /mnt/user/appdata/beltr-cache:/cache \
  -v /mnt/user/Music:/media:ro \
  --restart unless-stopped \
  ghcr.io/casavargas/beltr:latest

Compose: docker-compose.yml with .env.example as a starting point. Pick one profile:

cp .env.example .env        # edit PUID/PGID and the paths
docker compose --profile cpu up -d      # or --profile gpu (NVIDIA), --profile openvino (Intel)

The four paths

Mount Holds Size Put it on
/config Database, settings, logs, lyrics under 500 MB Cache pool / SSD (appdata)
/library Separated stems and imported audio 60-120 MB per song The array
/cache AI model weights ~2 GB, once Cache pool / SSD
/media Your music, read-only n/a Wherever it already is

Two of these matter more than they look. /library must not live in appdata, because every processed song leaves a pair of lossless stems behind and a few hundred songs will fill a cache pool sized for config files. And /cache must stay mapped, or the ~2 GB of model weights are re-downloaded every time you update the image.

Worth knowing before you install

  • First run downloads about 2 GB of model weights into /cache. Once. If a first song seems to sit still, that is what it is doing: docker logs -f beltr.
  • Microphones need HTTPS. Browsers only expose the microphone on a secure page, so scoring and phone-as-mic need Beltr behind a reverse proxy with a certificate. Queueing, playback, lyrics and stem mixing all work fine over plain http. Details.
  • Beltr assumes everyone who can reach it is trusted. Room joins are open by design so a guest can scan a QR code and sing. AUTH_PASSWORD puts a password on the TV and dashboard screens, but do not port-forward this container.
  • AMD GPUs are not supported in the container. ONNX Runtime's AMD path needs a full ROCm userspace in the image, several gigabytes, so it is not built; on the Windows desktop app AMD and Intel graphics can use the optional DirectML GPU pack instead. Intel iGPUs and Arc A-series cards are the Beltr-Intel image above; Arc B-series and Panther Lake are newer than its driver and are not supported yet. Everything also runs on the CPU alone.

Licensing

Beltr is a one-time purchase ($19.99, lifetime updates, 14-day money-back guarantee), not a subscription. The container runs free for five songs so you can try it against your own music, then asks for a key from beltr.app. Activation happens once and then works offline; updating or recreating the container does not re-activate, as long as you keep /config. A key covers two installs.

The MIT license in this repository covers these templates and docs only. Beltr itself is proprietary software distributed under its own EULA.

Keeping up

Templates here are copied from the Beltr application repository, which is where they are edited. File issues and support requests at CasaVargas/beltr-releases.

Media gallery

1 / 3

Install Beltr on Unraid in a few clicks.

Find Beltr in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Beltr Review the template variables and paths Click Install

Requirements

Internet access on first start to activate a license key (or to begin the five-song trial). After that Beltr keeps working offline.

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/casavargas/beltr:latest
Last Updated2026-09-13
First Seen2026-08-15

Runtime arguments

Web UI
http://[IP]:[PORT:8477]/dashboard
Network
bridge
Shell
bash
Privileged
false

Template configuration

WebUI PortPorttcp

Port for the web interface, the TV screen and the phone remotes. Change the host side only if 8477 is already taken.

Target
8477
Default
8477
Value
8477
ConfigPathrw

App state: database, settings, logs, lyrics. Small and written often — keep it on appdata (SSD/cache pool).

Target
/config
Default
/mnt/user/appdata/beltr
Value
/mnt/user/appdata/beltr
LibraryPathrw

Processed karaoke library: separated stems and imported audio. Roughly 60-120 MB per song, so point this at the array, NOT at appdata.

Target
/library
Default
/mnt/user/beltr
Value
/mnt/user/beltr
Music (read-only)Pathro

Your existing music. Mounted read-only — Beltr copies what it imports and never writes here. Add it as a music folder in Settings after the first start.

Target
/media
Default
/mnt/user/Music
Value
/mnt/user/Music
Model cachePathrw

Downloaded AI model weights, about 2 GB. Keep this mapped or every container update re-downloads them. Faster storage makes model loading quicker.

Target
/cache
Default
/mnt/user/appdata/beltr-cache
Value
/mnt/user/appdata/beltr-cache
PUIDVariable

User ID that owns the files Beltr writes. 99 (nobody) is the Unraid default.

Default
99
Value
99
PGIDVariable

Group ID that owns the files Beltr writes. 100 (users) is the Unraid default.

Default
100
Value
100
TZVariable

Timezone, e.g. America/New_York. Affects log timestamps.

Default
Etc/UTC
Value
Etc/UTC
License keyVariable

Your key from beltr.app. Activates once against this install and then works offline — updating or recreating the container does not re-activate, as long as you keep the Config path. Leave blank to try Beltr free: five songs, then it asks you to buy. You can also put the key in a file at /config/license.key instead.

Target
BELTR_LICENSE_KEY
Host PINVariable

Six digits that unlock host controls on a phone (skip, reorder, delete). Leave blank and Beltr picks a random one on every start, which changes if the container restarts mid-party.

Target
KARAOKE_HOST_PIN
Host passwordVariable

Optional password on the TV and dashboard screens and the settings endpoints. Phones joining a room are NOT affected. This keeps the household out of your settings; it is not internet-grade authentication.

Target
AUTH_PASSWORD
Fix permissionsVariable

first-run: fix ownership once, then only the top-level folders. always: fix everything on every start (slow on a big library). never: leave ownership alone.

Target
BELTR_FIX_PERMS
Default
first-run
Value
first-run