Basic Concepts¤
This page dives deeper into the basic concepts of Nendo Core:
Resource¤
The NendoResource
encapsulates a physical file that resides either on local or remote storage and structures all relevant information for storing it in the nendo library.
Fields
Field | Type | Description |
---|---|---|
id |
uuid |
The unique ID of the resource. |
resource_type |
str |
Denotes what kind of an object is stored. Possible values are audio , image , model and blob . |
src |
str |
The full disk to the actual file. Can be a path on disk or a URL to a bucket storage, for example. |
location |
str |
The (physical) location of the file. Possible values are original (somewhere on disk), local (inside the nendo library path, which is configured as Nendo.config.library_path ), gcs and s3 . |
meta |
dict |
A dictionary that can be used to store additional metadata related to the resource. |
Files with location = original
Nendo never changes anything about files that reside at their original
location. Only local
files can be changed, deleted, etc.
Track¤
In Nendo Core, a track is represented by the class NendoTrack
and serves as the fundamental building block of your next-gen audio processing workflows. In simple terms, it
- contains at least one audio resource,
- can have relationships to other tracks and collections,
- can be used as an input for a nendo plugin, and
- can have multiple plugin data objects atteched to it.
Refer to the NendoTrack
user guide for more information.
Collection¤
A collection is represented by the class NendoCollection
and, in summary, it
- must always have a
name
, - can contain an arbitrary number of tracks that are ordered inside the collection,
- can have relationships to other collections, and
- can be processed by a nendo plugins.
Refer to the NendoCollection
user guide for more information.
Relationship¤
The basic objects in Nendo Core can be related to each other by means of the class NendoRelationship
. Relationships allow to add additional structure to your audio library, by e.g. grouping tracks into collections, saving which track was generated based on which other track, from which track a collection of stems was derived, and so forth.
Fields
Field | Type | Description |
---|---|---|
id |
uuid |
The unique ID of the relationship. |
source_id |
uuid |
The unique ID of the source object of the relationship. |
target_id |
uuid |
The unique ID of the target object of the relationship. |
relationship_type |
str |
A free-form type descriptor that can be used by developers to further differentiate between different kinds of collection objects. Unless explicitly set by the developer, "relationship" is used as a placeholder value. |
meta |
dict |
A dictionary that can be used to store additional metadata concerning the relationship. |
Derived NendoRelationship
types
While all relationships in Nendo Core inherit from the NendoRelationship
base class, in practice most relationships you'll encounter will be either of class NendoTrackTrackRelationship
, class NendoTrackCollectionRelationship
, or of class NendoCollectionCollectionRelationship
, depending on the class of the source
and target
objects. The reason for this lies in relational DB implementations of the nendo library, that must store the relationships in separate tables in order to know where to perform the lookup for the SQL JOIN
operation. As a user, this should rarely matter and so is only mentioned as a side node here.
Plugin¤
The plugin is a fundamental concept in Nendo Core and allows developers to flexibly extend nendo's capabilities. In summary,
- plugins must be installed separately in addition to Nendo Core,
- must be enabled in the nendo configuration in order to be usable at runtime,
- can be run on both tracks and collections, and
- can be chained to realize complex audio processing pipelines.
Learn all albout how plugins work in the plugin user guide.
Plugin Data¤
Some plugins in Nendo Core, upon being run on a track or a collection, produce objects of class NendoPluginData
that are saved to the nendo library and attached to the track for which they have been computed. This way, tracks can be enriched with all kinds of information that facilitates their further processing, filtering and recommendation.
Accessing a track's plugin data
To learn more about how to read a track's plugin data, check the NendoTrack
user guide.
Fields
Field | Type | Description |
---|---|---|
id |
uuid |
The unique ID of the plugin data. |
track_id |
uuid |
The ID of the track to which the plugin data belongs. |
plugin_name |
str |
The name of the plugin that created the plugin data object. |
plugin_version |
str |
The version of the plugin that created the plugin data object. |
key |
str |
The key of the plugin data object. |
value |
str |
The value of the plugin data object. |
That's all!
Now you should have a solid birds-eye view on all the important basic concepts in Nendo Core. In theory, you could start working with nendo right away but to get a better understanding of all of Nendo Core's powerful features, we recommend you to check out the in-depth guides on the concepts introduced above: