No description
Find a file
2025-07-09 18:55:26 -05:00
src Initial Commit 2025-07-09 18:55:26 -05:00
.gitignore Initial Commit 2025-07-09 18:55:26 -05:00
Cargo.lock Initial Commit 2025-07-09 18:55:26 -05:00
Cargo.toml Initial Commit 2025-07-09 18:55:26 -05:00
README.md Initial Commit 2025-07-09 18:55:26 -05:00

song-hash

A blazing-fast Rust CLI for generating and verifying BLAKE3 checksums of large music libraries with a tiny binary footprint.

Features

  • Generates hashes using the modern and extremely fast BLAKE3 algorithm
  • Hashes and verifies many folders at once using all available CPU cores
  • Creates a single checksums.txt file per album, leaving artist folders clean
  • Never overwrites existing checksums unless you explicitly use --force
  • Tiny release binary (~550KB)

Installation

cargo build --release

Usage

# Generate checksums for a music library
song-hash hash [OPTIONS] <MUSIC_ROOT>

# Verify checksums for a music library
song-hash verify [OPTIONS] <MUSIC_ROOT>

Hashing Options:

  • -o, --output <NAME>: Sets the name of the checksum file (default: checksums.txt).
  • -f, --force: Overwrites existing checksum files if they exist.

Verification Options:

  • -c, --checksum <NAME>: Specifies the name of the checksum file to find and verify (default: checksums.txt).

Examples

Hash your entire music collection (non-destructive):

song-hash hash "D:\Music"

Overwrite existing checksum files:

song-hash hash -f "D:\Music"

Verify every album under Downloads:

song-hash verify "C:\Users\You\Downloads"

What gets hashed?

Only audio files (flac, mp3, wav, ogg, opus, m4a, aac, alac, ape, wma, aif, aiff, pcm, mka) that live directly inside each album directory. Artist folders that contain only sub-folders are skipped. The checksum file format is just two columns: hash & filename.

b818e0e88f3b…  01 - Intro.flac
7c6a21d82f4c…  02 - Track.flac