Skip to content

ebears/alfira

Repository files navigation

Alfira

Alfira Logo

Status: Experimental | Pre-release GitHub Actions

Bun Docker SQLite React Tailwind CSS Drizzle Seyfert NodeLink Hoshimi

Features

Alfira is a self-hosted Discord music bot with a web UI for library management and playback control, designed for a single server.

Music Library

  • YouTube import — Paste links to build a shared library. Full playlists are expanded automatically and duplicates are detected.
  • Metadata editing — Customize title, artist, album, and cover artwork for any song.
  • Tag system — Organize songs with color-coded tags. Tags autocomplete as you type and are canonicalized so rock and Rock stay together.
  • Playlists — Create and manage private or public playlists from your library.
  • Search & filter — Find songs by title, artist, album, or tags.

Playback

  • Discord voice — Play, pause, seek, and skip from the library or any playlist.
  • Loop & shuffle — Loop a song or the full queue; shuffle and restore the original order.
  • Per-song volume — Boost or cut volume for individual songs, from -100% to +200%.
  • Equalizer & compressor — A 15-band graphical EQ and compressor, saved at the server level.

Queue Management

  • Up Next — Add songs to a priority queue that plays immediately after the current track.
  • Quick add — Paste a YouTube link straight into the queue without saving to the library.
  • Override — Replace the entire queue with a new YouTube URL and start playing instantly.
  • Load playlist — Queue an entire playlist from the library.

Web UI

  • Responsive — Works on desktop and mobile.
  • Themes — Auto, light, and dark mode plus a palette of accent colors.
  • Virtual scrolling — Handles large libraries without slowing down.
  • Now playing bar — Persistent playback controls with a seekable progress bar.
  • PWA — Install as a standalone app.

Authentication

  • Discord OAuth2 — Sign in with Discord; guild membership required.
  • Admin roles — Gate settings, the tag editor, and audio controls behind Discord role IDs.

Real-Time Updates

  • WebSocket sync — Queue state, playback position, and song metadata update across all clients in real time.
  • Live events — Songs and playlists added, changed, or removed propagate instantly to every connected user.

Screenshots

Songs page

Click to see more screenshots

Playlists page Playlist details
Login Settings page
Theme example 1 Theme example 2 Theme example 3 Theme example 4 Theme example 5 Theme example 6


Quick Start with Docker

# 1. Copy docker-compose.prod.yml and .env.example from this repo to the folder you want the bot to live.
curl -o docker-compose.prod.yml https://raw.githubusercontent.com/ebears/alfira/main/docker-compose.prod.yml
curl -o .env.example https://raw.githubusercontent.com/ebears/alfira/main/.env.example

# 2. Rename docker-compose.prod.yml to docker-compose.yml and .env.example to .env.
cp docker-compose.prod.yml docker-compose.yml
cp .env.example .env

# 3. Configure the .env.
nano .env  # or micro, zed, code, vim, etc.

# 4. Start the stack - web UI at http://localhost:8180
docker compose up -d

For public deployment with a reverse proxy and HTTPS, see the Full Installation Guide.


Documentation

Document Description
Installation Guide Development and production setup, Discord configuration, reverse proxy setup
Configuration Reference Complete environment variables reference
Tech Stack Technology stack and project structure
Biome Setup Editor setup for Biome linting and formatting
Troubleshooting Common issues and solutions

License

This project is licensed under the MIT License — see the LICENSE file for details.

Releases

No releases published

Packages

 
 
 

Contributors

Languages