Intelligent audio auto-tagging for your music library using state-of-the-art machine learning.
Nomarr is an alpha audio tagging system that analyzes your music files using ONNX Runtime for ML inference (with a custom Essentia build for audio loading and preprocessing) and writes rich metadata tags directly into your audio files (MP3, M4A, FLAC, OGG, Opus, WAV, AAC, AIFF, and more). Perfect for organizing large libraries, discovering moods, and enriching metadata for music servers like Navidrome and Plex.
Nomarr tags your audio files with:
- Mood & Emotion β Happy, sad, aggressive, relaxed, party, etc.
- Acoustic Properties β Danceability, energy, timbre, brightness
- Audio Characteristics β Vocal presence, tonal/atonal classification
All tags are written as native metadata (ID3v2 for MP3, iTunes atoms for M4A, Vorbis comments for OGG/FLAC/Opus) with the nom: namespace prefix β no external database required.
You set a library path, scan, and get high quality ML tags in roughly a day (based on an 18k song library over a NAS share β your time may be lower or higher).
Note: Nomarr comes with mood and acoustic property models. Additional models (genre, instruments, etc.) can be added by users but are not included by default.
A BIG CAPITAL WARNING that the EFFNET embedder (so any EFFNET HEADS used) REQUIRES 9 GB of VRAM to run. It's the difference between a 40s per song and a 2 second per song during ML analysis. The embedder is cached in VRAM to prevent spin-up time each song, and will remain resident on VRAM for about 30 seconds after the last song is tagged.
- π Modern Web UI β Full browser interface for library management, analytics, calibration, and integrations
- π Library Scanner β Background scanning with tag extraction and real-time progress tracking
- ποΈ File Watching β Monitors filesystem for changes and triggers incremental scans (2β5 second response)
- π Calibration System β Normalize model outputs across heads with convergence tracking and drift detection
- π Library Insights β Collection overview, mood analysis, tag co-occurrence matrix, and genre/year distributions
- π΅ Navidrome Integration β Smart playlist (.nsp) generation and TOML config export
- π₯ Playlist Import β Convert Spotify and Deezer playlists to local M3U with fuzzy matching, metadata display, and manual search
- β‘ GPU Accelerated β NVIDIA CUDA support for fast ML inference
- π¨ Rich Metadata β Writes probabilities, tiers, and aggregated mood tags in native format
- π§ Vector Search β Cold-only ANN search with manual promote & rebuild workflow for predictable "as of last rebuild" results
- π Secure β API key authentication for automation, session-based auth for web UI
- π³ Docker Native β Compose-based deployment with NVIDIA GPU passthrough and ArangoDB backend
- Docker with NVIDIA GPU support (for GPU acceleration)
- Music library mounted at consistent path
-
Clone and configure:
git clone https://github.com/xiaden/nomarr.git cd nomarr/docker -
Configure environment files:
# Copy example env files cp nomarr-arangodb.env.example nomarr-arangodb.env cp nomarr.env.example nomarr.env # Edit nomarr-arangodb.env and set a strong root password # Edit nomarr.env and set the same root password
-
Create config directories and start:
mkdir -p config/arangodb docker compose up -d
On first run, Nomarr will:
- Provision the ArangoDB database
- Generate an app password (stored in
config/nomarr.yaml) - Create an admin password for the web UI
-
Get your admin password:
Check container logs for the auto-generated password:
docker compose logs nomarr | grep "Admin password"
-
Access the Web UI:
- Navigate to
http://localhost:8356/(if port is exposed in compose) or via your reverse proxy - Login with the admin password from step 4
- Add a library and start scanning!
- Navigate to
Real-time system overview with processing progress (including velocity tracking and ETA), library statistics with genre/year charts, and recent scan activity.
Hierarchical library browser with Artist β Album β Track drill-down, plus flat entity tabs for Artists, Albums, Genres, and Years. Tag-based exploration lets you find songs by exact string match or nearest numeric value.
Library management is built in β add libraries, trigger scans, and monitor scan status from a collapsible panel:
Library analytics organized into three sections: Collection Overview (stats, top genres, years, artists), Mood Analysis (coverage, balance, vibes, mood combos), and Advanced (tag frequency distributions and a full co-occurrence matrix). All filterable by library.
Generate calibration profiles from your library data, apply them to normalize model outputs, and update new files. Convergence tracking shows per-head stability across calibration rounds with summary stats and P5/P95 charts.
Two tools for Navidrome users: Generate Config creates a TOML configuration file mapping Nomarr tags to Navidrome's smart playlist fields. Playlist Maker builds .nsp smart playlist files using tag-based filter groups with preview and sort options.
Paste a Spotify or Deezer playlist URL and Nomarr converts it to a local M3U file by fuzzy-matching tracks against your library. Results show match confidence, matched file metadata (artist, album, duration, bitrate), and let you search for alternatives or manually add tracks.
Nomarr writes tags using the nom: namespace prefix:
nom:happy_essentia21b6dev1389_effnet20220825_happy20220825 = 0.7234
nom:aggressive_essentia21b6dev1389_effnet20220825_aggressive20220825 = 0.1203
nom:danceability_essentia21b6dev1389_effnet20220825_danceability20220825 = 0.8941
nom:voice_instrumental_essentia21b6dev1389_effnet20220825_voice_instrumental20220825 = 0.2341
nom:mood-strict = ["peppy", "party-like", "synth-like", "bright timbre"]
nom:mood-regular = ["peppy", "party-like", "synth-like", "bright timbre", "easy to dance to"]
nom:mood-loose = ["peppy", "party-like", "synth-like", "bright timbre", "easy to dance to", "has vocals"]
nom_version = 1.0.0
Each numeric tag includes the full model head identifier: {label}_{framework}_{embedder}_{head}. Aggregated mood tags combine predictions across multiple heads into three confidence tiers (strict β regular β loose) using human-readable labels. The nom_version tag tracks which tagger version processed each file.
- Getting Started β Installation, setup, and first steps
- Deployment Guide β Docker setup, configuration, and production best practices
- Navidrome Integration β Smart playlist generation guide
- Architecture β System design and component overview
- Developer Documentation β Complete documentation index
API Reference: Nomarr exposes interactive API documentation via FastAPI's built-in Swagger UI at the
/docsendpoint when running.
| Directory | Purpose |
|---|---|
nomarr/ |
Python backend (FastAPI, clean architecture) |
frontend/ |
React/TypeScript SPA |
docker/ |
Compose files, env examples, deployment config |
docs/ |
User and developer documentation (MkDocs) |
code-intel/ |
MCP server for Python code navigation |
navidrome-plugin/ |
Navidrome Go plugin for smart playlists |
scripts/ |
Build tools, viewers, analysis scripts |
e2e/, tests/ |
End-to-end and unit tests |
Nomarr is licensed under CC BY-NC-SA 4.0 β Non-Commercial use only
This project is designed for the self-hosted music community and personal use. Commercial use is not permitted.
- Attribution Required: Credit Nomarr and the Music Technology Group, Universitat Pompeu Fabra (for Essentia models)
- ShareAlike: Derivative works must use the same license
- Non-Commercial: No commercial use without explicit permission
See LICENSE and NOTICE for complete attribution and third-party license information.
Built with:
- Essentia β Audio loading and preprocessing by Music Technology Group, UPF
- ONNX Runtime β Machine learning inference
- ArangoDB β Multi-model database backend
- FastAPI β Modern Python web framework
- Rich β Beautiful terminal UI
See Developer Documentation for complete technical details.
Contributions are welcome! This project is in active development.
Note: Please consult with MTG, UPF regarding any contributions that modify model processing or create derivative works of the ML models, as they are subject to CC BY-NC-SA 4.0 ShareAlike terms.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with β€οΈ for the self-hosted music community






