Self-hosted YouTube music streaming application built with Next.js.
- Stream music from YouTube without downloading files
- Beautiful dark mode interface
- Fully responsive design (mobile & desktop)
- Full playback controls (play, pause, next, previous, shuffle)
- Volume control with visual feedback
- Progress bar with seeking and time display
- Create and manage playlists
- Global player - music continues playing across page navigation
- Toast notifications for user feedback
- Simple JSON file storage - no database setup required
- Easy Docker deployment
- Smart search: Search YouTube directly from the app or paste URLs
- ✅ YouTube search integration: Search for songs directly in the app without needing URLs
- ✅ Smart input detection: Automatically detects if input is a URL or search query
- ✅ Live search results: Real-time search with thumbnails, duration, and channel info
- ✅ Progress bar fix: Fixed playbar not advancing for single songs
- ✅ Direct song deletion: Removed confirmation dialogs when deleting songs from home page for faster workflow
- ✅ Bulk playlist creation: Add entire playlists directly from YouTube playlist URLs
- ✅ Song tags: Display playlist tags on song cards in the home page for better organization
- ✅ Cross-playlist song movement: Move songs between different playlists with a single click
- ✅ Mobile UI improvements: Song action buttons now appear above the player bar on mobile devices
- ✅ Bulk song selection: Select and delete multiple songs at once from the home page for efficient management
- Node.js 20+ (for local development)
- Docker & Docker Compose (for deployment)
- Python 3 & yt-dlp (installed automatically in Docker)
-
Install dependencies:
npm install
-
Create Python virtual environment:
python -m venv .venv
-
Activate the virtual environment:
- Linux/macOS:
source .venv/bin/activate - Windows:
.venv\Scripts\activate
- Linux/macOS:
-
Install yt-dlp:
pip install yt-dlp
-
Run the development server:
npm run dev
-
Open your browser: Navigate to http://localhost:3000
The database file (data/db.json) will be created automatically on first run.
-
Download the docker-compose.yml file:
wget https://raw.githubusercontent.com/bitc0de/bitify/main/docker-compose.yml
Or on Windows PowerShell:
Invoke-WebRequest -Uri https://raw.githubusercontent.com/bitc0de/bitify/main/docker-compose.yml -OutFile docker-compose.yml
-
Start the application:
docker-compose up -d
-
Access the application: Navigate to http://localhost:3000
Your music library will be stored in ./data/db.json and persists across container restarts.
docker-compose down
docker-compose pull
docker-compose up -ddocker-compose down -v
docker rmi ghcr.io/bitc0de/bitify:latest
rm -rf data/The Docker image is automatically built and published to GitHub Container Registry on each release.
If you prefer to build the Docker image yourself:
-
Clone the repository:
git clone https://github.com/bitc0de/bitify.git cd bitify -
Build and run:
docker build -t bitify . docker-compose up -d
- Add a song: Search for songs by artist/title or paste a YouTube URL in the input field
- Search: Type any song name or artist and select from the results dropdown
- Play a song: Click the play button on any song card
- Control playback: Use the player controls at the bottom of the page
- Create playlists: Navigate to Playlists and create your custom collections
- Shuffle mode: Toggle shuffle to randomize playback order
- Navigate freely: Music continues playing as you browse different pages
All data is stored in a simple JSON file at data/db.json:
{
"songs": [],
"playlists": [],
"playlistSongs": []
}The file is created automatically on first run. To backup your library, simply copy the data/ folder.
- Audio files are never downloaded to the server
- Streaming URLs are dynamically generated using
yt-dlp -g -f bestaudio - The application requires
yt-dlpandffmpegto be installed (included in Docker) - All data is stored in a simple JSON file that's created automatically on first run
- Your music library persists in the
./datafolder
MIT



