Karaoke Eternal makes no assumptions about audio input so that it can work with any mic setup (including none at all). To mix the player’s output (the music) with mics, there are generally 2 approaches:

Where can I download karaoke songs?

Below is a non-exhaustive, probably U.S.-centric list of sources for licensed MP3+G or MP4 files (additions welcome):

Karaoke tracks require original recording and production. Please support the creators!

Karaoke Eternal isn’t quite what I’m looking for. What else is out there?

(Are we missing something? Submit a PR!)


Serving with NGINX (reverse proxy + custom path)

If you want to host the app at /karaoke for example, run Karaoke Eternal Server with the --urlPath /karaoke option, then use an NGINX config similar to the following, replacing <your_server_ip> and <your_server_port>:

  location /karaoke {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Proto $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;


The media scanner stops before scanning all my files?

Check the scanner log (or console output) and look for the last file the scanner encountered - typically it will be corrupt and should be removed.

My files have correct artist & title metadata tags; can they be used instead of filenames?

Yes, just place the following _kes.v1.js file in the applicable media folder:

return ({ compose, getDefaultParser, defaultMiddleware }) => {
  return (ctx, next) => {
    ctx.artist = ctx.data.artist
    ctx.title = ctx.data.title

Running the player in Safari on macOS shows “The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.”

Safari is more stringent than other browsers, but you can customize settings and set Auto-Play to “Allow all Auto-Play”.