Serve M3U playlists via HTTP
Project description
beets-webm3u
A beets plugin to serve M3U playlists via HTTP.
Features
- Allows to access M3U playlists (generated by the smartplaylist plugin) via HTTP.
- Rewrites playlist item URIs to be accessible via HTTP, allowing to maintain a single set of playlists with local paths instead of having to generate each playlist with multiple URI formats (one per client/integration) upfront.
Installation
python3 -m pip install beets-webm3u
Configuration
Enable the plugin and add a webm3u
section to your beets config.yaml
as follows:
plugins:
- webm3u
webm3u:
host: '127.0.0.1'
port: 8339
cors: ''
cors_supports_credentials: false
reverse_proxy: false
include_paths: false
# Can be omitted when smartplaylist plugin is configured:
playlist_dir: /data/playlists
Usage
Once the webm3u
plugin is enabled within your beets configuration, you can run it as follows:
beet webm3u
You can browse the server at http://localhost:8339
.
To serve multiple beets web APIs using a single process, you can use the webrouter plugin.
CLI
Usage: beet webm3u [options]
Options:
-h, --help show this help message and exit
-d, --debug debug mode
Web API
The following endpoints allow listing and downloading playlist as well as audio files:
GET /playlists/index.m3u[?uri-format=$url]
: Returns the playlist of playlists.GET /playlists/
: List available playlists.GET /playlists/*.m3u[?uri-format=$url]
: Get/download a playlist.GET /audio/
: List available audio files.GET /audio/*.opus
: Download/stream an audio file.
The uri-format
parameter allows specifying a playlist item URI template.
Item field names prefixed with a $
can be used as placeholders, e.g. beets:library:track;$id
.
$url
is a built-in placeholder and the default value.
The list endpoints return either a JSON or HTML response, supporting content type negotiation. A JSON response body looks as follows:
{
"directories": [{"name":"some-dir"}],
"files": [{"name":"afrobeat", "path":"afrobeat.m3u"}],
}
Development
The following assumes you have docker installed.
Run the unit tests (containerized):
make test
Run the e2e tests (containerized):
make test-e2e
To test your plugin changes manually, you can run a shell within a beets docker container as follows:
make beets-sh
A temporary beets library is written to ./data
.
It can be removed by calling make clean-data
.
To just start the server, run:
make beets-webm3u
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 Distributions
Built Distribution
File details
Details for the file beets_webm3u-0.6.4-py3-none-any.whl
.
File metadata
- Download URL: beets_webm3u-0.6.4-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a5d158d17999f82b16522fbd3943c2d14ee6873a5d76f86228a625f035b7020 |
|
MD5 | a40362248f929cccc32426fec0977c6e |
|
BLAKE2b-256 | 9cd9c9a5b56220b02feea89f0b89511ed922019b53a3f3e4a99c7684f82ad09a |