v4vmm is a Linux-first GPUI desktop app for working with MusicIndex-backed music feeds and a local managed audio library.
The current tool is not a generic roadmap project or a future media player shell. It is a desktop operator app that already does four concrete jobs:
- discover artists, feeds, and tracks from MusicIndex
- subscribe feeds by pulling their RSS into a local SQLite database
- download track files into a managed library under
music_dir/artists/... - compare and update embedded metadata on local files, with optional MusicBrainz-assisted staging
Discoversearches MusicIndex and shows recent feeds when the search box is empty.- Feed and track inspectors can subscribe or unsubscribe content against the local database.
- Subscribing a feed stores its RSS metadata locally and attempts to download each track.
- Subscribing a track stores the parent feed if needed, downloads the file, and marks that track as part of the managed library.
Libraryshows subscribed tracks grouped by artist and release/feed.Cachedshows downloaded files that exist locally but are not currently marked as subscribed library tracks.- Local track inspectors can compare embedded ID3 data against RSS-derived metadata and stage explicit ID3v2.4 edits.
- Local track and album inspectors can run metadata-based MusicBrainz lookups and use the results to stage more ID3 edits.
- The library can check subscribed feeds for newer
updated_atvalues from MusicIndex and apply tag refreshes to downloaded files.
The app is built around four data sources:
- RSS feed data imported into SQLite
- MusicIndex API detail data
- embedded file metadata, currently centered on ID3 workflows
- MusicBrainz metadata lookups for local enrichment
It is not currently a full playback app, a fingerprint scanner, or a general-purpose tag editor.
cargo runWhen a feed declares MP3 but actually ships WAV (a known RSS quirk), v4vmm
silently re-encodes the download to FLAC so it can be tagged. This path shells
out to the standard flac CLI. Install it via your package manager:
- Debian/Ubuntu:
sudo apt install flac - Fedora:
sudo dnf install flac - Arch:
sudo pacman -S flac - macOS (Homebrew):
brew install flac
Without flac installed, WAV downloads are kept as WAV and left untagged. A
custom binary path can be set under Settings → flac binary or via the
flac_path config key.
Build the desktop binary:
cargo buildInstall it locally:
cargo install --path .On first run the app creates a config file, then ensures the required directories exist.
Default locations on Linux-style systems:
# ~/.config/v4vmm/config.toml
music_dir = "/home/<user>/V4Vmusic"
db_path = "/home/<user>/.local/share/v4vmm/v4vmm.sqlite"
musicindex_endpoint = "https://api.musicindex.org"The Settings tab lets you update:
musicindex_endpointmusic_dirflac_path(optional override; blank means useflacfrom$PATH)
Downloads are organized under:
<music_dir>/artists/<artist>/<release-or-feed>/<track file>
The app also keeps a thumbnail cache beside the config directory.
The SQLite database tracks three related states:
feeds: imported RSS feeds and subscription statetracks: feed items and whether each track is part of the managed librarylocal_files: downloaded files on disk
That gives the UI two useful views:
Library: downloaded tracks that are still markedis_in_library = 1Cached: downloaded files whose tracks exist locally but are currently unsubscribed
The app is provenance-first. It keeps RSS, MusicIndex, embedded tags, and MusicBrainz values separate instead of silently collapsing them into one inferred truth.
Current behavior:
- RSS import stores source feed and item metadata locally.
- RSS enrichment can pull transcript URLs and nostr handles directly from feed XML when MusicIndex detail data is missing them.
- Local compare views line up RSS, ID3, and optionally MusicBrainz values side by side.
- Applying tag changes writes explicit ID3v2.4 frames only.
- MusicBrainz lookup is metadata-based. There is no acoustic fingerprinting flow in this app.
Current limitations:
- embedded metadata inspection and editing are centered on ID3-backed files
- the library download layer recognizes more than MP3, but the richest compare/edit flows are still MP3/ID3-first
- search-side download/compare code still follows an MP3-oriented path
Global shortcuts wired in the app today:
Cmd/Ctrl+1: switch toLibraryCmd/Ctrl+2: switch toDiscoverCmd/Ctrl+3: switch toSettingsCmd/Ctrl+F: focus the active tab search field inLibraryorDiscoverCmd/Ctrl+R: refreshLibraryEsc: close the active inspector