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.
0.2.5 - 2024-03-05
- add_tracks_to_collection ignores tracks that are already in the collection (7aacdca by Felix Lorenz).
0.2.4 - 2024-03-05
- make plugin data accept extra params (#22) (017ee09 by Aaron Abebe).
0.2.3 - 2024-03-04
- remove tracks from collection function (881c64e by Felix Lorenz).
- add helper method to check if a track is silence (#21) (020d0ce by Aaron Abebe).
- skip computing plugin data again if config.replace_plugin_data is False (14e5bcd by Felix Lorenz).
- add_track_to_collection doesn't add the same track twice (2159f91 by Felix Lorenz).
0.2.2 - 2024-03-02
- set fallback track title without extension (06396e6 by Felix Lorenz).
- add sanitization of strings for json insert (65b5cf5 by Felix Lorenz).
- improve documentation in various places (a084146 by Felix Lorenz).
0.2.1 - 2024-02-28
- add_tracks should return a list of tracks (#19) (78ba963 by Aaron Abebe).
- skip_duplicate doesn't respect user_id (741babc by Felix Lorenz).
0.2.0 - 2024-02-19
- Added the first extension for the Nendo Library: The
NendoLibraryVectorExtension
is a mix-in class that can be used by implementations of the Nendo Library to add support for saving and retrieving embedding vectors. - Added a new class
NendoEmbedding
that represents an embedding of aNendoTrack
and stores the vector together with the ID of the track from which it was computed, the text representation of the track that was used to compute the embedding, as well as the embedding plugin's name and version that were used to compute the embedding. - Added a new subclass of the
NendoPlugin
calledEmbeddingPlugin
that accepts either aNendoTrack
, aNendoCollection
, asignal
and atext
, or only atext
and computes correspondingNendoEmbedding
(s), depending on whether a single object or aNendoCollection
was provided. It also determines whether the currently usedNendoLibrary
implementation uses theNendoLibraryVectorExtension
and, if so, saves the computed embeddings directly to the library. - Added the global configuration variable
replace_plugin_data
, that specifies whether new plugin data will overwrite existing plugin data for the specific plugin name and version used to generate the data. - Reworked the way relationships between tracks are managed. Previously, Nendo would create bidirectional relationships, which caused problems with the retrieval of related tracks, especially when using paging (i.e.
offset
andlimit
). The new approach is to only store relationships from a derivative track to the original track from which it was derived. Accordingly, all functions for retrieving related tracks accept a new parameter,direction: str
, which can assume either one of the values"to"
,"from"
and"both"
and will change their retrieval behavior accordingly. Also, the method names for some methods were changed to reflect the new semantics more accurrately:NendoTrack.has_relationship_to()
was replaced byNendoTrack.has_related_track(direction=...)
.collection.has_relationship_to()
was replaced bycollection.has_related_collection()
. - Added a new shortcut function
NendoTrack.relate_to_track()
that creates a relationship of the specifiedrelationship_type
and with the specified metadata from the given track to another track. - Two new shortcut functions
NendoTrack.refresh()
andcollection.refresh()
were added that retrieve the latest version of the given object as it exists in the Nendo Library, effectively allowing to quickly pull the latest changes to an object from the database. - The
NendoTrack.get_plugin_data()
methods signature was extended to allow for filtering a track's plugin data also byplugin_version
anduser_id
in addition to the existing filters. - Adjusted the
add_track()
function:- Stores all the ID3 metadata in
NendoTrack.meta
instead ofNendoTrack.resource.meta
. - If no ID3 metadata was found
NendoTrack.meta.title
will be set to the original name of the imported file.
- Stores all the ID3 metadata in
- Added the
load_related_tracks: bool = False
flag to theNendoLibrary.get_tracks()
function that allows to enable/disable the populating of theNendoTrack.related_tracks
field upon retrieval of many tracks from the Nendo Library. This optimizes the performance of the call and allows to retrieve smaller objects that are more suitable for network transmission in web applications that use Nendo Core. - Add support for
NendoLibrary.filter_tracks(collection_id="...", order_by="collection")
that allows to order of the retrieved tracks by theirrelationship_position
in the referenced collection. - Added the
NendoLibrary.filter_related_tracks()
method to allow for filtering of related tracks queries. - Changed the
NendoLibrary.filter_tracks()
method to search overNendoTrack.meta
in addition toNendoTrack.resource
. Changed the name of theresource_filters
argument tosearch_meta
to reflect the new behavior. - Added the
NendoLibrary.add_tracks_to_collection()
function to allow for multiple tracks given as a list of IDs to be added to the specified collection. - Added the
order
parameter to theNendoLibrary.get_collection_tracks()
function to allow for control of the ordering. Defaults to"asc"
, which will order the collection's tracks in ascending order of theirrelationship_position
. - Changed the signature and behavior of the
get_collection()
function:- Renamed the
details
parameter toget_related_tracks
to better reflect it's effect on the function. The parameter controls whether theNendoCollection.related_tracks
field will be populated. - The function now always returns a
NendoCollection
instead of returning aNendoCollectionSlim
ifdetails=False
as is was previously.
- Renamed the
- Added the
user_id
parameter to the following functions:NendoTrack.local()
NendoTrack.get_plugin_value()
NendoLibrary.get_track()
NendoLibrary.remove_collection()
- Changed the signature of the
NendoLibrary.add_plugin_data()
function to make specifying of theplugin_version
optional. If none is given, version will be inferred from the currently registered version of the plugin. - Extended the signature of the
NendoLibrary.filter_collections()
function by thecollection_types
parameter to also allow for filtering by a list of collection types. - Added the
NendoLibrary.library_size()
andNendoLirary.collection_size()
functions to get the number of tracks in the library per user and the number of tracks in a collection, respectively.
- Fixed a problem with the way dictionaries (like
NendoTrack.meta
andNendoTrack.resource
) were stored in the Nendo Library which resulted in them being stored as JSON strings instead of JSON dictionaries. This means that upgrading Nendo will break any apps that use libraries that were created with previous versions of nendo. Please make sure you understand the implications and either flush your DB or convert it to match the new data model. - Fixed a bug where the length of a
NendoTrack
would not be correctly determined if the track had a mono signal. - A bunch of small bugfixes, too many to mention them all here.
0.1.3 - 2023-12-08
- remove psycopg2 dependency (#15) (ebd4a23 by Felix Lorenz).
0.1.2 - 2023-11-30
- Enable iterating over collections (#12) (576cd7e).
- Make
plugin_version
optional when adding plugin data (#13) (d5c9b73). - Fix a bug in
add_tracks()
; fixed a bug inremove_track()
; fixed tests (#9) (0aebb72). - Change
get_plugin_data()
to always return a list; Addget_plugin_value()
to get string values for specificplugin_data
key (#11) (3277910). - Fix a bug with with
filter_tracks()
argumenttrack_type
(#8) (748a352).
- Remove "How to write documentation" page; Document the design decision relating to dependencies between nendo plugins (#10) (c7b05d3).
- Update discord link in readme (0eb85ad).
- Update requirements in README (#7) (f71ce94).
0.1.1 - 2023-11-24
- Fix the collection export in the sqlalchemy plugin (#4)
- Small improvements to the documentation (#3)