plugins/plugin-music/README.md
A comprehensive plugin for elizaOS that provides music data storage, user preferences, analytics, external music metadata APIs, and YouTube search functionality.
As this is a workspace package, it's installed as part of the elizaOS monorepo:
bun install
The plugin works out of the box with MusicBrainz (free, no API key needed). For enhanced features, configure additional APIs:
# High-quality music storage directory (default: ./storage/music)
MUSIC_STORAGE_DIR=/path/to/storage
# Store highest quality available (default: true)
MUSIC_STORAGE_HIGH_QUALITY=true
Storage vs Cache:
plugin-music-player): Temporary Discord-optimized cache for performance
Add these to your .env file for enhanced metadata:
# MusicBrainz (optional - custom User-Agent)
MUSICBRAINZ_USER_AGENT=YourAppName/1.0.0 (https://yourapp.com)
# Last.fm API (free tier with signup)
LASTFM_API_KEY=your_lastfm_api_key
# Genius API (free tier with signup) - for lyrics URLs
GENIUS_API_KEY=your_genius_api_key
# TheAudioDB API (free tier with signup) - for high-quality artwork
THEAUDIODB_API_KEY=your_theaudiodb_api_key
Add the plugin to your character configuration:
{
"plugins": [
"@elizaos/plugin-sql",
"@elizaos/plugin-music-library"
]
}
Access services directly in your code:
const musicLibrary = runtime.getService('musicLibrary');
// Get track info
const trackInfo = await musicLibrary.getTrackInfo('https://youtube.com/watch?v=...');
// Save a playlist
const playlist = await musicLibrary.savePlaylist(userId, {
name: 'My Playlist',
tracks: [...]
});
// Track analytics
await musicLibrary.trackTrackPlayed(roomId, track, duration, requester);
// Get user preferences
const prefs = await musicLibrary.getUserPreferences(userId);
Available actions:
MUSIC_LIBRARY - Planner-facing action.
op=playlist, subaction=save|load|delete|add - Manage playlists.op=search-youtube - Search YouTube for music.op=play-query - Smart music query parser.op=download - Download music to the local library.Legacy planner action names such as PLAYLIST_OP, PLAYLIST,
SEARCH_YOUTUBE, PLAY_MUSIC_QUERY, and DOWNLOAD_MUSIC are retained as
similes for MUSIC_LIBRARY.
This plugin is designed to work with:
getTrackInfo(urlOrTitle: string): Get track metadatagetArtistInfo(artistName: string): Get artist informationgetAlbumInfo(albumTitle: string, artistName?: string): Get album informationsearch(query: string, maxResults?: number): Search YouTubeextractVideoId(url: string): Extract video ID from URLaddSong(song), getSong(url), getRecentSongs(limit), searchLibrary(query)savePlaylist(entityId, playlist), loadPlaylists(entityId)trackTrackPlayed(roomId, track, duration), trackTrackRequest(entityId, track)getAggregatedRoomPreferences(roomId) returns combined favorites/dislikes for auto-fill logicrepetitionControl utilities and a configured spotifyClientSee individual component files for detailed APIs:
components/musicLibrary.ts - Track/album/artist databasecomponents/playlists.ts - Playlist managementcomponents/preferences.ts - User preferencescomponents/analytics.ts - Analytics trackingcomponents/repetitionControl.ts - Anti-repetition logicMIT