KaraokeDock

KaraokeDock

Docker app from haggardj2-karaokedock's Repository

Overview

KaraokeDock is a self-hosted karaoke system with singer requests, live host controls, rotation and history, MP4 and CDG+MP3 playback, online karaoke search, and break-music playlists. Requires a separate PostgreSQL database; create the database and user before starting. On default bridge networking, use the Unraid server IP and PostgreSQL's published host port. Container-name DNS requires a shared user-defined Docker network. Set WEB_APP_URL and ORIGIN to the actual browser-facing URL, not localhost. Trusted HTTPS is required for Google/Facebook sign-in and Host PWA installation. OIDC and optional social login are configured in Admin. First startup runs database migrations and logs a generated administrator password when creating the initial account. The WebUI opens Admin; use /host for show controls, /player for the display, and /requests for singers. Add /media/karaoke and /media/breakmusic in Admin, then scan. Periodic scanning is enabled separately in Admin. Keep downloads, uploaded images, exported playlists, and PostgreSQL data on persistent storage. Back up the database before upgrades. Setup and troubleshooting: https://github.com/haggardj2/KaraokeDock/blob/main/docs/Unraid_readme.md

KaraokeDock on Unraid

This guide covers installing KaraokeDock on Unraid from Community Applications, setting up PostgreSQL, and connecting the app container to the database.

What you need

  • Unraid with Community Applications installed
  • A PostgreSQL container
  • A share or folder for karaoke tracks
  • Optional folders for downloaded tracks and break music
  • Persistent writable folders for downloads, uploaded player images, and exported playlists

Recommended shares and folders

Create a share such as karaoke, then create these folders:

/mnt/user/karaoke/Karaoke Tracks
/mnt/user/karaoke/downloads
/mnt/user/karaoke/Break Music
/mnt/user/appdata/postgresql
/mnt/user/appdata/karaokedock/images
/mnt/user/appdata/karaokedock/playlists

Recommended use:

Host path Container path Access Purpose
/mnt/user/karaoke/Karaoke Tracks /media/karaoke Read-only Local karaoke library
/mnt/user/karaoke/downloads /media/downloads Read/write Downloaded/imported tracks
/mnt/user/karaoke/Break Music /media/breakmusic Read-only Break music
/mnt/user/appdata/karaokedock/images /media/images Read/write Uploaded player backgrounds
/mnt/user/appdata/karaokedock/playlists /media/playlists Read/write Break-music M3U exports

Singer profiles, login links, queue/history, settings, and saved playlist definitions are stored in PostgreSQL. Back up the database as well as writable media folders before upgrading. The application runs database migrations on startup.

Install PostgreSQL

  1. Open Apps in Unraid.
  2. Search for a PostgreSQL container, such as postgres, postgresql, or postgresql_alpine.
  3. Install it with a persistent appdata path.

Use values like:

Setting Example
Container name postgresql_alpine
Host port 5432
Container port 5432
Data path /mnt/user/appdata/postgresql
Database karaoke
User karaoke
Password Choose a strong password

For many PostgreSQL templates, the environment variables are:

POSTGRES_DB=karaoke
POSTGRES_USER=karaoke
POSTGRES_PASSWORD=your_strong_password

Start the PostgreSQL container and confirm it stays running before installing KaraokeDock.

Database networking options

Use one of these connection methods.

Option A: Connect by Unraid server IP

This works with normal bridge networking as long as the PostgreSQL port is published on the host.

Example:

DB_HOST=192.168.1.50
DB_PORT=5432

Replace 192.168.1.50 with your Unraid server IP.

Option B: Connect by PostgreSQL container name

Use this if KaraokeDock and PostgreSQL are on the same user-defined Docker network and container DNS is available.

Example:

DB_HOST=postgresql_alpine
DB_PORT=5432

The template leaves DB_HOST blank deliberately: choose the correct address for your network. The default bridge network does not provide container-name DNS. Select the shared user-defined network for both containers in Unraid; if your setup uses Extra Parameters, use --network=NETWORK_NAME. Verify the running containers' network membership rather than assuming a container name will resolve.

Install KaraokeDock from Community Applications

  1. Open Apps in Unraid.
  2. Search for KaraokeDock.
  3. Install the app.
  4. Fill in the required paths and variables.

The container image is:

haggardj2/karaokedock:latest

KaraokeDock template settings

Required port

Setting Value
WebUI Port 5173

The Web UI opens at:

http://UNRAID_IP:5173/admin

Storage paths

