SkillAgentSearch skills...

Medley

๐ŸŽต Enhance your music listening with smooth, radio-inspired playback and Discord integration! ๐ŸŽง๐Ÿค–

Install / Use

/learn @seamless-medley/Medley

README

Medley

[!NOTE] Medley is currently in active development. Some features, such as a Web UI for configuration, are not yet implemented.

We appreciate your patience and welcome contributions!

Overview

Medley is a project that aims to deliver a genuine radio station experience with automatic, seamless playback and mixing capabilities.

Medley brings a radio-like approach to your personal music collection.

It's more than just a playlist - it's a system that creates a continuous, curated listening stream based on your preferences and music moods, with the added bonus of Discord bot functionality for interactive control.

We have a Discord channel where anyone can join.

So you can:

  • Interact with the Medley Discord bot
  • Listen to the audio stream provided by Medley
  • Connect with other Medley users and the development team

[!TIP] The demonstration music rotation features mostly Thai/T-pop music, with some tracks in English, Korean/K-pop, and Japanese/J-pop

You can also run your own Medley instance, please see Beta Testing Guide.

Key Features

  • ๐Ÿ”€ Seamless music playback with automatic smooth transitions and custom jingles
    • With customizable mixing behavior through embedded metadata
    • Experience a polished, radio-style flow
    • Hear it in action: Join our Discord channel to listen live!
  • ๐ŸŽจ Artist rotation to ensure variety
    • This prevents the repetition of songs from the same artist too frequently, much like a well-curated radio station.
  • ๐Ÿ”Š ReplayGain and DSP audio limiter for consistent sound quality
  • ๐Ÿš€ Multi-platform audio streaming
  • ๐Ÿค– Interactive Discord bot with slash commands
  • ๐ŸŽต Spotify Integration for easy track and artist requests
  • ๐ŸŽค Vocal Removal (Karaoke) for instant instrumental versions

Installation

Before setting up your own instance of Medley, we recommend trying out our Discord channel first to experience Medley in action and see if it meets your needs.

If you decide to self-host Medley, please refer to our Beta Testing Guide for detailed setup instructions. This guide is intended for users who want to run their own instance of Medley.

Please note that self-hosting Medley requires some technical knowledge and system resources.

Screenshots

Web UI

Stations List

<img width="931" height="568" alt="image" src="https://github.com/user-attachments/assets/bbe50bc3-91a7-4fbf-870d-448b39ce280c" />

Station, With cover image and lyrics

<img width="1261" height="780" alt="image" src="https://github.com/user-attachments/assets/666712bf-22ba-4967-8e94-ef855f8dc37c" />

Station, With Fullscreen

<img width="1536" height="864" alt="image" src="https://github.com/user-attachments/assets/736e5804-d133-4487-a595-66371f1b0ea0" />

Discord Bot

<img src="https://github.com/user-attachments/assets/ac173d6e-55c7-49d9-b2be-de15e544a2b5" width="300" alt="image" > <br /> <img src="https://github.com/user-attachments/assets/2554e527-9f45-458b-b31f-1602d67e5091" height="400" /> <img src="https://github.com/user-attachments/assets/4996a4a9-fdb8-46cb-ac04-73a0161f2492" height="400" /> <img src="https://github.com/user-attachments/assets/bf37290a-c1af-4f03-be14-c749f6d2eeed" height="400" /> <img src="https://github.com/user-attachments/assets/9cc7e278-b200-48b8-bad8-6ec25c268fb9" height="400" /> <br /> <img src="https://github.com/user-attachments/assets/cffcba2a-47f3-4aee-9db0-0595b14ebb5f" width="300" />

Try it in our Discord channel.

Project Motivation

Medley was born out of a personal desire to enhance the music listening experience. My motivations stem from common frustrations and a love for diverse, engaging audio:

  • Avoiding "Music Boredom": Playing random songs can lead to jarring mood shifts, while sticking to playlists becomes predictable over time. Medley aims to strike a balance, offering variety without sacrificing cohesion.

  • Replicating Radio Magic: The project draws inspiration from the curated experience of radio stations, where songs flow seamlessly from one to another, maintaining a consistent vibe.

  • Unpredictability with Purpose: Medley seeks to recreate the excitement of not knowing what song comes next, while ensuring that each transition makes sense musically and emotionally.

  • Enhancing Interaction: While traditional radio offers limited listener interaction, Medley incorporates features like Discord integration to allow users to engage with the audio stream, request songs, and customize their experience.

Supported File Formats

  • MP3
  • FLAC
  • WAV
  • OGG
  • OPUS
  • AIFF

Powered by node-medley

Medley is powered by the node-medley project, which serves as the engine behind all of its audio capabilities.

