A web-based karaoke system that integrates with Jellyfin media server to provide karaoke functionality.
- Create a docker-compose.yml file:
version: "3.8"
services:
karaoke-app:
image: mrorbitman/karaoke-for-jellyfin:latest
ports:
- "3000:3000"
environment:
# Jellyfin Configuration
- JELLYFIN_SERVER_URL=http://your-jellyfin-server:8096
- JELLYFIN_API_KEY=your_jellyfin_api_key_here
- JELLYFIN_USERNAME=your_jellyfin_username_here
# Optional: Lyrics Configuration
- LYRICS_PATH=/app/lyrics
- JELLYFIN_MEDIA_PATH=/app/media
volumes:
# Optional: Mount lyrics directory
- ./lyrics:/app/lyrics:ro
# Optional: Mount Jellyfin media directory
- /path/to/jellyfin/media:/app/media:ro
restart: unless-stopped
extra_hosts:
# Allow container to access host services
- "host.docker.internal:host-gateway"-
Start the application:
docker-compose up -d
-
Access the application:
- Mobile interface: http://localhost:3000
- TV display: http://localhost:3000/tv
docker run -d \
--name karaoke-app \
-p 3000:3000 \
-e JELLYFIN_SERVER_URL=http://your-jellyfin-server:8096 \
-e JELLYFIN_API_KEY=your_api_key \
-e JELLYFIN_USERNAME=your_username \
--add-host host.docker.internal:host-gateway \
mrorbitman/karaoke-for-jellyfin:latest- Mobile Interface: Search and queue songs from your phone
- TV Display: Full-screen lyrics display and playback control
- Jellyfin Integration: Leverages your existing Jellyfin media library
- Real-time Sync: WebSocket-based real-time updates between devices
- Multi-platform: Supports AMD64 and ARM64 architectures
| Variable | Description | Required | Default |
|---|---|---|---|
JELLYFIN_SERVER_URL |
URL to your Jellyfin server | Yes | - |
JELLYFIN_API_KEY |
Jellyfin API key | Yes | - |
JELLYFIN_USERNAME |
Jellyfin username | Yes | - |
LYRICS_PATH |
Path to lyrics folder | No | /app/lyrics |
JELLYFIN_MEDIA_PATH |
Path to Jellyfin media | No | /app/media |
- Log into your Jellyfin server as an administrator
- Go to Dashboard → API Keys
- Click New API Key
- Give it a name (e.g., "Karaoke App")
- Copy the generated API key
- Lyrics Directory: Mount your lyrics folder to
/app/lyrics(read-only) - Media Directory: Mount your Jellyfin media folder to
/app/media(read-only)
The application needs to communicate with your Jellyfin server:
- Host Gateway: Use
host.docker.internalin your Jellyfin URL for localhost servers - External Server: Use the full URL/IP of your Jellyfin server
- Docker Network: If Jellyfin is in another container, use a shared network
This image supports multiple architectures:
linux/amd64(x86_64)linux/arm64(ARM64/AArch64)
latest- Latest stable release from main branchv1.0.0,v1.0,v1- Semantic version tagsmain- Latest development build
The application exposes a health endpoint at /api/health for monitoring.
-
Cannot connect to Jellyfin server
- Ensure
JELLYFIN_SERVER_URLis accessible from within the container - Use
host.docker.internalinstead oflocalhostif Jellyfin is on the host - Check firewall settings
- Ensure
-
WebSocket connection issues
- Ensure port 3000 is properly exposed
- Check if reverse proxy is configured correctly for WebSocket upgrades
-
Permission denied errors
- The container runs as a non-root user (nextjs:nodejs)
- Ensure mounted volumes have appropriate permissions
View application logs:
docker logs karaoke-app- GitHub: https://github.com/your-username/karaoke-for-jellyfin
- Issues: Report bugs and feature requests on GitHub
This project is open source. See the repository for license details.
Note: This application requires a running Jellyfin server with audio files in your media library. Make sure your Jellyfin server is accessible from the Docker container.