Skip to content

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.

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 a NendoTrack 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 called EmbeddingPlugin that accepts either a NendoTrack, a NendoCollection, a signal and a text, or only a text and computes corresponding NendoEmbedding(s), depending on whether a single object or a NendoCollection was provided. It also determines whether the currently used NendoLibrary implementation uses the NendoLibraryVectorExtension and, if so, saves the computed embeddings directly to the library.
  • Fixed a problem with the way dictionaries (like NendoTrack.meta and NendoTrack.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.
  • 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 and limit). 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 by NendoTrack.has_related_track(direction=...). collection.has_relationship_to() was replaced by collection.has_related_collection().
  • Added a new shortcut function NendoTrack.relate_to_track() that creates a relationship of the specified relationship_type and with the specified metadata from the given track to another track.
  • Fixed a bug where the length of a NendoTrack would not be correctly determined if the track had a mono signal.
  • Two new shortcut functions NendoTrack.refresh() and collection.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 by plugin_version and user_id in addition to the existing filters.
  • Adjusted the add_track() function:
    • Stores all the ID3 metadata in NendoTrack.meta instead of NendoTrack.resource.meta.
    • If no ID3 metadata was found NendoTrack.meta.title will be set to the original name of the imported file.
  • Added the load_related_tracks: bool = False flag to the NendoLibrary.get_tracks() function that allows to enable/disable the populating of the NendoTrack.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 their relationship_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 over NendoTrack.meta in addition to NendoTrack.resource. Changed the name of the resource_filters argument to search_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 the NendoLibrary.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 their relationship_position.
  • Changed the signature and behavior of the get_collection() function:
    • Renamed the details parameter to get_related_tracks to better reflect it's effect on the function. The parameter controls whether the NendoCollection.related_tracks field will be populated.
    • The function now always returns a NendoCollection instead of returning a NendoCollectionSlim if details=False as is was previously.
  • 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 the plugin_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 the collection_types parameter to also allow for filtering by a list of collection types.
  • Added the NendoLibrary.library_size() and NendoLirary.collection_size() functions to get the number of tracks in the library per user and the number of tracks in a collection, respectively.
  • A bunch of small bugfixes, too many to mention them all here.

Compare with 0.1.3

0.1.3 - 2023-12-08¤

Compare with 0.1.2

Bug Fixes¤

  • remove psycopg2 dependency (#15) (ebd4a23 by Felix Lorenz).

0.1.2 - 2023-11-30¤

Compare with previous version

Features¤

  • Enable iterating over collections (#12) (576cd7e).

Bug Fixes¤

  • Make plugin_version optional when adding plugin data (#13) (d5c9b73).
  • Fix a bug in add_tracks(); fixed a bug in remove_track(); fixed tests (#9) (0aebb72).
  • Change get_plugin_data() to always return a list; Add get_plugin_value() to get string values for specific plugin_data key (#11) (3277910).
  • Fix a bug with with filter_tracks() argument track_type (#8) (748a352).

Docs¤

  • 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¤

Compare with previous version

Bug Fixes¤

  • Fix the collection export in the sqlalchemy plugin (#4)

Docs¤

  • Small improvements to the documentation (#3)

0.1.0 - 2023-11-22¤

Compare with first commit