Your music. Anywhere. No strings attached.
A self-hosted music server that streams your collection to any browser.
Drop files. Listen instantly. No accounts required. No algorithms. No ads.
๐ Quick Install ยท โจ Features ยท โ๏ธ Commands ยท ๐ง Configuration ยท ๐ ๏ธ Development
|
๐ง Streaming โ MP3, FLAC, OGG, M4A, WAV โ everything just works ๐ช Pop-out Mini Player โ detach playback into a separate always-on-top window (desktop only; mobile uses the persistent bottom bar) ๐ Full-text Search โ search tracks, albums, artists with diacritics support ( ๐ Browse by Album / Artist / Genre โ grid or list view with cover art ๐ Sortable Columns โ click any column header to sort AโZ, ZโA, or by duration ๐ Playlists โ create, pin, reorder by drag-and-drop |
๐๏ธ 10-Band Equalizer โ presets included (Rock, Jazz, Dance, Classicalโฆ) ๐ Lyrics โ auto-fetched from LRCLIB, synced scrolling โฑ๏ธ Sleep Timer โ stop after this track, end of queue, or in X minutes ๐ Smart Queue โ crossfade, shuffle, repeat (all/one/off) ๐พ Session Persistence โ close or reload the tab and pick up exactly where you left off (position, queue, shuffle mode all saved) ๐ฟ Vinyl Animation โ spinning disc with CD hole effect on the queue cover art (toggle in settings) ๐ก๏ธ Admin Dashboard โ rescan library, manage users, view play stats, upload files via drag-and-drop ๐ง Setup Wizard โ first-run wizard at ๐ณ Docker Support โ Dockerfile + docker-compose.yml for containerized deployment ๐ Shareable Playlists โ generate a public link anyone can open and listen to (no account needed) ๐ป On-the-fly Transcoding โ serve medium (256k), low (128k), or voice (64k Opus) streams via ffmpeg ๐ Personalized Home Feed โ recently played, top listened, and randomly recommended tracks on login ๐ Subsonic API Compatible โ works with clients like Sonixd, Sublime Music, and DSub ( ๐ฎ Discord Rich Presence โ companion script shows your currently playing track on Discord ๐ฑ Responsive โ works on desktop and mobile browsers ๐๏ธ Track Rating โ rate songs 1-5 stars from the track list or context menu |
One line, works on any Linux distro with systemd:
curl -sSL https://raw.githubusercontent.com/Moid-M/moidify/main/install.sh | sudo bash๐ฆ What the installer does (click to expand)
| Step | What happens |
|---|---|
| 1 | Detects your distro (apt/dnf/pacman/zypper) and installs Python, pip, sqlite3 |
| 2 | Creates a moidify system user |
| 3 | Copies the app to /opt/moidify |
| 4 | Sets up a Python virtual environment |
| 5 | Installs Python dependencies (FastAPI, uvicorn, mutagen, watchdog) |
| 6 | Asks for port number (default 8000) |
| 7 | Asks for your music folder location |
| 8 | Asks to create an admin account (optional โ skip to use the browser setup wizard later) |
| 9 | Writes config to /etc/moidify/config.json |
| 10 | Installs a systemd service |
| 11 | Starts the server immediately |
Tip
After installation, open http://your-server-ip:8000 in any browser. If no admin account exists yet, you'll be guided through the setup wizard at /setup. Drop music into your folder โ files appear automatically.
Note
Moidify is 100% vibecoded.
Every line was written through natural language prompts โ no copy-paste, no templates, just pure AI-generated code.
If something breaks (and it might), please open an issue.
It'll get fixed, and the AI will learn from it.
git clone https://github.com/Moid-M/moidify.git
cd moidify
docker compose up -dThen open http://localhost:8000. Music goes in ./music, data in ./data, covers in ./covers.
Tip
After starting, visit the setup wizard at /setup to create your admin account.
For development or non-systemd systems:
git clone https://github.com/Moid-M/moidify.git
cd moidify
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 server.pyThen open http://localhost:8000.
After install, a moidify CLI is available globally:
moidify help Show this help
moidify start Start the service
moidify stop Stop the service
moidify restart Restart the service
moidify reload Reload config and rescan library
moidify status Show service status
moidify enable Enable service on boot
moidify disable Disable service on boot
moidify logs Tail server logs
moidify config Print current configuration
moidify version Print version
moidify url Print server URL
moidify update Update to latest version| Action | Command |
|---|---|
sudo systemctl start moidify |
|
| โน๏ธ Stop | sudo systemctl stop moidify |
| ๐ Restart | sudo systemctl restart moidify |
| ๐ Status | sudo systemctl status moidify |
| ๐ Logs | journalctl -u moidify.service -f |
| ๐ Update | sudo /opt/moidify/update.sh |
| ๐๏ธ Uninstall | sudo /opt/moidify/uninstall.sh |
Moidify checks three places for settings, in order of priority:
- Environment variables (highest priority)
- Config file at
/etc/moidify/config.json(installed mode) - Local defaults (development mode)
| Variable | Default (dev) | Description |
|---|---|---|
MOIDIFY_MUSIC_DIR |
./music |
Path to your music folder |
MOIDIFY_COVERS_DIR |
./covers |
Cover art cache location |
MOIDIFY_DB_PATH |
./data/music.db |
SQLite database path |
MOIDIFY_PORT |
8000 |
Server port (systemd mode uses ExecStart directly) |
When installed, settings live in /etc/moidify/config.json:
{
"music_dir": "/path/to/your/music",
"covers_dir": "/var/lib/moidify/covers",
"db_path": "/var/lib/moidify/music.db",
"port": 8000
}Note
Change a path and restart with sudo systemctl restart moidify โ your music collection is re-scanned automatically.
Show what you're listening to on your Discord profile:
pip install pypresence
python3 contrib/discord-presence.py --url http://your-server:8000The script polls Moidify's /api/player/now-playing endpoint and updates your Discord status via RPC. Requires the Discord desktop app running and a Discord Application ID (create one at the Discord Developer Portal).
git clone https://github.com/Moid-M/moidify.git
cd moidify
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 server.pyTip
The server uses watchdog to monitor your music folder for changes. Drop new files in and they appear instantly โ no rescan button needed.
moidify/
โโโ contrib/
โ โโโ discord-presence.py # Discord RPC companion script
โโโ routes/
โ โโโ __init__.py
โ โโโ deps.py # Shared utilities, auth helpers, Pydantic models
โ โโโ auth.py # Register, login, me, setup wizard
โ โโโ tracks.py # Tracks, albums, artists, genres, home, ratings
โ โโโ streaming.py # Transcode, stream, cover art, download album
โ โโโ playlists.py # Playlists CRUD, share, folders, favorites, export
โ โโโ admin.py # Dashboard, stats, users, rescan scheduler
โ โโโ subsonic.py # Subsonic API compatibility layer (23 endpoints)
โโโ Dockerfile # Container image
โโโ docker-compose.yml # Docker orchestration
โโโ server.py # FastAPI app (~80 lines, includes all route modules)
โโโ scanner.py # File scanner + metadata extractor
โโโ database.py # SQLite schema + migrations + indexes
โโโ config.py # Configuration loader
โโโ install.sh # System installer script
โโโ uninstall.sh # Cleanup script
โโโ update.sh # Git-pull updater
โโโ moidify.service # Systemd unit file
โโโ requirements.txt # Python dependencies
โโโ static/
โ โโโ index.html # Main frontend
โ โโโ setup.html # First-run setup wizard
โ โโโ shared.html # Public shared playlist page
โ โโโ admin.html # Admin dashboard
โ โโโ style.css # @imports all CSS files
โ โโโ logo.png # App logo
โ โโโ css/ # Split CSS by feature
โ โ โโโ variables.css # CSS vars, light mode overrides
โ โ โโโ layout.css # App grid, html/body
โ โ โโโ sidebar.css # Nav, playlists, pinned
โ โ โโโ main-content.css # Album/artist grids, track rows
โ โ โโโ player.css # Player bar, seek, volume
โ โ โโโ queue.css # Queue panel
โ โ โโโ modal.css # Overlay + modal
โ โ โโโ settings.css # Settings layout, toggles, EQ
โ โ โโโ context-menu.css # Right-click menu
โ โ โโโ nowplaying.css # Now-playing overlay
โ โ โโโ overlays.css # Fullscreen art, EQ panel, etc
โ โ โโโ animations.css # All keyframes
โ โ โโโ features.css # Misc feature styles
โ โ โโโ mini-player.css # Mini player
โ โ โโโ toast.css # Toast notifications
โ โ โโโ responsive.css # All @media queries
โ โโโ js/
โ โโโ state.js # App state + utility functions
โ โโโ icons.js # SVG icon library
โ โโโ api.js # API client + auth + favorites + playlists
โ โโโ i18n.js # Internationalization (English/German)
โ โโโ player.js # Audio engine + EQ + transcoding
โ โโโ queue.js # Queue management + shuffle
โ โโโ lyrics.js # Lyrics fetching + synced display
โ โโโ animations.js # Visual effects (vinyl spin, CD hole, glow)
โ โโโ app.js # Event binding + session persistence + init
โ โโโ ui/ # Split UI helpers
โ โ โโโ toast.js
โ โ โโโ modal.js
โ โ โโโ settings.js
โ โ โโโ context-menu.js
โ โ โโโ eq-panel.js
โ โ โโโ sleep-timer.js
โ โ โโโ search.js
โ โโโ views/ # Split page renderers
โ โโโ home.js
โ โโโ albums.js
โ โโโ artists.js
โ โโโ tracks.js
โ โโโ playlists.js
โ โโโ genres.js
โ โโโ search.js
โ โโโ navigate.js
โโโ music/ # Your music goes here (local dev)
Screenshots coming soon.
๐ฅ๏ธ Desktop (click to expand)
| Layer | Technology |
|---|---|
| Backend | Python + FastAPI + uvicorn |
| Frontend | Vanilla JavaScript (no framework, no build step) |
| Database | SQLite (via sqlite3) with WAL mode |
| Metadata | Mutagen |
| File watching | watchdog |
| Transcoding | ffmpeg โ Opus, MP3, FLAC, WAV |
| Subsonic API | Built-in /rest/* endpoints for third-party clients |
This project is open source โ you are free to use, modify, share, sell, or do absolutely anything you want with it. No strings attached.
Made with โค๏ธ + ๐ค for people who love their music collection.