For detailed information about node-medley, please refer to its README

ReplayGain and Audio Limiter

Medley supports ReplayGain to ensure a consistent listening experience.

  • Prevents sudden volume changes between tracks, eliminating the need for manual volume adjustments
  • Maintains a comfortable listening level across different songs
  • Prevents audio clipping and distortion

Customizable Seamless Mixing

Medley offers a feature that allows customization of the automatic mixing behavior for each track. This is achieved through embedded metadata in the media files:

This feature provides granular control over how the tracks blend together.

Audio Output Targets

Medley can send its audio output to the following targets:

  • Discord
  • Icecast
  • ... and more to come

Running your own station

We welcome beta testers to try out the current version and provide valuable feedback.

For instructions on how to set up and test Medley, please refer to our Beta Testing Guide.

Spotify Integration

See: Beta Testing Guide

Contributors

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->

All Contributors

<!-- ALL-CONTRIBUTORS-BADGE:END --> <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tbody> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/vittee"><img src="https://avatars.githubusercontent.com/u/403872?v=4?s=100" width="100px;" alt="Wittawas Nakkasem"/><br /><sub><b>Wittawas Nakkasem</b></sub></a><br /><a href="https://github.com/seamless-medley/medley/commits?author=vittee" title="Code">๐Ÿ’ป</a> <a href="#ideas-vittee" title="Ideas, Planning, & Feedback">๐Ÿค”</a> <a href="#infra-vittee" title="Infrastructure (Hosting, Build-Tools, etc)">๐Ÿš‡</a> <a href="#platform-vittee" title="Packaging/porting to new platform">๐Ÿ“ฆ</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/visualizeq"><img src="https://avatars.githubusercontent.com/u/396689?v=4?s=100" width="100px;" alt="Coke"/><br /><sub><b>Coke</b></sub></a><br /><a href="https://github.com/seamless-medley/medley/commits?author=visualizeq" title="Code">๐Ÿ’ป</a> <a href="#ideas-visualizeq" title="Ideas, Planning, & Feedback">๐Ÿค”</a> <a href="#infra-visualizeq" title="Infrastructure (Hosting, Build-Tools, etc)">๐Ÿš‡</a> <a href="#platform-visualizeq" title="Packaging/porting to new platform">๐Ÿ“ฆ</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/priesdelly"><img src="https://avatars.githubusercontent.com/u/304075?v=4?s=100" width="100px;" alt="Priesdelly"/><br /><sub><b>Priesdelly</b></sub></a><br /><a href="https://github.com/seamless-medley/medley/commits?author=priesdelly" title="Code">๐Ÿ’ป</a> <a href="#ideas-priesdelly" title="Ideas, Planning, & Feedback">๐Ÿค”</a> <a href="#infra-priesdelly" title="Infrastructure (Hosting, Build-Tools, etc)">๐Ÿš‡</a> <a href="#platform-priesdelly" title="Packaging/porting to new platform">๐Ÿ“ฆ</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Doldragon001"><img src="https://avatars.githubusercontent.com/u/24905753?v=4?s=100" width="100px;" alt="Doldragon001"/><br /><sub><b>Doldragon001</b></sub></a><br /><a href="https://github.com/seamless-medley/medley/issues?q=author%3ADoldragon001" title="Bug reports">๐Ÿ›</a></td> <td align="center" valign="top" width="14.28%"><a href="https://wiktormalyska.ovh/"><img src="https://avatars.githubusercontent.com/u/108685269?v=4?s=100" width="100px;" alt="Wiktor Maล‚yska"/><br /><sub><b>Wiktor Maล‚yska</b></sub></a><br /><a href="https://github.com/seamless-medley/medley/commits?author=wiktormalyska" title="Documentation">๐Ÿ“–</a> <a href="https://github.com/seamless-medley/medley/commits?author=wiktormalyska" title="Code">๐Ÿ’ป</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/metismode"><img src="https://avatars.githubusercontent.com/u/9065300?v=4?s=100" width="100px;" alt="metismode"/><br /><sub><b>metismode</b></sub></a><br /><a href="https://github.com/seamless-medley/medley/issues?q=author%3Ametismode" title="Bug reports">๐Ÿ›</a> <a href="https://github.com/seamless-medley/medley/commits?author=metismode" title="Code">๐Ÿ’ป</a></td> </tr> </tbody> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <!-- markdownlint-restore --> <!-- prettier-ignore-end -->

Related Skills

View on GitHub
GitHub Stars37
CategoryDevelopment
Updated1mo ago
Forks2

Languages

TypeScript

Security Score

95/100

Audited on Feb 10, 2026

No findings