Skip to main content

A Beets plugin that interactively prompts you to fill in missing or incomplete metadata fields for your music tracks

Project description

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!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

beets_fillmissing-0.3.2.tar.gz (87.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

beets_fillmissing-0.3.2-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file beets_fillmissing-0.3.2.tar.gz.

File metadata

  • Download URL: beets_fillmissing-0.3.2.tar.gz
  • Upload date:
  • Size: 87.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for beets_fillmissing-0.3.2.tar.gz
Algorithm Hash digest
SHA256 965c7195c3a73e7359ff9e4b67a2666aed0c7e8d841e5d9a3cfe6b830395c680
MD5 257f088e5888c7bb53569934c43cc11e
BLAKE2b-256 d52c455c9a6ae7a1caea016b779408e7dcfa641ab24a6a3d3dd04abf5418b107

See more details on using hashes here.

Provenance

The following attestation bundles were made for beets_fillmissing-0.3.2.tar.gz:

Publisher: release.yml on amiv1/beets-fillmissing

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file beets_fillmissing-0.3.2-py3-none-any.whl.

File metadata

File hashes

Hashes for beets_fillmissing-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f3aaccdff39f2d86a6d56824e3f48651465dd707d185ee4831e9dda29855b22c
MD5 7adf4bf920cd4998198e519492c6289b
BLAKE2b-256 ec0b47ec57f9a794cd42a63379095b062995731bef396a52dc84d0a8f857fd08

See more details on using hashes here.

Provenance

The following attestation bundles were made for beets_fillmissing-0.3.2-py3-none-any.whl:

Publisher: release.yml on amiv1/beets-fillmissing

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page