beets-fillmissing
A Beets plugin that interactively prompts you to fill in missing or incomplete metadata fields for your music tracks.
Features
- 🎯 Query-based workflow: Target specific tracks using Beets' powerful query syntax
- 📝 Interactive prompts: Fill in metadata fields one by one with clear visual feedback
- 🔄 Smart defaults: Existing field values are shown as defaults - just press Enter to keep them
- 🎵 Built-in playback: Type
porplayto listen to a track before filling in metadata - ✅ Immediate writes: Changes are saved immediately after each field update
- ⚡ Fast workflow: Skip fields with Enter, exit anytime with Ctrl+C or Ctrl+D
Installation
From Git (Recommended)
Install directly from GitHub:
# Using pip
pip install git+https://github.com/amiv1/beets-fillmissing.git
# Using pipx
pipx inject beets git+https://github.com/amiv1/beets-fillmissing.git
Configuration
Add fillmissing to your plugins in Beets config file (usually ~/.config/beets/config.yaml):
plugins:
- fillmissing
# ... other plugins
Usage
beet fillmissing [QUERY] -f 'field1 field2 field3'
Arguments
QUERY: Standard Beets query to filter tracks (e.g.,artist:Unknown,genre:Hip-Hop,album:'My Album')-f, --fields: Space-separated list of fields to populate
Examples
Add genre and mood tags to tracks in a specific album:
beet fillmissing 'album:Chill Vibes' -f 'genre mood'
Add mood tags for tracks that don't have it:
beet fillmissing '^mood::.+' -f 'mood'
Interactive Commands
While filling in metadata, you can:
- Enter a value: Type the new value and press Enter to update the field
- Skip a field: Press Enter without typing to skip (keeps existing value or leaves blank)
- Play track: Type
pto open the track in your system's default audio player - Go back: Type
bto go back to editing the previous field - Skip track: Type
sto skip the current track metadata editing and go to the next one - Exit: Press Ctrl+C or Ctrl+D to stop the process anytime
Example Session
$ beet fillmissing 'mood:' -f 'mood context language'
Found 3 track(s) matching query.
Commands: 'p' = play | 's' = skip track | 'b' = back | Ctrl+C = quit
--- Track 1 of 3 ---
Jazz Ensemble - Smooth Jazz Collection - Summer Breeze
mood: chill
→ Updated mood
context [driving]: workout
→ Updated context
language: eng
→ Updated language
--- Track 2 of 3 ---
Synthwave Artists - Neon Nights - Midnight Drive
mood: p
♪ Playing...
mood: energy
→ Updated mood
context: driving
→ Updated context
language:
--- Track 3 of 3 ---
...
Done!
Field Behavior
-
Existing values: If a field already has a value, it's shown in brackets
[current_value]- Press Enter to keep it unchanged
- Type a new value to replace it
-
Empty fields: If a field is blank or doesn't exist, no default is shown
- Press Enter to skip without setting anything
- Type a value to set the field
Contributing
Issues and pull requests are welcome!
Metadata
Release files for beets-fillmissing 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| beets_fillmissing-0.3.2.tar.gz | 87.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| beets_fillmissing-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 92.5 kB
Release files / beets_fillmissing-0.3.2.tar.gz
| Download URL | beets_fillmissing-0.3.2.tar.gz |
|---|---|
| Size | 87.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
965c7195c3a73e7359ff9e4b67a2666aed0c7e8d841e5d9a3cfe6b830395c680
|
|
BLAKE2b-256 checksum How to use checksums |
d52c455c9a6ae7a1caea016b779408e7dcfa641ab24a6a3d3dd04abf5418b107
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 17, 2026.
Transparency logRelease files / beets_fillmissing-0.3.2-py3-none-any.whl
| Download URL | beets_fillmissing-0.3.2-py3-none-any.whl |
|---|---|
| Size | 5.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f3aaccdff39f2d86a6d56824e3f48651465dd707d185ee4831e9dda29855b22c
|
|
BLAKE2b-256 checksum How to use checksums |
ec0b47ec57f9a794cd42a63379095b062995731bef396a52dc84d0a8f857fd08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 17, 2026.
Transparency log