Template field Container path Example host path
Karaoke Tracks /media/karaoke /mnt/user/karaoke/Karaoke Tracks
Downloads /media/downloads /mnt/user/karaoke/downloads
Break Music /media/breakmusic /mnt/user/karaoke/Break Music
Uploaded Images /media/images /mnt/user/appdata/karaokedock/images
Exported Playlists /media/playlists /mnt/user/appdata/karaokedock/playlists

Break Music is optional. The other mappings are required by the template. Existing installations should add the image and playlist mappings explicitly when updating their saved Unraid template. If Admin overrides either internal directory, map that directory too.

Required database variables

Template field Variable Example
Database Host DB_HOST 192.168.1.50 or postgresql_alpine
Database Port DB_PORT 5432
Database Name DB_NAME karaoke
Database User DB_USER karaoke
Database Password DB_PASSWORD Your PostgreSQL password

Web URL and origins

Set these to the URL users will actually open.

For LAN-only access:

WEB_APP_URL=http://192.168.1.50:5173
ORIGIN=http://192.168.1.50:5173,http://localhost:5173,http://127.0.0.1:5173
TRUST_PROXY=false

If using a reverse proxy:

WEB_APP_URL=https://karaoke.example.com
ORIGIN=https://karaoke.example.com,http://192.168.1.50:5173
TRUST_PROXY=1

ORIGIN is comma-separated. Include every browser URL that will access the app so HTTP requests and WebSockets work correctly.

The template leaves WEB_APP_URL and ORIGIN blank so you supply real browser-facing origins instead of accidentally using localhost. Do not add /admin, /host, or other paths. Google/Facebook sign-in and installation of the Host PWA require trusted HTTPS (except localhost for development).

TRUST_PROXY defaults to false for direct access. Behind a reverse proxy, use the trusted proxy IP/CIDR or the correct hop count for your deployment; 1 assumes one trusted proxy hop. Ensure the proxy forwards WebSockets and prevent clients from bypassing it when relying on forwarded headers.

Optional performance setting

MEDIA_PROBE_CONCURRENCY controls how many media files are probed at once during scanning.

Suggested values:

Server CPU Suggested value
4-core 8 to 12
6-core 12 to 16
8+ cores 16 to 24

Leave it blank to let KaraokeDock auto-pick a value.

The advanced Media Scan Interval (ms) setting defaults to 900000 (15 minutes). Enable periodic media library scan in Admin separately; changing the interval alone does not enable scanning. The first enabled pass reconciles the library, and subsequent passes scan changed folders. Failed scans remain pending for retry.

First startup

  1. Start PostgreSQL.
  2. Start KaraokeDock.
  3. Initial password is randomly generated. Check logs within the KaraokeDock container for the password.
  4. Open:
http://UNRAID_IP:5173/admin
  1. Add /media/karaoke as a local library in Admin, and /media/breakmusic as a break-music folder if used. Use container paths, not Unraid host paths.
  2. Run a library scan from the Admin page.
  3. Open the Host page:
http://UNRAID_IP:5173/host
  1. Open the Player page on the display machine:
http://UNRAID_IP:5173/player

Guests use:

http://UNRAID_IP:5173/

Project and support

PostgreSQL connection troubleshooting

KaraokeDock cannot connect to PostgreSQL

Check:

  • PostgreSQL container is running.
  • DB_HOST is correct.
  • DB_PORT matches the published PostgreSQL host port when using the Unraid IP, or the internal service port when using container-name DNS.
  • DB_NAME, DB_USER, and DB_PASSWORD match the PostgreSQL container settings.
  • If using a container name for DB_HOST, both containers are on the same user-defined Docker network.

If unsure, use the Unraid server IP for DB_HOST.

Database authentication failed

The password in KaraokeDock must match the PostgreSQL user's password. If you change POSTGRES_PASSWORD after the database has already initialized, many PostgreSQL containers do not automatically update the existing database user's password. Update the password inside PostgreSQL or recreate the database appdata if you are starting over.

Web page loads but queue updates do not

Check ORIGIN. It must include the exact URL used in the browser, including protocol and port.

Examples:

http://192.168.1.50:5173
https://karaoke.example.com

Media scan finds no files

Check:

  • The host path points to the correct Unraid share/folder.
  • The Karaoke Tracks path is mounted to /media/karaoke.
  • The files are in supported karaoke formats.
  • The path is readable by the container.

Forgot Login

Open a console to your Unraid server

