- Rust 95.5%
- Svelte 4.3%
- TypeScript 0.1%
- HTML 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The public repo had a README containing only a title, which reads as abandoned rather than unfinished. This describes the three-crate workspace layout and leans on docs/adr, which is where the actual reasoning already lives. Framed on the design decisions rather than the feature list: per-field confidence so a matched artist is not trusted like a guessed year, and a review queue rather than automatic writes. |
||
| crates | ||
| docs | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CONTEXT.md | ||
| LICENSE | ||
| README.md | ||
| STRUCTURE.md | ||
IdealMusicTagger
A local music tagger: scans a library, reads and writes audio metadata, and enriches it from online sources without sending the library anywhere.
The design assumption is that the collection is private and the tool should stay out of the way. Enrichment is opt-in per field, every remote call is cached, and there is a review queue so nothing overwrites a tag you set by hand without showing you first.
Workspace layout
A Cargo workspace with three crates:
crates/ideal-tagger-core the library everything else is built on
config/ TOML configuration, validation, secrets resolution
db/ SQLite via sqlx, with migrations and repositories
tagger/ reading and writing tags across audio formats
external/ MusicBrainz and other enrichment sources, with caching
and per-field confidence scoring
ingestion/ library scanning and duplicate detection
lyrics/ synced lyrics
organization/ collection status tracking
field_verification/ checking which fields are trustworthy
crates/ideal-tagger-cli the `ideal-tagger` command line tool
config init | show | set-required-fields
scan, list
tag set | remove
enrich, review
fetch-lyrics, lyrics show
crates/ideal-tagger-gui Tauri front end
The core is deliberately independent of the CLI and GUI, so both are thin.
Decisions worth reading about
The reasoning behind the design lives in docs/adr/. The ones that shaped the
code most:
- A remote-storage abstraction up front, so a sync target can be added without rewriting the tagger around it.
- SQLite as the primary datastore — a local tool for a local collection does not want a server.
- A tag-mapping architecture separating what a format can express from what the user means, since MP3 ID3, FLAC Vorbis comments, and MP4 atoms each model this differently.
- Per-field confidence on enrichment, so a high-confidence artist match and a guessed release year are not treated as equally trustworthy.
- A review queue rather than automatic writes, because auto-tagging a library you care about is a good way to ruin it.
Status
The workspace builds and its test suite passes. The GUI crate is still a placeholder; issue #11 covers the foundation.
cargo build --workspace
cargo test --workspace
Issue-by-issue status is in docs/issues/, and the product spec is
docs/PRD-001-ideal-music-tagger-v1.md.