OPENKJ FILE TYPES

What a KJ File Is, and What OpenKJ Plays

A search for a KJ file usually means the tracks a karaoke host already owns. In current OpenKJ source, that is not a file whose name ends in .kj.

By Paul Kircher · October 16, 2026

CHECKED AGAINST SOURCE

Checked on October 16, 2026. The OpenKJ master tree had no .kj string in it. src/dbupdater.h lists the karaoke extensions the scanner accepts. The same two arrays were in the community fork's src/dbupdater.h that day. Auto-KJ is a separate program. It does not document a .kj track type either.

On this site, KJ means the karaoke host. OpenKJ is the open-source program those hosts have used for years. People looking up "kj file" are usually trying to open or rename a library, not a format named .kj. This page is only what the OpenKJ source and this site's own pages support. Staying on OpenKJ or moving is a different decision, covered on the OpenKJ alternative page.

There is no .kj track extension in OpenKJ

OpenKJ's scanner decides a file is karaoke, or audio that might pair with karaoke, by the extension. In src/dbupdater.h on OpenKJ master, the karaoke list is avi, cdg, m4v, mkv, mp4, mpeg, mpg, wmv, and zip. The audio list, used to pair with a cdg, is flac, mov, mp3, ogg, and wav. The comment in that file says the lists must be sorted and lowercase. A search of the OpenKJ master tree on October 16, 2026 found no ".kj" at all, so a file named song.kj is not one of those extensions.

The project README describes the same idea in fewer words: zip files that contain an mp3, wav, or ogg plus a cdg, paired mp3 and cdg files, and non-cdg video (mkv, mp4, mpg, avi) for break music and karaoke. The header above is the longer list in the current source. It also includes m4v, mpeg, and wmv as karaoke files, and flac and mov as audio files that can sit beside a cdg.

How a CDG file and a zip are judged

A .cdg file is lyrics graphics. In src/dbupdater.cpp, a cdg is kept only when an audio file with the same filename is in the audio list. The scanner stores that audio path with the extension removed, then compares it to the cdg path with the last four characters (.cdg) removed. Same base name, matching audio. The audio extensions in that pair are the five above.

A zip is checked in src/okarchive.cpp. isValidKaraokeFile() fails when the archive is invalid or corrupt, when it has no cdg, when it has no supported audio file, or when the audio or the cdg inside is zero bytes. The audio names it looks for inside the zip are .mp3, .wav, .ogg, .mov, and .flac.

That zip check does not run on every import. dbupdater.cpp calls it only when the path ends in .zip and dbSkipValidation() is false. In src/settings.cpp the stored default for dbSkipValidation is true. The Database settings checkbox is labeled "Skip zip file validation on DB updates". With the default, invalid zips are not rejected by that function. Turn the skip off if you want the check.

How OpenKJ reads the file name

The database row comes from the file name, unless the folder is set to read tags. src/karaokefileinfo.cpp turns underscores into spaces, then splits on - (space, hyphen, space). The pattern is chosen per source folder. The default in src/karaokefilepatternresolver.cpp is SourceDir::SAT.

If the parse does not succeed, dbupdater.cpp stores the file's base name in the title field. The search string still includes the base name plus whatever artist, title, and song id the parser returned.

What Auto-KJ says about the same library

Auto-KJ is not OpenKJ. The FAQ states the file types this site claims for Auto-KJ: video karaoke in .mp4, .mkv, and .avi, CDG/ZIP playback, and an MP3+G and ZIP library. It does not list a .kj extension. The same FAQ says a file name laid out as artist, title, and disc ID parses the same way it does in OpenKJ, and that you can point Auto-KJ's ZIP watcher at the folders you already use.

That is a library you already have, not a new container. If you want to keep OpenKJ and only add phone search, or you want to try Auto-KJ's Free version and Full version, start at the OpenKJ alternative. The half-hour folder move is the migration walkthrough. Current OpenKJ installers from the community fork are on GitHub. Upstream OpenKJ is a separate project at github.com/OpenKJ/OpenKJ.

Same folders, two different programs

OpenKJ stays the open-source host. Auto-KJ's Free version plays a desk-entered list from your files. The Full version trial is inside the Auto-KJ app, with no card.