karaokatalog/README.md
2025-11-12 16:10:10 +01:00

2.8 KiB
Raw Blame History

Karaokatalog

Tools to manage an UltraStar DX song library. Features include:

  1. Web-based catalogue UI
  2. Deduplication
  3. Organization
  4. Recoding
  5. Jsonification

Setup

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Run

We assume that your song library is stored at $SONG_LIBRARY. Replace this placeholder when running the command, or just set the variable, e.g., like this:

export SONG_LIBRARY=/path/to/library

Web-based catalogue UI

A web-based UI to browse the song library. It supports searching by title and artist, and allows to mark and unmark favorites on the client side (using local storage).

Serve

Launch a server for the catalogue UI on localhost. Mostly useful for development purposes.

This is completely risk-free, as it does not change files.

python3 -m karaokatalog.ui.serve $SONG_LIBRARY

To speed up the start, use jsonification to create and persist a JSON of all songs in the library root dir before starting this UI.

Bundle

Create a bundle .zip file containg web app and data that can be uploaded to any web hoster that can host static files.

python3 -m karaokatalog.ui.bundle $SONG_LIBRARY

Deduplication

Find and delete exactly duplicated songs, i.e., songs with the same title and artist that also consist of exactly the same files in the directory.

⚠️ This will irreversibly delete all song folders it considers to be exact duplicates.

Deduplication is (mostly) risk-free: As it only deletes exact duplicates, you will not lose any data (given that I've made no programming errors, which is why the operation is only mostly risk-free).

python3 -m karaokatalog.deduplicate $SONG_LIBRARY

Organization

Rename/move every song folder to $SONG_LIBRARY/<artist>/<title>. If such a folder already exists, a number is appended to distinguish.

Moving will not overwrite already existing files, the operation is therefore risk-free.

python3 -m karaokatalog.organize $SONG_LIBRARY

Recoding

Re-encode all txt files into UTF-8. This will use normal UTF-8, i.e., UTF-8 without BOM. If the txt uses UTF-8 with BOM, BOM is removed.

⚠️ This will irreversibly change the encoding of the txt files (based on a guessed encoding).

Deduplication is risk-reduced: We only change the encoding if we are reasonably certain our guessed encoding is correct. However, we could still make mistakes when detecting.

python3 -m karaokatalog.recode $SONG_LIBRARY

Jsonification

Create a songs.json file with some song metadata in the root library dir.

This operation is risk-free: If a songs.json already exists, it is kept intact (so no data loss possible).

python3 -m karaokatalog.jsonify $SONG_LIBRARY