Skip to content

Plugins¤

Nendo’s plugin architecture consists of two types of architecture components: The core system and plug-in modules. Application logic is divided between independent plugin modules and the basic core system, reducing the number of dependencies and providing extensibility, flexibility, and isolation of application features.

Installing a plugin¤

To install a plugin, simply install the corresponding package with your favorite package manager, e.g. pip.

pip install nendo-plugin-example

Enabling a plugin¤

To configure nendo to load an installed plugin upon startup, add its name to the list of activated plugins given by NendoConfig.plugins.

Example

from nendo import Nendo, NendoConfig
nd = Nendo(
    config=NendoConfig(
        plugins=["nendo_plugin_example"]
    )
)

Running a plugin¤

There are multiple ways to run a plugin in nendo. The most general way is to call it directly from nendo's plugin registry, by accessing it without the nendo_plugin_ prefix:

>>> my_track = nd.add_track(file_path='/path/to/file.mp3')
>>> result = nd.plugins.example(track=my_track) # this runs the plugin

Alternatively, a plugin can be called directly on a track/collection via the process method:

Tip

This also allows you to easily chain plugins!

>>> my_track = nd.add_track(path='/path/to/file.mp3')
>>> result = track.process('nendo_plugin_example') # this runs the plugin
>>> chained_result = track.process('nendo_plugin_example').process('nendo_plugin_example_2') # this chains two plugins

Plugin Types¤

The following is a comprehensive list of all plugin types available in Nendo Core. For information on how to implement your own plugins of each type, refer to the developer pages of the documentation.

Analysis plugins are used to extract and save any kind of information from a NendoTrack or NendoCollection, e.g. key, bpm, beat positions, but also things like textual transcriptions, or any other kind of metadata.

Generate plugins are used to generate new content from a NendoTrack or NendoCollection, but also just using a prompt or a seed or any kind of input information.

Effect plugins are used to apply effects to a NendoTrack or NendoCollection.

Library plugins are used to modify the NendoLibrary itself, e.g. change the way data is saved, allow different integrations with other data management methods or services.

Embedding plugins are used to compute vector embeddings from NendoTrack and NendoCollection objects. They may use the track's waveform, a text representation of it's metadata, or both.

Utility plugins are simple plugins that take and input, for example a piece of text, and transform it. A typical example of such a plugin would be a Large Language Model that is used to summarize the transcription of a song's lyrics.