Skip to main content

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 p or play to 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 p to open the track in your system's default audio player
  • Go back: Type b to go back to editing the previous field
  • Skip track: Type s to 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)

Source distribution for beets-fillmissing 0.3.2
File Size Uploaded
beets_fillmissing-0.3.2.tar.gz 87.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for beets-fillmissing 0.3.2
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page