Skip to main content

A beets plugin for the deeprhythm tempo predictor

Project description

BeetRhythm - Beets Plugin for DeepRhythm Tempo Prediction

A beets plugin that uses DeepRhythm to predict tempo (BPM) for your music library with high accuracy and speed.

Features

  • Automatic tempo prediction during music import
  • Batch processing for efficient analysis of large collections
  • High accuracy using the DeepRhythm CNN model (95.91% accuracy)
  • Fast processing with GPU acceleration support
  • Flexible configuration with confidence thresholds and device selection
  • CLI command for manual processing of specific files or folders

Installation

  1. Install the plugin:
poetry install
  1. Install DeepRhythm:
pip install deeprhythm
  1. Add the plugin to your beets configuration:
plugins:
  - beetrhythm

beetrhythm:
  auto: true              # Automatically predict tempo on import
  write: true             # Write tempo to file tags
  force: false            # Overwrite existing tempo values
  device: auto            # Device for prediction (auto, cpu, cuda, mps)
  batch_size: 128         # Batch size for processing
  workers: 8              # Number of workers for batch processing
  confidence_threshold: 0.0  # Minimum confidence threshold (0.0-1.0)
  disable_batch: false    # Disable batch processing (use for resource-constrained servers)
  write_confidence: false # Always calculate and store confidence scores

Usage

Automatic Mode

When auto: true is set in configuration, the plugin will automatically predict tempo for:

  • Albums imported with beet import
  • Individual tracks imported as singletons

Manual CLI Command

Use the beet beetrhythm command to manually process files or folders:

# Process all items in library without tempo
beet beetrhythm

# Process specific folder
beet beetrhythm /path/to/music/folder

# Process specific files
beet beetrhythm /path/to/song1.mp3 /path/to/song2.flac

# Show confidence scores
beet beetrhythm -c /path/to/music

# Force overwrite existing tempo values
beet beetrhythm -f /path/to/music

# Use specific device
beet beetrhythm -d cuda /path/to/music

# Don't write to file tags (database only)
beet beetrhythm --no-write /path/to/music

Command Options

  • -f, --force: Overwrite existing tempo values
  • -w, --write: Write tempo to file tags (default: true)
  • --no-write: Don't write tempo to file tags
  • -c, --confidence: Show confidence scores
  • -d, --device: Device for prediction (auto, cpu, cuda, mps)

Configuration Options

Option Default Description
auto true Automatically predict tempo during import
write true Write tempo values to file tags
force false Overwrite existing tempo values
device auto Device for prediction (auto, cpu, cuda, mps)
batch_size 128 Batch size for processing
workers 8 Number of workers for batch processing
confidence_threshold 0.0 Minimum confidence threshold (0.0-1.0)
disable_batch false Disable batch processing (for resource-constrained servers)
write_confidence false Always calculate and store confidence scores

Database Fields

The plugin adds the following flexible fields to your beets database:

  • bpm: The predicted tempo in beats per minute (float)
  • bpm_confidence: The confidence score of the prediction (float, 0.0-1.0)

Note: Confidence scores are only calculated and stored when:

  • Using the -c, --confidence CLI flag, OR
  • Setting write_confidence: true in configuration

You can query these fields like any other beets field:

# Find songs with tempo between 120-140 BPM
beet list bpm:120..140

# Find songs with high confidence predictions
beet list bpm_confidence:0.9..

# Find songs without tempo predictions
beet list bpm:^$

Performance

The plugin uses batch processing when possible to greatly reduce processing time, especially when processing entire directories.

Requirements

  • Python 3.8+
  • beets
  • deeprhythm
  • PyTorch (installed automatically with deeprhythm)

Troubleshooting

DeepRhythm not found

If you get an error about DeepRhythm not being installed:

pip install deeprhythm

GPU not detected

If you have a CUDA-capable GPU but it's not being used:

  • Ensure you have the CUDA version of PyTorch installed
  • Set device: cuda in your configuration
  • Check that your GPU drivers are up to date

Memory issues

If you encounter memory issues with large batches:

  • Reduce batch_size in configuration
  • Reduce workers count
  • Use device: cpu instead of GPU

Hanging or multiprocessing issues

If the plugin hangs or has issues on resource-constrained servers:

  • Set disable_batch: true in your configuration
  • Set workers: 1 and batch_size: 1
  • This will process files individually instead of using batch processing

License

This project is licensed under the same terms as the beets project.

Credits

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

beetrhythm-0.1.2.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

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

beetrhythm-0.1.2-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file beetrhythm-0.1.2.tar.gz.

File metadata

  • Download URL: beetrhythm-0.1.2.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.9 Darwin/24.5.0

File hashes

Hashes for beetrhythm-0.1.2.tar.gz
Algorithm Hash digest
SHA256 4683c060e7ecf311fe90d91a01aee0e2b5dd992be7205e63e4abc05554e35ef9
MD5 5e967e54f1d55da311f3db94a9d3b273
BLAKE2b-256 27c0f3c7a46b3e82a8375216ae2d45127e1f8be2f7692d2c7acbc5a101388247

See more details on using hashes here.

File details

Details for the file beetrhythm-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: beetrhythm-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.9 Darwin/24.5.0

File hashes

Hashes for beetrhythm-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 358ae9b25a769f0acbad84fee26b5410ff8ba69317118a4695d86b591f77e1cb
MD5 00393b0b926ae4b15a5b006448052d7b
BLAKE2b-256 92b4562cd288b14c9d61b6b598090ddc545952dd416ba9f859062e11e7c5101e

See more details on using hashes here.

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