# Run password reset helper:
docker exec -it KaraokeDock npm run reset-credentials
# Defaults to username "admin" and generates a secure password if --password is omitted.
docker exec -it KaraokeDock npm run reset-credentials -- --password supersecret
# Or set a specific username/password:
docker exec -it KaraokeDock npm run reset-credentials -- --username admin --password supersecret

Download Statistics

4,293
Total Downloads

Related apps

Explore more like this

Explore all

Details

Repository
haggardj2/karaokedock:latest
Last Updated2026-09-18
First Seen2026-06-24

Runtime arguments

Web UI
http://[IP]:[PORT:5173]/admin
Network
bridge
Shell
bash
Privileged
false

Template configuration

WebUI PortPorttcp

Host port for the web interface, API, and WebSocket connections. Only one app port is needed.

Target
5173
Default
5173
Value
5173
Karaoke TracksPathro

Karaoke media, mounted read-only. Add /media/karaoke as a library in Admin. Supports MP4, ZIP CDG+MP3, and loose CDG+MP3 pairs.

Target
/media/karaoke
Default
/mnt/user/karaoke/Karaoke Tracks
DownloadsPathrw

Persistent writable folder for downloaded/imported tracks. Must be writable by the container.

Target
/media/downloads
Default
/mnt/user/karaoke/downloads
Break MusicPathro

Optional break music, mounted read-only. Add /media/breakmusic as a break-music folder in Admin.

Target
/media/breakmusic
Default
/mnt/user/karaoke/Break Music
Uploaded ImagesPathrw

Persistent writable storage for uploaded player background images. Keep this mapping when recreating or upgrading the container.

Target
/media/images
Default
/mnt/user/appdata/karaokedock/images
Exported PlaylistsPathrw

Persistent writable storage for break-music M3U exports. Saved playlist definitions and ordering remain in PostgreSQL.

Target
/media/playlists
Default
/mnt/user/appdata/karaokedock/playlists
Database HostVariable

Required: Unraid server IP on default bridge networking, or PostgreSQL container name only when both containers share a user-defined Docker network.

Target
DB_HOST
Database PortVariable

Use PostgreSQL's published host port when DB_HOST is the Unraid IP. Use its internal service port (usually 5432) when connecting by container name.

Target
DB_PORT
Default
5432
Value
5432
Database NameVariable

Existing PostgreSQL database. Startup applies schema migrations; the database user must be allowed to create tables and required extensions.

Target
DB_NAME
Default
karaoke
Value
karaoke
Database UserVariable

PostgreSQL login for the KaraokeDock database.

Target
DB_USER
Default
karaoke
Value
karaoke
Database PasswordVariable

Required: password for the PostgreSQL user. Enter the actual password, not a URL-encoded value.

Target
DB_PASSWORD
Web App URLVariable

Required: browser-facing origin, e.g. http://192.168.1.50:5173 or https://karaoke.example.com. No /host or /admin suffix. Use trusted HTTPS for social sign-in and PWA installation.

Target
WEB_APP_URL
Allowed OriginsVariable

Required: exact browser origins separated by commas, including scheme and port. Include WEB_APP_URL and any LAN URL used. Do not use paths or a wildcard.

Target
ORIGIN
Media Probe ConcurrencyVariable

Optional parallel metadata probes. Blank selects automatically based on CPU count (10-24). Suggested: 4 cores 8-12, 6 cores 12-16, 8+ cores 16-24. Lower if CPU or storage is overloaded.

Target
MEDIA_PROBE_CONCURRENCY
Media Scan Interval (ms)Variable

Delay between periodic media-library scans in milliseconds; 900000 is 15 minutes. Enable periodic media scanning in Admin separately. Must be a positive integer.

Target
BACKGROUND_MEDIA_SCAN_INTERVAL_MS
Default
900000
Value
900000
Media RootVariable

Root media path inside the container. Keep /media with the supplied path mappings.

Target
MEDIA_ROOT
Default
/media
Value
/media
Image Uploads DirectoryVariable

Internal upload directory; must match the writable Uploaded Images mapping.

Target
IMAGE_UPLOADS_DIR
Default
/media/images
Value
/media/images
Break Playlist Export DirectoryVariable

Default internal M3U export directory. If overridden in Admin, that folder must also have a persistent writable mapping.

Target
BREAK_MUSIC_PLAYLISTS_FOLDER
Default
/media/playlists
Value
/media/playlists
Trust ProxyVariable

Use false for direct LAN access. For a reverse proxy, configure trusted proxy IPs/CIDRs or the correct hop count (often 1). Restrict direct access when trusting forwarded headers.

Target
TRUST_PROXY
Default
false
Value
false