Beltr-NVIDIA

Beltr-NVIDIA

Docker app from Beltr's Repository

Overview

Beltr turns any song in your music library into a karaoke track. It separates the vocals out with a local AI model, finds or transcribes synced lyrics, 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. THIS IS THE NVIDIA GPU BUILD. It needs the Unraid "Nvidia-Driver" plugin installed and your GPU passed through. Two settings below do that: NVIDIA_VISIBLE_DEVICES must hold your card's UUID (the Nvidia-Driver plugin page in Settings shows it, like GPU-1a2b3c4d-...), and "Extra Parameters" must contain --runtime=nvidia, which this template already sets. If you do not have an NVIDIA GPU, install plain "Beltr" instead. This image is several GB larger and gains you nothing without a card. It will still run — it falls back to the CPU — so a broken passthrough shows up as "slow", not "broken". Check the GPU panel in Settings after install to confirm the card was actually found. 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: with a working GPU, separating a 3-4 minute song takes well under a minute. Most songs then get their lyrics instantly from an online lyrics database; the ones no provider knows fall back to local transcription, which the GPU also accelerates. 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, finds or transcribes synced lyrics, 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 · Support

Lyrics on the TV screen

Which template

Install one, not both. 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.

The GPU image falls back to the CPU if passthrough is misconfigured, so a broken setup looks slow rather than broken. Confirm the card was found in Settings after install.

Install

Community Applications: Apps, search Beltr, pick one of the two, 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

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 and Intel GPUs are not supported. Not an oversight; the separation model's complex-valued STFT is not reliable on those paths.

Licensing

Beltr is a one-time purchase, 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-NVIDIA on Unraid in a few clicks.

Find Beltr-NVIDIA 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-NVIDIA Review the template variables and paths Click Install

Requirements

Unraid Nvidia-Driver plugin, and an NVIDIA GPU with driver 525 or newer (the image ships CUDA 12.8 builds of PyTorch). Internet access on first start to activate a license key, or to begin the five-song trial.

Related apps

Explore more like this

Explore all

Details

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

Runtime arguments

Web UI
http://[IP]:[PORT:8477]/dashboard
Network
bridge
Shell
bash
Privileged
false
Extra Params
--runtime=nvidia

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
NVIDIA_VISIBLE_DEVICESVariable

Which GPU to use. Paste the UUID shown on the Nvidia-Driver plugin page in Settings (it looks like GPU-1a2b3c4d-...). 'all' works on a single-GPU server. Getting this wrong is not an error — Beltr just quietly runs on the CPU.

Default
all
Value
all
NVIDIA_DRIVER_CAPABILITIESVariable

Driver features exposed to the container. Beltr needs compute (CUDA) and utility (nvidia-smi). It does not need video or graphics — this is not a transcoding container.

Default
compute,utility
Value
compute,utility
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
Transcription modelVariable

Only used for songs no online lyrics provider knows. On a GPU, large-v3 is fast enough that there is little reason to use anything smaller.

Target
WHISPER_MODEL_SIZE
Default
large-v3
Value
large-v3
Separation modelVariable

htdemucs is the default and the only one bundled; anything else downloads on first use. htdemucs_ft is about 4x slower for a small quality gain — affordable on a GPU.

Target
DEMUCS_MODEL
Default
htdemucs
Value
htdemucs
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