ChangelogΒΆ
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[2.0.0] - UpcomingΒΆ
β οΈ Breaking Changes β οΈΒΆ
Base image changed: The container base image is now
python:3.12-slim(previouslypython:3.11-alpine). If you use a customstartup.sh, please verify compatibility, as Alpine-specific tooling and shell behavior may differ #212Changed config option:
gui.inbox.folders.your_inbox.autotagno longer acceptsfalse, use"off"instead. (This was needed for consistency for the new config validation)
AddedΒΆ
Config validation. When loading config files we now check that specified options will work. If not, the frontend will show an error message with details on whatβs wrong. This applies to
guisettings (i.e. our own ones,beets-flask/config.yaml) and very select ones from native beets (only those which we use directly). Hopefully, this will eventually cover all config options of beets native, but this is more of an upsream task. #224.Upload Files via the WebUI. You can now drag-and-drop single files into an inbox. To upload whole albums, zip them on your host first (uploading of folders directly is not implemented, as it would require a secure context).
New config option
gui.terminal.enabled(default: true) #254You can now alternatively use
PUIDandPGIDinstead ofGROUP_IDandUSER_IDenvironment variables. Good for yaml anchors. #260
FixedΒΆ
Other (dev)ΒΆ
We now use
uv(Universal Virtualenv) to manage python dependencies and run scripts in CI/CD. This should improve dependency resolution and installation times.We now ship a static ffmpeg binary instead of installing ffmpeg via apt. This should reduce image size and improve compatibility across different host systems.
1.2.0 - 25-12-17ΒΆ
β οΈ Important β οΈΒΆ
You need to update your beets config, and add
musicbrainzto the list of enabled plugins. This is required because we updated the beets backend see here
FixedΒΆ
Duration component could display nothing in some edge cases.
Action buttons now have a slight box shadow and are a bit more visible.
We now support playing container types [m4a, mp4, mov, alac, aac, mp3] that require seeking. This should fix issues with some mp4/m4a files not playing.
If no candidates are found during an import, we now show a message instead of an empty screen. #190
Archive files can now be deleted #217
Import Bootleg Button now works as expected #218
Startup script was not executed correctly if placed in
/config/beets-flask/startup.sh#227Another state-related bug around Searching for Candidates #225. We now no longer require a certaint type of state before allowing to add candidates.
Asis candidates have been restyled to be more consistent with other candidate types. They now also include a cover art preview if available.
Fixed a typo in our opiniated beets config #235
Fixed a styling issue in the artists list view which caused an overflow
Fixed a styling issue where an extra cancel-button (cross) was shown on webkit browsers
AddedΒΆ
Added ability to define more groups to take care of ACLs, so that our non-root user can delete files on host systems, if desired. New environment variable
EXTRA_GROUPS#234The inbox info button now has a description of all actions #145
Subpage for version information and configs. You can access it via the version number in the navbar. #205
New config option
gui.inbox.debounce_before_autotagto configure how many seconds to wait after the last filesystem event before starting autotagging. Same debounce applies to all inboxes. #222The library view on mobile now has a button to collapse the overview (above the tabs). This allows for more space when browsing the library on small screens.
Other (dev)ΒΆ
The default beets config now includes a
musicbrainzsection that enables fetching of external ids (like tidal).Fixed typing issues in
./testsfolder and enabled mypy check for it.Ruff now has the F401 (imported but unused) check enabled.
Ruff now has the UP checks enabled to enforce modern python syntax.
Unified coverart components in the frontend, we now use common styling for external and internal coverart.
Moved inbox metadata fetching into the library api routes.
Frontend formatter prettier is now enforced via a CI/CD workflow step
DependenciesΒΆ
Updated
uvicornto0.36.0.Updated
beetsfrom2.3.1over2.4.0to2.5.0. See the two changelogs!Updated a number of frontend dependencies, including
react-query,react-router,vite,typescript,eslint,prettierand others. This partially required code changes due to breaking changes in these libraries. Should not affect normal usage tho.
1.1.3 - 25-09-18ΒΆ
AddedΒΆ
Docs now have a section on limiations
Pip
requirements.txtandstartup.shcan now be placed in/config/or/config/beets-flask, the latter is installed later.
FixedΒΆ
Resolved an issue in Vite development server where pythonTypes.ts would fail to load on first start due to inconsistent indentation (tabs vs spaces). This only affected the dev environment.
Development Docker container now runs as the
beetleuser instead of root, improving parity with the production environment.Trailing slashes in configured inbox paths no longer cause crashes. #182
The container now sets the
EDITORenvironment variable toviso thatbeet editandbeet config -ework out of the box.
DependenciesΒΆ
Updated
beetsto version2.3.1Updated
py2tsto version0.6.1, now uses pypi distribution instead of github repo.
1.1.2 - 25-08-29ΒΆ
FixedΒΆ
Updated refresh_config to scan all modules for config references and overwrite them as needed to ensure consistency #188
1.1.1 - 25-08-15ΒΆ
FixedΒΆ
Session cache wasnβt invalidated on all folder updates. This especially fixes an issues where the watchdog would not trigger a session invalidation when a folder was deleted or renamed. #163
We now use the beets
ignoreconfig option to ignore files and folders in the inbox view. This allows you to ignore files like*.tmp,*.log, etc. We also allow users to define thegui.inbox.ignoreoption to customize the ignored file patterns. #176Scrollbar for beets instructions wasnβt visible on small screens.
Other (dev)ΒΆ
Simplified translucent scroll setup in
__root.tsx
AddedΒΆ
The items/track view now shows some basic information and you may play the track from there too.
1.1.0 - 25-07-29ΒΆ
AddedΒΆ
Support for importing archives
zipandtarfiles. Support forrarand7zfiles can be added via custom startup and requirements files. See the FAQ for more information.
DependenciesΒΆ
Updated
py2tsto version0.4.1
1.0.3 - 25-07-29ΒΆ
FixedΒΆ
1.0.2 - 25-07-21ΒΆ
FixedΒΆ
Artists separators were not regex escaped correctly, leading to issues with artists containing special characters. Additionally an empty list of separators was not handled correctly. #159
1.0.1 - 25-07-17ΒΆ
AddedΒΆ
Configuration option for artist separator characters
gui.library.artist_separatorDocs subpage for configuration (including content)
typing_extensionsis now a dependency, to allow for more typing featuresThe model api routes now allows for
DELETErequests to delete resources by id. Not used yet but will be helpful for future features.
FixedΒΆ
Styling of candidate overview (major changes were not colored)
For bootlegs, display of track changes after import no longer broken
Navigating from inbox into folder details no longer toggles selection.
Padding issue where navbar could block content on mobile.
Cache invalidation now triggers on delete folder in frontend #138
In albums and items view the clicking on artists does not return any results if the contained a separator character (e.g.
&) #132Cleanup old actions.tsx file, which included old unused code #134
The
cli_exitevent is now triggered after the import task is finished. This adds compatibility with some plugins which expected this event to be triggered after the import task is done. #154.
ChangedΒΆ
Created
types.pyfile to hold custom sqlalchemy types, and movedIntDictTypethere.
1.0.0 - 25-07-06ΒΆ
This is a breaking change, you will need to update your configs and delete your beets-flask database (not the beets db!).
This marks a major milestone for beets-flask, as we now pretty happy with the current features and the overall architecture.
ChangedΒΆ
Migrated backend to quart (the async version of flask)
Reworked most of the frontend
Removed interactive imports. We now store states for any preview and import that is generated. Thus, sessions are resumable, and we can go back and forth seemlessly, to e.g. undo an import and pick a better candidate.
Inbox types have changed. For now we only have
preview,autoandbootleg.beets updated to version 2.2.0
Implemented our own async pipeline for beets, that is typed and handles our custom sessions (should become obsolete once upstream PRs are merged).
Improved library view, and track preview / streaming.
Improved candidate preview, including cover art and asis details (current metadata).
Terminal now has a bit of scroll-back and history.
Much better test coverage.
Now using py2ts to automatically generate frontend (typescript) types from their backend (python) equivalents.
New and improved logo.
[0.1.1] - 25-06-08ΒΆ
Small version bump with fixes before jumping to 1.0.0.
AddedΒΆ
Option to install beets plugins by placing either
requirements.txtorstartup.shin /config. cf. ReadthedocsDocumentation on readthedocs.
Option to import Asis via right-click, or as inbox type. Good for Bootlegs that do not have online meta data and you curate manually. Currently also applies
--group-albums.
FixedΒΆ
Path escaping for right-click import via cli (#51)
0.1.0 - 24-11-13ΒΆ
FixedΒΆ
Renamed
kindtotypein search frontend code to be consistent with backend. Using kind for tags (preview, import, auto), and types for search (album, track).
ChangedΒΆ
Improved readme and onboarding experience
Mountpoint to persist config files and databases changed to
/config(was/home/beetle/.config/beets/) We create the/config/beetsand/config/beets-flaskfolders on startup if they do not exist. Library files are placed there, and you can drop aconfig.yamleither or both of these folders. Settings in/config/beets-flask/config.yamltake precedence over/config/beets/config.yaml. You will need to update your docker-compose!
AddedΒΆ
Logo and favicon
Image now on docker hub:
pspitzner/beets-flask:stableAuto-import: automatically import folders that are added to the inbox if the match is good enough. After a preview, import will start if the match quality is above the configured. Enable via the config.yaml, set the
autotagfield of a configred inbox folders to"auto".
0.0.4 - 24-10-04ΒΆ
FixedΒΆ
Config parsing should now work
AddedΒΆ
multi-disc albums are now supported
Interactive import using a custom beets pipeline
ChangedΒΆ
Moved terminal to its own page, had to temporarily remove keyboard trigger
Reworked the album folder detection algorithm, now uses more native beets code and is a bit faster
Navbar styling and items overhaul
0.0.3 - 24-08-01ΒΆ
FixedΒΆ
default config: mandatory fields cannot be set in the yaml, or they might persist although the user sets them. moved to config loading in python.
tmux session now restarts on page load if it is not alive.
navbar, tags, inbox are now more friendly for mobile
folder paths are now better escaped for terminal imports
AddedΒΆ
Backend to get cover art from metadata of music files.
Impoved library view (mobile friendly, and a browser header component)
Library search
ChangedΒΆ
Simplified folder structure of frontend
Removed
include_pathsoption from config and library backend (most of the frontend needs some form of file paths. thus, the option was not / could not be respected consistently)
0.0.2 - 24-07-16ΒΆ
FixedΒΆ
ESLint errors and Github action
Now loading the default config
0.0.1 - 24-05-22ΒΆ
initial commit