All apps · 0 apps
Beltr-NVIDIA
Docker app from Beltr's Repository
Overview
Readme
View on GitHubBeltr 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

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_PASSWORDputs 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 / 3Install 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.
Requirements
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/casavargas/beltr:latest-cudaRuntime arguments
- Web UI
http://[IP]:[PORT:8477]/dashboard- Network
bridge- Shell
bash- Privileged
- false
- Extra Params
--runtime=nvidia
Template configuration
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
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
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
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
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
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
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
User ID that owns the files Beltr writes. 99 (nobody) is the Unraid default.
- Default
- 99
- Value
- 99
Group ID that owns the files Beltr writes. 100 (users) is the Unraid default.
- Default
- 100
- Value
- 100
Timezone, e.g. America/New_York. Affects log timestamps.
- Default
- Etc/UTC
- Value
- Etc/UTC
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
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
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
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
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
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