Import singles to Beets as soon as they are dropped in a folder
Project description
drop2beets
A Beets plug-in that imports files as soon as they are dropped in a folder.
You can provide a function to set meta-data
or custom attributes depending on the sub-folder in which the file has been dropped.
The examples
folder contains some examples of on_item functions you may
adapt to your needs.
We use Beets' auto-tagger in quiet mode, and inotify to detect dropped files.
Get started
You'll need Python3 and an existing Beets library. Run:
pip install drop2beets
Enable and configure the plug-in by running beet config -e and set at least
one of default or singleton in dropbox_paths.
debounce_window defaults to 10, but we advise you set to at least 60 if you'd like to
import albums.
plugins: drop2beets
drop2beets:
debounce_window: 10 # Seconds to wait for file events to stop before importing.
dropbox_paths:
default: ~/beets-dropbox/albums
singleton: ~/beets-dropbox/singles
We advise you configure Beets to always move files out of the Dropbox,
and set quiet_fallback:
import:
move: yes
copy: no
quiet_fallback: asis
quiet_fallback tells Beets what to do when the auto-tagger is not sure about
the song's identifiaction.
Set it to skip to abort the importation in case of ambiguity,
or asis to import using tags as they are in the incoming file.
This will avoid surprises in case of ambiguous matches,
because this script invokes Beet's auto-tagger in quiet mode (as beet import -q)
after your custom function.
This function is on_item. It is written in Python,
and lets you set some tags depending of which sub-folder the file is dropped in.
If you want one, define it in the configuration from this template:
drop2beets:
on_item: |
def on_item(item, path):
"""
Parameters:
item: the beets Item that we're about to import
path: its sub-folders path in our dropbox ; if the items has been dropped at the root, then it's empty.
Returns:
A dict of custom attributes (according to path, maybe) ; return None if you don't want to import the file right now.
"""
return {}
Now you're ready to test by calling beet dropbox on the command line and
dropping a few files in the folder.
Note that drop2beets starts a few seconds after the last event it received about a file,
to ensure that the file has been copied or moved completely.
Hit Ctrl+C to close the script.
For a longer-term installation, configure a log file path
drop2beets:
log_path: ~/drop2beets/log.log
Linux users can install this as a user-lever systemd service by running beet install_dropbox
(in a shell where the virtual environment is activated).
Note that you'll have to restart the service when you update the on_item function.
Examples wanted !
I'd be happy to include your own variations of this script or the on_item function
in the examples folder,
feel free to post them in
Issues or
Pull Requests.
Project details
Release history Release notifications | RSS feed
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 drop2beets-3.0.0.tar.gz.
File metadata
- Download URL: drop2beets-3.0.0.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5ecff2c09efa5a5977dd16f19fbb2ff594ae038d4d6ded94fd10385acd98c5c
|
|
| MD5 |
fc204ad7bf6ad6baa8ee18d88ab2978e
|
|
| BLAKE2b-256 |
cb608f4ab2566130ac11345ec9cce65779e0dc7b6f790d5f71d820c51e12a16c
|
Provenance
The following attestation bundles were made for drop2beets-3.0.0.tar.gz:
Publisher:
publish-to-pypi.yml on martinkirch/drop2beets
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
drop2beets-3.0.0.tar.gz -
Subject digest:
d5ecff2c09efa5a5977dd16f19fbb2ff594ae038d4d6ded94fd10385acd98c5c - Sigstore transparency entry: 1124171394
- Sigstore integration time:
-
Permalink:
martinkirch/drop2beets@6ea56c78d914df5a501c11bf967d5741905420af -
Branch / Tag:
refs/tags/v3.0.0 - Owner: https://github.com/martinkirch
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@6ea56c78d914df5a501c11bf967d5741905420af -
Trigger Event:
push
-
Statement type:
File details
Details for the file drop2beets-3.0.0-py3-none-any.whl.
File metadata
- Download URL: drop2beets-3.0.0-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96d135b3c74e38addd519503d9c8e71d240e2b7fa2c9b52ad50a084942297238
|
|
| MD5 |
5a58bb0417995674b90162feac6ea25f
|
|
| BLAKE2b-256 |
0760d89b9a05f8df787acf1907b88bbde35d6eb4bcefb949f00e2096564bfea5
|
Provenance
The following attestation bundles were made for drop2beets-3.0.0-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on martinkirch/drop2beets
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
drop2beets-3.0.0-py3-none-any.whl -
Subject digest:
96d135b3c74e38addd519503d9c8e71d240e2b7fa2c9b52ad50a084942297238 - Sigstore transparency entry: 1124171460
- Sigstore integration time:
-
Permalink:
martinkirch/drop2beets@6ea56c78d914df5a501c11bf967d5741905420af -
Branch / Tag:
refs/tags/v3.0.0 - Owner: https://github.com/martinkirch
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@6ea56c78d914df5a501c11bf967d5741905420af -
Trigger Event:
push
-
Statement type: