Your Discord server keeps the aux cord.
MusicButler is a music bot you run yourself. Real YouTube and YouTube Music playback through slash commands — no API keys to buy, no third-party server sitting on your queue.
Why self-host
Built for reliability, not a demo
Most Discord music bots run on someone else's server and break the moment YouTube changes something. This one runs in your own container, and it handles authentication the right way.
Architecture
One Node.js process — no gRPC workers, no extra transport layer just trying to keep two services in sync.
Speed
Audio passes straight through as raw Opus, no re-encoding. It also prebuffers ahead of the stream so playback doesn't stutter at the start.
Stability
If a stream drops it reconnects on its own with backoff, and every connection has an error listener so a failure ends up in your logs instead of just going quiet.
Lightweight
Voice encryption is pure JS, so there's nothing to compile. Runs fine even when there's barely any memory to spare.
Privacy
It's all running on your own machine. The only network calls it makes are to Discord and YouTube — nobody else sees your cookies or your queue.
Easy to host
Clone it, drop in an .env, and docker compose up. That's really the whole setup.
Set it up in four steps
MusicButler ships as a Docker image, so there's nothing to install by hand beyond Docker itself.
- 1Fork the repo on GitHub.
- 2Grab your YouTube cookies and Discord bot token, and put them in a
.envfile. - 3Drop that
.envnext todocker-compose.ymlin the project root. - 4Run it, invite the bot, and start playing.