Noqlen Meta
Noqlen Meta is a beets plugin for multi-provider metadata enrichment and MusicBrainz identity tools. beets remains the matcher and library manager: Noqlen enriches releases and tracks that beets has already selected, and it offers separate workflows to audit MusicBrainz identity and synchronize four confirmed MusicBrainz IDs to audio-file tags.
Noqlen previews by default. Database changes require --apply; specialized
identity-tag file replacement requires --identity-tags --write. There is no
--force option.
Capabilities
- Enrich selected releases from Discogs, MusicBrainz, Last.fm, and iTunes.
- Add selected-track plain lyrics from LRCLIB during import.
- Preview or apply ordinary enrichment to albums already in a beets library.
- Audit and repair release, release-group, recording, and release-track MBIDs.
- Synchronize those four coherent database MBIDs to supported audio files.
- Keep provider lookup, database application, and file writing separately authorized.
Noqlen does not rematch ordinary enrichment targets. It does not call Navidrome APIs; Navidrome is a possible consumer of resulting file tags.
Documentation
The complete manual is available on
Read the Docs. The
site-docs/
source is available for contributions.
Start with:
Installation
Install Noqlen Meta in the same Python environment as beets:
pip install beets-noqlenmeta
Discogs search needs the optional client:
pip install "beets-noqlenmeta[discogs]"
Enable the plugin in the beets config.yaml:
plugins:
- noqlenmeta
noqlenmeta:
preview: true
Run beet config -p to print the configuration path. beets chooses the normal
platform-specific configuration directory; do not assume the same path on
Linux, macOS, and Windows.
Verify that the plugin loaded:
beet help noqlenmeta
The command is beet noqlenmeta; beet nm is the preferred alias.
First Preview
Enable at least one provider before ordinary enrichment. For example, MusicBrainz enrichment uses the exact release MBID already known by beets:
noqlenmeta:
providers:
musicbrainz:
enabled: true
Preview one existing album:
beet nm album:"Example Album"
The command may use the network, but preview does not change the beets database
or audio files. Review KEEP, PROPOSE, REVIEW, and BLOCKED results before
continuing.
Apply To The Database
After reviewing the same query, explicitly apply ordinary safe changes:
beet nm --apply album:"Example Album"
This changes ordinary metadata in the beets database only. It does not write audio-file tags. Strict mode is the default: one review or mapping blocker withholds every ordinary Noqlen change for that album.
Partial mode is explicit:
beet nm --apply --partial album:"Example Album"
Partial mode can store already-safe ordinary fields while leaving blocked or review fields unchanged. Partial is not force: it never accepts ambiguity, lowers confidence, bypasses stale-state checks, or applies identity/file work partially.
Commands And Write Boundaries
| Command | Purpose | Network | Database | Audio files |
|---|---|---|---|---|
beet nm QUERY |
Ordinary preview | Enabled providers | No | No |
beet nm --apply QUERY |
Ordinary application | Enabled providers | Ordinary album metadata | No |
beet nm --identity QUERY |
Identity audit | MusicBrainz | No | No |
beet nm --identity --apply QUERY |
Identity repair | MusicBrainz | Four MBID columns | No |
beet nm --identity-tags QUERY |
Identity-tag preview | No | No | No |
beet nm --identity-tags --write QUERY |
Four-MBID synchronization | No | Operational mtime only |
Four MBID tags |
beet write QUERY |
Native beets tag sync | No | Operational state | Generic beets fields |
The importer has another boundary: Noqlen may update the metadata selected by
beets, then beets performs its normal persistence and optional tag write.
import.write, native beet write, and Noqlen --identity-tags --write are
different controls. See How Noqlen interacts with
beets.
Providers
All providers are disabled by default.
| Provider | Current scope | Current contribution |
|---|---|---|
| Discogs | Releases | Genres, styles, labels, catalog numbers, barcodes, country, year, media, format descriptions |
| MusicBrainz enrichment | Releases with an exact release MBID | Labels, catalog numbers, barcode, country, year, media |
| Last.fm | Releases | Filtered album genres |
| iTunes | Releases | Album genre and release year |
| LRCLIB | Importer-selected tracks | Plain lyrics; synchronized lyrics preview as blocked |
| MusicBrainz identity source | Separate identity modes | Four MusicBrainz identity fields |
Discogs direct-ID lookup can work without credentials; search requires the
optional client and generally a token. Set the token in the
NOQLENMETA_DISCOGS_TOKEN environment variable rather than committing it.
Fields And Formats
Ordinary release fields include genres, styles, labels, catalog numbers, barcodes, country, year, media, and format descriptions. Mood, lyrics, synchronized lyrics, and cover settings are present for explicit capability control, but a field is usable only where an enabled provider and a lossless target mapping exist.
Noqlen v1 does not apply synchronized lyrics or cover art. Existing-library ordinary enrichment is album-only. Importer plain-lyrics enrichment applies to selected tracks only.
Identity-tag round trips are tested with:
- FLAC
- MP3
- M4A/MP4
- Ogg Vorbis
- Opus
The identity-tag filesystem workflow requires proven no-atime, no-follow, and same-directory atomic-replacement guarantees. Unsupported operating systems, filesystems, or files block before replacement. This narrower limitation does not imply that ordinary database enrichment is Linux-only.
beets And Navidrome
The beets database is information managed privately by beets. Audio-file tags are metadata stored inside media files. Navidrome normally scans those files; it does not normally read the private beets database.
Therefore beet nm --apply alone does not update what Navidrome sees. Use
native beet write for generic beets database-to-file synchronization, or use
beet nm --identity-tags --write only for the specialized four-MBID workflow.
Then let Navidrome rescan according to its own configuration.
Compatibility
- Python 3.10 through 3.14 (
>=3.10,<3.15) are supported and covered by the release CI matrix. Version 1.0.0 does not claim Python 3.15 support. - beets 2.12 or later within the 2.x series is required.
- Ordinary enrichment and database identity operations are Python/beets based.
- Identity-tag replacement is supported only where its filesystem guarantees can be proven at runtime.
- Navidrome compatibility describes a file-tag workflow, not a direct API integration.
See the compatibility reference for the tested matrix and limitations.
Project
Version 1.0.0 is ready for the release tag. The first successful OIDC
publication will create and establish ownership of the PyPI project. The
package has not been published to PyPI yet.
License
Noqlen Meta is distributed under the MIT License.
Copyright © 2026 João Pedro Rosa dos Santos.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file beets_noqlenmeta-1.0.0.tar.gz.
File metadata
- Download URL: beets_noqlenmeta-1.0.0.tar.gz
- Upload date:
- Size: 77.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79f9ebfb354aab84769a003b75d0e78190ea27ed74d4a1ab995126f9385030b6
|
|
| MD5 |
e2fb4184c298558ae9799663e3c3f140
|
|
| BLAKE2b-256 |
735d08a2ecba3b79d5ba4a192f8bb70dac76edf4f8037c31c520f7ad0bfc9377
|
Provenance
The following attestation bundles were made for beets_noqlenmeta-1.0.0.tar.gz:
Publisher:
release.yml on jssantogit/noqlen-meta-plugin
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beets_noqlenmeta-1.0.0.tar.gz -
Subject digest:
79f9ebfb354aab84769a003b75d0e78190ea27ed74d4a1ab995126f9385030b6 - Sigstore transparency entry: 2327814107
- Sigstore integration time:
-
Permalink:
jssantogit/noqlen-meta-plugin@d675881cfcdbb7067cf295fb63b499eb4a19d47f -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/jssantogit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d675881cfcdbb7067cf295fb63b499eb4a19d47f -
Trigger Event:
push
-
Statement type:
File details
Details for the file beets_noqlenmeta-1.0.0-py3-none-any.whl.
File metadata
- Download URL: beets_noqlenmeta-1.0.0-py3-none-any.whl
- Upload date:
- Size: 102.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5804fca69f92117aa2fc2087f271c9364c620402f2b8007caeda9c551e84f8a
|
|
| MD5 |
a0447c2e887e3397923156e0b5f361cb
|
|
| BLAKE2b-256 |
262cb175944981d32821181a4b12e79fd505c0218bf93d65befb1fd5451bf2a5
|
Provenance
The following attestation bundles were made for beets_noqlenmeta-1.0.0-py3-none-any.whl:
Publisher:
release.yml on jssantogit/noqlen-meta-plugin
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beets_noqlenmeta-1.0.0-py3-none-any.whl -
Subject digest:
d5804fca69f92117aa2fc2087f271c9364c620402f2b8007caeda9c551e84f8a - Sigstore transparency entry: 2327814212
- Sigstore integration time:
-
Permalink:
jssantogit/noqlen-meta-plugin@d675881cfcdbb7067cf295fb63b499eb4a19d47f -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/jssantogit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d675881cfcdbb7067cf295fb63b499eb4a19d47f -
Trigger Event:
push
-
Statement type: